
    IR-e]                     r   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
j1        2                    e% d'(           G d) d*                      Z3e
j1        4                    d+d,  e5e*           e5e+          z   D                       d-             Z6d. Z7d/ Z8d0 Z9e
j1        4                    d1e!eee"eef          d2             Z:e
j1        2                    e% d'(          e
j1        4                    d3e0          d4                         Z;d5 Z<d6 Z=d7 Z>dS )8z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@)	interceptsloper)   )r   r   c   R   )x_domainy_domain)c0_0c1_0c0_1c1_1r/   )r   )r/   r0   r1   zrequires scipy)reasonc                      e Zd ZdZd Zej                            d e e	 e
ee          d                              d             Zej                            d e e	 e
ee          d                              ej                            de          d                         Zej                            d e e	 e
ee          d                              d	             Zej                            d e e	 e
ee          d                              ej                            de          d
                         ZdS )TestFittingz*Test linear fitter with polynomial models.c                    d| _         d| _        t          j        ddd          | _        t          j        d dd df         \  | _        | _        t          j        	                    d          }|
                    | j        j                  dz  | _        |
                    | j        j                  | _        | j        j        | j        _        t          j                    | _        d S )Nd   r   r   S   r   皙?)NMnplinspacex1mgridy2x2randomdefault_rngstandard_normalsizen1n2shaper   LinearLSQFitterlinear_fitter)selfrsns     Flib/python3.11/site-packages/astropy/modeling/tests/test_polynomial.pysetup_classzTestFitting.setup_classm   s    +aS))8DSD#2#I.i##A&&%%dgl33c9%%dgl33$466    )model_classr'   )key)FTc                    t           |         }i }|                    |d                    |                    |d                    |r|                    |d                     ||d         i |} || j                  }t          j                    5  t          j        ddt                     |                     || j        || j        z             }ddd           n# 1 swxY w Y   |re|d         	                    d	d          }|rC|
                                D ]0\  }	}
|d         |	         }t          ||	          j        |k    sJ /dS dS t          |j        |j        d
           dS z!Test fitting with LinearLSQFitterr%   r&   r'   r$   ignorez!The fit may be poorly conditioned)messagecategoryNr#   r   atol)linear1dupdater>   warningscatch_warningsfilterwarningsr   rJ   rF   getitemsgetattrvaluer   r&   )rK   rP   r'   
model_argsr%   modely1	model_linr#   paramra   expecteds               rM   test_linear_fitter_1Dz!TestFitting.test_linear_fitter_1D{   s    k*
j*+++j./// 	5MM*]3444Z/:6::U47^^$&& 	I 	I#<+   
 **5$'2<HHI	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I  		N }-11'4@@E G$)KKMM G GLE5),7>H"9e44:hFFFFFG GG G I0%2BMMMMMMs   AC!!C%(C%fitterc                     |            }t           |         }i }|                    |d                    |                    |d                    |r|                    |d                     ||d         i |} || j                  }t          j        t
          d          5   ||| j        || j        z             }ddd           n# 1 swxY w Y   |re|d                             dd          }	|	rC|	                                D ]0\  }
}|d         |
         }t          ||
          j
        |k    sJ /dS dS t          |j        |j        d	
           dS z,Test fitting with non-linear LevMarLSQFitterr%   r&   r'   r$   Model is linear in parametersmatchNr#   r   rW   )rY   rZ   r>   pytestwarnsr   rF   r^   r_   r`   ra   r   r&   )rK   rP   r'   ri   rb   r%   rc   rd   
model_nlinr#   rf   ra   rg   s                rM   test_non_linear_fitter_1Dz%TestFitting.test_non_linear_fitter_1D   s    k*
j*+++j./// 	5MM*]3444Z/:6::U47^^\,4STTT 	> 	>twTW==J	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>  	O}-11'4@@E H$)KKMM H HLE5),7>H":u55;xGGGGGH HH H J153C#NNNNNNs   &CCCc                    t           |         }i }|                    |d                    |                    |d                    |r|                    |d                     ||d         i |} || j        | j                  }t	          j                    5  t	          j        ddt                     |                     || j        | j        || j	        z             }ddd           n# 1 swxY w Y   |re|d         
                    d	d          }|rC|                                D ]0\  }	}
|d         |	         }t          ||	          j        |k    sJ /dS dS t          |j        |j        d
           dS rS   )linear2drZ   rA   r@   r[   r\   r]   r   rJ   rG   r^   r_   r`   ra   r   r&   )rK   rP   r'   rb   r%   rc   zre   r#   rf   ra   rg   s               rM   test_linear_fitter_2Dz!TestFitting.test_linear_fitter_2D   s    k*
j*+++j./// 	5MM*]3444Z/:6::E$'47##$&& 	Q 	Q#<+   
 **5$'47AKPPI	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q  	N}-11'4@@E G$)KKMM G GLE5),7>H"9e44:hFFFFFG GG G I0%2BMMMMMMs   AC--C14C1c                     |            }t           |         }i }|                    |d                    |                    |d                    |r|                    |d                     ||d         i |} || j        | j                  }t	          j        t          d          5   ||| j        | j        || j        z             }ddd           n# 1 swxY w Y   |re|d                             dd          }	|	rC|		                                D ]0\  }
}|d         |
         }t          ||
          j        |k    sJ /dS dS t          |j        |j        d	
           dS rk   )rt   rZ   rA   r@   ro   rp   r   rG   r^   r_   r`   ra   r   r&   )rK   rP   r'   ri   rb   r%   rc   ru   rq   r#   rf   ra   rg   s                rM   test_non_linear_fitter_2Dz%TestFitting.test_non_linear_fitter_2D   s    k*
j*+++j./// 	5MM*]3444Z/:6::E$'47##\,4STTT 	F 	FtwTWEEJ	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F  	O}-11'4@@E H$)KKMM H HLE5),7>H":u55;xGGGGGH HH H J153C#NNNNNNs   ,!CC CN)__name__
__module____qualname____doc__rN   ro   markparametrizelistr   sortedrY   strrh   fittersrr   rt   rv   rx   r(   rO   rM   r5   r5   i   s       44	7 	7 	7 [&WWVVH#...>>?? N N	 NB [&WWVVH#...>>??  [Xw//O O 0/	 
O6 [&WWVVH#...>>?? N N	 N> [&WWVVH#...>>??  [Xw//O O 0/	 
O O OrO   r5   rP   c                     g | ]}|S r(   r(   ).0clss     rM   
<listcomp>r     s    CCCCCCCCrO   c                    d| j         v rd}nd}t          | t                    rd}t          | t                    rd}nd} | |d|dii}|j        |         du sJ t          ||          j        du sJ t          | t                    r>t          |          d	| j          d
k    sJ t          |          d| j          dk    sJ dS | j         dk    r,t          |          dk    sJ t          |          dk    sJ dS | j         dk    r,t          |          dk    sJ t          |          dk    sJ dS t          |          d	| j          dk    sJ t          |          d| j          dk    sJ 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
    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.)>zModel: 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.)>zModel: 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)ry   
issubclassr	   r   r#   r`   reprr   )rP   rf   degreems       rM   %test_polynomial_init_with_constraintsr     sH    {###+x(( +233 V1E4=11A75>T!!!!1e"d****+233 ;GG<;' < < << < < <
 FF 	? 4 	? 	? 	? 	? 	? 	? 	? 	? 	? >11Q . . . . . A 4 4 4 4 4 4 4 !Z//77BBBBBA & & & & & & & 77Q+"6QQQQQQQA "K$8 " " " " " " " " "rO   c                     t          t          j                            dd                    } t          j                            |           }|d         }|d         }t          j        |          }t          di |d         }t          di |d         }|
                    d          }|
                    d          }t          ||g||||          }	d	d	g}
d	|z
  d	|z
  g}|                    |
gd	          d
         |z
  }t           |	d	d	          |           d|	_        t           |	d	d	          |           t           |	d	d	          |           t          |	          dk    sJ t!          j        dd          5  t%          |	          dk    sJ 	 ddd           n# 1 swxY w Y   |	j                            d	          dk    sJ d}d	|	j        _        t-          j        t0          |          5  |	j                            d	           ddd           n# 1 swxY w Y   d|	j        _        t-          j        t0          |          5  |	j                            d	           ddd           dS # 1 swxY w Y   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_widthP   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
N   z'Degree of polynomial must be 2< deg < 9rm   r   r(   )r   ospathjoinr   Headerfromtextfiler   WCSdictpopr   sip_pix2focr   inputsr   r   set_tempr   sip1d_aget_num_coefforderro   raises
ValueError)	test_filehdrcrpix1crpix2wobja_parsb_parsa_orderb_ordersipcoords
rel_coordsastwcs_resultMESSAGEs                 rM   test_sip_hstr   b  sW    &bgll6=&I&IJJI
+
"
"9
-
-C]F]F73<<DCJFCJFjj##Gjj##G
vv&&
A
ACVFf*a&j)J$$fXq11!4zAMCC1II}--- CJCC!qMMM=111CCQKKK/// 	S		 / 	/ 	/ 	/ 	/ 
{B	'	' +
 +
3xx'`)
 )
 )
 )
 )
+
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
^ ;$$Q''1,,,,7GCK	z	1	1	1 % %!!!$$$% % % % % % % % % % % % % % %CK	z	1	1	1 % %!!!$$$% % % % % % % % % % % % % % % % % %s6   F&&F*-F*:H!!H%(H%I;;I?I?c                     t          t          j                            dd                    } t          j                            |           }|d         }|d         }t          j        |          }t          di |d         }t          di |d         }t          di |d         }t          di |d         }|
                    d	          }	|
                    d
          }
|
                    d          }|
                    d          }|d= |d= ddg}d|z
  d|z
  g}t          ||g|	|
||||||	  	        }|                    |gd          }|                    |d          d         }t           || |d         |z
             t           |j        |d          |d         z   |z
  ||z
             t!          |j                  dk    sJ t#          |j                  dk    sJ dS )z0Test forward and inverse SIP against astropy.wcsr   zirac_sip.hdrr   r   r   r   zAP_*zBP_*r   r   AP_ORDERBP_ORDERA_DMAXB_DMAX   )ap_orderap_coeffbp_order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
Nr(   )r   r   r   r   r   r   r   r   r   r   r   r   r   sip_foc2pixr   inverser   r   )r   r   r   r   r   r   r   ap_parsbp_parsr   r   r   r   pixrel_pixr   focnewpixs                     rM   test_sip_iracr     s6    &bgll6>&J&JKKI
+
"
"9
-
-C]F]F73<<DCJFCJF!!S[!!G!!S[!!Gjj##Gjj##G{{:&&H{{:&&Hxx*CV|S6\*G
	
 
 
C 

C5!
$
$Cc1%%a(FCCIs1v/000KCKQ(3q61G;Vc\JJJ 	S[1	1 	1 	1 	1 	CK M 	M 	M 	M 	M 	M 	MrO   c                     t          ddgdd          } t          | j        j        g d           t          | j        j        g d           d}t          j        t          |          5  | j         d d d            n# 1 swxY w Y   t          ddgddd          } | j        j	        dk    sJ | j        j	        dk    sJ d S )	Nr      r   )        r   r   z*SIP inverse coefficients are not availablerm   )n_modelsr   )
r   r   r   r&   sip1d_bro   r   NotImplementedErrorr   model_set_axis)r   r   s     rM   test_sip_no_coeffr     s   
r2h1

CCK*MMM:::CK*MMM:::;G	*'	:	:	:                 r2h1q
)
)
)C;%****;%******s   )A==BBr   c                    d}| j         dk    r1 | dd          } |d          dk    sJ t          j         |t          j        d                    t          j        d          k              sJ t          j        ddd          }dt          j                            ddt          |                    z   } | d          }t          j
                    } ||||          }t          |j        dd	           t          j        t          |
          5   | d           ddd           dS # 1 swxY w Y   dS | j         dk    rt!          | t"                    r{ | ddd          }t          j        g d          }	t          j        ddg          }
t&          j                            t,          dd|	|
ft'          j                    f          5  t          j        t          d
          5  |                    t'          j                    t'          j                               ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j        t          |
          5   | dd           ddd           n# 1 swxY w Y   t          j        t          |
          5   | dd           ddd           n# 1 swxY w Y   nL | dd          }t          j        t          |
          5   | d           ddd           n# 1 swxY w Y    |dd          dk    sJ t          j         |t          j        d          t          j        d                    t          j        d          k              sJ t          j        ddddddf         \  }}dt          j                            dd|j                  z                       dd          }t!          | t"                    r | dd          }n | d          }t          j
                    } |||||          }t          |j        dd	           dS 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   )r   r      r7   r9   r   rW   rm   Nr   )x_degreey_degreer/   )r   r   r   prepare_inputsT)autospecreturn_valuez,Expected input arrays to have the same shaper   r   )r   r/   y              Y@)n_inputsr<   allzerosonesr=   rB   uniformlenr   rI   r   r   ro   r   r   r   r   arraymkpatchobjectr   	MagicMockr   r?   rE   reshaper/   )r   r   p1xyp1_initri   p1_fitp2abru   p2_initp2_fits                 rM   test_zero_degree_polynomialr     s    >G
|qSa   r!uuzzzzvbb!oo344444K1c""	!!!S#a&&111#Q---(**A&& 		140000 ]:W555 	 	CrNNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 				c.// 	a!!444B ##A!Q  A  !fblnn5	 !   	F 	F ]&U   F F %%blnnblnnEEEF F F F F F F F F F F F F F F	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F z999 - -R!,,,,- - - - - - - - - - - - - - -z999 - -Q,,,,- - - - - - - - - - - - - - - AA&&&B z999  2               r!Qxx1}}}}vbb!bhqkk22bgajj@AAAAAx!D!Ad(*+1""1c16222;;CEEc.// 	$c1q111GGcmmmG(**Aq))QT222222W 
	s~   D33D7:D7I59H:.I:H>	>IH>	III7JJJ7KKKLL"%L"ri   c                 &    |             } t           j        ddddf         \  }}||z   }t          dd          }t          j        t
          d          5   | ||||          }ddd           n# 1 swxY w Y   t          d          t          dd          z  }d|_        d|_        t          j        t
          d          5   | ||||          }ddd           n# 1 swxY w Y   t           |||           |||          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   rl   rm   NTgdy=rW   )
r<   r?   r   ro   rp   r   r
   fittablelinearr   )ri   r   r   ru   simple_model
simple_fitcompound_modelcompound_fits           rM   )test_2d_orthopolynomial_in_compound_modelr   `  s    VXXF8AaC1HDAq	AAq!$$L	(0O	P	P	P 3 3VL!Q22
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 a[[;q!#4#44N"N N	(0O	P	P	P 7 7vnaA667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 JJq!$$ll1a&8&8uEEEEEEs$   A11A58A5C  C$'C$c                     t          d          } |                     ddg          dk    sJ |                     dddg          dk    sJ |                     dg d          dk    sJ |                     dg d	          d
k    sJ d S )Nr   r   r   r         r   r   r      )r   r   r   r   )r   clenshaw)rc   s    rM   test_Hermite1D_clenshawr  {  s    QE>>!aS!!Q&&&&>>!aV$$****>>!YYY''2---->>!\\\**b000000rO   c                  ~   t          dd          } d}t          j        t          |          5  |                     t          j        d          t          j        d                     d d d            n# 1 swxY w Y   t          dd          } |                     t          j        d          t          j        d                    t          j        d          dt          j        d          ddddk    sJ t          dd          } |                     t          j        d          t          j        d                    t          j        d          t          j        d          d	t          j        d          t          j        d          d	d
k    sJ t          dd          } |                     t          j        d          t          j        d                    t          j        d          t          j        d          d	t          j        d          t          j        d          d	d
k    sJ d S )Nr   r   z Subclasses should implement thisrm   r   g       @g      )r   r   r   r   r   r   g      ?)r   r   r   r   r   r   )
r   ro   r   r   _fcacher<   
asanyarrayr   r   r   rc   r   s     rM   test__fcacher    s[   Q777E1G	*'	:	:	: : :bmA&&a(8(8999: : : : : : : : : : : : : : : q1---E==q))2=+;+;<<==A A     A...E==q))2=+;+;<<====A A     Q///E==q))2=+;+;<<====A A      s   ;A66A:=A:c                     t          dd          } d}t          j        t          |          5  |                     t          j        ddg          t          j        g d                     d d d            n# 1 swxY w Y   t          dd          } t          j        t          |          5  |                     t          j        ddg          t          j        g d                     d d d            n# 1 swxY w Y   t          dd          } t          j        t          |          5  |                     t          j        ddg          t          j        g d                     d d d            n# 1 swxY w Y   t          d          } d}t          j        t          |          5  |                     t          j        ddg          t          j        g d                     d d d            d S # 1 swxY w Y   d S )	Nr   r   z x and y must have the same shaperm   r   r  r   z$Expected x and y to be of equal size)
r   ro   r   r   	fit_derivr<   r   r   r   r   r
  s     rM   test_fit_deriv_shape_errorr    s   q1---E1G	z	1	1	1 ? ?!Q(("(999*=*=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Q///E	z	1	1	1 ? ?!Q(("(999*=*=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A...E	z	1	1	1 ? ?!Q(("(999*=*=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? """E5G	z	1	1	1 ? ?!Q(("(999*=*=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sG   ?A::A>A>1?C<<D D 3?E>>FF6?HH	H)?r|   r   unittest.mockmockr   r[   	itertoolsr   numpyr<   ro   numpy.testingr   astropyr   r   
astropy.ior   astropy.modelingr   "astropy.modeling.functional_modelsr	   astropy.modeling.mappingsr
   astropy.modeling.polynomialr   r   r   r   r   r   r   r   r   r   r   "astropy.utils.compat.optional_depsr   astropy.utils.datar   astropy.utils.exceptionsr   rY   rt   LevMarLSQFitterTRFLSQFitterLMLSQFitterDogBoxLSQFitterr   r}   skipifr5   r~   r   r   r   r   r   r   r   r  r  r  r(   rO   rM   <module>r"     sv   # " 				                   ) ) ) ) ) )               $ $ $ $ $ $ 7 7 7 7 7 7 . . . . . .                          9 8 8 8 8 8 4 4 4 4 4 4 7 7 7 7 7 7 aW% C@@$.	  aW% C@@$.	  aW% C@@$.	  aW% C@@$.	  $'$77+t!45	 3F  !2wQG<<"AsCHH&$0	   !2wQG<<"AsCHH&$0	   !2wQG<<"AsCHH&$0	  "As;;&$0	 '8 	 	M*:;;WO WO WO WO WO WO WO <;WOt CC44>>DDNN#BCCC X X XvX% X% X%vB B BJ+ + + 	;
L+zR I3 I3	 I3X 	M*:;;7++F F ,+ <;F21 1 1" " "J? ? ? ? ?rO   