U
    e»{jj™  ã                u   @   sl	  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 ddlmZ ddlmZ eejjddƒZeƒ Zi Zi Zeƒ 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'ej(ej)ej*ej+ej,ej-ej.ej/ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMejNejOejPejQejRejSejTejUejVejWejXejYejZej[ej\ej]ej^ej_ej`ejaejbejcejdejeejfejgejhejiejjejkejlejmejnejoejpejqejrejsejtejuejvejwejxejyejze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�htO ZeejŽhO 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O Zeej‹jžhO ZejŸej ej¡ej¢ej£ej¤ej¥ej¦ej§ej¨ej©hZªeeªO 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Z½e�rLe½ej¾ej¿hO Z½ee½O ZG d	d
„ d
ƒZÀeÀeƒZÁeÀeƒZÂeÁe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�dd„ ƒZØeÁejÙejÚhd�dd„ ƒZÛeÁejÈjÜejÈjÝhd�dd„ ƒZÞeÁejßejàhd�dd„ ƒZáeÁdd„ ƒZâeÂd¯dd„ƒZãeÁdd„ ƒZäeÁdd„ ƒZåeÁdd„ ƒZæeÁdd „ ƒZçeÁd!d"„ ƒZèeÁd°d$d%„ƒZéd&d'„ Zêd(d)„ Zëd*d+œd,d-„Zìdd.œd/d0„ZíeÁd±d1d2„ƒZîeÂd3d4„ ƒZïeÁd²d5d6„ƒZðeÁd³d7d8„ƒZñeÂd9d:„ ƒZòeÁd;d<„ ƒZóeÁd=d>„ ƒZôeÁd´d@dA„ƒZõeÁdBdC„ ƒZöeÁej÷ejøhd�edDœdEdF„ƒZ÷eÁejùejúhd�dGdH„ ƒZùeÁdIdJ„ ƒZûeÁejüejýhd�dµdMdN„ƒZþeÁdOdP„ ƒZÿeÁdQdR„ ƒ�Z eÁe�je�jhd�d¶dSdT„ƒ�ZeÁe�je�je�je�je�je�j	e�j
hd�dUdV„ ƒ�ZeÁdd.œdWdX„ƒ�ZeÁd·dYdZ„ƒ�ZeÁd[d\„ ƒ�Zd]d^„ �Zd_d`„ �ZeÁd¸dbdc„ƒ�ZeÁe�jd�d¹ddde„ƒ�ZeÁdºdfdg„ƒ�ZeÁd»dhdi„ƒ�ZeÁdjde�je�jfdkdl„ƒ�ZeÁdmdn„ ƒ�ZeÁdodp„ ƒ�ZeÁdqdr„ ƒ�ZeÁdsdt„ ƒ�ZeÁd¼dudv„ƒ�ZeÁd½dwdx„ƒ�ZeÁe�je�je�jfd�dydz„ ƒ�Z eÁe�j!e�j"fd�d{d|„ ƒ�Z#eÂd}d~„ ƒ�Z$eÂdd€„ ƒ�Z%eÂd�d‚„ ƒ�Z&eÁdƒd„„ ƒ�Z'eÁd…d†„ ƒ�Z(eÁej‹d‡�d¾dˆd‰„ƒ�Z)dŠd‹„ �Z*eÁej‹d‡�d¿dŒd�„ƒ�Z+eÁej‹�j,ej‹�j-hd�dŽd�„ ƒ�Z,eÁej‹d‡�dÀd‘d’„ƒ�Z.eÁej‹d‡�d“d”„ ƒ�Z/eÁej‹�j0ej‹�j1hd�d•d–„ ƒ�Z0eÁej‹d‡�dÁd˜d™„ƒ�Z2eÁej‹d‡�dÂdšd›„ƒ�Z3eÁej‹d‡�dœd�„ ƒ�Z4eÁej‹d‡�dždŸ„ ƒ�Z5eÁej‹d‡�dÃd¡d¢„ƒ�Z6eÁej‹�j7ej‹�j8hd�d£d¤„ ƒ�Z7eÁe�j9jd‡�d¥d¦„ ƒ�Z:d§d¨„ �Z;eÁe�j9jd‡�d©dª„ ƒ�Z<d«d¬„ �Z=eÁe�j>d�dÄd­d®„ƒ�Z>d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)Ú
UnitsErrorÚUnitTypeErrorÚdimensionless_unscaled)Ú
isiterable)ÚNUMPY_LT_1_23ZENABLE_ARRAY_FUNCTIONTc                   @   s$   e Zd Zdd„ Zddefdd„ZdS )ÚFunctionAssignerc                 C   s
   || _ d S ©N)Úassignments)Úselfr
   © r   úm/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/quantity_helper/function_helpers.pyÚ__init__„   s    zFunctionAssigner.__init__Nc                 C   sp   |dk	rB|dkrt ||jƒ}t|ƒs*|f}|D ]}|| j|< q.|S |dk	sR|tk	rdtj| j||d�S tdƒ‚dS )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   Úhr   r   r   r   ‡   s    zFunctionAssigner.__call__)r   Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   ƒ   s   r   )r   c                 O   s   |   tj¡f| || jd fS r	   ©Úviewr   ÚndarrayÚunit©ÚaÚargsÚkwargsr   r   r   Úinvariant_a_helper¦   s    r$   c                 O   s   |   tj¡f| || jd fS r	   r   )Úmr"   r#   r   r   r   Úinvariant_m_helperµ   s    r&   c                 O   s   |   tj¡f| || jd fS r	   r   )Úxr"   r#   r   r   r   Úinvariant_x_helperº   s    r(   c                 O   sH   t |ƒdkr|d n
| dd¡}|r*| jnd }|  tj¡f| ||d fS )Né   ÚsubokT)ÚlenÚpopr   r   r   r   )r!   r"   r#   r*   r   r   r   r   Úlike_helperÈ   s     r-   c                 C   sF   ddl m} z|  |¡} W n tk
r6   tdƒ‚Y nX | 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   )r'   r/   r   r   r   ÚsincÏ   s    ÿ
r2   éÿÿÿÿc                 C   sd   ddl m} |d krtj|> }t| |ƒ\} }tjj|  |¡| |¡|d�}| | j	|¡}|| j	d fS )Nr   r.   ©Úaxis)
r0   r/   r   ÚpiÚ_as_quantitiesÚunwrapÚ__wrapped__r1   Útor   )ÚpZdiscontr5   r/   Úresultr   r   r   r8   Ü   s    
  ÿr8   c                 O   s   |   tj¡f| |d d fS r	   ©r   r   r   r    r   r   r   Úargpartitionë   s    r>   c                 O   s8   |  dd¡r| jnd }|  tj¡|  |¡f| ||d fS )Nr*   T)Úgetr   r   r   r   Ú_to_own_unit)r!   Ú
fill_valuer"   r#   r   r   r   r   Ú	full_likeð   s    rB   c                 C   sb   ddl m} t| |ƒr8|  tj¡||  |¡fi | jd fS t||ƒrZ| || t	¡fi d d fS t
‚d S ©Nr   ©ÚQuantity©Úastropy.unitsrE   Ú
isinstancer   r   r   r@   r   r1   r   ÚNotImplementedError)r!   ÚmaskÚvaluesrE   r   r   r   Úputmaskö   s    
"
rL   c                 C   sb   ddl m} t| |ƒr8|  tj¡||  |¡fi | jd fS t||ƒrZ| || t	¡fi d d fS t
‚d S rC   rF   )ÚarrrJ   ÚvalsrE   r   r   r   Úplace  s    
"
rO   c                 O   sd   ddl m} t| |ƒr8|  tj¡|  |¡f| |d d fS t||ƒr\| | t¡f| |d d fS t	‚d S rC   )
rG   rE   rH   r   r   r   r@   r1   r   rI   )ÚdstÚsrcr"   r#   rE   r   r   r   Úcopyto  s    
"
rR   ç        c                 C   sR   |   |¡}|d k	r|   |¡}|d k	r.|   |¡}|  tj¡ftd|||d�| jd fS )NT)ÚcopyÚnanÚposinfÚneginf)r@   r   r   r   Údictr   )r'   rT   rU   rV   rW   r   r   r   Ú
nan_to_num  s    


ürY   c                 C   s:   ddl m} z|| ddd�W S  tk
r4   t‚Y nX dS )z>Convert argument to a Quantity (or raise NotImplementedError).r   rD   FT)rT   r*   N)rG   rE   Ú	ExceptionrI   )r!   rE   r   r   r   Ú_as_quantity)  s
    r[   c                     sB   ddl m‰  zt‡ fdd„| D ƒƒW S  tk
r<   t‚Y nX dS )z;Convert arguments to Quantity (or raise NotImplentedError).r   rD   c                 3   s   | ]}ˆ |d ddd�V  qdS )FTN)rT   r*   Údtyper   )Ú.0r!   rD   r   r   Ú	<genexpr>:  s     z!_as_quantities.<locals>.<genexpr>N)rG   rE   ÚtuplerZ   rI   )r"   r   rD   r   r7   4  s
    r7   F©Úunit_from_firstc                    s²   t |d ƒ‰ t|ƒdkr&ˆ jfˆ jfS | stˆ jˆ jkrtt|d dƒst|dd… D ]"}t |ƒ}|j ˆ j¡sP|‰  qtqPzt‡ fdd„|D ƒƒ}W n tk
r¦   t	‚Y nX |ˆ jfS )z×Convert 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   s   | ]}ˆ   |¡V  qd S r	   ©r@   )r]   Úarg©Úqr   r   r^   `  s     z%_quantities2arrays.<locals>.<genexpr>)
r[   r+   Úvaluer   Z_default_unitÚhasattrZis_equivalentr_   Ú	TypeErrorrI   )ra   r"   rd   ZtrialÚarraysr   re   r   Ú_quantities2arrays@  s$    
ÿÿ
rk   )Úoutc                 O   sL   ddl m} | dk	r4t| |ƒr0|  tj¡|d< nt‚t|Ž \}}|||| fS )z8Convert arguments to Quantity, and treat possible 'out'.r   rD   Nrl   )rG   rE   rH   r   r   r   rI   rk   )rl   r"   r#   rE   rj   r   r   r   r   Ú_iterable_helperg  s    
rm   c                 K   s*   t | ||dœ|—Ž\} }}}| f|||fS )N)rl   r5   ©rm   )rj   r5   rl   r#   r   r   r   r   Úconcatenatew  s    ro   c                 C   s¾   t jj | ¡\} }}}t jj | ||¡\}}} t| Ž \} }t jdd„ | D ƒŽ }tdd„ | D ƒƒ}tdd„ | D ƒƒ}	|r~|	s~dnd}
t j|||
d�}t	|| ƒD ]\}}||t
f| < qœ||d fS )	Nc                 S   s   g | ]
}|j ‘qS r   ©r\   ©r]   rM   r   r   r   Ú
<listcomp>‘  s     zblock.<locals>.<listcomp>c                 s   s   | ]}|j d  V  qdS )ZF_CONTIGUOUSN©Úflagsrq   r   r   r   r^   ’  s     zblock.<locals>.<genexpr>c                 s   s   | ]}|j d  V  qdS )ZC_CONTIGUOUSNrs   rq   r   r   r   r^   “  s     ÚFÚC)Úshaper\   Úorder)r   ÚcoreZ
shape_baseZ_block_setupZ_block_info_recursionrk   Úresult_typeÚallÚemptyÚzipÚEllipsis)rj   Z	list_ndimZresult_ndimZ
final_sizerw   Zslicesr   r\   ZF_orderZC_orderrx   r<   Z	the_slicerM   r   r   r   Úblock  s"    	ÿ  ÿ
r   c                 K   s*   t |d|i|—Ž\}}}}| |f|||fS )Nrl   rn   )r!   Úchoicesrl   r#   r   r   r   r   Úchoose›  s    r�   c                 C   s8   t |Ž \}}}}|dkr&d|  |¡}| ||f|||fS )Nr   rb   )rm   r@   )ÚcondlistZ
choicelistÚdefaultr#   r   rl   r   r   r   Úselect¡  s    r„   c                    s”  ddl m‰  t|ƒ}t |¡s<t|d ttjfƒsB| jdkrB|g}t	‡ fdd„|D ƒƒr\t
‚tj|td�}t|ƒ}||d kr¬tj	|ddd� }tj||gdd	�}|d7 }n(||krÔtd
|› d|› d|d › d�ƒ‚t | j| j¡}g }	g }
t|ƒD ]j}|| }t|ƒ�s$|	 || ¡ |
 |¡ qô| ||  }|jdkrô|	 || ¡ |
 ||f|ž|Ž¡ qôt|
Ž \}
}t|	|
ƒD ]\}}|||< �qv||d fS )Nr   rD   c                 3   s   | ]}t |ˆ ƒV  qd S r	   )rH   )r]   ÚcrD   r   r   r^   ¶  s     zpiecewise.<locals>.<genexpr>rp   rb   T)r5   Zkeepdimsr4   zwith z condition(s), either z or z functions are expected)rG   rE   r+   r   ZisscalarrH   Úlistr   ÚndimÚanyrI   ÚarrayÚboolro   r   Zzerosrw   r\   ÚrangeÚcallableÚappendÚsizerk   r}   )r'   r‚   Zfunclistr"   ÚkwZn2ÚnZcondelseÚyÚwhereÚwhatÚkÚitemrN   r   rg   r   rD   r   Ú	piecewise©  sH    
ÿÿ
ÿ

r–   c                 O   s"   t | |dd�\}}|| ||d fS ©NTr`   ©rk   )rM   rK   r"   r#   rj   r   r   r   r   r�   Ú  s    r�   c                 O   sF   ddl m} t||ƒrt‚t| |dd�\\} }}| ||f| ||d fS ©Nr   rD   Tr`   )rG   rE   rH   rI   rk   )rM   ÚobjrK   r"   r#   rE   r   r   r   r   Úinsertà  s
    
r›   Úconstantc                    s’   dD ]p}|  |d ¡}|d krqt|tƒs.|f}g }|D ]4}| t|tƒr^t‡ fdd„|D ƒƒnˆ  |¡¡ q6|||< qˆ  tj¡||f|ˆ jd fS )N)Zconstant_valuesZ
end_valuesc                 3   s   | ]}ˆ   |¡V  qd S r	   rc   )r]   Ú_v©r‰   r   r   r^   ø  s     zpad.<locals>.<genexpr>)	r,   rH   r_   r�   r@   r   r   r   r   )r‰   Z	pad_widthÚmoder#   Úkeyrg   Ú	new_valueÚvr   rž   r   Úpadë  s    
ÿý
r£   c                 G   sD   ddl m} t| |ƒs"t|ƒdkr&t‚t|Ž \}}| f| i |d fS )Nr   rD   r)   )rG   rE   rH   r+   rI   rk   )Ú	conditionr"   rE   r   r   r   r   r’     s
    r’   )Ú_q_unitc                O   sŒ   t |ƒdkr.|d }|d d… |dd …  }n| dd ¡}ddlm} t||ƒrZ| |¡}t| fd|i|—Ž\\} }}}| |f| |||fS )Nr)   rb   rl   r   rD   )r+   r,   rG   rE   rH   r1   rm   )r!   rf   r¥   r"   r#   rl   rE   r   r   r   r   Úquantile  s    

r¦   c                 O   s&   ddl m} t| |f|žd|i|—ŽS )Nr   )Úpercentr¥   )rG   r§   r¦   )r!   rf   r"   r#   r§   r   r   r   Ú
percentile  s    r¨   c                 O   s   | j f| |d d fS r	   ©rg   r    r   r   r   Úcount_nonzero%  s    rª   çñhãˆµøä>ç:Œ0âŽyE>c                 O   sF   ddl m} t| |dd�\\} }}|||ƒj}| |||f| |d d fS r™   )rG   rE   rk   rg   )r!   ÚbZrtolZatolr"   r#   rE   r   r   r   r   Úclose*  s    r®   c                 C   s   t | |ƒ\}}|i d d fS r	   r˜   ©Za1Za2r"   r   r   r   r   Úarray_equal5  s    r°   c                 C   s   t | |ƒ\}}|i d d fS r	   r˜   r¯   r   r   r   Úarray_equiv;  s    r±   c                 C   s€   ddl m} t| |ƒ\} }| j|j }|d k	r\t||ƒs<t‚tdd„ | ||fD ƒƒi ||fS |  tj	¡| tj	¡fi |d fS d S )Nr   rD   c                 s   s   | ]}|  tj¡V  qd S r	   r=   )r]   r'   r   r   r   r^   J  s     zdot_like.<locals>.<genexpr>)
rG   rE   r7   r   rH   rI   r_   r   r   r   )r!   r­   rl   rE   r   r   r   r   Údot_likeA  s    
 r²   c                 O   s>   t | |ƒ\} }| j|j }|  tj¡| tj¡f| ||d fS r	   )r7   r   r   r   r   )r!   r­   r"   r#   r   r   r   r   Ú
cross_likeO  s    r³   c                O   sŒ   ddl m} t| tƒstdƒ‚|d k	rFt||ƒs6t‚n| tj¡|d< t	|Ž }t
 tjdd„ |D ƒt¡}tdd„ |D ƒƒ}| f| |||fS )Nr   rD   z3only "subscripts" string mode supported for einsum.rl   c                 s   s   | ]}|j V  qd S r	   ©r   ©r]   rf   r   r   r   r^   o  s     zeinsum.<locals>.<genexpr>c                 s   s   | ]}|  tj¡V  qd S r	   r=   rµ   r   r   r   r^   p  s     )rG   rE   rH   Ústrr   rI   r   r   r   r7   r   ÚreduceÚoperatorÚmulr   r_   )Z
subscriptsrl   Zoperandsr#   rE   Úqsr   rj   r   r   r   Úeinsum`  s    

r»   c                 C   s0   ddl m} t| |ƒrt‚| |j|fi |jd fS rC   )rG   rE   rH   rI   rg   r   )r'   ÚweightsZ	minlengthrE   r   r   r   Úbincountt  s    
r½   c                 O   s"   t | |dd�\}}|| |d d fS r—   r˜   )r'   Úbinsr"   r#   rj   r   r   r   r   Údigitize}  s    r¿   c                 C   s@   ddl m} t| ƒ}|jdkr(| |¡S t| |ƒr8t‚n| S d S rC   )rG   rE   r[   r‡   r1   rH   rI   )r¾   r   rE   Úcheckr   r   r   Ú_check_binsƒ  s    


rÁ   c                 C   s   t | ƒ} |  |¡} | S r	   )r[   r1   )r‹   r   r   r   r   Ú_check_range�  s    
rÂ   é
   c                 C   s†   |d k	rt |ƒ}|j}|j}nd }t | ƒ} t|tƒs@t|| jƒ}|d k	rTt|| jƒ}|rf|p^d| j }| j||f||dœ|| jfd fS )Nrb   ©r¼   Údensity)r[   r   rg   rH   r¶   rÁ   rÂ   )r!   r¾   r‹   r¼   rÅ   r   r   r   r   Ú	histogram–  s"    

ürÆ   c                 C   sJ   t | ƒ} t|tƒst|| jƒ}|d k	r2t|| jƒ}| j|||fi | jd fS r	   )r[   rH   r¶   rÁ   r   rÂ   rg   )r!   r¾   r‹   r¼   r   r   r   Úhistogram_bin_edges±  s    
rÇ   c           	      C   s,  ddl m} |d k	r*t|ƒ}|j}|j}nd }t| |ƒ\} }zt|ƒ}W n" tk
rj   t||ƒrft	‚Y nXX |dkrzt	‚nH|dkrªt||ƒsªdd„ t
|| j|jfƒD ƒ}nt|| jƒ}| | j¡}|d k	rêtdd„ t
|| j|jfƒD ƒƒ}|�r|pöd| j |j }| j|j||f||d	œ|| j|jfd fS )
Nr   rD   rb   r)   c                 S   s   g | ]\}}t ||ƒ‘qS r   ©rÁ   ©r]   r­   r   r   r   r   rr   Õ  s     zhistogram2d.<locals>.<listcomp>c                 s   s   | ]\}}t ||ƒV  qd S r	   ©rÂ   ©r]   Úrr   r   r   r   r^   Û  s    zhistogram2d.<locals>.<genexpr>rÄ   )rG   rE   r[   r   rg   r7   r+   ri   rH   rI   r}   rÁ   r:   r_   )	r'   r‘   r¾   r‹   r¼   rÅ   rE   r   r�   r   r   r   Úhistogram2d¾  s:    

ÿürÍ   c              	   C   sD  |d k	rt |ƒ}|j}|j}nd }z| j\}}W nD ttfk
rt   t| Ž } dd„ | D ƒ}dd„ | D ƒ} t| ƒ}Y nX t | ƒ} | jg| }zt|ƒ}	W n. tk
rÄ   ddl	m
}
 t||
ƒrÀt‚Y n&X |	|krÖtdƒ‚dd„ t||ƒD ƒ}|d k	�rtdd	„ t||ƒD ƒƒ}|�r(t tj||�p$d
¡}| ||f||dœ||fd fS )Nc                 S   s   g | ]
}|j ‘qS r   r´   ©r]   Úsr   r   r   rr   ù  s     zhistogramdd.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r   r©   rÎ   r   r   r   rr   ú  s     r   rD   zFThe dimension of bins must be equal to the dimension of the  sample x.c                 S   s   g | ]\}}t ||ƒ‘qS r   rÈ   rÉ   r   r   r   rr     s     c                 s   s   | ]\}}t ||ƒV  qd S r	   rÊ   rË   r   r   r   r^     s     zhistogramdd.<locals>.<genexpr>rb   rÄ   )r[   r   rg   rw   ÚAttributeErrorr   r7   r+   ri   rG   rE   rH   rI   r}   r_   r   r·   r¸   Útruediv)Úsampler¾   r‹   r¼   rÅ   r   Ú_ÚDZsample_unitsÚMrE   r   r   r   Úhistogramddê  sD    

ÿ
ürÖ   rb   c                 C   sV   t | ƒ} |tjk	r"t |ƒ | j¡}|tjk	r<t |ƒ | j¡}| j||||fi | jd fS r	   )r[   r   Ú_NoValuer1   r   rg   )r!   r�   r5   Úprependr�   r   r   r   Údiff  s    

rÙ   c                    sÂ   t ˆ ƒ‰ | dd ¡}|d kr$ˆ j}nt|tƒr8t|ƒ}nd}|rdt|Ž }t|ƒdkrd|dkrd|| }|rŽ‡ fdd„|D ƒ}tdd„ |D ƒƒ}nˆ jg| }t|ƒdkr®|d }ˆ jf| ||d fS )Nr5   rb   c                    s   g | ]}ˆ j |j  ‘qS r   r´   rµ   ©r   r   r   rr   8  s     zgradient.<locals>.<listcomp>c                 s   s   | ]}|j V  qd S r	   r©   rµ   r   r   r   r^   9  s     zgradient.<locals>.<genexpr>r   )	r[   r?   r‡   rH   r_   r+   r7   r   rg   )r   Úvarargsr#   r5   Zn_axisÚunitsr   rÚ   r   Úgradient'  s$    

rÝ   c                 O   sf   ddl m}m} t| |ƒr$t||ƒs(t‚| ||jjƒ¡}|  |j¡} |jj}| j|jf| ||d fS )Nr   )ÚLogQuantityÚdex)	rG   rÞ   rß   rH   rI   r:   r   Zphysical_unitrg   )ÚstartÚstopr"   r#   rÞ   rß   r   r   r   r   ÚlogspaceC  s    râ   c                 O   s&   t || ƒ\\}} }| |f| ||d fS r	   r˜   )rà   rá   r"   r#   r   r   r   r   Ú	geomspaceQ  s    rã   c                 O   sP   ddl m} t| |ƒ\\} }}t||ƒr6|j}|j}nd }| ||f| ||d fS rC   )rG   rE   rk   rH   r   rg   )r'   ZxpÚfpr"   r#   rE   rÓ   r   r   r   r   ÚinterpX  s    
rå   c                 C   sJ   | j }tdd„ |||fD ƒƒ}|r2|g|d g  }| j||||fi |d fS )Nc                 s   s   | ]}t |ƒV  qd S r	   )rŠ   )r]   Úir   r   r   r^   k  s     zunique.<locals>.<genexpr>)r   Úsumrg   )ÚarZreturn_indexZreturn_inverseZreturn_countsr5   r   Zn_indexr   r   r   Úuniquef  s
    ré   c                 C   s4   t | |ƒ\\} }}|r |d d g}| |||fi |d fS r	   r˜   )Úar1Úar2Zassume_uniqueZreturn_indicesr   r   r   r   Úintersect1dr  s    
rì   c                 O   s&   t | |ƒ\\} }}| |f| ||d fS r	   r˜   ©rê   rë   r"   r#   r   r   r   r   Útwosetopz  s    rî   c                 O   s&   t || ƒ\\}} }| |f| |d d fS r	   r˜   rí   r   r   r   Ú
setcheckop€  s    rï   c                 C   sŒ   |}|j }t |¡j dkr |f}|D ]\}|dk r8|| }||f}| |Ž }|j |j krZ|}q$t ||¡}|j |j krx|}q$tdƒ‚q$|d d fS )Nr   z7function is not returning an array of the correct shape)r‡   r   r‰   Úexpand_dimsr   )Úfuncr!   ZaxesÚvalÚNr5   r"   Úresr   r   r   Úapply_over_axesˆ  s$    ÿrõ   c                 O   s¤   | j j}dt|ƒ }t|tjfi ƒ}tj|  |¡f|ž|Ž ||¡}d| j	› d�}| 
d¡\}}	}
|	r‚|› |› d|	› |
› �d d fS |d d… › d|› d�d d fS d S )NrÓ   zunit='ú'r\   z, r3   ú))Ú	__class__r   r+   Útyper   r   Ú
array_reprr   Úreplacer   Ú
rpartition)rM   r"   r#   Úcls_nameZ	fake_nameZfake_clsÚno_unitZ	unit_partÚprer\   Úpostr   r   r   rú   ¦  s     ÿrú   c                 O   s$   t j| jf|ž|Ž}|| j d d fS r	   )r   Ú	array_strrg   Z_unitstr)rM   r"   r#   rþ   r   r   r   r  ¹  s    r  c              	   O   sž   t |ƒdkr|d n
| dd ¡}|d kr0| j} n\ddlm} tj|d��>}z|| jf|Ž}W n tk
rp   Y nX d|jkr‚| j} W 5 Q R X | f| |d d fS )Né   é   Ú	formatterr   )Ú_get_format_function)r  Únumpy)	r+   r?   rg   Znumpy.core.arrayprintr  r   ZprintoptionsrZ   r   )r!   r"   r#   r  r  ÚoptionsÚffr   r   r   Úarray2stringÂ  s    	 
r	  c                 O   s   | j f| || jd fS r	   ©rg   r   )r¢   r"   r#   r   r   r   Údiagã  s    r  )r   c                 C   s0   | j }|rd |d f}|  tj¡|||fi |d fS r	   )r   r   r   r   )r!   Zfull_matricesZ
compute_uvZ	hermitianr   r   r   r   Úsvdê  s    
r  c                 C   s   ddl m} || |ƒjS rC   )rG   rE   rg   )Útolr   rE   r   r   r   Ú_interpret_toló  s    r  c                 O   s0   |d k	rt || jƒ}|  tj¡|f| |d d fS r	   ©r  r   r   r   r   )rÕ   r  r"   r#   r   r   r   Úmatrix_rankù  s    r  c                 O   s    |   tj¡f| |d| j d fS ©Nrb   r   r    r   r   r   Úinv  s    r  çVçž¯Ò<c                 O   s.   t || jƒ}|  tj¡|f| |d| j d fS r  r  )r!   Úrcondr"   r#   r   r   r   Úpinv  s    r  c                 C   s"   |   tj¡fi | j| jd  d fS )Nr3   )r   r   r   r   rw   ©r!   r   r   r   Údet  s    r  c                 O   s:   t | |ƒ\} }|  tj¡| tj¡f| ||j| j d fS r	   )r7   r   r   r   r   )r!   r­   r"   r#   r   r   r   Úsolve  s    
ür  Úwarnc                 C   s\   t | |ƒ\} }|dkr"t|| jƒ}|  tj¡| tj¡|fi |j| j |jd d | jfd fS )N)Nr  r3   r)   )r7   r  r   r   r   r   )r!   r­   r  r   r   r   Úlstsq  s    ür  c                 O   s<   |dkrddl m} |}n| j}|  tj¡|f| ||d fS ©Nr   ©r   )rG   r   r   r   r   r   )r'   Úordr"   r#   r   r   r   r   r   Únorm-  s
    r  c                 C   s   | j |fi | j| d fS r	   r
  )r!   r�   r   r   r   Úmatrix_power8  s    r  c                 C   s   | j fi | jd d fS )Ng      à?r
  r  r   r   r   Úcholesky=  s    r   Úreducedc                 C   sH   |  d¡rd }n&|dkr | j}nddlm} || jf}| j|fi |d fS )NÚerÌ   r   r  )Ú
startswithr   rG   r   rg   )r!   rŸ   rÜ   r   r   r   r   ÚqrB  s    

r$  c                 O   s&   ddl m} | jf| || j|fd fS r  )rG   r   rg   r   )r!   r"   r#   r   r   r   r   ÚeigP  s    r%  c                    sN   ddl m‰  | j ¡ d ‰‡ ‡‡fdd„‰| j ˆ¡}|  |¡f| |ˆdfS )zu
    Convert a structured quantity to an unstructured one.
    This only works if all the units are compatible.

    r   ©ÚStructuredUnitc                    s   t | ˆ ƒr|  ˆ¡S ˆS d S r	   )rH   Ú_recursively_apply)r'   ©r'  Úreplace_unitÚtarget_unitr   r   r*  e  s    

z0structured_to_unstructured.<locals>.replace_unitN)rG   r'  r   rK   r(  r1   )rM   r"   r#   Zto_unitr   r)  r   Ústructured_to_unstructuredZ  s
    r,  c                    s*   | j dkrˆ S t‡ fdd„| j  ¡ D ƒƒS )z¹Build structured unit from dtype

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

    Returns
    -------
    `astropy.units.Unit` or tuple
    Nc                 3   s   | ]}t |d  ˆ ƒV  qdS )r   N)Ú_build_structured_unit)r]   r¢   r´   r   r   r^   ~  s     z)_build_structured_unit.<locals>.<genexpr>)Úfieldsr_   rK   )r\   r   r   r´   r   r-  o  s    
r-  c                 O   s8   ddl m} |t|| jƒƒ}|  | j¡|f| ||d fS )Nr   r&  )rG   r'  r-  r   r1   )rM   r\   r"   r#   r'  r+  r   r   r   Úunstructured_to_structured�  s    r/  c                 c   sF   ddl m} || ƒ}| ¡ D ]$}t||ƒr:t|ƒE dH  q|V  qdS )zðReturns 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)rG   r'  rK   rH   Ú_izip_units_flat)Úiterabler'  rÜ   r¢   r   r   r   r0  Š  s    
r0  c           
      C   s¶   ddl m}m} |rtdƒ‚|r(tdƒ‚t| |ƒr8| f} t| Ž } tdd„ | D ƒƒ}tdd„ | D ƒƒ}|rz|tt|ƒƒƒ}	n"t|ƒdkr”||d ƒ}	n||ƒ}	|ft	||||d	�|	d
fS )zãMerge 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   )rE   r'  z!asrecarray=True is not supported.zusemask=True is not supported.c                 s   s   | ]}|j V  qd S r	   r©   rµ   r   r   r   r^   À  s     zmerge_arrays.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r	   r´   rµ   r   r   r   r^   Á  s     rb   )rA   ÚflattenÚusemaskÚ
asrecarrayN)
rG   rE   r'  r   rH   r7   r_   r0  r+   rX   )
Z	seqarraysrA   r2  r3  r4  rE   r'  rj   rÜ   r   r   r   r   Úmerge_arrays£  s2    
ü÷r5  )Nr3   )TrS   NN)r   N)N)r   )rœ   )r«   r¬   )N)Nr   )rÃ   NNN)rÃ   NN)rÃ   NNN)rÃ   NNN)FFFN)FF)TTF)N)r  )r  )N)r!  )r3   FFF(?  Ú__doc__r   r¸   r  r   Z	numpy.libr   ZrfnZastropy.units.corer   r   r   Zastropy.utilsr   Zastropy.utils.compatr   r   ry   Z	overridesZARRAY_FUNCTION_ENABLEDÚsetZSUBCLASS_SAFE_FUNCTIONSZFUNCTION_HELPERSZDISPATCHED_FUNCTIONSZUNSUPPORTED_FUNCTIONSrw   rŽ   r‡   ZreshapeZravelZmoveaxisZrollaxisZswapaxesZ	transposeZ
atleast_1dZ
atleast_2dZ
atleast_3drð   ZsqueezeZbroadcast_toZbroadcast_arraysÚflipZfliplrZflipudZrot90ZargminZargmaxZargsortZlexsortZsearchsortedZnonzeroZargwhereZflatnonzeroZdiag_indices_fromZtriu_indices_fromZtril_indices_fromÚrealÚimagZdiagonalZdiagflatZ
empty_likeÚcompressÚextractÚdeleteZ
trim_zerosZrollZtakeÚputZfill_diagonalZtileÚrepeatÚsplitZarray_splitZhsplitZvsplitZdsplitÚstackZcolumn_stackZhstackZvstackZdstackÚmaxÚminZamaxZaminZptprç   ZcumsumÚprodÚproductZcumprodZ
cumproductÚroundÚaroundZround_ZfixZangleZi0ZclipZisposinfZisneginfZisrealZ	iscomplexZaverageZmeanZstdÚvarZmedianÚtraceZnanmaxZnanminZ	nanargminZ	nanargmaxZnanmeanZ	nanmedianZnansumZ	nancumsumZnanstdZnanvarZnanprodZ
nancumprodZeinsum_pathZtrapzZlinspaceÚsortZmsortÚ	partitionZmeshgridZcommon_typerz   Zcan_castZmin_scalar_typeZiscomplexobjZ	isrealobjZshares_memoryZmay_share_memoryZapply_along_axisZtake_along_axisZput_along_axisZlinalgZcondZ	multi_dotZediff1dZpackbitsZ
unpackbitsZunravel_indexZravel_multi_indexZix_ZcovZcorrcoefZbusday_countZbusday_offsetZdatetime_as_stringZ	is_busdayr{   rˆ   ZsometrueZalltrueZslogdetZdrop_fieldsZrename_fieldsZappend_fieldsZjoin_byZapply_along_fieldsZassign_fields_by_nameZfind_duplicatesZrecursive_fill_fieldsZrequire_fieldsZrepack_fieldsZstack_arraysZTBD_FUNCTIONSÚsaveZsavezZsavetxtZsavez_compressedZpolyZpolyaddZpolyderZpolydivZpolyfitZpolyintZpolymulZpolysubZpolyvalÚrootsZvanderZrec_append_fieldsZrec_drop_fieldsZrec_joinZIGNORED_FUNCTIONSZasscalarÚalenr   Zfunction_helperZdispatched_functionrT   ZasfarrayZreal_if_closeZsort_complexÚresizeZfftZifftZrfftZirfftZfft2Zifft2Zrfft2Zirfft2ZfftnZifftnZrfftnZirfftnZhfftZihfftZeigvalsZeigvalshr$   ZtrilZtriur&   ZfftshiftZ	ifftshiftr(   Z	ones_likeZ
zeros_liker-   r2   r8   r>   rB   rL   rO   rR   rY   r[   r7   rk   rm   ro   r   r�   r„   r–   r�   r›   r£   r’   r¦   Znanquantiler¨   Znanpercentilerª   ÚiscloseZallcloser®   r°   r±   ÚdotÚouterr²   ÚcrossÚinnerZvdotZ	tensordotZkronZ	correlateZconvolver³   r»   r½   r¿   rÁ   rÂ   rÆ   rÇ   rÍ   rÖ   r×   rÙ   rÝ   râ   rã   rå   ré   rì   Zsetxor1dZunion1dZ	setdiff1drî   ÚisinZin1drï   rõ   rú   r  r	  r  r  r  r  r  Z	tensorinvr  r  r  Ztensorsolver  r  r  r   r$  r%  ZeighÚlibr,  r-  r/  r0  r5  r   r   r   r   Ú<module>   sâ  !                                                                                      â%           ü       ü              ù	ý               úÿ









'

0








ùÿ

+2	       ÿ 










	

    û