def __init__(self, m: Matter, ind: int, hash_count: int): self.a_init = m.a self.n_color = m.n_color() self.n_cell = m.n_cell() self.size = m.shape[0] * m.shape[1] self.is_filled_rectangle = m.is_filled_rectangle() if m.is_filled_rectangle(): if m.is_square(): self.is_rectangle = 2 else: self.is_rectangle = 1 else: if m.a is not None: self.is_rectangle = 0 else: self.is_rectangle = None # assume trimmed x_arr = m.values # row res_row = 0 for i in range(x_arr.shape[0] // 2): res_row += (x_arr[i, :] != x_arr[x_arr.shape[0] - 1 - i, :]).sum() # col res_col = 0 for j in range(x_arr.shape[1] // 2): res_col += (x_arr[:, j] != x_arr[:, x_arr.shape[1] - 1 - j]).sum() res = 0 if res_row == 0: res += 1 if res_col == 0: res += 2 self.is_symmetry = res self.ind = ind self.hash = hash_count self.n_noise = (m.values != m.max_color()).sum() self.a = None self.y = None
def rot_270(m: Matter) -> Matter: assert m.is_square() new_matter: Matter = m.copy() new_matter.set_values(array.rot_270(m.values)) return new_matter
def transpose(m: Matter) -> Matter: assert m.is_square() new_matter: Matter = m.copy() new_matter.set_values(array.transpose(m.values)) return new_matter