§
    óŽ’jï  ã                   ó”  — d Z ddlmZ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 n!# e$ r ddlZ ej        d	¦  «         dZY nw xY w G d
„ d¦  «        Z e¦   «         Ze                     ej        eeeee	¦  «         e�e                     e¦  «         n[d„ Zdd„Zej        Zej                              e¦   «         ¬¦  «         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.
é   )Ú_apiÚaxesÚ
_docstringé   )Ú
AitoffAxesÚ
HammerAxesÚLambertAxesÚMollweideAxes)Ú	PolarAxesé    )ÚAxes3DNz½Unable 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                   ó.   — e Zd ZdZd„ Zd„ Zefd„Zd„ ZdS )ÚProjectionRegistryz?A mapping of registered projection names to projection classes.c                 ó   — i | _         d S ©N)Ú_all_projection_types©Úselfs    úMC:\Projects\DSCons\.venv\Lib\site-packages\matplotlib\projections\__init__.pyÚ__init__zProjectionRegistry.__init__H   s   € Ø%'ˆÔ"Ð"Ð"ó    c                 ó2   — |D ]}|j         }|| j        |<   ŒdS )z"Register a new set of projections.N)Únamer   )r   ÚprojectionsÚ
projectionr   s       r   ÚregisterzProjectionRegistry.registerK   s2   € à%ð 	:ð 	:ˆJØ”?ˆDØ/9ˆDÔ& tÑ,Ð,ð	:ð 	:r   c                 ó:   — t          j        | j        ||¬¦  «        S )z'Get a projection class from its *name*.)Ú
_error_clsr   )r   Úgetitem_checkedr   )r   r   r   s      r   Úget_projection_classz'ProjectionRegistry.get_projection_classQ   s&   € åÔ# DÔ$>È:Ø/3ð5ñ 5ô 5ð 	5r   c                 ó*   — t          | j        ¦  «        S )z9Return the names of all projections currently registered.)Úsortedr   r   s    r   Úget_projection_namesz'ProjectionRegistry.get_projection_namesV   s   € å�dÔ0Ñ1Ô1Ð1r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚKeyErrorr    r#   © r   r   r   r   E   s`   € € € € € ØIÐIð(ð (ð (ð:ð :ð :ð 5=ð 5ð 5ð 5ð 5ð
2ð 2ð 2ð 2ð 2r   r   c                 ó:   — t                                | ¦  «         d S r   )Úprojection_registryr   )Úclss    r   Úregister_projectionr-   k   s   € Ý× Ò  Ñ%Ô%Ð%Ð%Ð%r   c                 óL   — | €d} t                                | t          ¬¦  «        S )z|
    Get a projection class from its name.

    If *projection* is None, a standard rectilinear projection is returned.
    NÚrectilinear)r   )r+   r    Ú
ValueError)r   s    r   r    r    o   s(   € ð ÐØ"ˆ
å×3Ò3°JÍ:Ð3ÑVÔVÐVr   )Úprojection_namesr   )r'   Ú r   r   r   Úgeor   r   r	   r
   Úpolarr   Úmpl_toolkits.mplot3dr   Ú	ExceptionÚwarningsÚwarnr   r+   r   ÚAxesr-   r    r#   Úinterpdr)   r   r   ú<module>r;      s³  ðð4ð 4ðl &Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ Ð Ð Ð Ð Ð ðØ+Ð+Ð+Ð+Ð+Ð+Ð+øØð ð ð Ø€O€O€OØ€H„Mð Oñ Pô Pð Pð €F€F€Fðøøøð2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð, )Ð(Ñ*Ô*Ð Ø × Ò Ø„IØØØØØñô ð ð 
ÐØ× Ò  Ñ(Ô(Ð(Ð(ð 	ð&ð &ð &ð	Wð 	Wð 	Wð 	Wð +Ô?Ð Ø 
Ô × Ò Ð-AÐ-AÑ-CÔ-CÐ Ñ DÔ DÐ DÐ DÐ Ds    ' §AÁA