
    IR-e;                        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 Zd Zd	 Zd
 Zd Zd Zd ZdZ edd          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'eZ(d! Z)d" Z*d# Z+d$ Z,d% Z-eej.        ej/        ej0        ej1        ej2        ej3        ej4        ej5        ej6        ej7        ej8        ej9        ej:        hz  Zej;        ej<        ej=        ej>        ej?        fZ@e@D ]ZAeeeA<   ejB        ejC        ejD        ejE        ejF        ejG        ejH        ejI        ejJ        ejK        ejL        fZMeMD ]ZAeeeA<   ejN        ejO        ejP        ejQ        ejR        ejS        ejT        fZU eV eWejX        jY        d&d          ejA                  reUejX        jY        jZ        fz  ZUeUD ]ZAeeeA<   ej[        ej\        ej]        ej^        ej_        ej`        fZaeaD ]ZAeeeA<   ejb        ejc        fZdedD ]ZAeeeA<   eje        ejf        fZgegD ]ZAeeeA<   ejh        eji        ejj        ejk        ejl        ejm        fZnenD ]ZAeeeA<   eeejo        <   eeejp        <   eeejq        <   eeejr        <   eeejX        jY        js        <   eeejt        <   e eeju        <   ejv        ejw        fZxexD ]ZAe'eeA<   ejy        ejz        ej{        ej|        ej}        ej~        ej        ej        ej        ej        ej        fZeD ]ZAe(eeA<   ej        ej        ej        ej        ej        ej        fZeD ]ZAe)eeA<   ej        fZ eV eWejX        jY        d'd          ejA                  reejX        jY        j        fz  ZeD ]ZAe*eeA<   e!eej        <    eV eWed(d          ejA                  r
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        <   e,eej        <    eV eWejX        jY        d)d          ejA                  re-eejX        jY        j        <   [AdS )*zHelper 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                     | t           S | S Nr   )units    Elib/python3.11/site-packages/astropy/units/quantity_helper/helpers.py_dr      s    |%%    c                 F    |                      |          }|t          u rdn|S )zuLike Unit._get_converter, except returns None if no scaling is needed,
    i.e., if the inferred scale is unity.
    N)_get_converterr   )	from_unitto_unit	converters      r   get_converterr       s,     ((11I 44444)Cr   c                 D   d d g}||	|t           fS d}|}d }n
||u r||fS d}|>	 t          |t                     ||<   |t           fS # t          $ r d|d|z
  <   ||fcY S w xY w	 t          ||          ||<   n&# t          $ r t          d| j         d          w xY w||fS )Nr   r	   FCan only apply '3' function to quantities with compatible dimensions)r   r   r   r   __name__)funit1unit2
converters
changeables        r   get_converters_and_unitr"   (   s&   J }=555
	%5  
 }	6%25:P%Q%QJz" 555  	% 	% 	%).Jq:~&u$$$$	%	%25%%@%@Jz"" 	 	 	%-1: - - -  	 5  s   A A A $A8 8#Bc                     d gd fS r    r   r   s     r   helper_onearg_testr&   Z   s    FD>r   c                 &    d gt          |          fS r   r   r%   s     r   helper_invariantr)   ^   s    FBtHHr   c                 $    d g||dz  nt           fS )N   r   r%   s     r   helper_squarer,   b   s    Ft/D!GG5KLLr   c                 $    d g||dz  nt           fS )Nr   r%   s     r   helper_reciprocalr/   f   s    F 0D"HH6LMMr   g      ?   c                 .    d g|
|t           z  nt          fS r   )one_halfr   r%   s     r   helper_sqrtr3   n   s    Fd&6D(NN<RSSr   c                 .    d g|
|t           z  nt          fS r   )	one_thirdr   r%   s     r   helper_cbrtr6   r   s    F(8T9__>TVVr   c                     |d gt           t           ffS 	 t          |t                     gt           t           ffS # t          $ r t          d| j         d          w xY wNr   &' function to dimensionless quantitiesr   r   r   r   r   r%   s     r   helper_modfr;   v   s    |v.0FGGG
4!7889#%;<
 	
  
 
 
QqzQQQ
 
 	

s	   #9 #Ac                     d gt           fS r   r   r%   s     r   helper__ones_liker=      s    6)))r   c                     |
d gt           fS 	 t          |t                     gt           fS # t          $ r t          d| j         d          w xY wr8   r:   r%   s     r   %helper_dimensionless_to_dimensionlessr?      sq    |v---
t%;<<=?UVV 
 
 
QqzQQQ
 
 	

s	   + #Ac                     ddl m} |d g|fS 	 t          |t                    g|fS # t          $ r t          d| j         d          w xY w)Nr   radianr   r9   astropy.units.sirB   r   r   r   r   r   r   r   rB   s      r   helper_dimensionless_to_radianrF      s    ''''''|vv~
d$:;;<fDD 
 
 
QqzQQQ
 
 	

s	   ' #A
c                     ddl m}m} 	 t          ||          g|fS # t          $ r t          d| j         d          w xY wNr   )degreerB   r   )' function to quantities with angle unitsrD   rI   rB   r   r   r   r   r   r   rI   rB   s       r   helper_degree_to_radianrM      t    ////////
dF++,f44 
 
 
TqzTTT
 
 	

	    #A c                     ddl m}m} 	 t          ||          g|fS # t          $ r t          d| j         d          w xY wrH   rK   rL   s       r   helper_radian_to_degreerQ      rN   rO   c                     ddl m} 	 t          ||          gt          fS # t          $ r t          d| j         d          w xY w)Nr   rA   r   rJ   rC   rE   s      r   helper_radian_to_dimensionlessrS      so    ''''''
dF++,.DDD 
 
 
TqzTTT
 
 	

s	     #Ac                 d    |                                 st          d| j         d          d gdfS )Nr   z/' function to unscaled dimensionless quantities)NN)is_unityr   r   r%   s     r   helper_frexprV      sK    ==?? 
qz   
 
 	
 6<r   c                 H    d d gt          |          t          |          z  fS r   r(   r   r   r   s      r   helper_multiplicationrY      "    $<ERYY...r   c                 H    d d gt          |          t          |          z  fS r   r(   rX   s      r   helper_divisionr\      rZ   r   c                     |d d gdfS 	 d t          |t                    gdfS # t          $ r t          d          w xY w)NFz4Can only raise something to a dimensionless quantityr   r   r   r   rX   s      r   helper_powerr_      sg     }d|U""TmE+ABBCUJJ T T TRSSSTs   # =c                 J    |t          d          d d gt          |          fS )Nz4Cannot use ldexp with a quantity as second argument.)	TypeErrorr   rX   s      r   helper_ldexprb      s,    NOOOd|RYY&&r   c                     |d d gd fS d d g|fS r   r$   rX   s      r   helper_copysignrd      s%    }d|T!!d|U""r   c                     	 |t          |t                    nd }n# t          $ r t          d          w xY wd |gt          fS )NzICan only apply 'heaviside' function with a dimensionless second argument.r^   )r   r   r   
converter2s       r   helper_heavisiderg      sl    
<A<MM%!7888SW 	
  
 
 
W
 
 	

 : 677s    6c                     	 |t          |t                    nd }|t          |t                    nd }n&# t          $ r t          d| j         d          w xY w||gt          fS r8   )r   r   r   r   r   )r   r   r   
converter1rf   s        r   helper_two_arg_dimensionlessrj     s    

<A<MM%!7888SW 	 =B<MM%!7888SW 	
  
 
 
QqzQQQ
 
 	

 $&<==s	   25 #Ac                 2    t          | ||          \  }}|d fS r   )r"   r   r   r   r    _s        r   helper_twoarg_comparisonrn     s"    +Aue<<MJtr   c                 >    ddl m} t          | ||          \  }}||fS )Nr   rA   )rD   rB   r"   )r   r   r   rB   r    rm   s         r   helper_twoarg_invtrigrp     s4    ''''''+Aue<<MJvr   c                 <    t          | ||          \  }}|t          fS r   r"   r   rl   s        r   helper_twoarg_floor_dividers   $  s#    +Aue<<MJ---r   c                 @    t          | ||          \  }}|t          |ffS r   rr   )r   r   r   r    result_units        r   helper_divmodrv   )  s)    5aFFJ.<<<r   c                    d g}|@t           }	 |d ||fD             z  }n# t          $ r t          d| j         d          w xY w|}||fD ]u}	 t	          t          |          |          }|                    |           6# t          $ r3 ||                    d           nt          d| j         d          Y rw xY w||fS )Nc                 @    g | ]}|d nt          |t                    S r   )r   r   ).0r   s     r   
<listcomp>zhelper_clip.<locals>.<listcomp>4  s;        =?U+V+V  r   r   r   F)r   r   r   r   r   r   append)r   r   r   unit3r    ru   r   r   s           r   helper_clipr}   .  sP   J},		  "EN   JJ  	 	 	%(1: ( ( (  	 5L 	- 	-D-)"T((K@@	 !!),,,,    <%%e,,,,-01: 0 0 0   -, {""s     #AB:B?>B?erf_argmatmulclip)__doc__	fractionsr   numpynpastropy.units.corer   r   r   r   r    r
   r   r   r   r"   r&   r)   r,   r/   r2   r5   r3   r6   r;   r=   r?   rF   rM   rQ   rS   rV   rY   r\   r_   rb   rd   rg   rj   helper_twoarg_invariantrn   rp   rs   rv   r}   bitwise_and
bitwise_orbitwise_xorinvert
left_shiftright_shiftlogical_and
logical_orlogical_xorlogical_notisnatgcdlcmisfiniteisinfisnansignsignbitonearg_test_ufuncsufuncabsolutefabsconj	conjugatenegativespacingrintfloorceiltruncpositiveinvariant_ufuncsexpexpm1exp2loglog10log2log1p%dimensionless_to_dimensionless_ufuncs
isinstancegetattrcoreumathr~   arccosarcsinarctanarccosharcsinharctanhdimensionless_to_radian_ufuncsradiansdeg2raddegree_to_radian_ufuncsdegreesrad2degradian_to_degree_ufuncscossintancoshsinhtanhradian_to_dimensionless_ufuncssqrtsquare
reciprocalcbrt
_ones_likemodffrexp	logaddexp
logaddexp2two_arg_dimensionless_ufuncsaddsubtracthypotmaximumminimumfminfmax	nextafter	remaindermodfmodtwoarg_invariant_ufuncsgreatergreater_equalless
less_equal	not_equalequaltwoarg_comparison_ufuncsarctan2twoarg_invtrig_ufuncsr   multiplyr   dividetrue_dividepowerldexpcopysignfloor_divide	heavisidefloat_powerdivmodr   r$   r   r   <module>r      sD                           0 / / / / / / /  D D D&! &! &!d    M M MN N N HQNN	T T TW W W
 
 
* * *	
 	
 	

 
 

 
 

 
 

 
 
     "/ / // / /	T 	T 	T' ' '# # #	8 	8 	8> > >" 2   
  . . .
= = =
!# !# !#N NMNIMNNMNNHFF  ( k28RXrw
K  . .E-M% KGGLKJGHGHK   , ,E+M% FHGFHGH) % :ggbgmUD1128<< B)bgm.?-AA)2 A AE@M% IIIJJJ"  , : :E9M% :rz2 $ 3 3E2M% :rz2 $ 3 3E2M% #%&"&"&"'27BG!T + : :E9M% %bg (bi 0bm $bg *;bgm& '$bg &bh  !#bm< ) 8 8E7M% FKHJJGGLLFG  % 3 3E2M% JGMLH  & 4 4E3M%  :ggbgmVT22BH== 3bgm022" 1 1E0M% 3bk :ggb(D))2844 54M")*bi  /bn &bh &bh ,bk !;bo .bl  ,bn (bi :ggbgmVT22BH== 4(3M"'-$%	EEr   