code: def add_site(self, site):
          
          start_angle = 0
          radius = 0
          total_occu = 0
  
          for specie, occu in site.species.items():
              radius += occu * (specie.ionic_radius
                                if isinstance(specie, Specie)
                                   and specie.ionic_radius
                                else specie.average_ionic_radius)
              total_occu += occu
  
          vis_radius = 0.2 + 0.002 * radius
  
          for specie, occu in site.species.items():
              if not specie:
                  color = (1, 1, 1)
              elif specie.symbol in self.el_color_mapping:
                  color = [i / 255 for i in self.el_color_mapping[specie.symbol]]
              mapper = self.add_partial_sphere(site.coords, vis_radius, color,
                                               start_angle, start_angle + 360 * occu)
              self.mapper_map[mapper] = [site]
              start_angle += 360 * occu
  
          if total_occu < 1:
              mapper = self.add_partial_sphere(site.coords, vis_radius, (1,1,1),
                                               start_angle, start_angle + 360 * (1 - total_occu))
              self.mapper_map[mapper] = [site]
docs: Add a site to the render window. The site is displayed as a sphere, the
          color of which is determined based on the element. Partially occupied
          sites are displayed as a single element color, though the site info
          still shows the partial occupancy.
  
          Args:
              site: Site to add.