docstr: Initialize
  Use Load to initialize this class.
  
  Parameters
  ----------
  site_envs : List[_SiteEnvironment]
      list of _SiteEnvironment object
  ns : int
      number of spectator sites types
  na : int
      number of active sites types
  aos : List[str]
      Available occupational states for active sites
      string should be the name of the occupancy. (consistent with the input data)
  eigen_tol : float
      tolerance for eigenanalysis of point group analysis in pymatgen.
  pbc : ArrayLike
      Boolean array, periodic boundary condition.
  cutoff : float
      Cutoff radius in angstrom for pooling sites to construct local environment
docstr_tok: ["Initialize","Use","Load","to","initialize","this","class",".","Parameters","--","--","--","--","--","site_envs",":","List","[","_SiteEnvironment","]","list","of","_SiteEnvironment","object","ns",":","int","number","of","spectator","sites","types","na",":","int","number","of","active","sites","types","aos",":","List","[","str","]","Available","occupational","states","for","active","sites","string","should","be","the","name","of","the","occupancy",".","(","consistent","with","the","input","data",")","eigen_tol",":","float","tolerance","for","eigenanalysis","of","point","group","analysis","in","pymatgen",".","pbc",":","ArrayLike","Boolean","array",",","periodic","boundary","condition",".","cutoff",":","float","Cutoff","radius","in","angstrom","for","pooling","sites","to","construct","local","environment"]
code: def __init__(
      self,
      site_envs: List[_SiteEnvironment],
      ns: int,
      na: int,
      aos: List[str],
      eigen_tol: float,
      pbc: np.typing.ArrayLike,
      cutoff: float,
  ):
      """
      Initialize
      Use Load to initialize this class.
  
      Parameters
      ----------
      site_envs : List[_SiteEnvironment]
          list of _SiteEnvironment object
      ns : int
          number of spectator sites types
      na : int
          number of active sites types
      aos : List[str]
          Available occupational states for active sites
          string should be the name of the occupancy. (consistent with the input data)
      eigen_tol : float
          tolerance for eigenanalysis of point group analysis in pymatgen.
      pbc : ArrayLike
          Boolean array, periodic boundary condition.
      cutoff : float
          Cutoff radius in angstrom for pooling sites to construct local environment
      """
      self.site_envs = site_envs
      self.unique_site_types: List[str] = [
          env.sitetypes[0] for env in self.site_envs
      ]
      self.ns = ns
      self.na = na
      self.aos = aos
      self.eigen_tol = eigen_tol
      self.pbc = pbc
      self.cutoff = cutoff
  
imports: import numpy
  import logging
  from deepchem.feat import MaterialStructureFeaturizer
  from collections import defaultdict
  from typing import List, Dict, Tuple, DefaultDict, Any
  from deepchem.utils.typing import PymatgenStructure
  from deepchem.feat.graph_data import GraphData
  from scipy.spatial.distance import pdist, squareform, cdist
  from scipy.spatial.transform import Rotation
label_desc: Use image node_id 1 to create a new _SiteEnvironments object from inherited base classes: object with example: obj = _SiteEnvironments(site_envs, ns, na, aos, eigen_tol, pbc, cutoff)