code: def circular_pores(target, pore_diameter='pore.diameter',
                     throat_diameter='throat.diameter',
                     throat_centroid='throat.centroid'):
      r
      return spherical_pores(target=target, pore_diameter=pore_diameter,
                             throat_diameter=throat_diameter)
docs: r"""
      Calculate the coordinates of throat endpoints, assuming circular pores.
      This model accounts for the overlapping lens between pores and throats.
  
      Parameters
      ----------
      target : OpenPNM Object
          The object which this model is associated with. This controls the
          length of the calculated array, and also provides access to other
          necessary properties.
  
      pore_diameter : string
          Dictionary key of the pore diameter values.
  
      throat_diameter : string
          Dictionary key of the throat diameter values.
  
      throat_centroid : string, optional
          Dictionary key of the throat centroid values. See the notes.
  
      Returns
      -------
      EP : dictionary
          Coordinates of throat endpoints stored in Dict form. Can be accessed
          via the dict keys 'head' and 'tail'.
  
      Notes
      -----
      (1) This model should only be applied to ture 2D networks.
  
      (2) By default, this model assumes that throat centroid and pore
      coordinates are colinear. If that's not the case, such as in extracted
      networks, `throat_centroid` could be passed as an optional argument, and
      the model takes care of the rest.