+
     ]iV  c                   s   R t ^RIHtHt ^RIHtHtHtHt ^RI	H
t
  ^ RIHt  ! R R4      t]! 4       t]P%                  ]P&                  ]
]]]]4       ]e   ]P%                  ]4       MAR	 tRR
 lt]P,                  t]P.                  P%                  ]! 4       R7       R#   ] d    ^ RIt]P                  ! R4       Rt Li ; i)a	  
Non-separable transforms that map from data space to screen space.

Projections are defined as `~.axes.Axes` subclasses.  They include the
following elements:

- A transformation from data coordinates into display coordinates.

- An inverse of that transformation.  This is used, for example, to convert
  mouse positions from screen space back into data space.

- Transformations for the gridlines, ticks and ticklabels.  Custom projections
  will often need to place these elements in special locations, and Matplotlib
  has a facility to help with doing so.

- Setting up default values (overriding `~.axes.Axes.cla`), since the defaults
  for a rectilinear Axes may not be appropriate.

- Defining the shape of the Axes, for example, an elliptical Axes, that will be
  used to draw the background of the plot and for clipping any data elements.

- Defining custom locators and formatters for the projection.  For example, in
  a geographic projection, it may be more convenient to display the grid in
  degrees, even if the data is in radians.

- Set up interactive panning and zooming.  This is left as an "advanced"
  feature left to the reader, but there is an example of this for polar plots
  in `matplotlib.projections.polar`.

- Any additional methods for additional convenience or features.

Once the projection Axes is defined, it can be used in one of two ways:

- By defining the class attribute ``name``, the projection Axes can be
  registered with `matplotlib.projections.register_projection` and subsequently
  simply invoked by name::

      fig.add_subplot(projection="my_proj_name")

- For more complex, parameterisable projections, a generic "projection" object
  may be defined which includes the method ``_as_mpl_axes``. ``_as_mpl_axes``
  should take no arguments and return the projection's Axes subclass and a
  dictionary of additional arguments to pass to the subclass' ``__init__``
  method.  Subsequently a parameterised projection can be initialised with::

      fig.add_subplot(projection=MyProjection(param1=param1_value))

  where MyProjection is an object which implements a ``_as_mpl_axes`` method.

A full-fledged and heavily annotated example is in
:doc:`/gallery/misc/custom_projection`.  The polar plot functionality in
`matplotlib.projections.polar` may also be of interest.
)axes
_docstring)
AitoffAxes
HammerAxesLambertAxesMollweideAxes)	PolarAxes)Axes3DNzUnable to import Axes3D. This may be due to multiple versions of Matplotlib being installed (e.g. as a system package and as a pip package). As a result, the 3D projection is not available.c                   s<   a  ] tR t^Et o RtR tR tR tR tRt	V t
R# )ProjectionRegistryz?A mapping of registered projection names to projection classes.c                s    / V n         R # N_all_projection_typesself   &F/usr/lib64/python3.14/site-packages/matplotlib/projections/__init__.py__init__ZProjectionRegistry.__init__H   s
    %'"    c                sL    V F  pVP                   pW P                  V&   K  	  R# )z"Register a new set of projections.N)namer   )r   Zprojections
projectionr   s   &*  r   registerZProjectionRegistry.registerK   s#    %J??D/9&&t, &r   c                s(    V P                   V,          # )z'Get a projection class from its *name*.r
   )r   r   s   &&r   get_projection_classZ'ProjectionRegistry.get_projection_classQ   s    ))$//r   c                s,    \        V P                  4      # )z9Return the names of all projections currently registered.)Zsortedr   r   r   r   get_projection_namesZ'ProjectionRegistry.get_projection_namesU   s    d0011r   r
   N)Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__r   r   r   r   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r   E   s!     I(:02 2r   r   c                 s0    \         P                  V 4       R # r	   )projection_registryr   )Zclsr   r   register_projectionr   j   s      %r   c                s    V f   Rp  \         P                  V 4      #   \         d   p\        RT ,          4      ThRp?ii ; i)zp
Get a projection class from its name.

If *projection* is None, a standard rectilinear projection is returned.
NZrectilinearzUnknown projection %r)r   r   ZKeyErrorZ
ValueError)r   Zerrs   & r   r   r   n   sK     "
H"77
CC H0:=>CGHs    A ;A )Zprojection_namesr	   )r   Z r    r   Zgeor   r   r   r   Zpolarr   Zmpl_toolkits.mplot3dr   Z	ExceptionZwarningsZwarnr   r   r   ZAxesr   r   r   Zinterpd) r   r   <module>r      s   4l   C C +2 2* )*    II 
  ( 	&H +??  
    -A-C  DC  MM O P Fs   B# #CC