
    IR-e$                        d 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 dd
lmZ ej        ej        ej        ej        gZd Z e	j                     e	j                    z    e	j                    z    e	j                     e	j                    z    e	j                    z   e	j                     e	j                    z    e	j                    z  gZ  G d de          Z!d Z"ej#        $                    e d          ej#        %                    de          d                         Z&ej#        $                    e d          ej#        %                    de          d                         Z'ej#        $                    e d          ej#        %                    de          d                         Z(ej#        $                    e d          ej#        %                    de          d                         Z)ej#        $                    e d          ej#        %                    de          d                         Z*ej#        $                    e d          ej#        +                    d          ej#        +                    d          ej#        %                    de           ej#        %                    de          d                                                             Z,ej#        -                    d          ej#        %                    de          d                         Z.ej#        $                    e d          ej#        +                    d          ej#        %                    d e"                      ej#        %                    de          d                                                 Z/dS )z>
Tests that relate to fitting models with quantity parameters
    N)units)fittingmodels)Fittable1DModel)	Parameter)assert_quantity_allclose)
UnitsError)NumpyRNGContext)	HAS_SCIPYc                  X   t          d          5  t          j        ddd          } dt          j        d| dz
  dz  z  d	z            z  }|t          j                            d
d| j                  z  }d d d            n# 1 swxY w Y   | t          j        z  } |t          j	        z  }| |fS )N90  g      g      @i     g      ?   g|Gz?g        g?)
r
   nplinspaceexprandomnormalshapeumJy)xys     Nlib/python3.11/site-packages/astropy/modeling/tests/test_quantities_fitting.py_fake_gaussian_datar      s    			 1 1Kc4((tq3w1n,v5666	RYc30001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 	
ACA	ADAa4Ks   A#A??BBc                        e Zd ZdZdZ ed          Z ed          Zeef fd	Ze	d             Z
ed             Zd Z xZS )CustomInputNamesModel         ?)defaultc                 j    t                                          ||           d| _        d| _        d S )Nabinnout)super__init__inputsoutputs)selfr%   r&   	__class__s      r   r,   zCustomInputNamesModel.__init__9   s2    1"""    c                     || z  |z   S N )r(   r%   r&   s      r   evaluatezCustomInputNamesModel.evaluate>   s    3w{r1   c                 l    | j         j        | j        j        d S d| j        j        | j         j        z  iS )Nr(   )r%   unitr&   )r/   s    r   input_unitsz!CustomInputNamesModel.input_unitsB   s2    6;46;#6446;455r1   c                 6    |d         |d         z  |d         dS )Nr*   r(   r$   r4   r/   inputs_unitoutputs_units      r   _parameter_units_for_data_unitsz5CustomInputNamesModel._parameter_units_for_data_unitsI   s%    !%(;u+==LQVDWXXXr1   )__name__
__module____qualname__n_inputs	n_outputsr   r%   r&   r,   staticmethodr5   propertyr8   r=   __classcell__)r0   s   @r   r   r   2   s        HI	#A	#Aa            
   \ 6 6 X6Y Y Y Y Y Y Yr1   r   c                     t          j        dt          j        z  t          j        z  dt          j        z            } d| _        d| _        t          dt          j        z  t          j        z  dt          j        z            }| |gS )Nr    r   r'   r)   )r   Linear1Dr   r   sr-   r.   r   )linecustom_names_models     r   models_with_custom_namesrK   M   sa    ?1qs7QS=!ac'22DDKDL.q13w}a!#gFF$%%r1   zrequires scipy)reasonfitterc                 T    |             } t                      \  }}t          j                    } | |||          }t          |j        dt
          j        z  d           t          |j        dt
          j        z  d           t          |j	        dt
          j        z  d           d S )Nr   皙?rtolr   皙?
r   r   
Gaussian1Dr   	amplituder   r   meanr   stddevrM   r   r   g_initgs        r   test_fitting_simpler[   V   s     VXXF  DAq   Fvq!A Q[!ad(>>>>QVS13YT::::QXsQSyt<<<<<<r1   c                     |             } t                      \  }}t          j        dt          j        z  dt          j        z  dt          j        z            } | |||          }t          |j        dt          j	        z  d           t          |j
        dt          j        z  d           t          |j        dt          j        z  d           d S )	Nr!   r   r   rU   rV   rW   rO   rP   r   rR   )r   r   rT   r   mJycmmmr   rU   r   rV   r   rW   rX   s        r    test_fitting_with_initial_valuesra   h   s     VXXF  DAq qu1qt8APQPTHUUUFvq!A Q[!ad(>>>>QVS13YT::::QXsQSyt<<<<<<r1   c           	      j    |             }  G d dt           j                  } |dt          j        z  dt          j        z  dt          j        z            }d}t          j        t          |          5   | |g d	g d
t          j	        t          j
        t          j        z  t          j        z  t          j        z  z  z             ddd           n# 1 swxY w Y   d}t          j        t          |          5   | |g d	t          j        z  g d
           ddd           dS # 1 swxY w Y   dS )zD
    Raise an error if the model has units but the data doesn't
    c                       e Zd Zd ZdS )<test_fitting_missing_data_units.<locals>.UnorderedGaussian1Dc                 2    |d         |d         |d         dS )Nr   r   r]   r4   r:   s      r   r=   z\test_fitting_missing_data_units.<locals>.UnorderedGaussian1D._parameter_units_for_data_units   s)    )#.#C(%c*  r1   N)r>   r?   r@   r=   r4   r1   r   UnorderedGaussian1Drd      s#        	 	 	 	 	r1   rf   r!   r   r   r]   z%'cm' .* and '' .* are not convertiblematchr    r   r            Nz&'mJy' .* and '' .* are not convertible)r   rT   r   r^   r_   r`   pytestraisesr	   ergrH   Hzr   )rM   rf   rY   MESSAGEs       r   test_fitting_missing_data_unitsrs   z   s    VXXF    f/    ! 3;QXaRSRVhWWWF 7G	z	1	1	1 T Tvyyy)))quad
QT8IAD8P/Q"RSSST T T T T T T T T T T T T T T 8G	z	1	1	1 3 3vyyy13			2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s%   5ACCC<D((D,/D,c                     |             } t                      \  }}t          j        ddd          } | |||          }t          |j        dt
          j        z  d           t          |j        dt
          j        z  d           t          |j	        dt
          j        z  d           t          j        ddt
          j        z  dt
          j        z            } | |||          }t          |j        dt
          j        z  d           t          |j        dt
          j        z  d           t          |j	        dt
          j        z  d           d	S )
z=
    Proceed if the data has units but the model doesn't
    r!   r   r   r]   rO   rP   r   rR   NrS   rX   s        r    test_fitting_missing_model_unitsru      s2    VXXF  DAq1Q???Fvq!AQ[!ad(>>>>QVS13YT::::QXsQSyt<<<<1qs71qs7KKKFvq!AQ[!ad(>>>>QVS13YT::::QXsQSyt<<<<<<r1   c                 X    |             } t          j        dt          j        z  dt          j        z  dt          j        z            }d}t          j        t          |          5   | |g dt          j	        z  g dt          j        z             d	d	d	           d	S # 1 swxY w Y   d	S )
zF
    Raise an error if the data and model have incompatible units
    r!   r   r   r]   z&'Hz' .* and 'm' .* are not convertiblerg   ri   rj   N)
r   rT   r   r   r   r_   rn   ro   r	   rq   )rM   rY   rr   s      r   test_fitting_incompatible_unitsrw      s     VXXFqt!ac'!ad(SSSF7G	z	1	1	1 ; ;vyyy14'QT)9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   &,BB#&B#z$ignore:The fit may be unsuccessful.*z#ignore:divide by zero encountered.*modelc                     |            }t          j        ddd          t          j        z  }t	          d          5  t           j                            d          }d d d            n# 1 swxY w Y    || ||t          j        z            j        D ]}t          t          |                      t          fdt          d          D                       sJ  |          }t          |t          j                  sJ  || t          j        d          t          j        d          z  |          t          fdt          d          D                       sJ  |          }t          |t           j                  sJ d S )	Nrl   
   r   c              3   2   K   | ]}|         j         V  d S r3   
_has_units.0ires_fits     r   	<genexpr>z.test_compound_without_units.<locals>.<genexpr>   *      77wqz$777777r1   r   Angstromc              3   2   K   | ]}|         j         V  d S r3   r}   r   s     r   r   z.test_compound_without_units.<locals>.<genexpr>   r   r1   )r   r   r   r   r
   r   samplerq   param_namesprintgetattrallrange
isinstanceQuantityarangeUnitndarray)rx   rM   r   r   
param_namezr   s         @r   test_compound_without_unitsr      s    VXXF
B2+A			 ! !IR  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! fUAq14x((G) , ,
ggz**++++7777eAhh77777777

Aa$$$$$fUBIbMMAF:,>,>>BBG7777eAhh77777777

Aa$$$$$$$s    A**A.1A.zFlaky and ill-conditionedc                     |             } t          j        ddd          t          j        z  }t          j        ddd          t          j        z  } |             } t	          j        dt          j        z  dt          j        z  dt          j        z  dt          j        z  dt          j        z            }t	          j        dt          j        z  t          j        z  dt          j        z  t          j        z  dt          j        z            }||z   } |||          } | ||||          t           ||          t           j	                  sJ t          fd	t          d          D                       sJ t	          j                    t	          j                    z   } | ||||          t           ||          t           j	                  sJ t          fd
t          d          D                       sJ t	          j        dt          j        z            t	          j        d          z  }t          j        ddd          t          j        z  }t!          d          5  t           j                            d          }d d d            n# 1 swxY w Y    ||          } | |||d|z   z            t           j                            j        g dd           d S )Nrz   rl      r{   r   rk   r    r   c              3   2   K   | ]}|         j         V  d S r3   r}   r   r   ress     r   r   z3test_compound_fitting_with_units.<locals>.<genexpr>   *      33Qs1v 333333r1   c              3   2   K   | ]}|         j         V  d S r3   r}   r   s     r   r   z3test_compound_fitting_with_units.<locals>.<genexpr>   r   r1     )temperaturer!   )rU   i'  r   )r   gW%@gHOC-@g?rP   )r   r   r   r   r   
Gaussian2Drq   Planar2Dr   r   r   r   	BlackBodyKConst1Dmicronr
   r   r   testingassert_allclose
parameters)	rM   r   r   r   prx   r   nr   s	           @r    test_compound_fitting_with_unitsr      s    VXXF
B2+A
B2+AVXXF
QT	1qz>1qz>1qz>1qz>	 	A 	AD1:-q14x!*/Da!$hOOAEEaA
&1a
 
 Ccc!Qii,,,,,3333%((33333333&/"3"33E
&1a
 
 Ccc!Qii,,,,,3333%((33333333 444v~PS7T7T7TTE
Aq%  18+A			    IQ                              	aA
&1A;
'
'C J999      s   * JJJz%ignore:Model is linear in parameters*c                     |            }t          j        ddd          t          j        z  } | |          } || ||          }| j        D ]8}t          t          ||          j        t          | |          j                   9dS )z>Tests fitting of models with custom inputs and outsputs names.r   r{   d   N)r   r   r   rH   r   r   r   quantity)rx   rM   r   r   	new_modelr   s         r   test_fitting_custom_namesr     s     VXXF
Ar3!#%AaAua##I' 
 

 Iz**3WUJ5O5O5X	
 	
 	
 	

 
r1   )0__doc__numpyr   rn   astropyr   r   astropy.modelingr   r   astropy.modeling.corer   astropy.modeling.parametersr   astropy.tests.helperr   astropy.unitsr	   astropy.utilsr
   "astropy.utils.compat.optional_depsr   LevMarLSQFitterTRFLSQFitterLMLSQFitterDogBoxLSQFitterfittersr   rG   rT   ScaleShiftcompound_models_no_unitsr   rK   markskipifparametrizer[   ra   rs   ru   rw   filterwarningsr   skipr   r   r4   r1   r   <module>r      s               , , , , , , , , 1 1 1 1 1 1 1 1 1 1 1 1 9 9 9 9 9 9 $ $ $ $ $ $ ) ) ) ) ) ) 8 8 8 8 8 8 	   FO))+++.?f.?.A.AAFO))+++lflnn<FO))+++lflnn< Y Y Y Y YO Y Y Y6& & & 	M*:;;7++= = ,+ <;=  	M*:;;7++= = ,+ <;=  	M*:;;7++3 3 ,+ <;3: 	M*:;;7++= = ,+ <;=. 	M*:;;7++	; 	; ,+ <;	; 	M*:;;CDDBCC":;;7++% % ,+ <; DC ED <;
%, 4557++$ $ ,+ 65$N 	M*:;;DEE":":"<"<==7++

 

 ,+ >= FE <;

 

 

r1   