code: def volume(self, lmax=None):
          
          if self.coeffs[0, 0, 0] == 0:
              raise ValueError('The volume of the object can not be calculated '
                               'when the degree and order 0 term is equal to '
                               'zero.')
  
          if self.kind == 'complex':
              raise ValueError('The volume of the object can not be calculated '
                               'for complex functions.')
  
          if lmax is None:
              lmax = self.lmax
  
          r0 = self.coeffs[0, 0, 0]
          grid = self.expand(lmax=3*lmax) - r0
          h200 = (grid**2).expand(lmax_calc=0).coeffs[0, 0, 0]
          h300 = (grid**3).expand(lmax_calc=0).coeffs[0, 0, 0]
  
          volume = 4 * _np.pi / 3 * (h300 + 3 * r0 * h200 + r0**3)
          return volume
docs: If the function is the real shape of an object, calculate the volume
          of the body.
  
          Usage
          -----
          volume = x.volume([lmax])
  
          Returns
          -------
          volume : float
              The volume of the object.
  
          Parameters
          ----------
          lmax : int, optional, default = x.lmax
              The maximum spherical harmonic degree to use when calculating the
              volume.
  
          Description
          -----------
          If the function is the real shape of an object, this method will
          calculate the volume of the body exactly by integration. This routine
          raises the function to the nth power, with n from 1 to 3, and
          calculates the spherical harmonic degree and order 0 term. To avoid
          aliases, the function is first expand on a grid that can resolve
          spherical harmonic degrees up to 3*lmax.