a
    ߙfbj                     @   s   d dl ZdgZdddZdS )    Nquantity_supportlatex_inlinec                    sl   ddl m ddlm} ddlm ddlm  fdd ddd	G  fd
ddj}| S )a  
    Enable support for plotting `astropy.units.Quantity` instances in
    matplotlib.

    May be (optionally) used with a ``with`` statement.

      >>> import matplotlib.pyplot as plt
      >>> from astropy import units as u
      >>> from astropy import visualization
      >>> with visualization.quantity_support():
      ...     plt.figure()
      ...     plt.plot([1, 2, 3] * u.m)
      [...]
      ...     plt.plot([101, 125, 150] * u.cm)
      [...]
      ...     plt.draw()

    Parameters
    ----------
    format : `astropy.units.format.Base` instance or str
        The name of a format or a formatter object.  If not
        provided, defaults to ``latex_inline``.

    r   units)Angle)tickerc                    s   | h  fdd|  D S )Nc                    s   g | ]} |D ]}|qqS  r   ).0csall_issubclassr   :lib/python3.9/site-packages/astropy/visualization/units.py
<listcomp>2       z<quantity_support.<locals>.all_issubclass.<locals>.<listcomp>)union__subclasses__)clsr   r   r   r   0   s    z(quantity_support.<locals>.all_issubclassNc                 S   sb   t | tj d d }|dkr"dS |dkr.dS |dkr:dS |d dkrT|d  dS | dS d S )	Ng       @g      ?r   0   u   π/2   u   π)intnppi)xposnr   r   r   rad_fn4   s    z quantity_support.<locals>.rad_fnc                       sj   e Zd Z jZfddZefddZefddZedd Z	d	d
 Z
fddZdS )z.quantity_support.<locals>.MplQuantityConverterc                    s2   i | _ | jD ] } j|| j |< |  j|< qd S N)_original_converter_all_issubclass_quantityregistryget)selfr   r   r   r   __init__E   s    
z7quantity_support.<locals>.MplQuantityConverter.__init__c                    sx   | j kr2jjtjd d|  dS | jkrZj 	d|  dS | d urtj|  dS d S )Nr   )base)ZmajlocZmajfmtlabelu   %i°)r&   )
ZradianZAxisInfoZMultipleLocatorr   r   ZFuncFormatterZ	to_stringZdegreeZAutoLocatorZFormatStrFormatter)unitaxis)formatr   r   ur   r   r   axisinfoO   s    

z7quantity_support.<locals>.MplQuantityConverter.axisinfoc                    sN   t | jr|  S t | trF| rFt | d jrF fdd| D S | S d S )Nr   c                    s   g | ]}|  qS r   )to_value)r	   vr'   r   r   r   f   r   zJquantity_support.<locals>.MplQuantityConverter.convert.<locals>.<listcomp>)
isinstanceQuantityr,   list)valr'   r(   )r*   r.   r   converta   s
    
z6quantity_support.<locals>.MplQuantityConverter.convertc                 S   s   t | dr| jS d S )Nr'   )hasattrr'   )r   r(   r   r   r   default_unitsj   s    
z<quantity_support.<locals>.MplQuantityConverter.default_unitsc                 S   s   | S r   r   )r#   r   r   r   	__enter__p   s    z8quantity_support.<locals>.MplQuantityConverter.__enter__c                    s8   | j D ],}| j| d u r" j|= q| j|  j|< qd S r   )r    r   r!   )r#   typevaluetbr   r   r   r   __exit__s   s    

z7quantity_support.<locals>.MplQuantityConverter.__exit__N)__name__
__module____qualname__r0   r    r$   staticmethodr+   r3   r5   r6   r:   r   r   r)   r   r   r*   r   r   r   MplQuantityConverterA   s   


r@   )N)Zastropyr   Zastropy.coordinatesr   Z
matplotlibr   ZConversionInterface)r)   r   r@   r   r?   r   r   
   s    
 9)r   )Znumpyr   Z__doctest_skip__r   r   r   r   r   <module>   s   