U
    e»{j�]  ã                   @   sì  d dl Z d dlZd dlZd dlZd dlZd dlm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 ejejejejgZG d	d
„ d
ƒZejje dd�G dd„ dƒƒZG dd„ dƒZdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd „ Z%d!d"„ Z&d#d$„ Z'ejje dd�ej (d%¡ej )d&e¡d'd(„ ƒƒƒZ*ejje dd�ej )d&e¡d)d*„ ƒƒZ+ejje dd�ej )d&e¡d+d,„ ƒƒZ,ejje dd�ej (d-¡ej )d&e¡d.d/„ ƒƒƒZ-d0d1„ Z.d2d3„ Z/dS )4é    N)Údefault_rng)Úassert_allclose)ÚfittingÚmodels)ÚFittable1DModel)Ú	Parameter)Ú	HAS_SCIPY)ÚAstropyUserWarningc                   @   s¦   e Zd Zdd„ Zejje dd�ej de	¡dd„ ƒƒZ
ejje dd�ej de	¡dd	„ ƒƒZejje dd�d
d„ ƒZejje dd�ej de	¡dd„ ƒƒZdS )ÚTestNonLinearConstraintsc                 C   sŒ   t jdddd�| _t jdddd�| _t ddd¡| _|  | j¡| _|  | j¡| _t	d	ƒ}| 
d
¡| _| jd| j  | _| jd| j  | _d S )Né
   çÍÌÌÌÌÌ-@ç333333Ó?©Ústddevé   çš™™™™™Ù?é   çš™™™™™¹?éÒ–Iéd   é   )r   Ú
Gaussian1DÚg1Úg2ÚnpÚarangeÚxÚy1Úy2r   Ústandard_normalÚnÚny1Úny2©ÚselfZrsn© r%   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/modeling/tests/test_constraints.pyÚsetup_class   s    z$TestNonLinearConstraints.setup_classúrequires scipy©ÚreasonÚfitterc                 C   s@   |ƒ }t jdddddid�}||| j| jƒ}|jjdks<t‚d S )Nr   r   r   Ú	amplitudeT)Úmeanr   Úfixed)r   r   r   r!   r,   ÚvalueÚAssertionError)r$   r+   r   Úmodelr%   r%   r&   Útest_fixed_par'   s    z'TestNonLinearConstraints.test_fixed_parc                 C   sP   |ƒ }dd„ }t jdddd|id�}||| j| jƒ}t|jjd|j d	d
� d S )Nc                 S   s   d| j  }|S ©Né2   r   )r1   r-   r%   r%   r&   Útied5   s    
z4TestNonLinearConstraints.test_tied_par.<locals>.tiedr   r   r   r-   )r-   r   r5   r4   çñhãˆµøä>©Zrtol)r   r   r   r!   r   r-   r/   r   )r$   r+   r5   r   r1   r%   r%   r&   Útest_tied_par0   s
    z&TestNonLinearConstraints.test_tied_parc                    s  ddl m} tjdddd�}tjdddd�}t ||g|d	g|d	gid
g¡}t ddd¡}||ƒ}||ƒ}tj 	d¡}|d|  }	|d|  }
|||	||
ƒ ddg}ddg}d
}tj
|||f }dd„ ‰ ‡ fdd„}|j||||	||
fd�\}}t|j|dd� t|jj|jjƒ d S )Nr   ©Úoptimizer   r   r   r   r   r   r,   gš™™™™™#@r   r   r   r   c                 S   s*   | t  d|d d  ||d  d  ¡ S )Nç      à¿é   r   r   ©r   Úexp)ÚAÚpr   r%   r%   r&   Ú	compmodelR   s    z=TestNonLinearConstraints.test_joint_fitter.<locals>.compmodelc              	      sD   t  t jˆ | d | dd… |ƒ| ˆ | d | dd … |ƒ| f ¡S )Nr   r<   é   )r   ZravelÚr_)r@   Úx1r   Zx2r   ©rA   r%   r&   ÚerrfU   s    <ÿz8TestNonLinearConstraints.test_joint_fitter.<locals>.errf©Úargsr6   r7   )Úscipyr:   r   r   r   ZJointFitterr   r   ÚrandomÚrandnrC   Úleastsqr   Ú	fitparamsr,   r/   )r$   r:   r   r   Zjfr   r   r   r    r!   r"   Úp1Úp2r?   r@   rF   rM   Ú_r%   rE   r&   Útest_joint_fitter=   s0      ÿz*TestNonLinearConstraints.test_joint_fitterc                    sš   ddl m} |ƒ }tjdddd�}dd„ ‰ ‡ fd	d
„}dddg}|| jƒ}tj d¡}|| }|j||| j|fd�\}	}
||| j|ƒ}t	|j
|	dd� d S )Nr   r9   gÍÌÌÌÌÌ#@g      -@r   r   c                 S   s.   | d t  d| d d  || d  d  ¡ S )Nr   r;   r   r<   r=   )r@   r   r%   r%   r&   Úfuncg   s    z:TestNonLinearConstraints.test_no_constraints.<locals>.funcc                    s   ˆ | |ƒ| S ©Nr%   )r@   r   Úy©rR   r%   r&   rF   j   s    z:TestNonLinearConstraints.test_no_constraints.<locals>.errfr   rG   g{®Gázt?r7   )rI   r:   r   r   r   r   rJ   rK   rL   r   Ú
parameters)r$   r+   r:   r   rF   Úp0rT   r    ÚnyZfitparÚsr1   r%   rU   r&   Útest_no_constraints^   s    

z,TestNonLinearConstraints.test_no_constraintsN)Ú__name__Ú
__module__Ú__qualname__r'   ÚpytestÚmarkÚskipifr   ÚparametrizeÚfittersr2   r8   rQ   rZ   r%   r%   r%   r&   r
      s   
 r
   r(   r)   c                   @   sP   e Zd Zdd„ Zej de¡dd„ ƒZdd„ Z	ej de¡dd	„ ƒZ
d
d„ ZdS )Ú
TestBoundsc              {   C   sF  d}d}t  ddd¡| _|| j | t jjddd� | _t  dd	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHd=ddIdJd,dKdLdMdNdOdPdQdRdIdSdTdUdVdWdXdYdZddZd[d\d]d^d_d`dadbdcddded2dfd&dgdhdidjdkdldmdndodpdpdqdrd?d&dsdtgy¡}| dudu¡| _d S )vNg       Àç      à?ç      ð¿ç      ð?r   r   )ÚscaleÚsizeg     �@g     `�@g     °ƒ@g     ˜‚@g     ˆ�@g     H�@g     ø€@g      @g     À|@g     P}@g      z@g     0€@g     `…@g     ðˆ@g     ð‰@g     Ðˆ@g     H„@g     †@g     ø„@g     �@g     ð}@g     `|@g     à…@g     ˆ�@g     <“@g     ´”@g     (�@g     0�@g      ‹@g     ƒ@g     p~@g     P|@g     x€@g     `ˆ@g     ‘@g     üž@g     $Ÿ@g     Dœ@g     Ô—@g     €�@g     ø‹@g     à‚@g      }@g     à@g     0…@g     ¨‘@g     Ÿ@g     Ü¤@g     Î£@g     X�@g     ¨–@g     À’@g     ¸„@g     ð@g      }@g     È�@g     €Š@g     š@g     f¤@g     r¨@g     –£@g     Ø›@g     ì’@g     ˜†@g     è€@g     ¨‚@g     Ä‘@g     Ú¦@g     £@g     Ø�@g     8“@g     ‡@g      @g     Ð|@g     `~@g     è†@g     ¸“@g      �@g     L¢@g      œ@g     p’@g     Ø„@g      ~@g     €@g     °�@g     ¨ˆ@g     ¨’@g     $˜@g     D•@g     (�@g     ��@g      z@g     ð|@g     0{@g     €€@g     À„@g     øˆ@g     P‡@g     0�@g     à}@g     ¸€@g     °{@g      z@g     p{@g     €}@g     À~@g     X€@g     �{@g     Àz@é   )	r   Úlinspacer   rJ   ÚnormalrT   ÚarrayZreshapeÚdata)r$   r?   ÚBrm   r%   r%   r&   r'   x   s                                                                                                                óÿzTestBounds.setup_classr+   c           	   	   C   sÆ   |ƒ }d}d}dddœ}t j|||d�}tjtdd�� ||| j| jƒ}W 5 Q R X |jj}|j	j}|d	 |d
 d kszt
‚|d	 |d
 d ks’t
‚|d	 |d d ksªt
‚|d	 |d d ksÂt
‚d S )Nçš™™™™™ñ?ç        ©g      ø¿ç      @©re   rf   ©ÚslopeÚ	intercept©ÚboundszModel is linear in parameters©Úmatchr6   ru   r   r<   rv   )r   ÚLinear1Dr^   Úwarnsr	   r   rT   ru   r/   rv   r0   )	r$   r+   Úguess_slopeÚguess_interceptrx   Ú
line_modelr1   ru   rv   r%   r%   r&   Útest_bounds_lsq“   s    
zTestBounds.test_bounds_lsqc           	   	   C   sÈ   d}d}dddœ}t j|||d�}t ¡ }tjtdd�� ||| j| jƒ}W 5 Q R X |j	j
}|jj
}|d	 |d
 d ks|t‚|d	 |d
 d ks”t‚|d	 |d d ks¬t‚|d	 |d d ksÄt‚d S )Nro   rp   rq   rs   rt   rw   z%consider using linear fitting methodsry   r6   ru   r   r<   rv   )r   r{   r   ÚSLSQPLSQFitterr^   r|   r	   r   rT   ru   r/   rv   r0   )	r$   r}   r~   rx   r   r+   r1   ru   rv   r%   r%   r&   Útest_bounds_slsqp¤   s     
 ÿzTestBounds.test_bounds_slsqpc              	   C   sœ  |ƒ }t  t  d¡t  d¡¡\}}ddgddgddgddgdœ}tjdddd	d	d
|d�}t|tjƒspt|tjƒrœt	j
tdd�� ||||| jƒ}W 5 Q R X n||||| jƒ}|jj}|jj}|jj}	|jj}
|d |d d ksät‚|d |d d ksüt‚|d |d d k�st‚|d |d d k�s0t‚|	d |d d k�sJt‚|	d |d d k�sdt‚|
d |d d k�s~t‚|
d |d d k�s˜t‚d S )Nri   rp   ç      &@rf   é   ©Úx_meanÚy_meanÚx_stddevÚy_stddevç      $@rr   ç      @rd   ©r,   r†   r‡   rˆ   r‰   Úthetarx   zThe fit may be unsuccessfulry   r6   r†   r   r<   r‡   rˆ   r‰   )r   Úmeshgridr   r   Ú
Gaussian2DÚ
isinstancer   ÚLevMarLSQFitterÚDogBoxLSQFitterr^   r|   r	   rm   r†   r/   r‡   rˆ   r‰   r0   )r$   r+   ÚXÚYrx   Úgaussr1   r†   r‡   rˆ   r‰   r%   r%   r&   Útest_bounds_gauss2d_lsq¶   sF    üù	 ÿz"TestBounds.test_bounds_gauss2d_lsqc              	   C   s|  t  t  d¡t  d¡¡\}}ddgddgddgddgdœ}tjdddd	d	d
|d�}t ¡ }t ¡ �& tj	ddt
d� ||||| jƒ}W 5 Q R X |jj}|jj}|jj}	|jj}
|d |d d ksÆt‚|d |d d ksÞt‚|d |d d ksöt‚|d |d d k�st‚|	d |d d k�s*t‚|	d |d d k�sDt‚|
d |d d k�s^t‚|
d |d d k�sxt‚d S )Nri   rp   rƒ   rf   r„   r…   rŠ   rr   r‹   rd   rŒ   Úignorez.*The fit may be unsuccessful.*)ÚmessageÚcategoryr6   r†   r   r<   r‡   rˆ   r‰   )r   rŽ   r   r   r�   r   r�   ÚwarningsÚcatch_warningsÚfilterwarningsr	   rm   r†   r/   r‡   rˆ   r‰   r0   )r$   r“   r”   rx   r•   Z	gauss_fitr1   r†   r‡   rˆ   r‰   r%   r%   r&   Útest_bounds_gauss2d_slsqpÞ   sF    üù	
ýz$TestBounds.test_bounds_gauss2d_slsqpN)r[   r\   r]   r'   r^   r_   ra   rb   r€   r‚   r–   r�   r%   r%   r%   r&   rc   v   s   

'rc   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestLinearConstraintsc                 C   sh   t  d¡| _d| j_d| j_ddg| j_t d¡| _|  | j¡| _	t
dƒ}| d¡| _| j	| j | _d S )Nr„   r   rp   g      "@r   r   )r   ÚPolynomial1DrN   Úc0Úc1Zwindowr   r   r   rT   r   r   r    rX   r#   r%   r%   r&   r'     s    z!TestLinearConstraints.setup_classc                 C   sD   d| j j_d| j j_t ¡ }|| j | j| jƒ}t| j|| jƒƒ d S )NT)	rN   r    r.   r¡   r   ZLinearLSQFitterr   rT   r   )r$   Zpfitr1   r%   r%   r&   Útest  s
    

zTestLinearConstraints.testN)r[   r\   r]   r'   r¢   r%   r%   r%   r&   rž     s   rž   c                  C   s2   t jdddd�} d| j_| jddddœks.t‚d S )Nr   r   r<   ©r,   r-   r   TF©r   r   r-   r.   r0   ©r•   r%   r%   r&   Útest_set_fixed_1  s    r¦   c                  C   s*   t jdddddid�} | jjdks&t‚d S )Nr   r   r<   r-   T©r,   r-   r   r.   r¤   r¥   r%   r%   r&   Útest_set_fixed_2$  s    r¨   c                  C   sJ   dd„ } t jdddd�}| |j_|jjdk	s0t‚t|jd tjƒsFt‚d S )	Nc                 S   s
   d| j  S r3   r   ©r1   r%   r%   r&   Útie_amplitude*  s    z&test_set_tied_1.<locals>.tie_amplituder   r   r<   r£   Fr,   )r   r   r,   r5   r0   r�   ÚtypesÚFunctionType©rª   r•   r%   r%   r&   Útest_set_tied_1)  s
    r®   c                  C   s.   dd„ } t jdddd| id�}|jjs*t‚d S )Nc                 S   s
   d| j  S r3   r   r©   r%   r%   r&   rª   4  s    z&test_set_tied_2.<locals>.tie_amplituder   r   r<   r,   ©r,   r-   r   r5   ©r   r   r,   r5   r0   r­   r%   r%   r&   Útest_set_tied_23  s       ÿr±   c                  C   s8   t jdddddid�} d| j_| jddddœks4t‚d S )	Nr   r   r<   r-   Tr§   Fr£   r¤   r¥   r%   r%   r&   Útest_unset_fixed=  s    r²   c                  C   s@   dd„ } t jdddd| id�}d|j_|jdddd	œks<t‚d S )
Nc                 S   s
   d| j  S r3   r   r©   r%   r%   r&   rª   D  s    z&test_unset_tied.<locals>.tie_amplituder   r   r<   r,   r¯   Fr£   r°   r­   r%   r%   r&   Útest_unset_tiedC  s       ÿr³   c                  C   s0   t jdddddid�} | jdddd	œks,t‚d S )
Nr   r   r<   r   ©r   N©r,   r-   r   rx   ©NN©rp   Nr£   )r   r   rx   r0   r¥   r%   r%   r&   Útest_set_bounds_1N  s       ÿýr¸   c                  C   s2   t jdddd�} d| j_| jddddœks.t‚d S )Nr   r   r<   r£   rp   r¶   r·   )r   r   r   Úminrx   r0   r¥   r%   r%   r&   Útest_set_bounds_2Y  s    ýrº   c                  C   s@   t jdddddid�} d | j_d | j_| jddddœks<t‚d S )	Nr   r   r<   r   )r   r   rµ   r¶   r£   )r   r   r   r¹   Úmaxrx   r0   r¥   r%   r%   r&   Útest_unset_boundsc  s    ýr¼   c                  C   sº  G dd„ dt ƒ} | jjdks t‚| jjdks0t‚| jjdks@t‚| jjdksPt‚| jjdks`t‚| ƒ }|jjdksvt‚|jjdks†t‚|jjdks–t‚|jjdks¦t‚|jjdks¶t‚|jdddœksÊt‚|jd	ddœksÞt‚| d
ddddœdd	dœd�}|jjd
k�st‚|jjdk�st‚|jjdk�s0t‚|jjdk�sBt‚|jjdk�sTt‚|jjdk�sft‚|jjdk�sxt‚|jjd	k�sŠt‚|jdddœk�s t‚|jdd	dœk�s¶t‚dS )z×Regression test for https://github.com/astropy/astropy/issues/2396

    Ensure that default constraints defined on parameters are carried through
    to instances of the models those parameters are defined for.
    c                   @   s0   e Zd Zedd�Zedddd�Zedd„ ƒZdS )	z)test_default_constraints.<locals>.MyModelr<   ©Údefaultr   T)r¾   r¹   r.   c                 S   s   | | | S rS   r%   ©r   ÚaÚbr%   r%   r&   Úevaluatey  s    z2test_default_constraints.<locals>.MyModel.evaluateN©r[   r\   r]   r   rÀ   rÁ   ÚstaticmethodrÂ   r%   r%   r%   r&   ÚMyModelu  s   
rÅ   r<   r   r´   Tr¶   ©rÀ   rÁ   FrB   r„   )r<   N)r   N)rx   r.   r   N)	r   rÀ   r¾   r0   rÁ   r¹   rx   r.   r/   )rÅ   Úmr%   r%   r&   Útest_default_constraintsn  s<       ÿrÈ   z#ignore:divide by zero encountered.*r+   c                 C   sÎ   | t jkr t ¡ dkr t d¡ | ƒ } tjdddddidd	id
�}t 	ddd¡}t 
|d  d ¡}| |||ƒ}|jdks~t‚|jdksŒt‚|jdksšt‚d|j_| |||ƒ}|jdks¼t‚|jdksÊt‚dS )zÂ
    Regression test for https://github.com/astropy/astropy/issues/2235

    Currently doesn't test that the fit is any *good*--just that parameters
    stay within their given constraints.
    )Úx86_64Úarm64z\DogBoxLSQFitter can to be unstable on non-standard platforms leading to random test failuresrB   r„   r<   r-   ©r„   é   r,   T)r,   r-   r   rx   r.   r   r   r   rÌ   ç      @FN)r   r’   ÚplatformÚmachiner^   Úxfailr   r   r   rj   r>   r-   r0   r,   r.   )r+   rÇ   r   rT   Úfitted_1rP   r%   r%   r&   Ú)test_fit_with_fixed_and_bound_constraintsœ  s0    

ÿÿûrÒ   c           	      C   sÎ   | ƒ } G dd„ dt ƒ}|ddd�}t d¡}||ƒ}|ƒ }| |||ƒ}t |jd¡sXt‚t |jd¡sjt‚|ƒ }d|j_| |||ƒ}t |jd¡s–t‚t |jd¡s¨t‚| tj	krÊt 
| jd d	k¡sÊt‚d
S )zö
    Regression test for https://github.com/astropy/astropy/issues/2400

    Checks that bounds constraints are obeyed on a custom model that does not
    define fit_deriv (and thus its Jacobian must be estimated for non-linear
    fitting).
    c                   @   s,   e Zd Zedd�Zedd�Zedd„ ƒZdS )zBtest_fit_with_bound_constraints_estimate_jacobian.<locals>.MyModelr<   r½   r   c                 S   s   ||  | S rS   r%   r¿   r%   r%   r&   rÂ   Ù  s    zKtest_fit_with_bound_constraints_estimate_jacobian.<locals>.MyModel.evaluateNrÃ   r%   r%   r%   r&   rÅ   Õ  s   

rÅ   g      ø?éýÿÿÿrÆ   r   )éþÿÿÿr   Zfjacr   N)r   r   r   ZallcloserÀ   r0   rÁ   rx   r   r‘   ÚanyZfit_info)	r+   rÅ   Zm_realr   rT   rÇ   rÑ   Úm2rP   r%   r%   r&   Ú1test_fit_with_bound_constraints_estimate_jacobianÉ  s     


r×   c              !   C   s‚  | ƒ } ddddddddd	d
dddddddgddddddddddddddd d!d"gd#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3gd4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDgdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUgdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfgdgdhdidjdkdldmdndodpdqdrdsdtdudvdwgdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆgd‰dŠd‹dŒdKd�dŽd�d�d‘d’d“d”d•d–d—d˜gd™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d§d¨d©gdªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸d¹dºgd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉdÊdËgdÌdÍdÎdÏdÐdÑdÒdÓdÔdÕdÖd×dØdÙdÚdÛdÜgdÝdÞdßdàdádâdãdädådædçdèdédêdëdìdígdîdïdðdñdòdódôdõdöd÷dødùdúdûdüdýdþgdÿ�d �d�d�d�d�d�d�d�d�d	�d
�d�d�d�d�dg�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d gg}t j�d!�d!�d"�}t| tjƒ�sàt| tjƒ�rìt �d#¡ tj	d �d$…d �d$…f \}}| ||||ƒ}t
|jj|jjg�d%�d&g�d'�d(� t
|jj�d)ƒ t
|jj�d*�d+�d(� t
|jj�d,�d-�d(� d S (.  Ng
×£p=*KÀg…ëQ¸ž+@gfffffFAÀgfffffæ!@g…ëQ¸öaÀgìQ¸…ëé¿g      M@g�Âõ(\�-ÀgÍÌÌÌÌœiÀg…ëQ¸Þ>Àg)\�Âõ_ÀgR¸…ëá^@g¤p=
×³Q@g…ëQ¸^[Àgáz®G±ZÀgR¸…ëÑA@g
×£p=J2@g\�Âõ(Œ_Àg¸…ëQHVÀgq=
×£�O@g…ëQ¸^I@g
×£p=êN@g�Âõ(\3@gÍÌÌÌÌlP@g\�Âõ(|S@g)\�ÂõH]@g¤p=
×ka@g)\�ÂõHJ@gáz®G�m@g¤p=
×#Y@g)\�ÂõHn@g¤p=
×“fÀgq=
×£@c@g�Âõ(\ ÀgìQ¸…ÛV@gÍÌÌÌÌX@gö(\�Â¥]ÀgÃõ(\�ÒeÀg�Âõ(\]Àg×£p=
T@g¤p=
×³UÀg=
×£p=-@gq=
×£ÐS@g=
×£p=@g…ëQ¸~K@g®GázBp@g=
×£paÀg…ëQ¸Å4Àg33333cSÀgq=
×£Ðe@g…ëQ¸Í`@gq=
×£ð@@g…ëQ¸…@g…ëQ¸ÅE@g�Âõ(\¿Q@gHáz®wQ@g\�Âõ(ü@@g     q@g…ëQ¸f@g®Gáz>i@g=
×£pu@gq=
×£Hu@gq=
×£xd@g×£p=
‡cÀg=
×£p}5@g…ëQ¸�bÀg¸…ëQ¸W@gfffffFE@gR¸…ë‘T@g=
×£p5f@g�Âõ(\Ï:@g)\�Âõ¨1@gHáz®çG@g®Gáz.?ÀgHáz®v@g{®Gáh‚@g\�Âõ(J�@g33333Kn@gR¸…ëÁ{@gq=
×£@g@g�Âõ(\—a@gÍÌÌÌÌÌR@g…ëQ¸þUÀg{®Gá:2ÀgHáz®×d@gö(\�ÂE\@gáz®G�BÀg�Âõ(\Ç`@g)\�ÂõøQ@g¸…ëQøZ@g®GázÖh@g®Gázq@g×£p=
•ƒ@gfffff>�@g{®Gá�@gÍÌÌÌÌ"‚@gÍÌÌÌÌu@gš™™™™ya@g®Gáz´c@g¸…ëQ¸ú¿g=
×£pý:ÀgÍÌÌÌÌ¬B@g®GázžZ@g¸…ëQø?@g�Âõ(\?U@gÃõ(\�r_Àg     `h@gfffffÚ~@g…ëQ¸ïŠ@g®GázbŒ@g33333‰@g®Gázhˆ@g…ëQ¸¤€@g…ëQ¸Jy@gìQ¸…Ë\@g×£p=
Ç[@g®Gáz<@g33333ƒ^@g®Gáz.MÀg¤p=
×óf@g\�Âõ(œF@gR¸…ëqD@g…ëQ¸å[@g)\�Âõœz@g®Gázt@g…ëQ¸�@g\�Âõ(‹@g
×£p=†ˆ@gÍÌÌÌÌÚ†@g®Gázƒ@gÃõ(\�Vy@gfffff¦3ÀgÍÌÌÌÌÌQ@g     �aÀg
×£p=b@g=
×£p=9@g\�Âõ($a@gÍÌÌÌÌ¼UÀgHáz®Ç.@g®Gáz„f@g®GázØ…@g33333'�@gR¸…ë³�@g{®Gáp‰@g=
×£p=„@g®GázÐ|@g¸…ëQ8o@g33333³W@gö(\�Â•D@g�Âõ(\�ò¿g¸…ëQøf@g®Gáz†g@gR¸…ë±A@gìQ¸…ë:@g)\�ÂõÐh@g¤p=
×ãBÀg=
×£p÷ƒ@gáz®Gƒƒ@g¸…ëQ€‰@g
×£p=‹@g     È…@g)\�Âõ¸~@g�Âõ(\£w@gö(\�Âu2Àgq=
×£pPÀgfffff†X@gR¸…ëÑ(@gìQ¸…‹YÀg33333Ã]@g�Âõ(\×g@g®Gázt_@g33333ws@g=
×£pw@g…ëQ¸S�@gR¸…ëe|@gš™™™™�‡@g{®Gá‡@g=
×£pó€@gHáz®‡g@gìQ¸…Ûj@g…ëQ¸=k@g¤p=
×£@gö(\�Âu;@g®Gáz„eÀg×£p=
—TÀg¤p=
×TÀgR¸…ë±KÀgìQ¸…T@g×£p=
³p@g33333#q@g)\�Âõ0e@gq=
×£pt@gfffff‚~@g®GázX{@g\�Âõ(,l@g®Gázžk@g
×£p=
@g®GázWÀg×£p=
×C@g\�Âõ(œL@g…ëQ¸b@g¤p=
×Y@g{®GázA@g×£p=
O`@gìQ¸…ëÀgfffff&G@g�Âõ(\_Y@gq=
×£À\@g\�Âõ(,k@gÃõ(\�:o@gš™™™™ù\@g×£p=
×U@g¤p=
×sZ@g®GázîGÀgáz®Gá#ÀgR¸…ë‘TÀgfffffb@g\�Âõ(ÜT@g=
×£p}7@gÍÌÌÌÌüf@g¸…ëQ˜[Àg…ëQ¸þ\Àg…ëQ¸®n@gq=
×£àY@gö(\�Âío@g×£p=
od@gÃõ(\�BL@g)\�Âõè@@gáz®G¡@ÀgÃõ(\�Ò[Àg…ëQ¸V@gfffff&h@gìQ¸…+YÀgáz®Gá.@g®Gáz”U@gq=
×£p:Àg33333ChÀg×£p=
W[@gq=
×£ X@g)\�Âõ8_Àgffffff0ÀgHáz®U@gHáz®·\@gš™™™™iPÀgÃõ(\�BMÀg¸…ëQ87Àg®GázNE@g…ëQ¸b@g{®Gá:jÀgÃõ(\�’[@gHáz®—P@gfffffv]Àg�Âõ(\wbÀgq=
×£ ^Àgáz®Gá%@g=
×£pýF@gHáz®‡]@g¤p=
×CGÀg)\�ÂõRÀg®GázŽRÀg¸…ëQ85@gö(\�ÂõØ?gR¸…ë�U@g¸…ëQø7@gö(\�ÂµFÀgš™™™™(@gìQ¸…eÀg
×£p=Ê;@gHáz®çN@g®GázU@g
×£p=Ê<@g®GázNG@g×£p=
ZÀg{®GáZL@gfffff¶VÀgÃõ(\�‚0ÀgÍÌÌÌÌœPÀg{®GáªaÀg¸…ëQ¸î?g
×£p=
M@gq=
×£Ôq@g®Gáz´NÀg…ëQ¸"Àg®Gáz6tÀgÍÌÌÌÌ,M@g)\�ÂõT@g®GázNYÀgÍÌÌÌÌ4b@é   )r†   r‡   z.TRFLSQFitter seems to be broken for this test.é   g³[ïë'ÆŽ@gú Siõx	@gTäqs*¹>r7   g!0N%'Ë@g£ (º#ý@g�íµ ÷Æ >gUò¥1Š¾ÿ?g�íµ ÷ÆÀ>)r   r�   r�   r   ÚTRFLSQFitterr’   r^   rÐ   r   Zmgridr   r,   r/   r‰   r†   r‡   rˆ   )r+   r¢   Zg_initrT   r   Zg_fitr%   r%   r&   Útest_gaussian2d_positive_stddevö  s|          ÿ       ÿ       ÿ       ÿ       ÿ       ÿ       ÿ       ÿ        ÿ       ÿ       ÿ       ÿ       ÿ        ÿ       ÿ"       ÿ$       ÿß& ÿ
ýrÛ   z&ignore:Model is linear in parameters.*c              	   C   s,  ddl m} | ƒ } t dddddd¡}t d	d
d¡}t d	d
d¡}t ||¡\}}|||ƒ}t |j¡}|j	|_	|dƒ��¨ tj
 |j¡}	|j	|	_	| ||||d|	  |d�}
t|
j|jdd� | ||||d|	  dd�}
t|
j|jdd� d|j_| ||||d|	  |d�}
t|
j|jdd� | ||||d|	  dd�}
t|
j|jdd� tjddddd�}|||ƒ}| ||||d|	  dd�}
t|
j|jdd� | ||||d|	  |d�}
t|
j|jdd� d|j_| ||||d|	  |d�}
t|
j|jdd� | ||||d|	  dd�}
t|
j|jdd� W 5 Q R X dS )zIssue #6403r   )ÚNumpyRNGContextgffffff$@g333333@rÌ   r   ç333333ó?gffffffö?éÿÿÿÿé   éÈ   r   )Úweightsgš™™™™™©?r7   NTr<   gš™™™™™	@)Zc0_0Úc1_0Úc0_1)Zastropy.utilsrÜ   r   r�   r   rj   rŽ   Zonesrh   ÚshaperJ   rK   r   rV   rˆ   r.   ZPolynomial2Drâ   )r+   rÜ   Zgauss2dr“   r”   r   rT   ÚzÚwr    rÇ   rO   r%   r%   r&   Útest_2d_model9  s@    

rç   c                  C   sX   t  d¡} t  ddd¡| j_| j d¡dks0t‚t  dd¡| j_| j d¡dksTt‚d S )Nr<   gffffff@r   r   gš™™™™™É?rÝ   )r   rŸ   r   r    Zpriorr0   r{   Z	posteriorr©   r%   r%   r&   Útest_set_prior_posteriorj  s
    
rè   c                  C   s²   t  ¡ } t  d¡}d| j_| | }|jddddddœks<t‚d|j_|jddddddœks^t‚d|jd	< |jddddddœks‚t‚d
| jd< | | }|jddd
dddœks®t‚d S )Nr<   )r   rB   r¶   )rp   rÍ   )Zamplitude_0Zmean_0Ústddev_0rã   Zc1_1)r<   rB   )rf   rÍ   rË   ré   )r<   rÌ   r   )r   r   rŸ   r   rx   r0   ré   )Úgr@   rÇ   r%   r%   r&   Útest_set_constraintss  sH    
û	û	
û	
ûrë   )0rÎ   r«   rš   Únumpyr   r^   Znumpy.randomr   Znumpy.testingr   Zastropy.modelingr   r   Zastropy.modeling.corer   Zastropy.modeling.parametersr   Z"astropy.utils.compat.optional_depsr   Zastropy.utils.exceptionsr	   r‘   rÚ   r’   rb   r
   r_   r`   rc   rž   r¦   r¨   r®   r±   r²   r³   r¸   rº   r¼   rÈ   rœ   ra   rÒ   r×   rÛ   rç   rè   rë   r%   r%   r%   r&   Ú<module>   s^   ü[ 


.
*+A
.	