import numpy as np import raven_utils.group as group import raven_utils.entity as entity import raven_utils.rules as rules import raven_utils.properties as properties ENTITY_INDEX = entity.INDEX + 1 ENTITY_DICT = dict(zip(group.NAMES, ENTITY_INDEX[:-1])) NAMES_ORDER = dict(zip(group.NAMES, np.arange(len(group.NAMES)))) PROPERTIES_INDEXES = np.cumsum(np.array(list(entity.NO.values())) * properties.NO) INDEX = np.concatenate([[0], PROPERTIES_INDEXES]) + entity.SUM + 1 # +2 type and uniformity SECOND_LAYOUT = [i - 1 for i in [ ENTITY_DICT["in_center_single_out_center_single"] + 1, ENTITY_DICT["in_distribute_four_out_center_single"] + 1, ENTITY_DICT["in_distribute_four_out_center_single"] + 2, ENTITY_DICT["in_distribute_four_out_center_single"] + 3, ENTITY_DICT["left_center_single_right_center_single"] + 1, ENTITY_DICT["up_center_single_down_center_single"] + 1 ]] FIRST_LAYOUT = list(set(range(entity.SUM)) - set(SECOND_LAYOUT)) LAYOUT_NO = 2 START_INDEX = dict(zip(group.NAMES, INDEX[:-1])) END_INDEX = INDEX[-1] RULES_ATTRIBUTES_ALL_LEN = rules.ATTRIBUTES_LEN * LAYOUT_NO UNIFORMITY_NO = 2 UNIFORMITY_INDEX = END_INDEX + RULES_ATTRIBUTES_ALL_LEN SIZE = UNIFORMITY_INDEX + UNIFORMITY_NO def take(target): return target[1], target[2] def create(images, index, pattern_index=(2, 5), full_index=False, arrange=np.arange, shape=lambda x: x.shape): return [images[:, pattern_index[0]], images[:, pattern_index[1]], images[arrange(shape(index)[0]), (0 if full_index else 8) + index[:, 0]]] def take_simple(target): return target[1], target[0] def create_simple(images, target, index=slice(None), pattern_index=(2, 5)): return [images[:, pattern_index[0]], images[:, pattern_index[1]], target][index]