rL iVdZddlmZmZddlmZmZmZmZddl m Z  ddl m Z Gd d ZeZej%ej&e eeeee ej%e n[ d Zdd Zej,Zej.j%ey#e $rddlZejd dZ YwxYw)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(eZdZdZdZdZdZdZy)ProjectionRegistryz?A mapping of registered projection names to projection classes.ci|_yN_all_projection_typesselfs e/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/matplotlib/projections/__init__.py__init__zProjectionRegistry.__init__Hs %'"cH|D]}|j}||j|<y)z"Register a new set of projections.N)namer)r projections projectionrs rregisterzProjectionRegistry.registerKs*% :J??D/9D & &t , :rc |j|S)z'Get a projection class from its *name*.r)rrs rget_projection_classz'ProjectionRegistry.get_projection_classQs))$//rc,t|jS)z9Return the names of all projections currently registered.)sortedrrs rget_projection_namesz'ProjectionRegistry.get_projection_namesUsd0011rN)__name__ __module__ __qualname____doc__rrrr!rrrrEsI(: 02rrc.tj|yr)projection_registryr)clss rregister_projectionr*js  %rcv|d} tj|S#t$r}td|z|d}~wwxYw)z| Get a projection class from its name. If *projection* is None, a standard rectilinear projection is returned. N rectilinearzUnknown projection %r)r(rKeyError ValueError)rerrs rrrnsK " H"77 CC H0:=>CGHs 838)projection_namesr)r%rrgeorrrr polarr mpl_toolkits.mplot3dr Exceptionwarningswarnrr(rAxesr*rr!interpdr&rrr:s4l CC+22*)*II     ( & H+?? -A-CDCHMMOPF sBB?>B?