
    IR-eH                     B   d Z ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZ  eej        j        dd          Z e            Z	 i Z	 i Z	  e            Z	 eh ej        ej        ej        ej        ej         ej!        ej"        ej#        ej$        ej%        ej&        ej'        ej(        ej)        ej*        ej+        ej,        ej-        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:        ej;        ej<        ej=        ej>        ej?        ej@        ejA        ejB        ejC        ejD        ejE        ejF        ejG        ejH        ejI        ejJ        ejK        ejL        ejM        ejN        ejO        ejP        ejQ        ejR        ejS        ejT        ejU        ejV        ejW        ejX        ejY        ejZ        ej[        ej\        ej]        ej^        ej_        ej`        eja        ejb        ejc        ejd        eje        ejf        ejg        ejh        eji        ejj        ejk        ejl        ejm        ejn        ejo        ejp        ejq        ejr        ejs        ejt        eju        ejv        ejw        ejx        ejy        ejz        ej{        ej|        ej}        ej~        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        j        ej        j        z  Zeseej        hz  Zereej        hz  Zeej        hz  Zeej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        hz  Zeej        j        hz  Zej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        hZeez  Zej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        hZereej        ej        hz  Zeez  Z G d	 d
          Z ee          Z ee          Z eej        ej        ej        ej        ej        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        ej        j        h          d             Z eej        ej        h          d             Z eej        j        ej        j        h          d             Z eej        ej        h          d             Zed             Zedgd            Zed             Zed             Zed             Zed             Zed             Zedhd            Zd Zd ZdddZddd Zeredid!            Zedjd"            Zed#             Zedkd$            Zedld%            Zed&             Zed'             Zed(             Zedmd*            Zed+             Z eej        ej        h          ed,d-            Z eej        ej        h          d.             Zednd/            Zed0             Z eej        ej         h          dod3            Zedpd4            Zed5             Z eej        ej        h          dkd6            Z eej        ej        ej	        ej
        ej        ej        ej        h          d7             Zeddd8            Zedqd9            Zed:             Zd; Zd< Zedrd>            Z eej                  dsd?            Zedrd@            ZedrdA            ZedBdej        ej        fdC            ZedD             ZedE             ZedF             ZedG             Ze	 dtdH            ZedudI            Z eej         ej!        ej"        f          dJ             Z# eej$        ej%        f          dK             Z&edL             Z'edM             Z(edN             Z)edO             Z*edP             Z+ eej        Q          dvdR            Z,dS Z- eej        Q          dkdT            Z. eej        j/        ej        j0        h          dU             Z/ eej        Q          dwdW            Z1 eej        Q          dX             Z2 eej        j3        ej        j4        h          dY             Z3 eej        Q          dxd[            Z5 eej        Q          dkd\            Z6 eej        Q          d]             Z7 eej        Q          d^             Z8 eej        Q          dyd`            Z9 eej        j:        ej        j;        h          da             Z: eej<        j        Q          db             Z=dc Z> eej<        j        Q          dd             Z?de Z@ eejA                  	 	 	 	 dzdf            ZAdS ){a]  Helpers for overriding numpy functions.

We override numpy functions in `~astropy.units.Quantity.__array_function__`.
In this module, the numpy functions are split in four groups, each of
which has an associated `set` or `dict`:

1. SUBCLASS_SAFE_FUNCTIONS (set), if the numpy implementation
   supports Quantity; we pass on to ndarray.__array_function__.
2. FUNCTION_HELPERS (dict), if the numpy implementation is usable
   after converting quantities to arrays with suitable units,
   and possibly setting units on the result.
3. DISPATCHED_FUNCTIONS (dict), if the function makes sense but
   requires a Quantity-specific implementation
4. UNSUPPORTED_FUNCTIONS (set), if the function does not make sense.

For the FUNCTION_HELPERS `dict`, the value is a function that does the
unit conversion.  It should take the same arguments as the numpy
function would (though one can use ``*args`` and ``**kwargs``) and
return a tuple of ``args, kwargs, unit, out``, where ``args`` and
``kwargs`` will be will be passed on to the numpy implementation,
``unit`` is a possible unit of the result (`None` if it should not be
converted to Quantity), and ``out`` is a possible output Quantity passed
in, which will be filled in-place.

For the DISPATCHED_FUNCTIONS `dict`, the value is a function that
implements the numpy functionality for Quantity input. It should
return a tuple of ``result, unit, out``, where ``result`` is generally
a plain array with the result, and ``unit`` and ``out`` are as above.
If unit is `None`, result gets returned directly, so one can also
return a Quantity directly using ``quantity_result, None, None``.

    N)recfunctions)UnitConversionError
UnitsErrorUnitTypeErrordimensionless_unscaled)
isiterable)NUMPY_LT_1_22NUMPY_LT_1_23NUMPY_LT_2_0ENABLE_ARRAY_FUNCTIONTc                   "    e Zd Zd ZddefdZdS )FunctionAssignerc                     || _         d S N)assignments)selfr   s     Nlib/python3.11/site-packages/astropy/units/quantity_helper/function_helpers.py__init__zFunctionAssigner.__init__   s    &    Nc                     |:|t          ||j                  }t          |          s|f}|D ]}|| j        |<   |S |	|t          urt          j        | j        ||          S t          d          )a^  Add a helper to a numpy function.

        Normally used as a decorator.

        If ``helps`` is given, it should be the numpy function helped (or an
        iterable of numpy functions helped).

        If ``helps`` is not given, it is assumed the function helped is the
        numpy function with the same name as the decorated function.
        N)helpsmodulez/function_helper requires at least one argument.)	getattr__name__r   r   np	functoolspartial__call__
ValueError)r   fr   r   hs        r   r   zFunctionAssigner.__call__   s     =}
33e$$ ! ( (&' ##H&"2"2$T]%OOOONOOOr   )r   
__module____qualname__r   r   r    r   r   r   r      sF        ' ' ' T" P P P P P Pr   r   )r   c                 Z    |                      t          j                  f|z   || j        d fS r   viewr   ndarrayunitaargskwargss      r   invariant_a_helperr.      s+     FF2: 4'==r   c                 Z    |                      t          j                  f|z   || j        d fS r   r&   )mr,   r-   s      r   invariant_m_helperr1      )    FF2: 4'==r   c                 Z    |                      t          j                  f|z   || j        d fS r   r&   )xr,   r-   s      r   invariant_x_helperr5      r2   r   c                     t          |          dk    r|d         n|                    dd          }|r| j        nd }|                     t          j                  f|z   ||d fS )N   subokT)lenpopr)   r'   r   r(   )r+   r,   r-   r8   r)   s        r   like_helperr;      s`    4yy1}}DGG&**Wd*C*CE$166DFF2: 4't;;r   c                     ddl m} 	 |                     |          } n# t          $ r t	          d          w xY w| fi t
          d fS )Nr   radianz=Can only apply 'sinc' function to quantities with angle units)astropy.units.sir>   to_valuer   r   r   )r4   r>   s     r   sincrA      sp    ''''''
JJv 
 
 
K
 
 	

 4+T11s    8c                 0   ddl m} |t          j        |z  }t	          | |          \  } }t          j                            |                     |          |                    |          |          }|                    | j	        |          }|| j	        d fS )Nr   r=   axis)
r?   r>   r   pi_as_quantitiesunwrap__wrapped__r@   tor)   )pdiscontrE   r>   results        r   rH   rH      s    ''''''%6/7++JAwY""	

6G,,V444 #  F YYqvv&&F164r   c                 P    |                      t          j                  f|z   |d d fS r   r'   r   r(   r*   s      r   argpartitionrP      s'    FF2: 4't;;r   c                     |                     dd          r| j        nd }|                     t          j                  |                     |          f|z   ||d fS )Nr8   T)getr)   r'   r   r(   _to_own_unit)r+   
fill_valuer,   r-   r)   s        r   	full_likerU      sT    ZZ..8166DDFF2:z : :;dBFDRVVVr   c                    ddl m} t          | |          r>|                     t          j                  ||                     |          fi | j        d fS t          ||          r!| ||                    t                    fi d d fS t          Nr   Quantityastropy.unitsrY   
isinstancer'   r   r(   rS   r)   r@   r   NotImplementedError)r+   maskvaluesrY   s       r   putmaskr`     s    &&&&&&!X "rz""D!..*@*@A2qvtSS	FH	%	% "4)?@@A2tTQQ!!r   c                    ddl m} t          | |          r>|                     t          j                  ||                     |          fi | j        d fS t          ||          r!| ||                    t                    fi d d fS t          rW   rZ   )arrr^   valsrY   s       r   placerd     s    &&&&&&#x   "$$dC,<,<T,B,BCRSWWW	D(	#	# "T4==)?@@A2tTQQ!!r   c                    ddl m} t          | |          r;|                     t          j                  |                     |          f|z   |d d fS t          ||          r#| |                    t                    f|z   |d d fS t          rW   )
r[   rY   r\   r'   r   r(   rS   r@   r   r]   )dstsrcr,   r-   rY   s        r   copytorh     s    &&&&&&#x   "$$c&6&6s&;&;<tCVTSWWW	C	"	" "S\\"899:TA64QUUU!!r           c                     |                      |          }||                      |          }||                      |          }|                     t          j                  ft	          d|||          | j        d fS )NT)copynanposinfneginf)rS   r'   r   r(   dictr)   )r4   rk   rl   rm   rn   s        r   
nan_to_numrp   &  s{    
..

C''''	

		$Cv>>>		 r   c                 V    ddl m} 	  || dd          S # t          $ r t          w xY w)z>Convert argument to a Quantity (or raise NotImplementedError).r   rX   FT)rk   r8   )r[   rY   	Exceptionr]   )r+   rY   s     r   _as_quantityrs   5  sQ    &&&&&&"xT2222 " " "!!"s    (c                  r    ddl m 	 t          fd| D                       S # t          $ r t          w xY w)z;Convert arguments to Quantity (or raise NotImplentedError).r   rX   c              3   6   K   | ]} |d dd          V  dS )FTN)rk   r8   dtyper$   ).0r+   rY   s     r   	<genexpr>z!_as_quantities.<locals>.<genexpr>F  s6      SSXXae4tDDDSSSSSSr   )r[   rY   tuplerr   r]   )r,   rY   s    @r   rG   rG   @  s^    &&&&&&"SSSSdSSSSSS " " "!!"s   $ 6Funit_from_firstc                    t          |d                   t          |          dk    rj        fj        fS | scj        j        u rUt          |d         d          s?|dd         D ]4}t          |          }|j                            j                  s| n5	 t          fd|D                       }n# t          $ r t          w xY w|j        fS )zConvert to arrays in units of the first argument that has a unit.

    If unit_from_first, take the unit of the first argument regardless
    whether it actually defined a unit (e.g., dimensionless for arrays).
    r      r)   Nc              3   B   K   | ]}                     |          V  d S r   rS   )rw   argqs     r   rx   z%_quantities2arrays.<locals>.<genexpr>k  s/      ==s++======r   )
rs   r9   valuer)   _default_unithasattris_equivalentry   	TypeErrorr]   )r{   r,   r   trialarraysr   s        @r   _quantities2arraysr   L  s	    	T!WA
4yyA~~z16!!  	!/!!'$q'6*B*B! 8 	 	C %%E:++AF33 "========= " " "!!" 16>s   B; ;C)outc                     ddl m} | :t          | |          r#|                     t          j                  |d<   nt          t          | \  }}|||| fS )z8Convert arguments to Quantity, and treat possible 'out'.r   rX   Nr   )r[   rY   r\   r'   r   r(   r]   r   )r   r,   r-   rY   r   r)   s         r   _iterable_helperr   r  si    &&&&&&
c8$$ 	&HHRZ00F5MM &%%t,LFD64$$r   c                     ||d}|Nddl m} t          ||          st          t	          |           } |                    t          j                  |d<   | j        |f|| j	        |fS )N)overwrite_inputkeepdimsr   rX   r   )
r[   rY   r\   r]   rs   r'   r   r(   r   r)   )r+   rE   r   r   r   r-   rY   s          r   medianr     sw    %4(KK?......c8,, *))QAHHRZ00F5M33r   c                 8    t          | ||d|\  } }}}| f|||fS )N)r   rE   r   )r   rE   r   r-   r)   s        r   concatenater     s8     !1&c W WPV W WFFD#9fdC''r   c                    t           j        j                            |           \  } }}}t           j        j                            | ||          \  }}} t          |  \  } }t          j        d | D              }t          d | D                       }t          d | D                       }	|r|	sdnd}
t          j        |||
          }t          ||           D ]\  }}||t          f|z   <   ||d fS )Nc                     g | ]	}|j         
S r$   rv   rw   rb   s     r   
<listcomp>zblock.<locals>.<listcomp>  s    9993SY999r   c              3   0   K   | ]}|j         d          V  dS )F_CONTIGUOUSNflagsr   s     r   rx   zblock.<locals>.<genexpr>  )      >>#)N+>>>>>>r   c              3   0   K   | ]}|j         d          V  dS )C_CONTIGUOUSNr   r   s     r   rx   zblock.<locals>.<genexpr>  r   r   FC)shaperv   order)r   core
shape_base_block_setup_block_info_recursionr   result_typeallemptyzipEllipsis)r   	list_ndimresult_ndim
final_sizer   slicesr)   rv   F_orderC_orderr   rM   	the_slicerb   s                 r   blockr     s    4673E3R3R4 40VYZ G.DD	; E66 &v.LFDN99&999:E>>v>>>>>G>>v>>>>>G373CCEXEe<<<Fff-- . .	3*-{Y&''4r   c                 8    t          |d|i|\  }}}}| |f|||fS )Nr   r   )r+   choicesr   r-   r)   s        r   chooser     s5    !17!N!Nv!N!NGVT3w<s**r   c                 l    t          | \  }}}}|dk    rd|z                      |          }| ||f|||fS )Nr   r}   )r   rS   )condlist
choicelistdefaultr-   r)   r   s         r   selectr     sK    $4j$A!Jc!||t8))'22j'*FD#==r   c           	         ddl m t          |          }t          j        |          s2t          |d         t          t          j        f          s| j        dk    r|g}t          fd|D                       rt          t          j        |t                    }t          |          }||dz
  k    r6t          j	        |dd           }t          j        ||gd          }|dz  }n"||k    rt          d	| d
| d|dz    d          t          j        | j        | j                  }g }	g }
t%          |          D ]}||         }t'          |          s1|	                    ||                    |
                    |           J| ||                  }|j        dk    r:|	                    ||                    |
                     ||g|R i |           t-          |
 \  }
}t/          |	|
          D ]
\  }}|||<   ||d fS )Nr   rX   c              3   8   K   | ]}t          |          V  d S r   )r\   )rw   crY   s     r   rx   zpiecewise.<locals>.<genexpr>  s-      
5
5q:a""
5
5
5
5
5
5r   r   r}   T)rE   r   rD   zwith z condition(s), either z or z functions are expected)r[   rY   r9   r   isscalarr\   listr(   ndimanyr]   arrayboolr   r   zerosr   rv   rangecallableappendsizer   r   )r4   r   funclistr,   kwn2ncondelseywherewhatkitemrc   r)   r   rY   s                   @r   	piecewiser     sI   &&&&&& 
XB	{8 x{T2:$677<=FaKK:

5
5
5
5H
5
5
555 "!!x---HHABF{{F8!d;;;;>8X"6Q???	Q	
bRARRQRRAERRR
 
 	
 	!'""AED1XX 	5 	5{~~ 	5LL!%%%KKXa[>Dy1}}Xa[)))DD333333444#T*JD$5$''  e$dD=r   c                 >    t          | |d          \  }}||z   ||d fS NTrz   r   )rb   r_   r,   r-   r   r)   s         r   r   r     s-    %c64HHHLFDD=&$,,r   c                     ddl m} t          ||          rt          t	          | |d          \  \  } }}| ||f|z   ||d fS Nr   rX   Trz   )r[   rY   r\   r]   r   )rb   objr_   r,   r-   rY   r)   s          r   insertr     sd    &&&&&&#x   "!!,S&$OOOMS&4f$fdD88r   constantc                     dD ]}|                     |d           }|t          |t                    s|f}g }|D ]Z}|                    t          |t                    rt           fd|D                       n                     |                     [|||<                        t          j                  ||f| j        d fS )N)constant_values
end_valuesc              3   B   K   | ]}                     |          V  d S r   r   )rw   _vr   s     r   rx   zpad.<locals>.<genexpr>  s1      99e((,,999999r   )	r:   r\   ry   r   rS   r'   r   r(   r)   )r   	pad_widthmoder-   keyr   	new_valuevs   `       r   padr     s     /    

3%%=%'' 	HE	 	 	Aa''+9999q999999''**   
  sJJrz""It4fej$NNr   c                     ddl m} t          | |          st          |          dk    rt          t          | \  }}| f|z   i |d fS )Nr   rX   r7   )r[   rY   r\   r9   r]   r   )	conditionr,   rY   r)   s       r   r   r     s^    &&&&&&)X&& "#d))q..!!#T*JD$<$D$..r   )_q_unitc                (   t          |          dk    r|d         }|d d         |dd          z   }n|                    dd           }ddlm} t	          ||          r|                    |          }t          | fd|i|\  \  } }}}| |f|z   |||fS )Nr7   r}   r   r   rX   )r9   r:   r[   rY   r\   r@   r   )r+   r   r   r,   r-   r   rY   r)   s           r   quantiler   (  s    
4yyA~~1gBQBx$qrr("jj%%&&&&&&!X  JJw.qDDcDVDDDQ&$q6D=&$++r   c                 4    ddl m} t          | |g|R d|i|S )Nr   )percentr   )r[   r   r   )r+   r   r,   r-   r   s        r   
percentiler   :  s9    %%%%%%Aq;4;;;;F;;;r   c                 "    t          | f||d|S )N)rE   r   r   )r+   rE   r   r-   s       r   	nanmedianr   A  s    A<Dc<<V<<<r   c                      | j         f|z   |d d fS r   r   r*   s      r   count_nonzeror   F  s    G:fdD00r   h㈵>:0yE>c                 z    ddl m} t          | |d          \  \  } }} |||          j        }| |||f|z   |d d fS r   )r[   rY   r   r   )r+   brtolatolr,   r-   rY   r)   s           r   closer   K  sa    &&&&&&%aDAAALFQD8D$%Dq$$fdD88r   c                 v    	 t          | |          \  }}n# t          $ r Y dS w xY wt          j        |d|id d fS )NFNN	equal_nan)r   r   r   array_equal)a1a2r   r,   r)   s        r   r   r   V  s\    !'B//
dd ! ! !   !>45955tTAA    
$$c                 p    	 t          | |          \  }}n# t          $ r Y dS w xY wt          j        | d d fS )Nr   )r   r   r   array_equiv)r  r  r,   r)   s       r   r  r  _  sT    !'B//
dd ! ! !   !>4 $,,r  c                 H   ddl m} t          | |          \  } }| j        |j        z  }|7t	          ||          st
          t          d | ||fD                       i ||fS |                     t          j	                  |                    t          j	                  fi |d fS )Nr   rX   c              3   T   K   | ]#}|                     t          j                  V  $d S r   rO   )rw   r4   s     r   rx   zdot_like.<locals>.<genexpr>q  s0      ==AQVVBJ''======r   )
r[   rY   rG   r)   r\   r]   ry   r'   r   r(   )r+   r   r   rY   r)   s        r   dot_liker  h  s    &&&&&&!QDAq6AF?D
#x(( 	&%%==!Q=====r4LLrz""AFF2:$6$67T4GGr   c                     t          | |          \  } }| j        |j        z  }|                     t          j                  |                    t          j                  f|z   ||d fS r   )rG   r)   r'   r   r(   )r+   r   r,   r-   r)   s        r   
cross_liker
  v  sY     !QDAq6AF?DFF2:rz 2 23d:FD$NNr   c                   ddl m} t          | t                    st	          d          |9t          ||          st
          |                    t          j                  |d<   t          | }t          j        t          j        d |D             t                    }t          d |D                       }| f|z   |||fS )Nr   rX   z3only "subscripts" string mode supported for einsum.r   c              3   $   K   | ]}|j         V  d S r   r)   rw   r   s     r   rx   zeinsum.<locals>.<genexpr>  s$      *>*>a16*>*>*>*>*>*>r   c              3   T   K   | ]#}|                     t          j                  V  $d S r   rO   r  s     r   rx   zeinsum.<locals>.<genexpr>  s0      22!166"*%%222222r   )r[   rY   r\   strr   r]   r'   r   r(   rG   r   reduceoperatormulr   ry   )
subscriptsr   operandsr-   rY   qsr)   r   s           r   einsumr    s    &&&&&&j#&& PNOOO
#x(( 	1%%  HHRZ00F5M		"BHL*>*>2*>*>*>@VWWD22r22222F=6!6444r   c                 b    ddl m} t          | |          rt          | |j        |fi |j        d fS rW   )r[   rY   r\   r]   r   r)   )r4   weights	minlengthrY   s       r   bincountr    sF    &&&&&&!X "!!w}i("glD@@r   c                 >    t          | |d          \  }}||z   |d d fS r   r   )r4   binsr,   r-   r   r)   s         r   digitizer    s-    %atDDDLFDD=&$,,r   c                     ddl m} t          |           }|j        dk    r|                    |          S t          | |          rt          | S rW   )r[   rY   rs   r   r@   r\   r]   )r  r)   rY   checks       r   _check_binsr!    s[    &&&&&&EzA~~~~d###	D(	#	# !!r   c                 N    t          |           } |                     |          } | S r   )rs   r@   )r   r)   s     r   _check_ranger#    s%    ENN4  ELr   
   c                 2   |t          |          }|j        }|j        }nd }t          |           } t          |t                    st          || j                  }|t          || j                  }|r|pd| j        z  }| j        ||f||d|| j        fd fS )Nr}   r  density)rs   r)   r   r\   r  r!  r#  )r+   r  r   r  r'  r)   s         r   	histogramr(    s    w''|-QAdC   )4((UAF++ $	QV# 
$00	qv	 r   c                     t          |           } t          |t                    st          || j                  }|t          || j                  }| j        |||fi | j        d fS r   )rs   r\   r  r!  r)   r#  r   )r+   r  r   r  s       r   histogram_bin_edgesr*    se     	QAdC   )4((UAF++GT5'*B<<r   c                    ddl m} |t          |          }|j        }|j        }nd }t          | |          \  } }	 t          |          }|dk    rt          |dk    r7t          ||          s'd t          || j        |j        f          D             }nWt          || j                  }|                    | j                  }n'# t          $ r t          ||          rt          Y nw xY w|3t          d t          || j        |j        f          D                       }|r|pd| j        z  |j        z  }| j        |j        ||f||d|| j        |j        fd fS )Nr   rX   r}   r7   c                 4    g | ]\  }}t          ||          S r$   r!  rw   r   r)   s      r   r   zhistogram2d.<locals>.<listcomp>  s&    VVVYaK4((VVVr   c              3   <   K   | ]\  }}t          ||          V  d S r   r#  rw   rr)   s      r   rx   zhistogram2d.<locals>.<genexpr>  sA       
 
&/q$LD!!
 
 
 
 
 
r   r&  )r[   rY   rs   r)   r   rG   r9   r]   r\   r   r!  rJ   r   ry   )	r4   r   r  r   r  r'  rY   r)   r   s	            r   histogram2dr3    s   &&&&&&w''|-!QDAqII 66%%!VVJtX66VVV#dQVQVDT:U:UVVVDDtQV,,DQVAA  & & &dH%% 	&%%	& 	&&  
 
36uqvqv>N3O3O
 
 
 
 
  -	QV#af, 
!'4'00	qvqv	 s   C !C*)C*c                    |t          |          }|j        }|j        }nd }	 | j        \  }}t          |           } | j        g|z  }nG# t          t
          f$ r3 t          |  } d | D             }d | D             } t          |           }Y nw xY w	 t          |          }	|	|k    rt          d          d t          ||          D             }n-# t          $ r  ddl
m}
 t          ||
          rt          Y nw xY w|'t          d t          ||          D                       }|r"t          j        t"          j        ||pd          }| ||f||d	||fd fS )
Nc                     g | ]	}|j         
S r$   r  rw   ss     r   r   zhistogramdd.<locals>.<listcomp>   s    ///1///r   c                     g | ]	}|j         
S r$   r   r6  s     r   r   zhistogramdd.<locals>.<listcomp>!  s    ***a!'***r   zFThe dimension of bins must be equal to the dimension of the  sample x.c                 4    g | ]\  }}t          ||          S r$   r-  r.  s      r   r   zhistogramdd.<locals>.<listcomp>4  s&    NNN!TAt$$NNNr   r   rX   c              3   <   K   | ]\  }}t          ||          V  d S r   r0  r1  s      r   rx   zhistogramdd.<locals>.<genexpr>7  s0      VV	Dl1d++VVVVVVr   r}   r&  )rs   r)   r   r   AttributeErrorr   rG   r9   r   r   r[   rY   r\   r]   ry   r   r  r  truediv)sampler  r   r  r'  r)   _Dsample_unitsMrY   s              r   histogramddrB    s   w''|-)|1 f%%}q( J'   (/////**6***KKOII 66X   ONc$6M6MNNN  & & &******dH%% 	&%%	& 	&	& VVS=U=UVVVVV M 0,LL 
u00	|	 s$   
A	 	ABBC 'C:9C:r}   c                    t          |           } |t          j        ur't          |                              | j                  }|t          j        ur't          |                              | j                  }| j        ||||fi | j        d fS r   )rs   r   _NoValuer@   r)   r   )r+   r   rE   prependr   s        r   diffrF  D  s    QAbk!!w''0088R[  f%%..qv66GQgv.AFD@@r   c                     t                      |                    dd           }| j        }n't          |t                    rt          |          }nd}|r't          | }t          |          dk    r|dk    r||z  }|r( fd|D             }t	          d |D                       }n j        g|z  }t          |          dk    r|d         } j        f|z   ||d fS )NrE   r}   c                 .    g | ]}j         |j         z  S r$   r  )rw   r   r    s     r   r   zgradient.<locals>.<listcomp>_  s!    222Q!&222r   c              3   $   K   | ]}|j         V  d S r   r   r  s     r   rx   zgradient.<locals>.<genexpr>`  s$      11A111111r   r   )	rs   rR   r   r\   ry   r9   rG   r)   r   )r    varargsr-   rE   n_axisunitss   `     r   gradientrM  N  s   QA::fd##D|	D%	 	  T ' '*w<<1!&G "2222'22211111116!
5zzQaG:44r   c                 &   ddl m}m} t          | |          rt          ||          st          |                     ||j        j                            }|                     |j                  } |j        j        }| j        |j        f|z   ||d fS )Nr   )LogQuantitydex)	r[   rO  rP  r\   r]   rJ   r)   physical_unitr   )startstopr,   r-   rO  rP  r)   s          r   logspacerT  j  s    ........e[)) "D+1N1N "!! 7733ty.//00DHHTYE9"DK$t+VT4??r   c                 D    t          ||           \  \  }} }| |f|z   ||d fS r   r   )rR  rS  r,   r-   r)   s        r   	geomspacerV  x  s4     -T599MT544=4t33r   c                     ddl m} t          | |          \  \  } }}t          ||          r|j        }|j        }nd }| ||f|z   ||d fS rW   )r[   rY   r   r\   r)   r   )r4   xpfpr,   r-   rY   r>  r)   s           r   interprZ    sl    &&&&&&#Ar**JGQQ"h wXr2;vtT11r   c                     | j         }t          d |||fD                       }|r
|g|d gz  z   }| j        ||||fi |d fS )Nc              3   4   K   | ]}t          |          V  d S r   )r   )rw   is     r   rx   zunique.<locals>.<genexpr>  s(      QQa$q''QQQQQQr   )r)   sumr   )arreturn_indexreturn_inversereturn_countsrE   r)   n_indexs          r   uniquerd    sf     7DQQL.-#PQQQQQG )v4&((HlNM4H"dTXXXr   c                 P    t          | |          \  \  } }}|r|d d g}| |||fi |d fS r   r   )ar1ar2assume_uniquereturn_indicesr)   s        r   intersect1drj    sF    )#s33JS# "dD!m^4b$DDr   c                 D    t          | |          \  \  } }}| |f|z   ||d fS r   r   rf  rg  r,   r-   r)   s        r   twosetoprm    s2    )#s33JS#:fdD00r   c                 D    t          ||           \  \  }} }| |f|z   |d d fS r   r   rl  s        r   
setcheckopro    s4     *#s33JS#:fdD00r   c                 "   |}|j         }t          j        |          j         dk    r|f}|D ]_}|dk     r||z   }||f} | | }|j         |j         k    r|})t          j        ||          }|j         |j         k    r|}Qt	          d          |d d fS )Nr   z7function is not returning an array of the correct shape)r   r   r   expand_dimsr   )funcr+   axesvalNrE   r,   ress           r   apply_over_axesrw    s     C	A	x~~aw  !88t8DT{dDk8sxCC.d++Cx38## M  
 d?r   c                 |   | j         j        }dt          |          z  }t          |t          j        fi           }t	          j        |                     |          g|R i |                    ||          }d| j	         d}|
                    d          \  }}	}
|	r| | d|	 |
 d d fS |d d          d| dd d fS )Nr>  zunit=''rv   z, rB   ))	__class__r   r9   typer   r(   
array_reprr'   replacer)   
rpartition)rb   r,   r-   cls_name	fake_namefake_clsno_unit	unit_partprerv   posts              r   r}  r}    s    
 }%Hc(mm#II
}b11HmCHHX..@@@@@@HH8 G %$$$I))'22C ;1y11E14114==#2#,..)...d::r   c                 P    t          j        | j        g|R i |}|| j        z   d d fS r   )r   	array_strr   _unitstr)rb   r,   r-   r  s       r   r  r    s9    
 l396t666v66GS\!4--r   c                 f   t          |          dk    r|d         n|                    dd           }|| j        } nmddlm}m} t          j        |          5 } |di |}	  || j        fi |}d|j        v r| j        } n# t          $ r Y nw xY wd d d            n# 1 swxY w Y   | f|z   |d d fS )	N      	formatterr   )_get_format_function_make_options_dict)r  numpyr$   )
r9   rR   r   numpy.core.arrayprintr  r  r   printoptionsr"   rr   )r+   r,   r-   r  r  r  optionsffs           r   array2stringr    sC    t99>>Qvzz+t/L/LIG 	SRRRRRRR_y111 	 W((33733G
 ))!'==W== bm++A     		  	  	  	  	  	  	  	  	  	  	  	  	  	  	  4$;d**s6   	B#B1B
BBBBB"%B"c                 *    | j         f|z   || j        d fS r   r   r)   )r   r,   r-   s      r   diagr    s     G:fafd22r   )r   c                 l    | j         }|rd |d f}|                     t          j                  |||fi |d fS r   )r)   r'   r   r(   )r+   full_matrices
compute_uv	hermitianr)   s        r   svdr    sD    6D "dD!VVBJ
IFDRVWWr   c                 0    ddl m}  || |          j        S rW   )r[   rY   r   )tolr)   rY   s      r   _interpret_tolr    s)    &&&&&&8C$$r   c                     |t          || j                  }|                     t          j                  |f|z   |d d fS r   r  r)   r'   r   r(   )rA  r  r,   r-   s       r   matrix_rankr  !  s?    
S!&))FF2:$t+VT4??r   c                 `    |                      t          j                  f|z   |d| j        z  d fS Nr}   r&   r*   s      r   invr  )  s-    FF2: 4'QVTAAr   V瞯<c                     t          || j                  }|                     t          j                  |f|z   |d| j        z  d fS r  r  )r+   rcondr,   r-   s       r   pinvr  .  s@    5!&))EFF2:&-vq16z4GGr   c                 p    |                      t          j                  fi | j        | j        d         z  d fS NrB   )r'   r   r(   r)   r   r+   s    r   detr  5  s/    FF2: "af&;TAAr   c                     t          | |          \  } }|                     t          j                  |                    t          j                  f|z   ||j        | j        z  d fS r   )rG   r'   r   r(   r)   )r+   r   r,   r-   s       r   solver  :  s[    !QDAq 

		QVVBJ//047		 r   warnc                    t          | |          \  } }|dvrt          || j                  }|                     t          j                  |                    t          j                  |fi |j        | j        z  |j        dz  d | j        fd fS )N)Nr  rB   r7   )rG   r  r)   r'   r   r(   )r+   r   r  s      r   lstsqr  F  s    !QDAq&&&uaf-- 

		QVVBJ//7
	
!&!&!)T162	 r   c                 ~    |dk    r	ddl m} |}n| j        }|                     t          j                  |f|z   ||d fS Nr   r   )r[   r   r)   r'   r   r(   )r4   ordr,   r-   r   r)   s         r   normr  U  sR    
axx888888%vFF2:$t+VT4??r   c                 ,    | j         |fi | j        |z  d fS r   r  )r+   r   s     r   matrix_powerr  `  s    GQ<QVQY,,r   c                 *    | j         fi | j        dz  d fS )Ng      ?r  r  s    r   choleskyr  e  s    G:r163;,,r   reducedc                     |                     d          rd }n|dk    r| j        }nddlm} || j        f}| j        |fi |d fS )Ner2  r   r  )
startswithr)   r[   r   r   )r+   r   rL  r   s       r   qrr  j  sb    s 1	888888'0GT?Bt++r   c                 :    ddl m} | j        f|z   || j        |fd fS r  )r[   r   r   r)   )r+   r,   r-   r   s       r   eigr  x  s4    444444G:fqv/E&FLLr   c                     ddl m | j                                        d         fd| j                                      }|                     |          f|z   |dfS )zu
    Convert a structured quantity to an unstructured one.
    This only works if all the units are compatible.

    r   StructuredUnitc                 R    t          |           r|                               S S r   )r\   _recursively_apply)r4   r  replace_unittarget_units    r   r  z0structured_to_unstructured.<locals>.replace_unit  s/    a(( 	''555r   N)r[   r  r)   r_   r  r@   )rb   r,   r-   to_unitr  r  r  s       @@@r   structured_to_unstructuredr    s     -,,,,,(//##A&K       h)),77GLL!!#d*FKEEr   c                 z    | j         S t          fd| j                                         D                       S )zBuild structured unit from dtype.

    Parameters
    ----------
    dtype : `numpy.dtype`
    unit : `astropy.units.Unit`

    Returns
    -------
    `astropy.units.Unit` or tuple
    Nc              3   D   K   | ]}t          |d                    V  dS r   N)_build_structured_unit)rw   r   r)   s     r   rx   z)_build_structured_unit.<locals>.<genexpr>  s2      SS'!d33SSSSSSr   )fieldsry   r_   )rv   r)   s    `r   r  r    sC     |SSSSU\=P=P=R=RSSSSSSr   c                     ddl m}  |t          || j                            }|                     | j                  |f|z   ||d fS )Nr   r  )r[   r  r  r)   r@   )rb   rv   r,   r-   r  r  s         r   unstructured_to_structuredr    sW    ,,,,,, .!7sx!H!HIIKLL""E*T16;LLr   c              #      K   ddl m}  ||           }|                                D ],}t          ||          rt	          |          E d{V  (|V  -dS )zReturns an iterator of collapsing any nested unit structure.

    Parameters
    ----------
    iterable : Iterable[StructuredUnit | Unit] or StructuredUnit
        A structured unit or iterable thereof.

    Yields
    ------
    unit
    r   r  N)r[   r  r_   r\   _izip_units_flat)iterabler  rL  r   s       r   r  r    s       -,,,,, N8$$E \\^^  a(( 	'**********GGGG	 r   c                    ddl m}m} |rt          d          |rt          d          t	          | |          r| f} t          |  } t          d | D                       }t          d | D                       }|r& |t          t          |                              }	n0t          |          dk    r ||d                   }	n ||          }	|ft          ||||          |	d	fS )
zMerge structured Quantities field by field.

    Like :func:`numpy.lib.recfunctions.merge_arrays`. Note that ``usemask`` and
    ``asrecarray`` are not supported at this time and will raise a ValueError if
    not `False`.
    r   )rY   r  z!asrecarray=True is not supported.zusemask=True is not supported.c              3   $   K   | ]}|j         V  d S r   r   r  s     r   rx   zmerge_arrays.<locals>.<genexpr>  s$      ..q17......r   c              3   $   K   | ]}|j         V  d S r   r  r  s     r   rx   zmerge_arrays.<locals>.<genexpr>  s$      ,,Q!&,,,,,,r   r}   )rT   flattenusemask
asrecarrayN)
r[   rY   r  r   r\   rG   ry   r  r9   ro   )
	seqarraysrT   r  r  r  rY   r  r   rL  r)   s
             r   merge_arraysr    s?    76666666 ><=== ;9::: )X&& !L	 	*I..I.....F,,),,,,,E %~e$4U$;$;<<==	V		~eAh''~e$$ 
	!!		
 	
 	
 	
 
r   r  )Tri   NN)NNFFr  r   )r   )r   )NN)r   r   )F)Nr   )r$  NNN)r$  NN)FFFN)FF)TTF)r  )r  )r  )rB   FFF(B  __doc__r   r  r  r   	numpy.libr   rfnastropy.units.corer   r   r   r   astropy.utilsr   astropy.utils.compatr	   r
   r   r   r   	overridesARRAY_FUNCTION_ENABLEDsetSUBCLASS_SAFE_FUNCTIONSFUNCTION_HELPERSDISPATCHED_FUNCTIONSUNSUPPORTED_FUNCTIONSr   r   r   reshaperavelmoveaxisrollaxisswapaxes	transpose
atleast_1d
atleast_2d
atleast_3drq  squeezebroadcast_tobroadcast_arraysflipfliplrflipudrot90argminargmaxargsortlexsortsearchsortednonzeroargwhereflatnonzerodiag_indices_fromtriu_indices_fromtril_indices_fromrealimagdiagonaldiagflat
empty_likecompressextractdelete
trim_zerosrolltakeputfill_diagonaltilerepeatsplitarray_splithsplitvsplitdsplitstackcolumn_stackhstackvstackdstackmaxminamaxaminptpr^  cumsumprodproductcumprod
cumproductroundaroundround_fixanglei0clipisposinfisneginfisreal	iscomplexaveragemeanstdvartracenanmaxnanmin	nanargmin	nanargmaxnanmeannansum	nancumsumnanstdnanvarnanprod
nancumprodeinsum_pathtrapzlinspacesort	partitionmeshgridcommon_typer   can_castmin_scalar_typeiscomplexobj	isrealobjshares_memorymay_share_memoryapply_along_axistake_along_axisput_along_axislinalgcond	multi_dotr   msortediff1dpackbits
unpackbitsunravel_indexravel_multi_indexix_covcorrcoefbusday_countbusday_offsetdatetime_as_string	is_busdayr   r   sometruealltrueslogdetdrop_fieldsrename_fieldsappend_fieldsjoin_byapply_along_fieldsassign_fields_by_namefind_duplicatesrecursive_fill_fieldsrequire_fieldsrepack_fieldsstack_arraysTBD_FUNCTIONSsavesavezsavetxtsavez_compressedpolypolyaddpolyderpolydivpolyfitpolyintpolymulpolysubpolyvalrootsvanderrec_append_fieldsrec_drop_fieldsrec_joinIGNORED_FUNCTIONSasscalaralenr   function_helperdispatched_functionrk   asfarrayreal_if_closesort_complexresizefftifftrfftirfftfft2ifft2rfft2irfft2fftnifftnrfftnirfftnhfftihffteigvalseigvalshr.   triltriur1   fftshift	ifftshiftr5   	ones_like
zeros_liker;   rA   rH   rP   rU   r`   rd   rh   rp   rs   rG   r   r   r   r   r   r   r   r   r   r   r   r   nanquantiler   nanpercentiler   r   iscloseallcloser   r   r  dotouterr  crossinnervdot	tensordotkron	correlateconvolver
  r  r  r  r!  r#  r(  r*  r3  rB  rD  rF  rM  rT  rV  rZ  rd  rj  setxor1dunion1d	setdiff1drm  isinin1dro  rw  r}  r  r  r  r  r  r  r  	tensorinvr  r  r  tensorsolver  r  r  r  r  r  eighlibr  r  r  r  r  r$   r   r   <module>r     s   B          ) ) ) ) ) )            % $ $ $ $ $ K K K K K K K K K K
 !!24KTRR #%%  I  H  <  =  HgwJ+'){46K L - "$ 13 N	 J	 !#	 241D	
 G
 Y
 	
 $&8 I y * ')j 35/ J   ^  . 130D G W k $&; 13 K   Y )+ 8:w AC F  !g (*y H n !i *, 57I H o  "y +-) 68Y F F G  W ')f /1f 79i G Z  &(]  H!  i!" I#$ F%$ H%$ e%$  W%& K'& '& !i'& *,'( J)( )( )( "$)( *,)* I+* y+* ,+* )++* 79j+, I-, |-,  Y-, )+	-. J/. /0 N10 H10 !k12 G32 \32 ;34 N54 N54 %'K54 241C56 O76 \78 98 )9: ;: +;: .0->;< IN=< I'=  B  +	{* *z) BJ< '  K 0"&"&"+OR%r'<L"&"&"+rz	   ")+, , OS&(93;C52C4Fs'	  &  GRXrz2#6GRZRZRZJ
BJ")3.   

 
 * * P P P P P P P P: #"#344&&';<<  
b.

BFKbfl
RV\26<
RV\26<
RV\
	29-	 	 	> >	 	> )***> > +*> )9:;;;> > <;> bm4555< < 65< 	2 	2 	2         < < < W W W
 " " " " " " " " "    " " "	" 	" 	" /4 # # # # #L !% % % % % %   44 4 4 _4 ( ( ( (   6 + + + +
 > > > > - - -` - - -
 9 9 9 O O O O* / / / bn5777"8 , , , , 87," r'78999< < :9< = = = = 1 1 1 
BK01119 9 9 219 B B B B - - - )***
H 
H 
H +*
H 







 
 
O O
 
O &* 5 5 5 5 5& A A A A - - -

 
 
      4 r-...	= 	= 	= /.	= ( ( ( (V / / / /d b"+bk A A A A 5 5 56 
@ 
@ 
@ 4 4 4 
2 
2 
2 LPY Y Y Y E E E E RZ>???1 1 @?1
 )***1 1 +*1   : ; ; ;$ . . . + + +B 3 3 3 	"""X X X #"X% % % 	"""@ @ @ #"@ 	ry':;<<<B B =<B 	"""H H H #"H 	"""B B #"B 	)>?@@@  A@ 	"""   #" 	"""@ @ @ #"@ 	"""- - #"- 	"""- - #"- 	"""
, 
, 
, #"
, 	ry~6777M M 87M +,,,F F -,F(T T T$ +,,,M M -,M  2 s'((( 0 0 0 )(0 0 0r   