examples/example_17_wrapping_an_existing_project/original.py
def cellular_automaton_1D(initial_state, rule_number, steps):
    """ Simulates a 1 dimensional cellular automaton.

    :param initial_state:

        The initial state of *dead* and *alive* cells as a 1D numpy array.
        It's length determines the size of the simulation.

    :param rule_number:

        The update rule as an integer from 0 to 255.

    :param steps:

        Number of cell iterations

    :return:

        A 2D numpy array (steps x len(initial_state)) containing zeros and ones representing
        the automaton development over time.

    """

    ncells = len(initial_state)
    # Create an array for the full pattern
    pattern = np.zeros((steps, ncells))

    # Pass initial state:
    pattern[0,:] = initial_state

    # Get the binary rule list
    binary_rule = convert_rule(rule_number)

    # Conversion list to get the position in the binary rule list
    neighbourhood_factors = np.array([1, 2, 4])

    # Iterate over all steps to compute the CA
    all_cells = range(ncells)
    for step in range(steps-1):
        current_row = pattern[step, :]
        next_row = pattern[step+1, :]
        for irun in all_cells:
            # Get the neighbourhood
            neighbour_indices = range(irun - 1, irun + 2)
            neighbourhood = np.take(current_row, neighbour_indices, mode='wrap')
            # Convert neighborhood to decimal
            decimal_neighborhood = int(np.sum(neighbourhood * neighbourhood_factors))
            # Get next state from rule book
            next_state = binary_rule[decimal_neighborhood]
            # Update next state of cell
            next_row[irun] = next_state

    return pattern
def cellular_automaton_1D(initial_state, rule_number, steps):
    ncells = len(initial_state)
    # Create an array for the full pattern
    pattern = np.zeros((steps, ncells))

    # Pass initial state:
    pattern[0,:] = initial_state

    # Get the binary rule list
    binary_rule = convert_rule(rule_number)

    # Conversion list to get the position in the binary rule list
    neighbourhood_factors = np.array([1, 2, 4])

    # Iterate over all steps to compute the CA
    all_cells = range(ncells)
    for step in range(steps-1):
        current_row = pattern[step, :]
        next_row = pattern[step+1, :]
        for irun in all_cells:
            # Get the neighbourhood
            neighbour_indices = range(irun - 1, irun + 2)
            neighbourhood = np.take(current_row, neighbour_indices, mode='wrap')
            # Convert neighborhood to decimal
            decimal_neighborhood = int(np.sum(neighbourhood * neighbourhood_factors))
            # Get next state from rule book
            next_state = binary_rule[decimal_neighborhood]
            # Update next state of cell
            next_row[irun] = next_state

    return pattern
def cellular_automaton_1D ( initial_state , rule_number , steps ) : ncells = len ( initial_state ) # Create an array for the full pattern pattern = np . zeros ( ( steps , ncells ) ) # Pass initial state: pattern [ 0 , : ] = initial_state # Get the binary rule list binary_rule = convert_rule ( rule_number ) # Conversion list to get the position in the binary rule list neighbourhood_factors = np . array ( [ 1 , 2 , 4 ] ) # Iterate over all steps to compute the CA all_cells = range ( ncells ) for step in range ( steps - 1 ) : current_row = pattern [ step , : ] next_row = pattern [ step + 1 , : ] for irun in all_cells : # Get the neighbourhood neighbour_indices = range ( irun - 1 , irun + 2 ) neighbourhood = np . take ( current_row , neighbour_indices , mode = 'wrap' ) # Convert neighborhood to decimal decimal_neighborhood = int ( np . sum ( neighbourhood * neighbourhood_factors ) ) # Get next state from rule book next_state = binary_rule [ decimal_neighborhood ] # Update next state of cell next_row [ irun ] = next_state return pattern
Simulates a 1 dimensional cellular automaton.

    :param initial_state:

        The initial state of *dead* and *alive* cells as a 1D numpy array.
        It's length determines the size of the simulation.

    :param rule_number:

        The update rule as an integer from 0 to 255.

    :param steps:

        Number of cell iterations

    :return:

        A 2D numpy array (steps x len(initial_state)) containing zeros and ones representing
        the automaton development over time.
Simulates a 1 dimensional cellular automaton .