code: def full_analysis(self, ncpus=1, **kwargs):
          
          self.molecular_weight()
          self.calculate_centre_of_mass()
          self.calculate_maximum_diameter()
          self.calculate_average_diameter()
          self.calculate_pore_diameter()
          self.calculate_pore_volume()
          self.calculate_pore_diameter_opt(**kwargs)
          self.calculate_pore_volume_opt(**kwargs)
          self.calculate_windows(ncpus=ncpus, **kwargs)
          # self._circumcircle(**kwargs)
          return self.properties
docs: Perform a full structural analysis of a molecule.
  
          This invokes other methods:
  
              1. :attr:`molecular_weight()`
  
              2. :attr:`calculate_centre_of_mass()`
  
              3. :attr:`calculate_maximum_diameter()`
  
              4. :attr:`calculate_average_diameter()`
  
              5. :attr:`calculate_pore_diameter()`
  
              6. :attr:`calculate_pore_volume()`
  
              7. :attr:`calculate_pore_diameter_opt()`
  
              8. :attr:`calculate_pore_volume_opt()`
  
              9. :attr:`calculate_pore_diameter_opt()`
  
              10. :attr:`calculate_windows()`
  
          Parameters
          ----------
          ncpus : :class:`int`
              Number of CPUs used for the parallelised parts of
              :func:`pywindow.utilities.find_windows()`. (default=1=serial)
  
          Returns
          -------
          :attr:`Molecule.properties`
              The updated :attr:`Molecule.properties` with returns of all
              used methods.