def fill_in_defaults(self): """ if any of the fields are not filled in in description they are filled in with defaults here """ # rule number self.rule_num = 0 if self.rule_num is None else self.rule_num # number of generations if self.num_generations is None: self.num_generations = 100 # grid dimensions if self.grid_dims is None: if self.dimensions == 2: self.grid_dims = (200, 200) else: self.grid_dims = gens_to_dims(self.num_generations) # initial grid if self.initial_grid is None: fillstate = self.states[1] if self.states is not None else 0 self.initial_grid = np.zeros(self.grid_dims, dtype=type(fillstate)) self.initial_grid.fill(fillstate) # neighbourhood array if self.nhood_arr is None: if self.dimensions == 2: self.nhood_arr = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) else: self.nhood_arr = np.array([1, 1, 1])
def fill_in_defaults(self): """ if any of the fields are not filled in in description they are filled in with defaults here """ # rule number self.rule_num = 0 if self.rule_num is None else self.rule_num # number of generations if self.num_generations is None: self.num_generations = 100 # grid dimensions if self.grid_dims is None: if self.dimensions == 2: self.grid_dims = (200, 200) else: self.grid_dims = gens_to_dims(self.num_generations) # initial grid # EDIT THIS PART TO AVOID REPEATING GRID INIT if self.initial_grid is None: fillstate = self.states[2] if self.states is not None else 0 self.initial_grid = np.zeros(self.grid_dims, dtype=type(fillstate)) self.initial_grid.fill(fillstate) # self.initial_grid[4:7, 8:24].fill(3) - Change to have dimentions and correct state self.initial_grid[30:40,15:25].fill(3) self.initial_grid[5:35,32:35].fill(4) self.initial_grid[10:15, 5:15].fill(5) self.initial_grid[49:50,0:3].fill(6) # neighbourhood array if self.nhood_arr is None: if self.dimensions == 2: self.nhood_arr = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) else: self.nhood_arr = np.array([1, 1, 1])
def get_config(self, ca_config, validate=False): """Get the config from the UI and store in a CAConfig object""" ca_config.num_generations = self.generations_entry.get_value() ca_config.state_colors = self.state_colors.get_value() ca_config.wind_dir = self.wind_entry.get_value() print(ca_config.wind_dir) if ca_config.dimensions == 2: ca_config.grid_dims = self.griddims_entry.get_value() ca_config.nhood_arr = self.nhood_select.get_value() + 0 else: ca_config.rule_num = self.rulenum_entry.get_value() ca_config.nhood_arr = self.nhood_select.get_value()[0] + 0 centercell = (self.init_grid.selected.get() == 2) if centercell: ca_config.grid_dims = gens_to_dims(ca_config.num_generations) ca_config.initial_grid = np.zeros(ca_config.grid_dims) ig = self.__center_cell_set(ca_config.grid_dims, ca_config.states[-1]) ca_config.set_initial_grid(ig) if not validate: return ca_config else: return self.__validate_and_warn(ca_config)
def set_grid_dims(self, dims=None, num_generations=None): if dims is not None: i = dims[0] if dims[0] > 2 else 3 j = dims[1] if dims[1] > 2 else 3 self.grid_dims = i, j else: if num_generations < 1: num_generations = 1 self.num_generations = num_generations self.grid_dims = gens_to_dims(self.num_generations) if self.initial_grid is not None: self.initial_grid = scale_array(self.initial_grid, *self.grid_dims) else: self.intitial_grid = np.zeros(self.grid_dims)
def __init__(self, ca_config, transition_func): """ 1D grid constructor - takes the generations, states and transition function to create the appropriate grid. If no neighbourhood specified [1,1,1] will be used Default grid configuration; center cell in state[-1] """ # init superclass Grid.__init__(self) self.ca_config = ca_config # check the generations are valid if ca_config.num_generations < 1: raise ValueError('Invalid generation number {n}, there must be 1' + ' or more generations.'.format( n=ca_config.num_generations)) # calculate the grid dimensions from the generations numrows, numcols = gens_to_dims(ca_config.num_generations) # wrapsize is the width of the columns at either side (hidden) # used for wrapping behavior # a wrapsize of 1 leads to 2 extra columns (1 either side of the grid) wrapsize = 1 self.wrapping_grid = np.zeros((numrows, numcols + wrapsize*2)) # set neighbourhood self.set_neighbourhood(ca_config) # initial grid self.wrapping_grid.fill(ca_config.states[0]) self.grid = self.wrapping_grid[:, 1:-1] if ca_config.initial_grid is not None: self.set_grid(ca_config.initial_grid) self.refresh_wrap() # initialise variable to keep track of t self.current_gen = 0 # handle transition function and any addional variables passed self.additional_args = None if type(transition_func) == tuple and len(transition_func) > 1: self.transition_func = transition_func[0] self.additional_args = transition_func[1:] else: self.transition_func = transition_func
def fill_in_defaults(self): """ if any of the fields are not filled in in description they are filled in with defaults here """ # rule number self.rule_num = 0 if self.rule_num is None else self.rule_num # number of generations if self.num_generations is None: self.num_generations = 100 #wind direction if self.wind_dir is None: self.wind_dir = 'N' # grid dimensions if self.grid_dims is None: if self.dimensions == 2: self.grid_dims = (200, 200) else: self.grid_dims = gens_to_dims(self.num_generations) # initial grid if self.initial_grid is None: fillstate = self.states[0] if self.states is not None else 0 self.initial_grid = np.zeros(self.grid_dims, dtype=type(fillstate)) self.initial_grid.fill(fillstate) waterl, waterr = 20, 10 forestl, forestr = 60, 30 canl, canr = 10, 64 townl, townr = 98, 0 self.num_generations = 200 self.wind_dir = 'S' self.initial_grid[forestl:forestl + 20, forestr:forestr + 22] = 1 self.initial_grid[waterl:waterl + 8, waterr:waterr + 18] = 3 self.initial_grid[canl:canl + 60, canr:canr + 6] = 2 self.initial_grid[townl:townl + 2, townr:townr + 6] = 4 self.initial_grid[0, 0] = 5 # neighbourhood array if self.nhood_arr is None: if self.dimensions == 2: self.nhood_arr = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) else: self.nhood_arr = np.array([1, 1, 1])