def circular_pores(target, pore_diameter='pore.diameter',
                   throat_diameter='throat.diameter',
                   throat_centroid='throat.centroid'):
    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.

    """
    return spherical_pores(target=target, pore_diameter=pore_diameter,
                           throat_diameter=throat_diameter)