U
    e»{j;  ã                   @   s¾  d Z ddlmZ ddlZddlmZmZmZm	Z	m
Z
 ddlmZmZ dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdZeddƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Z d+d,„ Z!d-d.„ Z"d/d0„ Z#d1d2„ Z$d3d4„ Z%d5d6„ Z&d7d8„ Z'eZ(d9d:„ Z)d;d<„ Z*d=d>„ Z+d?d@„ Z,dAdB„ Z-eej.ej/ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:hO Zej;ej<ej=ej>ej?fZ@e@D ]ZAeeeA< �q–ejBejCejDejEejFejGejHejIejJejKejLfZMeMD ]ZAeeeA< �qÚejNejOejPejQejRejSejTfZUeVeWejXjYdCdƒejAƒ�r4eUejXjYjZf7 ZUeUD ]ZAeeeA< �q8ej[ej\ej]ej^ej_ej`fZaeaD ]ZAeeeA< �qhejbejcfZdedD ]ZAeeeA< �qˆejeejffZgegD ]ZAeeeA< �q¨ejhejiejjejkejlejmfZnenD ]ZAeeeA< �qØeeejo< eeejp< eeejq< eeejr< eeejXjYjs< eeejt< e eeju< ejvejwfZxexD ]ZAe'eeA< �qBejyejzej{ej|ej}ej~ejej€ej�ej‚ejƒfZ„e„D ]ZAe(eeA< �q†ej…ej†ej‡ejˆej‰ejŠfZ‹e‹D ]ZAe)eeA< �q¶ejŒfZ�eVeWejXjYdDdƒejAƒ�røe�ejXjYjŽf7 Z�e�D ]ZAe*eeA< �qüe!eej�< eVeWedEdƒejAƒ�r6e!eej�< e"eej‘< e"eej’< e#eej“< e$eej”< e%eej•< e+eej–< e&eej—< e#eej˜< e,eej™< eVeWejXjYdFdƒejAƒ�r¸e-eejXjYjš< [AdS )Gz˜Helper functions for Quantity.

In particular, this implements the logic that determines scaling and result
units for a given ufunc, given input units.
é    )ÚFractionN)ÚUnitConversionErrorÚ
UnitsErrorÚUnitTypeErrorÚdimensionless_unscaledÚunit_scale_converteré   )ÚUFUNC_HELPERSÚUNSUPPORTED_UFUNCSc                 C   s   | d krt S | S d S ©N©r   )Úunit© r   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/quantity_helper/helpers.pyÚ_d   s    r   c                 C   s   |   |¡}|tkrdS |S )zpLike Unit._get_converter, except returns None if no scaling is needed,
    i.e., if the inferred scale is unity.N)Z_get_converterr   )Z	from_unitZto_unitÚ	converterr   r   r   Úget_converter    s    
r   c                 C   sÖ   d d g}|d kr.|d kr |t fS d}|}d }n||kr>||fS d}|d kr�zt|t ƒ||< W n( tk
r„   d|d| < ||f Y S X |t fS nBzt||ƒ||< W n& tk
rÈ   td| j› d�ƒ‚Y nX ||fS d S )Nr   r   FúCan only apply 'ú3' function to quantities with compatible dimensions)r   r   r   r   Ú__name__)ÚfÚunit1Úunit2Ú
convertersZ
changeabler   r   r   Úget_converters_and_unit'   s0    
ÿ
r   c                 C   s
   d gd fS r   r   ©r   r   r   r   r   Úhelper_onearg_testY   s    r   c                 C   s   d gt |ƒfS r   ©r   r   r   r   r   Úhelper_invariant]   s    r   c                 C   s   d g|d k	r|d nt fS )Né   r   r   r   r   r   Úhelper_squarea   s    r    c                 C   s   d g|d k	r|d nt fS )Néÿÿÿÿr   r   r   r   r   Úhelper_reciprocale   s    r"   g      à?é   c                 C   s   d g|d k	r|t  ntfS r   )Úone_halfr   r   r   r   r   Úhelper_sqrtm   s    r%   c                 C   s   d g|d k	r|t  ntfS r   )Ú	one_thirdr   r   r   r   r   Úhelper_cbrtq   s    r'   c                 C   sX   |d krd gt t ffS zt|t ƒgt t ffW S  tk
rR   td| j› d�ƒ‚Y nX d S ©Nr   ú&' function to dimensionless quantities©r   r   r   r   r   r   r   r   r   Úhelper_modfu   s    
þÿr+   c                 C   s
   d gt fS r   r   r   r   r   r   Úhelper__ones_like„   s    r,   c                 C   sP   |d krd gt fS zt|t ƒgt fW S  tk
rJ   td| j› d�ƒ‚Y nX d S r(   r*   r   r   r   r   Ú%helper_dimensionless_to_dimensionlessˆ   s    
ÿr-   c                 C   s\   ddl m} |d krd g|fS zt|tƒg|fW S  tk
rV   td| j› d�ƒ‚Y nX d S )Nr   ©Úradianr   r)   ©Úastropy.units.sir/   r   r   r   r   r   ©r   r   r/   r   r   r   Úhelper_dimensionless_to_radian”   s    
ÿr3   c                 C   sN   ddl m}m} zt||ƒg|fW S  tk
rH   td| j› d�ƒ‚Y nX d S ©Nr   )Údegreer/   r   ú)' function to quantities with angle units©r1   r5   r/   r   r   r   r   ©r   r   r5   r/   r   r   r   Úhelper_degree_to_radian¢   s    ÿr9   c                 C   sN   ddl m}m} zt||ƒg|fW S  tk
rH   td| j› d�ƒ‚Y nX d S r4   r7   r8   r   r   r   Úhelper_radian_to_degree­   s    ÿr:   c                 C   sJ   ddl m} zt||ƒgtfW S  tk
rD   td| j› d�ƒ‚Y nX d S )Nr   r.   r   r6   r0   r2   r   r   r   Úhelper_radian_to_dimensionless¸   s    ÿr;   c                 C   s$   |  ¡ std| j› d�ƒ‚d gdfS )Nr   z/' function to unscaled dimensionless quantities)NN)Zis_unityr   r   r   r   r   r   Úhelper_frexpÃ   s
    ÿr<   c                 C   s   d d gt |ƒt |ƒ fS r   r   ©r   r   r   r   r   r   Úhelper_multiplicationÔ   s    r>   c                 C   s   d d gt |ƒt |ƒ fS r   r   r=   r   r   r   Úhelper_divisionØ   s    r?   c                 C   sJ   |d krd d gdfS zd t |tƒgdfW S  tk
rD   tdƒ‚Y nX d S )NFz4Can only raise something to a dimensionless quantity©r   r   r   r   r=   r   r   r   Úhelper_powerÜ   s    rA   c                 C   s&   |d k	rt dƒ‚nd d gt|ƒfS d S )Nz4Cannot use ldexp with a quantity as second argument.)Ú	TypeErrorr   r=   r   r   r   Úhelper_ldexpè   s    
rC   c                 C   s$   |d krd d gd fS d d g|fS d S r   r   r=   r   r   r   Úhelper_copysignï   s    rD   c                 C   sD   z|d k	rt |tƒnd }W n tk
r6   tdƒ‚Y nX d |gtfS )NzICan only apply 'heaviside' function with a dimensionless second argument.r@   )r   r   r   Ú
converter2r   r   r   Úhelper_heaviside÷   s    ÿÿ
rF   c                 C   sd   z0|d k	rt |tƒnd }|d k	r*t |tƒnd }W n& tk
rV   td| j› d�ƒ‚Y nX ||gtfS r(   )r   r   r   r   r   )r   r   r   Z
converter1rE   r   r   r   Úhelper_two_arg_dimensionless  s    ÿÿÿ
rG   c                 C   s   t | ||ƒ\}}|d fS r   )r   ©r   r   r   r   Ú_r   r   r   Úhelper_twoarg_comparison  s    rJ   c                 C   s$   ddl m} t| ||ƒ\}}||fS )Nr   r.   )r1   r/   r   )r   r   r   r/   r   rI   r   r   r   Úhelper_twoarg_invtrig  s    rK   c                 C   s   t | ||ƒ\}}|tfS r   ©r   r   rH   r   r   r   Úhelper_twoarg_floor_divide#  s    rM   c                 C   s   t | ||ƒ\}}|t|ffS r   rL   )r   r   r   r   Úresult_unitr   r   r   Úhelper_divmod(  s    rO   c              	   C   sÈ   d g}|d krVt }z|dd„ ||fD ƒ7 }W qÀ tk
rR   td| j› d�ƒ‚Y qÀX nj|}||fD ]\}ztt|ƒ|ƒ}W n: tk
r²   |d krœ| d¡ ntd| j› d�ƒ‚Y qbX | |¡ qb||fS )Nc                 S   s"   g | ]}|d krd nt |tƒ‘qS r   )r   r   )Ú.0r   r   r   r   Ú
<listcomp>3  s   ÿzhelper_clip.<locals>.<listcomp>r   r   F)r   r   r   r   r   r   Úappend)r   r   r   Zunit3r   rN   r   r   r   r   r   Úhelper_clip-  s.    þÿÿ
rS   ÚerfÚ_argÚmatmulÚclip)›Ú__doc__Ú	fractionsr   ÚnumpyÚnpZastropy.units.corer   r   r   r   r   Ú r	   r
   r   r   r   r   r   r    r"   r$   r&   r%   r'   r+   r,   r-   r3   r9   r:   r;   r<   r>   r?   rA   rC   rD   rF   rG   Zhelper_twoarg_invariantrJ   rK   rM   rO   rS   Zbitwise_andZ
bitwise_orZbitwise_xorÚinvertZ
left_shiftZright_shiftÚlogical_andÚ
logical_orÚlogical_xorZlogical_notZisnatÚgcdZlcmÚisfiniteÚisinfÚisnanÚsignZsignbitZonearg_test_ufuncsZufuncÚabsoluteÚfabsZconjÚ	conjugateÚnegativeÚspacingZrintÚfloorÚceilÚtruncZpositiveZinvariant_ufuncsÚexpÚexpm1Zexp2ÚlogÚlog10Úlog2Úlog1pZ%dimensionless_to_dimensionless_ufuncsÚ
isinstanceÚgetattrÚcoreZumathrT   ZarccosZarcsinZarctanZarccoshZarcsinhZarctanhZdimensionless_to_radian_ufuncsÚradiansZdeg2radZdegree_to_radian_ufuncsÚdegreesZrad2degZradian_to_degree_ufuncsÚcosÚsinÚtanÚcoshÚsinhÚtanhZradian_to_dimensionless_ufuncsÚsqrtZsquareZ
reciprocalZcbrtZ
_ones_likeÚmodfÚfrexpZ	logaddexpZ
logaddexp2Ztwo_arg_dimensionless_ufuncsÚaddÚsubtractÚhypotÚmaximumÚminimumZfminZfmaxZ	nextafterÚ	remainderÚmodÚfmodZtwoarg_invariant_ufuncsZgreaterZgreater_equalÚlessZ
less_equalÚ	not_equalÚequalZtwoarg_comparison_ufuncsZarctan2Ztwoarg_invtrig_ufuncsrU   ÚmultiplyrV   ÚdivideZtrue_divideÚpowerÚldexpÚcopysignZfloor_divideZ	heavisideZfloat_powerÚdivmodrW   r   r   r   r   Ú<module>   s.  2
'óõùú





õú










