
[c           @` s  d  d l  m Z m Z m Z m Z d  d l Z d  d l Z d  d l m	 Z	 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 y d  d l m Z e Z Wn e k
 r e Z n Xd   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& e j' j( d  d    Z) d   Z* d   Z+ d   Z, e j' j( d  d    Z- e j' j( d  d    Z. d S(   i    (   t   absolute_importt   unicode_literalst   divisiont   print_functionN(   t   assert_allcloset   assert_array_equali   (   t   modelst   InputParameterErrori   (   t   Angle(   t   fitting(   t   catch_warnings(   t   AstropyDeprecationWarning(   t   optimizec       	   C` s   t  j d d d d d d d d  }  t j d	 d
 d  } |  |  } d d d d d d d d g } t | | d d	 d d d S(   uB   Regression test for https://github.com/astropy/astropy/issues/1721t	   amplitudeg@t   x_0g       @t   widthg      ?t   slopei   i    i   i   g        gfz?gNf8uP	@t   rtolt   atolgư>N(   R   t   Trapezoid1Dt   npt   linspaceR   (   t   modelt   xxt   yyt   yy_ref(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Trapezoid1D   s
    $c       	   C` s   t  j d d d  }  t t  4 } t  j d d d  } t |  d k sQ t  Wd  QXt j d d d  } t	 | |  d |  |   t	 | j
 | d d d d  t j |  j
 | d d d d    | j |  j k s t  t	 | j d	  d  S(
   Ng?i  i   i   iT  i  i   i    gT]VG@(   R   t
   Gaussian1DR
   R   t   GaussianAbsorption1Dt   lent   AssertionErrorR   t   arangeR   t	   fit_derivt   arrayt   bounding_boxt   fwhm(   t   g_emt   wt   g_abR   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_GaussianAbsorption1D!   s    'c          C` s   t  j d d d d d d d d t j d	 }  t j d
 d  d
 d  f \ } } |  | |  } d d d d d g d d d d d g d d d d d g d d d d d g d  d! d" d# d$ g g } t | | d% d
 d& d' t |  j |  j g d( d) g  d* S(+   ud   
    Test rotated elliptical Gaussian2D model.
    https://github.com/astropy/astropy/pull/2038
    g@g333333?g@t   x_stddevgffffff@t   y_stddevgffffff
@t   thetag      @i    i   gm'@g7*@g%Кp@gUů|@g;^
@gD)z@g)j@gG9@g?=xe	@g<%R`"
@g<Ns@g)'^@gq@g],4@gSRZ
@g.I@gǛ@gTŧ!@g`7@g!@g`'@gCv}@gV@gm;*@g@R   R   gư>gF(@g; kh@N(   R   t
   Gaussian2DR   t   pit   mgridR   t   x_fwhmt   y_fwhm(   R   t   yt   xt   gt   g_ref(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Gaussian2D.   s    %c       	   C` s   d d g d d g g }  t  j d d d d |  } t j d d	  d d	  f \ } } | | |  } d
 d d d d g d d d d d g d d d d d g d d d d d g d d d d d g g } t | | d d d d d S(   u}   
    Test rotated elliptical Gaussian2D model when cov_matrix is input.
    https://github.com/astropy/astropy/pull/2199
    g     H@g      0g      "@g      1@g       @g      @t
   cov_matrixi    i   g&o@g[]@g-1H4@g "@gfl$@gr!r!@gO%@gK]*=)@g!e,@g>㨮-@gku/^+@g.^b.@gąEr0@gȀG0@g.V E0@R   R   gư>N(   R   R+   R   R-   R   (   R5   R   R0   R1   R2   R3   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Gaussian2DCovarianceB   s    %c          C` s   d }  d \ } } d \ } } t  d d  } t d |  d | d	 | d
 | d |  } t j d | j  } | d | | d | f } | |   }	 t j d d |  }
 t j d | j |  } |
 |   } | |	   } t | |  d  S(   Ni*   i    i   i   i
   u   degR   t   x_meant   y_meanR(   R)   t   angleR*   (   i    i    (   i   i   (   R   t   dictR   t
   Rotation2Dt   degreeR+   t   radianR   (   R   R7   R8   R(   R)   R*   t   parst   rotationt   point1t   point2t   g1t   g2t   value1t   value2(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Gaussian2DRotationT   s    c          C` s<  d }  d } d } d d g d d g g } t  j   t  j d |  d | d	 |  t  j d d  d | d	 |  t  j d |  d d  d	 |  t  j d |  d | d	 d   t  j d
 |  t j t   t  j d d d
 |  Wd  QXt j t   t  j d d d
 |  Wd  QXt j t   t  j d	 d d
 |  Wd  QXd  S(   Ngffffff@gffffff
@i
   g     H@g      0g      "@R(   R)   R*   R5   i    (   R   R+   t   Nonet   pytestt   raisesR   (   R(   R)   R*   R5   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Gaussian2D_invalid_inputse   s     
c          C` sU   d }  i d d 6d d 6} t  j |   } t  j |   } t | j | j g |   d  S(   Ng/7RA@i
   u   gammag      ?u   alpha(   R   t   Moffat1Dt   Moffat2DR   R#   (   t   anst   kwargst   m1t   m2(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_moffat_fwhm{   s
    c          C` s   t  j d  }  |  d  d k s' t  t |  d d g  d d g  t |  j |  d d g   d d g  t  j d d d g d	 d
 }  t |  d  d  t |  d d g d t d d g d d g d d
 g g  t |  j |  d d g d t  d d g d d g d d g g  d S(   u   Like ``test_ScaleModel()``.g?i    i   i   gffffff?gffffff@g      g      ?t   n_modelsi   t   model_set_axisg      ?N(   R   t   RedshiftScaleFactorR   R   R   t   inverset   False(   t   m(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_RedshiftScaleFactor   s    ("!c          C` s}  d }  d \ } } t  d d  } t j |  | | d d | j  } t j d d  d d  f \ } } | | |  } t j | | d k |  k  s t  | | | f |  k s t  t j d	 | j	  } d
 d g }	 | |	   }
 t j
 |	  | | g }	 t j
 |
  | | g }
 t j |  | | d d d d } t j |  | | d d d | j } | |	   | |
   k syt  d S(   u   Test Ellipse2D model.g      @i   i-   u   degi   i   i    i   R9   i   R*   g        N(   i   i   (   R   R   t	   Ellipse2DR=   R   R-   t   allR   R;   R<   R!   (   R   t   x0t   y0R*   t   emR0   R1   t   eR?   R@   RA   t   e1t   e2(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Ellipse2D   s     !%%!$c          C` s   d }  d } | d d } t  j d |  d |  f \ } } t j |  | | | | d d | |  } t j |  | | |  | |  } t  j | | k  s t  d S(   u7   Test that circular Ellipse2D agrees with Disk2D [3736].g      @i
   i   i   i    R*   N(   R   R-   R   RY   t   Disk2DRZ   R   (   R   t   radiust   sizeR0   R1   t   ellipset   disk(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Ellipse2D_circular   s    %!c          C` s/   t  j d  }  t |  j |  d   d  d  S(   Ngn?g-'@(   R   t   ScaleR   RU   (   RW   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Scale_inverse   s    c          C` s/   t  j d  }  t |  j |  d   d  d  S(   Ngn?g-'@(   R   t   ShiftR   RU   (   RW   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Shift_inverse   s    u   not HAS_SCIPYc          C` s`   t  j   }  t j d  } | d } t j   } | |  | |  } t | j d g d d d S(   u<   Test fitting Shift model with LevMarLSQFitter (issue #6103).i
   g?R   gV瞯<N(   R   Rj   R   R   R	   t   LevMarLSQFitterR   t
   parameters(   t
   init_modelR1   R0   t   fittert   fitted_model(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Shift_model_levmar_fit   s    
c          C` s   t  j d d d g d d  }  t j d  } t j | d | d g  } t j   } | |  | |  } t | j d d g d	 d
 d S(   u1   Test linear fitting of Shift model (issue #6103).t   offseti    RR   i   i
   g?g?gɿR   gV瞯<N(	   R   Rj   R   R   R!   R	   t   LinearLSQFitterR   Rm   (   Rn   R1   R   Ro   Rp   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Shift_model_set_linear_fit   s    c          C` s   t  j d d d g d d  }  t j d d  } t j d | d | g  } t j   } | |  | |  } t | j d d g d	 d
 d S(   u+   Test linear fitting of Scale model (#6103).t   factori    RR   i   ii   gffffff?gQ?R   gV瞯<N(	   R   Rh   R   R   R!   R	   Rs   R   Rm   (   Rn   R1   R   Ro   Rp   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Scale_model_set_linear_fit   s    c          C` sF   t  j d d d d d d d d d d  }  |  j j d	 k sB t  d  S(
   NR   i   R   t   y_0t   r_ini   t   r_outi   i   (   R   t   Ring2DR   t   valueR   (   RW   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Ring2D_rout   s    *c       	   C` s   t  j d d d d d d d d  }  t j d d d	 d
 } |  |  } t  j d d d d d d d d  } t j   } | | | |  } t | j |  j  d  S(   Nt   amplitude_Lg      R   g      ?t   fwhm_Lg      @t   fwhm_Gg      t   numi(   g      (   R   t   Voigt1DR   R   R	   Rl   R   t
   param_sets(   t   voit   xarrt   yarrt   voi_initRo   t   voi_fit(    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   test_Voigt1D   s    $$c    	      C` s   t  j t  j g }  t  j g } xw |  D]o } d t  j | f d     Y} t j d  d  d  d  f \ } } |   | |  } | j d k s% t  q% Wx^ | D]V } d t  j	 | f d     Y} t j
 d  } |   |  } | j d k s t  q Wd  S(   Nt   CompoundModel2Dc           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyR     s   i
   t   CompoundModel1Dc           B` s   e  Z RS(    (   R   R   (    (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyR     s   (   i
   i
   (   i
   (   R   t
   AiryDisk2Dt   Sersic2Dt   Sersic1Dt   Const2DR   R-   t   shapeR   t   Const1DR   (	   t	   models_2dt	   models_1dt   model_2dR   R1   R0   t   ft   model_1dR   (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt)   test_compound_models_with_class_variables   s    %(/   t
   __future__R    R   R   R   RH   t   numpyR   t   numpy.testingR   R   t    R   R   t   coordinatesR   R	   t   tests.helperR
   t   utils.exceptionsR   t   scipyR   t   Truet	   HAS_SCIPYt   ImportErrorRV   R   R'   R4   R6   RF   RJ   RQ   RX   Ra   Rg   Ri   Rk   t   markt   skipifRq   Rt   Rv   R|   R   R   (    (    (    sL   lib/python2.7/site-packages/astropy/modeling/tests/test_functional_models.pyt   <module>   s>   "

	
														