code: def create_supercell(system, supercell=[[-1, 1], [-1, 1], [-1, 1]]):
      
      if 'lattice' not in system.keys():
          matrix = unit_cell_to_lattice_array(system['unit_cell'])
      else:
          matrix = system['lattice']
      coordinates = deepcopy(system['coordinates'])
      multiplication_matrices = []
      for a_ in range(supercell[0][0], supercell[0][1] + 1):
          for b_ in range(supercell[1][0], supercell[1][1] + 1):
              for c_ in range(supercell[2][0], supercell[2][1] + 1):
                  mult_matrix = np.array([[a_, b_, c_]])
                  mult_matrix = np.repeat(
                      mult_matrix, coordinates.shape[0], axis=0)
                  multiplication_matrices.append(mult_matrix)
      frac_coordinates = cart2frac_all(coordinates, matrix)
      updated_coordinates = []
      for mat in multiplication_matrices:
          updated_coor = frac_coordinates + mat
          updated_coordinates.append(updated_coor)
      supercell_frac_coordinates = np.concatenate(updated_coordinates, axis=0)
      supercell_coordinates = frac2cart_all(supercell_frac_coordinates, matrix)
      # Now for each new cell in the supercell we need to repeat the
      # elements array so that it maches
      new_elements = deepcopy(system['elements'])
      new_ids = deepcopy(system['atom_ids'])
      for i in range(len(updated_coordinates) - 1):
          new_elements = np.concatenate((new_elements, system['elements']))
          new_ids = np.concatenate((new_ids, system['atom_ids']))
      cryst = lattice_array_to_unit_cell(matrix)
      supercell_system = {
          'elements': new_elements,
          'atom_ids': new_ids,
          'coordinates': supercell_coordinates,
          'unit_cell': cryst,
          'lattice': matrix,
      }
      return supercell_system
docs: Create a supercell.