a
    ëÝEbœ  ã                	   @   sœ   d Z ddlmZmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ G dd	„ d	ƒZeƒ Ze eje
eeeee¡ d
d„ Zddd„ZejZejjeƒ d� dS )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é    )ÚAxes3Dc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚProjectionRegistryz?A mapping of registered projection names to projection classes.c                 C   s
   i | _ d S ©N©Ú_all_projection_types©Úself© r   ú_/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/matplotlib/projections/__init__.pyÚ__init__@   s    zProjectionRegistry.__init__c                 G   s   |D ]}|j }|| j|< qdS )z"Register a new set of projections.N)Únamer   )r   ZprojectionsÚ
projectionr   r   r   r   ÚregisterC   s    zProjectionRegistry.registerc                 C   s
   | j | S )z'Get a projection class from its *name*.r   )r   r   r   r   r   Úget_projection_classI   s    z'ProjectionRegistry.get_projection_classc                 C   s
   t | jƒS )z9Return the names of all projections currently registered.)Úsortedr   r   r   r   r   Úget_projection_namesM   s    z'ProjectionRegistry.get_projection_namesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   =   s
   r   c                 C   s   t  | ¡ d S r   )Úprojection_registryr   )Úclsr   r   r   Úregister_projection^   s    r!   Nc              
   C   sP   | du rd} zt  | ¡W S  tyJ } ztd|  ƒ|‚W Y d}~n
d}~0 0 dS )z|
    Get a projection class from its name.

    If *projection* is None, a standard rectilinear projection is returned.
    NZrectilinearzUnknown projection %r)r   r   ÚKeyErrorÚ
ValueError)r   Úerrr   r   r   r   b   s    r   )Zprojection_names)N)r   Ú r   r   Zgeor   r   r   r   Zpolarr	   Zmpl_toolkits.mplot3dr   r   r   r   ZAxesr!   r   r   ZinterpdÚupdater   r   r   r   Ú<module>   s&   6ù
