docs: def from_dict(cls, d):
          """
          Reconstructs the ChemicalEnvironments object from a dict representation of the ChemicalEnvironments created
          using the as_dict method.
          :param d: dict representation of the ChemicalEnvironments object
          :return: ChemicalEnvironments object
          """
          ce = cls()
          for cg in d['coord_geoms'].keys():
              if d['coord_geoms'][cg]['local2perfect_map'] is None:
                  l2p_map = None
              else:
                  l2p_map = {int(key): int(val) for key, val in d['coord_geoms'][cg]['local2perfect_map'].items()}
              if d['coord_geoms'][cg]['perfect2local_map'] is None:
                  p2l_map = None
              else:
                  p2l_map = {int(key): int(val) for key, val in d['coord_geoms'][cg]['perfect2local_map'].items()}
              if ('other_symmetry_measures' in d['coord_geoms'][cg] and
                          d['coord_geoms'][cg]['other_symmetry_measures'] is not None):
                  other_csms = d['coord_geoms'][cg]['other_symmetry_measures']
              else:
                  other_csms = None
              ce.add_coord_geom(cg,
                                d['coord_geoms'][cg]['symmetry_measure'],
                                d['coord_geoms'][cg]['algo'],
                                permutation=d['coord_geoms'][cg]['permutation'],
                                local2perfect_map=l2p_map,
                                perfect2local_map=p2l_map,
                                detailed_voronoi_index=d['coord_geoms'][cg]['detailed_voronoi_index'],
                                other_symmetry_measures=other_csms,
                                rotation_matrix=d['coord_geoms'][cg]['rotation_matrix'],
                                scaling_factor=d['coord_geoms'][cg]['scaling_factor'])
          return ce