U
    e»{j�]  ã                   @   s*  d Z ddlZddlmZ ddlZddlmZ ddlZ	ddl
Z
ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) eddddgidddddœdddiidœeddddgidddddœdddiidœeddddgidddddœdddiidœe!ddddgidddddœdddiidœedi dddœdddiidœiZ*eddd gdd!gd"œddddd#œdd$diidœeddd gdd!gd"œddddd#œdd$diidœeddd gdd!gd"œddddd#œdd$diidœe"d%i dddd&œdd$diidœiZ+ej,ej-ej.ej/gZ0e
j1j2e% d'd(�G d)d*„ d*ƒƒZ3e
j1 4d+d,d-„ e5e*ƒe5e+ƒ D ƒ¡d.d/„ ƒZ6d0d1„ Z7d2d3„ Z8d4d5„ Z9e
j1 4d6e!eee"eef¡d7d8„ ƒZ:e
j1j2e% d'd(�e
j1 4d9e0¡d:d;„ ƒƒZ;d<d=„ Z<d>d?„ Z=d@dA„ Z>dS )BzTests for polynomial models.é    N)Úproduct)Úassert_allclose)ÚconfÚwcs)Úfits)Úfitting)ÚLinear1D)ÚIdentity)ÚSIPÚChebyshev1DÚChebyshev2DÚ	Hermite1DÚ	Hermite2DÚ
Legendre1DÚ
Legendre2DÚOrthoPolynomialBaseÚPolynomial1DÚPolynomial2DÚPolynomialBase)Ú	HAS_SCIPY)Úget_pkg_data_filename)ÚAstropyUserWarning)é   Údomainé   é
   g333333ó?é   gffffff@çš™™™™™É?)Úc0Úc1Úc2Úc3Úfixedr   T)ÚargsÚkwargsÚ
parametersÚconstraints© gš™™™™7@)Ú	interceptZsloper(   )r   r   éc   éR   )Zx_domainZy_domain)Úc0_0Úc1_0Úc0_1Zc1_1r+   )r   )r+   r,   r-   zrequires scipy)Úreasonc                	   @   sÔ   e Zd ZdZdd„ Zej dee	e
eed�dƒƒ¡dd„ ƒZej dee	e
eed�dƒƒ¡ej d	e¡d
d„ ƒƒZej dee	e
eed�dƒƒ¡dd„ ƒZej dee	e
eed�dƒƒ¡ej d	e¡dd„ ƒƒZdS )ÚTestFittingz*Test linear fitter with polynomial models.c                 C   s„   d| _ d| _t ddd¡| _tjd d…d d…f \| _| _tj 	d¡}| 
| jj¡d | _| 
| jj¡| _| jj| j_t ¡ | _d S )Néd   r   r   éS   r   çš™™™™™¹?)ÚNÚMÚnpÚlinspaceÚx1ÚmgridÚy2Úx2ÚrandomZdefault_rngZstandard_normalÚsizeÚn1Ún2Úshaper   ÚLinearLSQFitterÚlinear_fitter)ÚselfZrsnr'   r'   úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/modeling/tests/test_polynomial.pyÚsetup_classm   s    zTestFitting.setup_class)Úmodel_classr&   )Úkey)FTc              	   C   sî   t | }i }| |d ¡ | |d ¡ |r:| |d ¡ ||d |Ž}|| jƒ}t ¡ �, tjddtd� |  || j|| j ¡}W 5 Q R X |rØ|d  	dd	¡}|rê| 
¡ D ](\}	}
|d |	 }t||	ƒj|ks¬t‚q¬nt|j|jd
d� d	S ©z!Test fitting with LinearLSQFitterr$   r%   r&   r#   Úignorez!The fit may be poorly conditioned)ÚmessageÚcategoryr"   Nr   ©Zatol)Úlinear1dÚupdater7   ÚwarningsÚcatch_warningsÚfilterwarningsr   rA   r=   ÚgetÚitemsÚgetattrÚvalueÚAssertionErrorr   r%   )rB   rE   r&   Ú
model_argsr$   ÚmodelÚy1Ú	model_linr"   ÚparamrT   Úexpectedr'   r'   rC   Útest_linear_fitter_1D{   s,    

ý z!TestFitting.test_linear_fitter_1DÚfitterc              	   C   sè   |ƒ }t | }i }| |d ¡ | |d ¡ |r@| |d ¡ ||d |Ž}|| jƒ}tjtdd�� ||| j|| j ƒ}W 5 Q R X |rÒ|d  dd¡}	|	rä|	 ¡ D ](\}
}|d |
 }t	||
ƒj
|ks¦t‚q¦nt|j|jd	d
� dS ©z,Test fitting with non-linear LevMarLSQFitterr$   r%   r&   r#   úModel is linear in parameters©Úmatchr"   Nr   rK   )rL   rM   r7   ÚpytestÚwarnsr   r=   rQ   rR   rS   rT   rU   r   r%   )rB   rE   r&   r]   rV   r$   rW   rX   Ú
model_nlinr"   rZ   rT   r[   r'   r'   rC   Útest_non_linear_fitter_1D    s$    
z%TestFitting.test_non_linear_fitter_1Dc              	   C   sö   t | }i }| |d ¡ | |d ¡ |r:| |d ¡ ||d |Ž}|| j| jƒ}t ¡ �0 tjddtd� |  || j| j|| j	 ¡}W 5 Q R X |rà|d  
dd	¡}|rò| ¡ D ](\}	}
|d |	 }t||	ƒj|ks´t‚q´nt|j|jd
d� d	S rG   )Úlinear2drM   r:   r9   rN   rO   rP   r   rA   r>   rQ   rR   rS   rT   rU   r   r%   )rB   rE   r&   rV   r$   rW   ÚzrY   r"   rZ   rT   r[   r'   r'   rC   Útest_linear_fitter_2DÀ   s,    
ý$z!TestFitting.test_linear_fitter_2Dc              	   C   sð   |ƒ }t | }i }| |d ¡ | |d ¡ |r@| |d ¡ ||d |Ž}|| j| jƒ}tjtdd�� ||| j| j|| j ƒ}W 5 Q R X |rÚ|d  dd¡}	|	rì|	 	¡ D ](\}
}|d |
 }t
||
ƒj|ks®t‚q®nt|j|jd	d
� dS r^   )rf   rM   r:   r9   rb   rc   r   r>   rQ   rR   rS   rT   rU   r   r%   )rB   rE   r&   r]   rV   r$   rW   rg   rd   r"   rZ   rT   r[   r'   r'   rC   Útest_non_linear_fitter_2Dã   s$    "z%TestFitting.test_non_linear_fitter_2DN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rb   ÚmarkÚparametrizeÚlistr   ÚsortedrL   Ústrr\   Úfittersre   rf   rh   ri   r'   r'   r'   rC   r/   i   s0   þ
!þþ
þr/   rE   c                 C   s   g | ]}|‘qS r'   r'   )Ú.0Úclsr'   r'   rC   Ú
<listcomp>  s     rv   c                 C   sF  d| j krd}nd}t| tƒr"d}t| tƒr2d}nd}| |d|diiŽ}|j| dksZt‚t||ƒjdksnt‚t| tƒr®t|ƒd	| j › d
�ks’t‚t|ƒd| j › d�ks¬t‚n”| j dkrÚt|ƒdksÈt‚t|ƒdksØt‚nh| j dk�r
t|ƒdksöt‚t|ƒdk�sBt‚n8t|ƒd	| j › d�k�s&t‚t|ƒd| j › d�k�sBt‚dS )z´
    Test that polynomial models can be instantiated with constraints, but no
    parameters specified.

    Regression test for https://github.com/astropy/astropy/issues/3606
    Z1Dr   r+   r(   )r   r   )r   r"   Tú<zX(2, 2, c0_0=0., c1_0=0., c2_0=0., c0_1=0., c1_1=0., c2_1=0., c0_2=0., c1_2=0., c2_2=0.)>zModel: zì
Inputs: ('x', 'y')
Outputs: ('z',)
Model set size: 1
X_Degree: 2
Y_Degree: 2
Parameters:
    c0_0 c1_0 c2_0 c0_1 c1_1 c2_1 c0_2 c1_2 c2_2
    ---- ---- ---- ---- ---- ---- ---- ---- ----
     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0r   zG<Polynomial2D(2, c0_0=0., c1_0=0., c2_0=0., c0_1=0., c0_2=0., c1_1=0.)>zÄModel: Polynomial2D
Inputs: ('x', 'y')
Outputs: ('z',)
Model set size: 1
Degree: 2
Parameters:
    c0_0 c1_0 c2_0 c0_1 c0_2 c1_1
    ---- ---- ---- ---- ---- ----
     0.0  0.0  0.0  0.0  0.0  0.0r   z"<Linear1D(slope=2., intercept=0.)>zˆModel: Linear1D
Inputs: ('x',)
Outputs: ('y',)
Model set size: 1
Parameters:
    slope intercept
    ----- ---------
      2.0       0.0z(2, c0=0., c1=0., c2=0.)>zw
Inputs: ('x',)
Outputs: ('y',)
Model set size: 1
Degree: 2
Parameters:
     c0  c1  c2
    --- --- ---
    0.0 0.0 0.0N)	rj   Ú
issubclassr   r   r"   rU   rS   Úreprrr   )rE   rZ   ÚdegreeÚmr'   r'   rC   Ú%test_polynomial_init_with_constraints  s<    



ÿÿÿ

ÿ
ÿ
ÿ
ÿr|   c               	   C   s˜  t tj dd¡ƒ} tj | ¡}|d }|d }t |¡}t	f |d Ž}t	f |d Ž}| 
d¡}| 
d¡}t||g||||ƒ}	d	d	g}
d	| d	| g}| |
gd	¡d
 | }t|	d	d	ƒ|ƒ d|	_t|	d	d	d�|ƒ t|	d	d	d�|ƒ t|	ƒdksôt‚t dd¡� t|	ƒdk�st‚W 5 Q R X |	j d	¡dk�s4t‚d}d	|	j_tjt|d�� |	j d	¡ W 5 Q R X d|	j_tjt|d�� |	j d	¡ W 5 Q R X dS )zTest SIP against astropy.wcsÚdatazhst_sip.hdrÚCRPIX1ÚCRPIX2úA_*úB_*ÚA_ORDERÚB_ORDERr   r   )ÚrÚt)r…   aˆ  <SIP([<Shift(offset=-2048.)>, <Shift(offset=-1024.)>, <_SIP1D(4, 'A', A_2_0=0.00000855, A_3_0=-0., A_4_0=0., A_0_2=0.00000217, A_0_3=0., A_0_4=0., A_1_1=-0.0000052, A_1_2=-0., A_1_3=-0., A_2_1=-0., A_2_2=0., A_3_1=0.)>, <_SIP1D(4, 'B', B_2_0=-0.00000175, B_3_0=0., B_4_0=-0., B_0_2=-0.00000722, B_0_3=-0., B_0_4=-0., B_1_1=0.00000618, B_1_2=-0., B_1_3=0., B_2_1=-0., B_2_2=-0., B_3_1=-0.)>])>Ú	max_widthéP   a  Model: SIP
    Model: Shift
    Inputs: ('x',)
    Outputs: ('y',)
    Model set size: 1
    Parameters:
         offset
        -------
        -2048.0

    Model: Shift
    Inputs: ('x',)
    Outputs: ('y',)
    Model set size: 1
    Parameters:
         offset
        -------
        -1024.0

    Model: _SIP1D
    Inputs: ('x', 'y')
    Outputs: ('z',)
    Model set size: 1
    Order: 4
    Coeff. Prefix: A
    Parameters:
                A_2_0                 A_3_0          ...         A_3_1        
        --------------------- ---------------------- ... ---------------------
        8.551277582556502e-06 -4.730444829222791e-10 ... 1.971022971660309e-15

    Model: _SIP1D
    Inputs: ('x', 'y')
    Outputs: ('z',)
    Model set size: 1
    Order: 4
    Coeff. Prefix: B
    Parameters:
                B_2_0                  B_3_0         ...         B_3_1         
        ---------------------- --------------------- ... ----------------------
        -1.746491877058669e-06 8.567635427816317e-11 ... -3.779506805487476e-15
é   z'Degree of polynomial must be 2< deg < 9r`   r   N)r   ÚosÚpathÚjoinr   ÚHeaderÚfromtextfiler   ÚWCSÚdictÚpopr
   Úsip_pix2focr   Úinputsry   rU   r   Zset_temprr   Úsip1d_aZget_num_coeffÚorderrb   ÚraisesÚ
ValueError)Ú	test_fileÚhdrÚcrpix1Úcrpix2ÚwobjÚa_parsÚb_parsÚa_orderÚb_orderÚsipZcoordsZ
rel_coordsZastwcs_resultÚMESSAGEr'   r'   rC   Útest_sip_hstb  s>    



ÿ	ÿ-r¢   c                  C   s^  t tj dd¡ƒ} tj | ¡}|d }|d }t |¡}t	f |d Ž}t	f |d Ž}t	f |d Ž}t	f |d Ž}| 
d	¡}	| 
d
¡}
| 
d¡}| 
d¡}|d= |d= ddg}d| d| g}t||g|	|
||||||d�	}| |gd¡}| |d¡d }t||Ž |d | ƒ t|j|d Ž |d  | || ƒ t|jƒdk�sFt‚t|jƒdk�sZt‚dS )z0Test forward and inverse SIP against astropy.wcsr}   zirac_sip.hdrr~   r   r€   r�   zAP_*zBP_*r‚   rƒ   ZAP_ORDERZBP_ORDERZA_DMAXZB_DMAXéÈ   )Úap_orderZap_coeffÚbp_orderZbp_coeffr   r   zô<InverseSIP([<Polynomial2D(2, c0_0=0., c1_0=0.0000114, c2_0=0.00002353, c0_1=-0.00000546, c0_2=-0.00000667, c1_1=-0.00001801)>, <Polynomial2D(2, c0_0=0., c1_0=-0.00001495, c2_0=0.00000122, c0_1=0.00001975, c0_2=-0.00002601, c1_1=0.00002944)>])>a‡  Model: InverseSIP
    Model: Polynomial2D
    Inputs: ('x', 'y')
    Outputs: ('z',)
    Model set size: 1
    Degree: 2
    Parameters:
        c0_0   c1_0      c2_0      c0_1       c0_2       c1_1   
        ---- -------- --------- ---------- ---------- ----------
         0.0 1.14e-05 2.353e-05 -5.463e-06 -6.666e-06 -1.801e-05

    Model: Polynomial2D
    Inputs: ('x', 'y')
    Outputs: ('z',)
    Model set size: 1
    Degree: 2
    Parameters:
        c0_0    c1_0       c2_0      c0_1      c0_2       c1_1  
        ---- ---------- --------- --------- ---------- ---------
         0.0 -1.495e-05 1.225e-06 1.975e-05 -2.601e-05 2.944e-05
N)r   r‰   rŠ   r‹   r   rŒ   r�   r   rŽ   r�   r�   r
   r‘   Zsip_foc2pixr   Úinversery   rU   rr   )r—   r˜   r™   rš   r›   rœ   r�   Zap_parsZbp_parsrž   rŸ   r¤   r¥   ZpixZrel_pixr    ZfocZnewpixr'   r'   rC   Útest_sip_irac½  sL    




÷$ÿÿÿr§   c               	   C   s”   t ddgddƒ} t| jjdddgƒ t| jjdddgƒ d}tjt|d�� | j W 5 Q R X t ddgdddd�} | jj	dks€t
‚| jj	dks�t
‚d S )	Nr   é   r   g        r   z*SIP inverse coefficients are not availabler`   )Zn_models)r
   r   r“   r%   Zsip1d_brb   r•   ÚNotImplementedErrorr¦   Zmodel_set_axisrU   )r    r¡   r'   r'   rC   Útest_sip_no_coeff  s    rª   ru   c              
   C   s®  d}| j dkrÈ| ddd�}|dƒdks*t‚t |t d¡ƒt d¡k¡sLt‚t ddd¡}dtj ddt	|ƒ¡ }| dd�}t
 ¡ }||||ƒ}t|jddd	� tjt|d
�� | dd� W 5 Q R X �nâ| j dk�rªt| tƒ�r´| dddd�}t dddg¡}	t ddg¡}
tjjtdd|	|
ft ¡ fd��4 tjtdd
�� | t ¡ t ¡ ¡ W 5 Q R X W 5 Q R X tjt|d
�� | ddd� W 5 Q R X tjt|d
�� | ddd� W 5 Q R X n0| ddd�}tjt|d
�� | dd� W 5 Q R X |ddƒdk�søt‚t |t d¡t d¡ƒt d¡k¡�s$t‚tjddd…ddd…f \}}dtj dd|j¡  dd¡}t| tƒ�rz| ddd�}n
| dd�}t
 ¡ }|||||ƒ}t|jddd	� dS )z�
    A few tests that degree=0 polynomials are correctly evaluated and
    fitted.

    Regression test for https://github.com/astropy/astropy/pull/3589
    z-Degree of polynomial must be positive or nullr   r   )rz   r   é   r0   r2   ©rz   rK   r`   éÿÿÿÿr   )Úx_degreeÚy_degreer+   r   Úprepare_inputsT)ZautospecZreturn_valuez,Expected input arrays to have the same shape©r®   r¯   )rz   r+   y              Y@N)Zn_inputsrU   r5   ÚallZzerosZonesr6   r;   ÚuniformÚlenr   r@   r   r   rb   r•   r–   rx   r   ÚarrayÚmkÚpatchÚobjectr   Z	MagicMockr°   r8   r<   Zreshaper+   )ru   r¡   Úp1ÚxÚyZp1_initr]   Zp1_fitZp2ÚaÚbrg   Zp2_initZp2_fitr'   r'   rC   Útest_zero_degree_polynomial  s\    
"
ü ÿ(,
r¾   r]   c              	   C   s¾   | ƒ } t jdd…dd…f \}}|| }tddƒ}tjtdd�� | ||||ƒ}W 5 Q R X tdƒtddƒB }d|_d|_tjtdd�� | ||||ƒ}W 5 Q R X t	|||ƒ|||ƒdd� d	S )
zÚ
    Ensure that OrthoPolynomialBase (ie. Chebyshev2D & Legendre2D) models get
    evaluated & fitted correctly when part of a compound model.

    Regression test for https://github.com/astropy/astropy/pull/6085.
    r   r«   r   r_   r`   Tg•dyáý¥=rK   N)
r5   r8   r   rb   rc   r   r	   ZfittableZlinearr   )r]   r»   rº   rg   Zsimple_modelZ
simple_fitZcompound_modelZcompound_fitr'   r'   rC   Ú)test_2d_orthopolynomial_in_compound_model`  s    	
r¿   c                  C   sr   t dd�} |  ddg¡dks t‚|  dddg¡dks8t‚|  ddddg¡dksRt‚|  ddddd	g¡d
ksnt‚d S )Nr   r¬   r   r   é   é   r«   é   rˆ   éýÿÿÿ)r   ZclenshawrU   )rW   r'   r'   rC   Útest_Hermite1D_clenshaw{  s
    
rÄ   c               	   C   s2  t ddd�} d}tjt|d�� |  t d¡t d¡¡ W 5 Q R X tddd�} |  t d¡t d¡¡t d¡dt d¡ddddœksˆt‚t	ddd�} |  t d¡t d¡¡t d¡t d¡d	t d¡t d¡d	d
œksÚt‚t
ddd�} |  t d¡t d¡¡t d¡t d¡d	t d¡t d¡d	d
œk�s.t‚d S )Nr   r±   z Subclasses should implement thisr`   r   g       @g      À)r   r   r   rÀ   r   r«   g      ð?)r   r   r   r   rÀ   r«   )r   rb   r•   r©   Z_fcacher5   Z
asanyarrayr   rU   r   r   ©rW   r¡   r'   r'   rC   Útest__fcache„  s>    "ú	ú	úrÆ   c               	   C   s*  t ddd�} d}tjt|d��( |  t ddg¡t dddg¡¡ W 5 Q R X tddd�} tjt|d��( |  t ddg¡t dddg¡¡ W 5 Q R X tddd�} tjt|d��( |  t ddg¡t dddg¡¡ W 5 Q R X t	dd	�} d
}tjt|d��( |  t ddg¡t dddg¡¡ W 5 Q R X d S )Nr   r±   z x and y must have the same shaper`   r   r   rÀ   r«   r¬   z$Expected x and y to be of equal size)
r   rb   r•   r–   Z	fit_derivr5   rµ   r   r   r   rÅ   r'   r'   rC   Útest_fit_deriv_shape_error©  s    ,,,
rÇ   )?rm   r‰   Zunittest.mockZmockr¶   rN   Ú	itertoolsr   Únumpyr5   rb   Znumpy.testingr   Zastropyr   r   Z
astropy.ior   Zastropy.modelingr   Z"astropy.modeling.functional_modelsr   Zastropy.modeling.mappingsr	   Zastropy.modeling.polynomialr
   r   r   r   r   r   r   r   r   r   r   Z"astropy.utils.compat.optional_depsr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   rL   rf   ZLevMarLSQFitterZTRFLSQFitterZLMLSQFitterZDogBoxLSQFitterrs   rn   Zskipifr/   ro   rp   r|   r¢   r§   rª   r¾   r¿   rÄ   rÆ   rÇ   r'   r'   r'   rC   Ú<module>   sÆ   4

ü

ü

ü

ü
üç#
ü
ü
ü

üíü  ÿ
[[Eþ
L	%