ó
šßÈ[c           @` s\  d  Z  d d l m Z m Z m Z 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 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$ y d d l% m& Z& e' Z( Wn e) k
 rKe* Z( n Xi i d5 d 6i d d g d 6d 6i d d 6d d 6d d 6d d 6d 6i i d d 6d 6d 6e 6i d6 d 6i d d g d 6d 6i d d 6d d 6d d 6d d 6d 6i i d d 6d 6d 6e 6i d7 d 6i d d g d 6d 6i d d 6d d 6d d 6d d 6d 6i i d d 6d 6d 6e 6i d8 d 6i d d g d 6d 6i d d 6d d 6d d 6d d 6d 6i i d d 6d 6d 6e 6i d9 d 6i  d 6i d d 6d  d! 6d 6i i d d 6d 6d 6e  6Z+ i i d: d 6i d d" g d# 6d d$ g d% 6d 6i d d& 6d d' 6d d( 6d d) 6d 6i i d d& 6d 6d 6e 6i d; d 6i d d" g d# 6d d$ g d% 6d 6i d d& 6d d' 6d d( 6d d) 6d 6i i d d& 6d 6d 6e 6i d< d 6i d d" g d# 6d d$ g d% 6d 6i d d& 6d d' 6d d( 6d d) 6d 6i i d d& 6d 6d 6e 6i d= d 6i  d 6i d d& 6d d' 6d d( 6d 6i i d d& 6d 6d 6e 6Z, e	 j- j. d* ƒ d+ e/ f d, „  ƒ  Yƒ Z0 e	 j- j1 d- g  e2 e+ ƒ e2 e, ƒ D] Z3 e4 e3 e ƒ rÅe3 ^ qÅƒ d. „  ƒ Z5 d/ „  Z6 d0 „  Z7 d1 „  Z8 e	 j- j1 d2 e e e e e e f ƒ d3 „  ƒ Z9 e	 j- j. d* ƒ d4 „  ƒ Z: d S(>   u   Tests for polynomial models.i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   product(   t   assert_allclosei   (   t   fittingi   (   t   wcs(   t   fits(   t   Chebyshev1Dt	   Hermite1Dt
   Legendre1Dt   Polynomial1Dt   Chebyshev2Dt	   Hermite2Dt
   Legendre2Dt   Polynomial2Dt   SIPt   PolynomialBaset   OrthoPolynomialBase(   t   Linear1D(   t   Identity(   t   get_pkg_data_filename(   t   optimizeu   argsi   i
   u   domainu   kwargsg333333ó?u   c0u   c1gffffff@u   c2gš™™™™™É?u   c3u
   parametersu   fixedu   constraintsu	   interceptgš™™™™7@u   slopeic   u   x_domainiR   u   y_domainu   c0_0u   c1_0u   c0_1u   c1_1u   not HAS_SCIPYt   TestFittingc           B` s  e  Z d  Z d „  Z e j j d	 e e e	 e
 d e ƒe e f ƒ ƒ ƒ d „  ƒ Z e j j d
 e e e	 e
 d e ƒe e f ƒ ƒ ƒ d „  ƒ Z e j j d e e e	 e d e ƒe e f ƒ ƒ ƒ d „  ƒ Z e j j d e e e	 e d e ƒe e f ƒ ƒ ƒ d „  ƒ Z RS(   u*   Test linear fitter with polynomial models.c         C` sÏ   d |  _  d |  _ t j d d d ƒ |  _ t j d  d … d  d … f \ |  _ |  _ t j j	 d ƒ } | j
 |  j j ƒ d |  _ | j
 |  j j ƒ |  _ |  j j |  j _ t j ƒ  |  _ t j ƒ  |  _ d  S(   Nid   i   i
   iS   i    gš™™™™™¹?(   t   Nt   Mt   npt   linspacet   x1t   mgridt   y2t   x2t   randomt   RandomStatet   randnt   sizet   n1t   n2t   shapeR   t   LinearLSQFittert   linear_fittert   LevMarLSQFittert   non_linear_fitter(   t   selft   rsn(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   setup_classc   s    		+u   model_classu   constraintst   keyc         C` s  t  | } i  } | j | d ƒ | j | d ƒ | rL | j | d ƒ n  | | d | Ž  } | |  j ƒ } |  j | |  j | |  j ƒ } | rþ | d j d d ƒ } | rxI | j ƒ  D]8 \ }	 }
 | d |	 } t | |	 ƒ j	 | k s¼ t
 ‚ q¼ Wqn t | j | j d d ƒd S(	   u!   Test fitting with LinearLSQFitteru   kwargsu
   parametersu   constraintsu   argsu   fixedt   atolgš™™™™™É?N(   t   linear1dt   updateR   R)   R%   t   gett   Nonet   itemst   getattrt   valuet   AssertionErrorR   t
   parameters(   R,   t   model_classt   constraintst
   model_argst   kwargst   modelt   y1t	   model_lint   fixedt   paramR7   t   expected(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_linear_fitter_1Dr   s"    
(c         C` s  t  | } i  } | j | d ƒ | j | d ƒ | rL | j | d ƒ n  | | d | Ž  } | |  j ƒ } |  j | |  j | |  j ƒ } | rþ | d j d d ƒ } | rxI | j ƒ  D]8 \ }	 }
 | d |	 } t | |	 ƒ j	 | k s¼ t
 ‚ q¼ Wqn t | j | j d d ƒd S(	   u,   Test fitting with non-linear LevMarLSQFitteru   kwargsu
   parametersu   constraintsu   argsu   fixedR0   gš™™™™™É?N(   R1   R2   R   R+   R%   R3   R4   R5   R6   R7   R8   R   R9   (   R,   R:   R;   R<   R=   R>   R?   t
   model_nlinRA   RB   R7   RC   (    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_non_linear_fitter_1D   s"    
(c         C` s'  t  | } i  } | j | d ƒ | j | d ƒ | rL | j | d ƒ n  | | d | Ž  } | |  j |  j ƒ } |  j | |  j |  j | |  j ƒ } | r
| d j d d ƒ } | r#xI | j ƒ  D]8 \ }	 }
 | d |	 } t	 | |	 ƒ j
 | k sÈ t ‚ qÈ Wq#n t | j | j d d ƒd S(	   u!   Test fitting with LinearLSQFitteru   kwargsu
   parametersu   constraintsu   argsu   fixedR0   gš™™™™™É?N(   t   linear2dR2   R    R   R)   R&   R3   R4   R5   R6   R7   R8   R   R9   (   R,   R:   R;   R<   R=   R>   t   zR@   RA   RB   R7   RC   (    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_linear_fitter_2D¬   s"    
%(c         C` s'  t  | } i  } | j | d ƒ | j | d ƒ | rL | j | d ƒ n  | | d | Ž  } | |  j |  j ƒ } |  j | |  j |  j | |  j ƒ } | r
| d j d d ƒ } | r#xI | j ƒ  D]8 \ }	 }
 | d |	 } t	 | |	 ƒ j
 | k sÈ t ‚ qÈ Wq#n t | j | j d d ƒd S(	   u,   Test fitting with non-linear LevMarLSQFitteru   kwargsu
   parametersu   constraintsu   argsu   fixedR0   gš™™™™™É?N(   RG   R2   R    R   R+   R&   R3   R4   R5   R6   R7   R8   R   R9   (   R,   R:   R;   R<   R=   R>   RH   RE   RA   RB   R7   RC   (    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_non_linear_fitter_2DÈ   s$    
((   u   model_classu   constraints(   u   model_classu   constraints(   u   model_classu   constraints(   u   model_classu   constraints(   t   __name__t
   __module__t   __doc__R.   t   pytestt   markt   parametrizet   listR   t   sortedR1   t   strt   Falset   TrueRD   RF   RG   RI   RJ   (    (    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyR   _   s   	333u   model_classc         C` s   d |  j  k r d } n d } t |  t ƒ r6 d } n d } |  d i t | 6| Œ } | j | t k sn t ‚ t | | ƒ j t k sŒ t ‚ d S(	   u´   
    Test that polynomial models can be instantiated with constraints, but no
    parameters specified.

    Regression test for https://github.com/astropy/astropy/issues/3606
    u   1Du   c0u   c0_0i   RA   N(   i   i   (   i   (   RK   t
   issubclassR   RU   RA   R8   R6   (   R:   RB   t   degreet   m(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt%   test_polynomial_init_with_constraintsæ   s    		c          C` s  t  t j j d d ƒ ƒ }  t j j |  ƒ } | d } | d } t j | ƒ } t	 | d   } t	 | d   } | j
 d ƒ } | j
 d ƒ } t | | g | | | | ƒ }	 d	 d	 g }
 d	 | d	 | g } | j |
 g d	 ƒ d
 | } t |	 d	 d	 ƒ | ƒ d S(   u   Test SIP against astropy.wcsu   datau   hst_sip.hdru   CRPIX1u   CRPIX2u   A_*u   B_*u   A_ORDERu   B_ORDERi   i    N(   R   t   ost   patht   joinR   t   Headert   fromtextfileR   t   WCSt   dictt   popR   t   sip_pix2focR   (   t	   test_filet   hdrt   crpix1t   crpix2t   wobjt   a_parst   b_parst   a_ordert   b_ordert   sipt   coordst
   rel_coordst   astwcs_result(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_sip_hst  s    

c          C` s¤  t  t j j d d ƒ ƒ }  t j j |  ƒ } | d } | d } t j | ƒ } t	 | d   } t	 | d   } t	 | d   } t	 | d   } | j
 d	 ƒ }	 | j
 d
 ƒ }
 | j
 d ƒ } | j
 d ƒ } | d =| d =d d g } d | d | g } t | | g |	 |
 | | d | d | d | d | ƒ} | j | g d ƒ } | j | d ƒ d } t | | Œ  | d | ƒ t | j | d Œ  | d | | | ƒ d S(   u0   Test forward and inverse SIP againts astropy.wcsu   datau   irac_sip.hdru   CRPIX1u   CRPIX2u   A_*u   B_*u   AP_*u   BP_*u   A_ORDERu   B_ORDERu   AP_ORDERu   BP_ORDERu   A_DMAXu   B_DMAXiÈ   t   ap_ordert   ap_coefft   bp_ordert   bp_coeffi   i    N(   R   RZ   R[   R\   R   R]   R^   R   R_   R`   Ra   R   Rb   t   sip_foc2pixR   t   inverse(   Rc   Rd   Re   Rf   Rg   Rh   Ri   t   ap_parst   bp_parsRj   Rk   Rq   Rs   t   pixt   rel_pixRl   t   foct   newpix(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_sip_irac  s2    

	c          C` sq   t  d d g d d ƒ }  t |  j j d d d g ƒ t |  j j d d d g ƒ t j t ƒ  |  j Wd  QXd  S(   Ni
   i   i   g        i    (	   R   R   t   sip1d_aR9   t   sip1d_bRN   t   raisest   NotImplementedErrorRv   (   Rl   (    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_sip_no_coeff6  s
    u   clsc         C` sa  |  j  d k rì |  d d d d ƒ } | d ƒ d k s< t ‚ t j | t j d ƒ ƒ t j d ƒ k ƒ so t ‚ t j d d d ƒ } d t j j d d t	 | ƒ ƒ } |  d d ƒ } t
 j ƒ  } | | | | ƒ } t | j d d d ƒnq|  j  d	 k r]t |  t ƒ r(|  d
 d d d d d ƒ } n |  d d d d ƒ } | d d ƒ d k sXt ‚ t j | t j d ƒ t j d ƒ ƒ t j d ƒ k ƒ s—t ‚ t j d d d … d d d … f \ } } d t j j d d | j ƒ j d d ƒ } t |  t ƒ r|  d
 d d d ƒ }	 n |  d d ƒ }	 t
 j ƒ  } | |	 | | | ƒ }
 t |
 j d d d ƒn  d S(   u   
    A few tests that degree=0 polynomials are correctly evaluated and
    fitted.

    Regression test for https://github.com/astropy/astropy/pull/3589
    i   RW   i    t   c0i   id   gš™™™™™¹?R0   i   t   x_degreet   y_degreet   c0_0y              Y@N(   t   n_inputsR8   R   t   allt   zerost   onesR   R!   t   uniformt   lenR   R(   R   Rƒ   RV   R   R   R$   t   reshapeR†   (   t   clst   p1t   xt   yt   p1_initt   fittert   p1_fitt   p2RH   t   p2_initt   p2_fit(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   test_zero_degree_polynomial>  s0    
3"?++c          C` sÂ   t  j d d … d d … f \ }  } | |  } t j ƒ  } t d d ƒ } | | | |  | ƒ } t j ƒ  } t d ƒ t d d ƒ B} | | | |  | ƒ } t | | |  ƒ | | |  ƒ d d ƒd S(   uÚ   
    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.
    i    i   i   R0   gVçž¯Ò<N(   R   R   R   R*   R   R   R   (   R‘   R   RH   R“   t   simple_modelt
   simple_fitt   compound_modelt   compound_fit(    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt)   test_2d_orthopolynomial_in_compound_modelm  s    	%
(   i   (   i   (   i   (   i   (    (   i   i   (   i   i   (   i   i   (   i   (;   RM   t
   __future__R    R   R   R   RZ   t	   itertoolsR   RN   t   numpyR   t   numpy.testingR   t    R   R   t   ioR   t
   polynomialR	   R
   R   R   R   R   R   R   R   R   R   t   functional_modelsR   t   mappingsR   t
   utils.dataR   t   scipyR   RU   t	   HAS_SCIPYt   ImportErrorRT   R1   RG   RO   t   skipift   objectR   RP   RQ   RŽ   t
   isinstanceRY   Rp   R}   R‚   R˜   R   (    (    (    sE   lib/python2.7/site-packages/astropy/modeling/tests/test_polynomial.pyt   <module>   s˜   "L

####!#!#!#†'			.