ó
šßÈ[c           @` sW  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 m 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 m Z m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( y& d  d l) Z) d  d l) m* Z* e+ Z, Wn e- k
 r[e. Z, n Xe, one e) d ƒ Z/ e j0 j1 dc d „  d f d „  d f d „  d f d „  dd f d „  d f g ƒ d „  ƒ Z2 e j0 j1 de d „  d d g f d „  d d g f d „  d d g f d „  df dg g f d  „  d d g f g ƒ d! „  ƒ Z3 e j0 j1 dh d" „  d d g f d# „  d d g f d$ „  d d g f d% „  di dj g f d& „  d d g f g ƒ d' „  ƒ Z4 e j0 j1 dk d( „  d f d) „  d f d* „  d f d+ „  dl f d, „  d f g ƒ d- „  ƒ Z5 e j0 j1 dm d. „  d f d/ „  d f d0 „  d f d1 „  dn f d2 „  d f g ƒ d3 „  ƒ Z6 d4 „  Z7 d5 „  Z8 d6 „  Z9 d7 „  Z: d8 „  Z; d9 „  Z< d: „  Z= d; „  Z> d< „  Z? e j0 j1 d= e d  ƒ e d  ƒ e d  ƒ Be d  ƒ e d  ƒ e d  ƒ Be d  ƒ e d  ƒ e d  ƒ Be d  ƒ e d  ƒ e d  ƒ Be d  ƒ e d  ƒ e d  ƒ Be d> d d ƒ e d? d@ dA ƒ Bg ƒ dB „  ƒ Z@ dC „  ZA dD „  ZB dE „  ZC dF „  ZD dG „  ZE dH „  ZF dI „  ZG dJ „  ZH dK „  ZI dL e f dM „  ƒ  YZJ dN e f dO „  ƒ  YZK e j0 j1 d= e dP i do dR 6dS i e+ dT 6ƒ e dS i e+ dT 6ƒ eJ eK ƒ  g ƒ dU „  ƒ ZL dV „  ZM e j0 j1 dW e! d> d ƒ e  d ƒ e" d> d ƒ e# d@ ƒ e$ d@ ƒ e d@ ƒ g ƒ dX „  ƒ ZN dY e e f dZ „  ƒ  YZO e j0 jP eQ d[ ƒ ƒ d\ „  ƒ ZR e j0 jP eQ d] ƒ ƒ d^ „  ƒ ZS d_ „  ZT d` „  ZU e j0 jP da ƒ db „  ƒ ZV d S(p   i    (   t   absolute_importt   unicode_literalst   divisiont   print_functionN(   t   deepcopy(   t   assert_allcloset   assert_array_equali   (   t   cPickle(   t
   minversioni   (   t   Modelt   ModelDefinitionError(   t	   Parameter(   t   Const1Dt   Shiftt   Scalet
   Rotation2Dt
   Gaussian1Dt
   Gaussian2Dt   Polynomial1Dt   Polynomial2Dt   Chebyshev2Dt
   Legendre2Dt   Chebyshev1Dt
   Legendre1Dt   AffineTransformation2Dt   Identityt   Mappingt	   Tabular1D(   t   optimizeu   0.14u   expru   resultc         C` s   |  | S(   N(    (   t   xt   y(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   <lambda>%   s    g      @c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   &   s    g      ð¿c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   '   s    g      @c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   (   s    g       @g      @c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   )   s    g       @c         C` s”   |  t  t  ƒ } t | t ƒ s$ t ‚ | j d k s9 t ‚ | j d k sN t ‚ | d d ƒ } | d ƒ } | | k s{ t ‚ t | t ƒ s t ‚ d  S(   Ni   i   i   i    (   R   t
   issubclassR	   t   AssertionErrort   n_inputst	   n_outputst
   isinstancet   float(   t   exprt   resultt   St   st   out(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt"   test_two_model_class_arithmetic_1d$   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   A   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   B   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   C   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   D   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   E   s    c         C` sJ   |  t  d d d ƒt  d d d ƒƒ } | d d t ƒ} t | | ƒ d  S(   Ni   t   n_modelsi   i    t   model_set_axis(   i   i   (   i   i   (   R   t   FalseR   (   R&   R'   R)   R*   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_model_set@   s    'c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   N   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   O   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   P   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   Q   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   R   s    c      
   C` sA   t  j t ƒ , |  t d d d ƒt d d d ƒƒ } Wd QXd S(   ul   Check that creating model sets with components whose _n_models are
       different raise a value error
    i   R,   i   i   N(   i   i   (   t   pytestt   raisest
   ValueErrorR   (   R&   R'   R)   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt!   test_model_set_raises_value_errorM   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   ]   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   ^   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   _   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   `   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   a   s    c         C` s‘   |  t  d ƒ t  d ƒ ƒ } t | t ƒ s0 t ‚ | j d k sE t ‚ | j d k sZ t ‚ | d ƒ } | | k sx t ‚ t | t ƒ s t ‚ d S(   u€   
    Like test_two_model_class_arithmetic_1d, but creates a new model from two
    model *instances* with fixed parameters.
    i   i   i   i    N(   R   R$   R	   R!   R"   R#   R%   (   R&   R'   R)   R*   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt%   test_two_model_instance_arithmetic_1d\   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   t   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   u   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   v   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   w   s    c         C` s   |  | S(   N(    (   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR   x   s    c         C` sì   |  t  t  d ƒ ƒ } |  t  d ƒ t  ƒ } xS | | f D]E } t | t ƒ sR t ‚ | j d k sg t ‚ | j d k s7 t ‚ q7 W| d d ƒ } | d d ƒ } xG | d ƒ | d ƒ f D]- } | | k sÏ t ‚ t | t ƒ s· t ‚ q· Wd S(   už   
    Like test_two_model_class_arithmetic_1d, but creates a new model from an
    expression of one model class with one model instance (and vice-versa).
    i   i   i   i    N(   R   R    R	   R!   R"   R#   R$   R%   (   R&   R'   t   S1t   S2t   clst   s1t   s2R*   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt"   test_two_model_mixed_arithmetic_1ds   s    c          C` s	  t  t B}  t |  t ƒ s t ‚ |  j d k s4 t ‚ |  j d k sI t ‚ |  d d ƒ } | d ƒ d k sp t ‚ t t  B} t | t ƒ s t ‚ | j d k s¤ t ‚ | j d k s¹ t ‚ | d d ƒ } | d ƒ d k sà t ‚ t | d d d g ƒ d d d g ƒ d S(   u\   
    Shift and Scale are two of the simplest models to test model composition
    with.
    i   i   i   g      "@g      @g      @N(   R   R   R    R	   R!   R"   R#   R   (   R5   R8   R6   R9   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt&   test_simple_two_model_class_compose_1d“   s    

c          C` sÞ   t  t  B}  t |  t ƒ s t ‚ |  j d k s4 t ‚ |  j d k sI t ‚ |  d d ƒ } t | d d ƒ d
 d d ƒ|  d d ƒ } t | d d ƒ d d d ƒ|  |  B} | d d d d ƒ } t | d d ƒ d d d ƒd	 S(   u7   
    A simple example consisting of two rotations.
    i   i-   i    i   iÿÿÿÿt   atolg»½×Ùß|Û=iZ   N(   iÿÿÿÿi    (   i    iÿÿÿÿ(   i    iÿÿÿÿ(   R   R    R	   R!   R"   R#   R   (   t   Rt   r1t   r2t   R2t   r3(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt&   test_simple_two_model_class_compose_2d­   s    

c          C` s·   t  ƒ  t  ƒ  }  |  j ƒ  d k s( t ‚ |  t  ƒ  } | j ƒ  d k sM t ‚ | |  B} | j ƒ  d k so t ‚ | |  } | j ƒ  d k s‘ t ‚ t t } | j ƒ  d k s³ t ‚ d S(   u\   
    Test that CompoundModel.n_submodels properly returns the number
    of components.
    i   i   i   i   N(   R   t   n_submodelsR!   R   (   t   g2t   g3t   g5t   g7t   p(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_n_submodelsÄ   s    


c          C` s(  t  }  t } |  |  } | j ƒ  d k s. t ‚ |  |  |  } | j ƒ  d k sT t ‚ |  |  |  } | j ƒ  d k sz t ‚ |  |  |  } | j ƒ  d k s  t ‚ |  |  |  |  } | j ƒ  d k sÊ t ‚ |  |  |  |  } | j ƒ  d k sô t ‚ |  |  |  |  } | j ƒ  d k st ‚ |  |  } | j ƒ  d k s@t ‚ |  |  |  } | j ƒ  d	 k sft ‚ |  |  |  } | j ƒ  d
 k sŒt ‚ |  |  |  B} | j ƒ  d k s²t ‚ |  |  |  B} | j ƒ  d k sØt ‚ |  |  @| B} | j ƒ  d k sþt ‚ |  |  |  B@} | j ƒ  d k s$t ‚ d S(   u\   
    Test that the expression strings from compound models are formatted
    correctly.
    u	   [0] + [1]u   [0] + [1] + [2]u   [0] + [1] * [2]u   [0] * [1] + [2]u   [0] + [1] * [2] + [3]u   ([0] + [1]) * ([2] + [3])u   [0] * [1] + [2] * [3]u
   [0] ** [1]u   [0] + [1] ** [2]u   ([0] + [1]) ** [2]u   [0] + [1] | [2]u   [0] + ([1] | [2])u   [0] & [1] | [2]u   [0] & ([1] | [2])N(   R   R   t   _format_expressionR!   (   t   Gt   G2t   M(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_expression_formattingÛ   s<    

c          C` s­  t  d d d d d ƒ}  t d d d ƒ} t  t } | d t  k sJ t ‚ | d t k s` t ‚ | d | d k sz t ‚ | d	 | d k s” t ‚ t  | } | d t  k s´ t ‚ t | d t ƒ sÍ t ‚ |  | } t | d t  ƒ sð t ‚ t | d t ƒ s	t ‚ t | d t  ƒ s"t ‚ t | d t ƒ s;t ‚ t | d
 t ƒ sTt ‚ t | d t  ƒ smt ‚ t j t ƒ  | d Wd QXt j t ƒ  | d Wd QXd S(   uŒ   
    Test indexing on compound model class objects, including cases where the
    submodels are classes, as well as instances, or both.
    i   i   i   t   nameu   gu   pi    u
   Gaussian1Du   Const1Diÿÿÿÿiþÿÿÿi*   Nu   foobar(   R   R   R   R!   R$   R0   R1   t
   IndexError(   t   gRH   RM   t   m(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_indexing_on_class  s*    


c          C` sè  t  j d ƒ }  t  j d ƒ } t  j d ƒ } t  j d ƒ } t  j d ƒ } t  j d ƒ } |  | | | | | } | d d !|  k s t ‚ | d d !j d k s© t ‚ | d d !|  k sÂ t ‚ | d d !j d k sÞ t ‚ | d
 d !| k s÷ t ‚ | d
 d !j d k st ‚ | d d !| k s,t ‚ | d d !j d k sHt ‚ | d  d d ƒ d ƒ d k smt ‚ | d  j d k s†t ‚ | d  d d ƒ d ƒ d k s«t ‚ | d  j d k sÄt ‚ | d d !d d ƒ d ƒ d k sìt ‚ | d d !j d  k st ‚ | d d !d d ƒ d ƒ d k s0t ‚ | d d !j d! k sLt ‚ | d d !d d ƒ d ƒ d k stt ‚ | d d !j d" k st ‚ | d d !d d ƒ d ƒ d k s¸t ‚ | d d !j d# k sÔt ‚ | d d
 !d d
 ƒ d ƒ d k süt ‚ | d d
 !j d$ k st ‚ | d d !d d
 ƒ d ƒ d k s@t ‚ | d d !j d% k s\t ‚ | d d !d
 d ƒ d ƒ d k s„t ‚ | d d !j d& k s t ‚ | d d !d
 d ƒ d ƒ d k sÈt ‚ | d d !j d' k sät ‚ d S((   uD   
    Test slicing a simple compound model class using integers.
    u   Au   Bu   Cu   Du   Eu   Fi    i   u	   amplitudei   i   i   i   u   amplitude_0u   amplitude_1iÿÿÿÿu   amplitude_2i   i   u   amplitude_3gš™™™™™é?u   amplitude_4i	=  u   amplitude_5N(   u	   amplitude(   u	   amplitude(   u	   amplitude(   u	   amplitude(   u   amplitude_0u   amplitude_1(   u   amplitude_0u   amplitude_1(   u   amplitude_1u   amplitude_2(   u   amplitude_1u   amplitude_2(   u   amplitude_2u   amplitude_3(   u   amplitude_2u   amplitude_3(   u   amplitude_3u   amplitude_4(   u   amplitude_3u   amplitude_4(   u   amplitude_4u   amplitude_5(   u   amplitude_4u   amplitude_5(   R   t   renameR!   t   param_names(   t   At   Bt   Ct   Dt   Et   FRM   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_slicing_on_class=  sF    %%((((((((c          C` sø  t  j d ƒ }  t  j d ƒ } t  j d ƒ } t  j d ƒ } t  j d ƒ } t  j d ƒ } |  | | | | | } | d d d	 d
 d d ƒ } t | d d !|  ƒ s« t ‚ t | d d !|  ƒ sÇ t ‚ t | d d !| ƒ sã t ‚ t | d d !| ƒ sÿ t ‚ | d  d ƒ d	 k st ‚ | d  j d k s4t ‚ t j | d  j d d g k ƒ s\t ‚ | d d !d ƒ d k s{t ‚ | d d !j d k s—t ‚ t j | d d !j d d	 g k ƒ sÂt ‚ | d d !d ƒ d k sát ‚ | d d !j d k sýt ‚ t j | d d !j d	 d
 g k ƒ s(t ‚ | d d !d ƒ d k sGt ‚ | d d !j d k sct ‚ t j | d d !j d
 d g k ƒ sŽt ‚ | d d !d ƒ d k s­t ‚ | d d !j d k sÉt ‚ t j | d d !j d d g k ƒ sôt ‚ d S(   uD   
    Test slicing a simple compound model class using integers.
    u   Au   Bu   Cu   Du   Eu   Fi   i   i   i   i   i   i    u   amplitude_0u   amplitude_1iÿÿÿÿu   amplitude_2i   u   amplitude_3gš™™™™™é?u   amplitude_4i	=  u   amplitude_5N(   u   amplitude_0u   amplitude_1(   u   amplitude_1u   amplitude_2(   u   amplitude_2u   amplitude_3(   u   amplitude_3u   amplitude_4(   u   amplitude_4u   amplitude_5(   R   RT   R$   R!   RU   t   npt   allt
   parameters(   RV   RW   RX   RY   RZ   R[   RM   RR   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_slicing_on_instanceu  s6    (+++c          C` só  t  t }  |  d d d d ƒ } t | d t  ƒ s8 t ‚ t | d t ƒ sQ t ‚ t | d t  ƒ sj t ‚ t | d t ƒ sƒ t ‚ | d j d k o¤ | j k n s¯ t ‚ | d j d k oÐ | j k n sÛ t ‚ | d j d k oü | j	 k n st ‚ | d j d k o(| j
 k n s3t ‚ | d } d | _
 | j d k s[t ‚ d | _ | j
 d k syt ‚ t  d d d	 d
 d ƒ} t d d
 d ƒ} | | } | d j d k sÆt ‚ | d j d k sßt ‚ | d j d k søt ‚ | d j d k st ‚ | d } d | _ | j d k s9t ‚ d | _ | j d k sWt ‚ | j d k slt ‚ | j d k st ‚ t | d t ƒ sšt ‚ t | d t  ƒ s³t ‚ t j t ƒ  | d Wd QXt j t ƒ  | d Wd QXd S(   u*   Test indexing on compound model instances.i   i    gš™™™™™¹?i   u
   Gaussian1Du   Const1Di*   i‰   i   RO   u   gu   pi90  i…  iÿÿÿÿiþÿÿÿNu   foobar(   R   R   R$   R!   t	   amplitudet   amplitude_0t   meant   mean_0t   stddevt   stddev_0t   amplitude_1R   RO   t   c0_1t   c0t   c1t   c1_1R0   R1   RP   (   RM   RR   t   constRQ   RH   t   poly(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_indexing_on_instanceŸ  sF    
,,,,
		

		c          C` sW   t  d ƒ t  d ƒ @t d ƒ t d ƒ @Bt d ƒ B}  t |  j |  d d ƒ Œ  d ƒ d S(   u†   
    Test basic inversion of compound models in the limited sense supported for
    models made from compositions and joins only.
    i   i   iZ   i    i   N(   i    i   (   R   R   R   R   t   inverse(   t   t(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_basic_compound_inverseÖ  s    4u   modeli   i   i   i   c         C` s!   t  j t ƒ  |  j Wd QXd S(   uJ   
    Ensure inverses aren't supported in cases where it shouldn't be.
    N(   R0   R1   t   NotImplementedErrorRo   (   t   model(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt!   test_compound_unsupported_inverseà  s    c          C` sð   t  d ƒ d d ƒ \ }  } t  t d ƒ B} | d ƒ d d ƒ \ } } t |  | f | | f ƒ t  t @} | d d ƒ } | d d d ƒ \ }  } } | t d ƒ B} | d d ƒ }	 |	 d d d ƒ \ } } }
 t |  | | f | |
 | f ƒ d S(	   ux   
    Tests a couple basic examples of the Mapping model--specifically examples
    that merely permute the outputs.
    iZ   i   i   i    i   N(   i   i    (   i   i    i   (   R   R   R   R   (   R   R   t   RSt   x_primet   y_primeRM   RR   t   zt   MSt   mst   z_prime(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_mapping_basic_permutationsð  s    
c          C` sh   t  t @}  |  t d d d g ƒ B|  B} | d d d d ƒ } t d | j | d d d ƒ Œ  d d	 ƒd
 S(   u;   Tests inverting a compound model that includes a `Mapping`.i   i    i   g333333(@gffffff*@gš™™™™™,@gÍÌÌÌÌÌ.@R<   g:Œ0âŽyE>N(   i    i   i   (   R   R   R   R   Ro   (   Ru   RM   RR   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_mapping_inverse  s    
c          C` s”   t  d ƒ }  t d ƒ } t d d ƒ } |  | @| B} t | d d ƒ d d g ƒ |  t @t B} | d d d d ƒ } t | d d ƒ d d g ƒ d	 S(
   uö   
    Test a case where an Identity (or Mapping) model is the first in a chain
    of composite models and thus is responsible for handling input broadcasting
    properly.

    Regression test for https://github.com/astropy/astropy/pull/3362
    i   t   angleiZ   i   g      Àg      ð?t   offset_1t   angle_2N(   R   R   R   R   (   t   ident1t   shiftt   rotationRs   t	   TestModel(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_identity_input  s    	c          C` sß  t  d d d ƒ}  t  d d d ƒ} t d d d ƒ} t d d d ƒ} t d d d	 ƒ} |  | @| B| | @B} t j t ƒ  | d j d k s™ t ‚ Wd
 QX| j d k sµ t ‚ | d j d k sÎ t ‚ t j t ƒ ! | d d !j d k sú t ‚ Wd
 QX| d d !j d k st ‚ | d d !j d k s8t ‚ t j t	 ƒ  | d Wd
 QXt j t	 ƒ  | d d !Wd
 QXt j t ƒ ! | d d !j d k s£t ‚ Wd
 QXt j t ƒ ! | d d !j d k sÕt ‚ Wd
 QXd
 S(   u`   
    More slicing tests.

    Regression test for https://github.com/embray/astropy/pull/10
    i   RO   u   ai   u   bi   u   cu   du   eNi   u   xu   riüÿÿÿi   iþÿÿÿ(   u   bu   cu   du   e(   u   au   bu   cu   du   e(   u   au   bu   cu   du   e(   u   cu   d(   u   cu   du   e(   u   bu   cu   d(   u   bu   c(
   R   R   R   R0   R1   R
   t   submodel_namesR!   RO   RP   (   t   model_at   model_bt   model_ct   model_dt   model_eRR   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_slicing_on_instances_2+  s,    ""c          C` s  t  d d d ƒ}  t  d d d ƒ} t d d d d d	 ƒ} t d d d
 ƒ} t d d d ƒ} |  | | B| | B} | d j d k s t ‚ | j d k s¥ t ‚ | d j d k s¾ t ‚ | d	 d
 !j d k sÚ t ‚ | d d !j d k sö t ‚ | d d !j d k st ‚ t j t ƒ  | d Wd QXt j t ƒ  | d d !Wd QX| d d !j d k smt ‚ | d d !j d k s‰t ‚ d S(   uI  
    Like `test_slicing_on_instances_2` but uses a compound model that does not
    have any invalid slices due to the resulting model being invalid
    (originally test_slicing_on_instances_2 passed without any
    ModelDefinitionErrors being raised, but that was before we prevented
    invalid models from being created).
    i   RO   u   ai   u   bi   i    gš™™™™™¹?u   cu   du   ei   u   xNu   riüÿÿÿi   iþÿÿÿ(   u   bu   cu   du   e(   u   au   bu   cu   du   e(   u   au   bu   cu   du   e(   u   cu   d(   u   cu   du   e(   u   bu   cu   d(   u   bu   c(	   R   R   R   R†   R!   RO   R0   R1   RP   (   R‡   Rˆ   R‰   RŠ   R‹   RR   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_slicing_on_instances_3S  s$    	c          C` s  t  d d d d d d d ƒ}  t  d d d d d d d ƒ} t d ƒ } t d d	 d
 ƒ} t d d	 d ƒ} t d d d g d d g g d	 d ƒ } | | |  @B| | @B| B} | j d k sÂ t ‚ | d d ƒ d  k sÝ t ‚ | d } | j d! k sü t ‚ | d d ƒ d" k st ‚ d S(#   uå   
    Regression test to fix an issue where the indices attached to parameter
    names on a compound model were not handled properly when one or more
    submodels have no parameters.  This was especially evident in slicing.
    i   t   c0_0t   c1_0i   Rh   i   i    iþÿÿÿRO   u   x_translationiÿÿÿÿu   y_translationt   matrixi   u   rotationu   c0_0_1u   c1_0_1u   c0_1_1u   c0_0_2u   c1_0_2u   c0_1_2u   offset_3u   offset_4u   matrix_5u   translation_5g      7@g     €J@g      ð?N(   i    i   i    i   (
   u   c0_0_1u   c1_0_1u   c0_1_1u   c0_0_2u   c1_0_2u   c0_1_2u   offset_3u   offset_4u   matrix_5u   translation_5(   g      7@g     €J@(   u   offset_3u   offset_4u   matrix_5u   translation_5(   g      ð?g      ð?(   R   R   R   R   RU   R!   (   t   p2t   p1t   mappingt   offxt   offyt   affRs   RR   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt1   test_slicing_on_instance_with_parameterless_modelr  s     '  
c          C` s  t  d ƒ }  t  d ƒ } t d d g d d g g ƒ } |  | @| B} | d d ƒ \ } } | d k sk t ‚ | d k s} t ‚ t | t ƒ s’ t ‚ t | t ƒ s§ t ‚ | d d d g d d d g ƒ \ } } t j | d d d g k ƒ sò t ‚ t j | d d d g k ƒ st ‚ d	 S(
   uË   
    Ensure that the ``standard_broadcasting`` flag is properly propagated when
    creating compound models.

    See the commit message for the commit in which this was added for more
    details.
    i   i   i    iÿÿÿÿiþÿÿÿiýÿÿÿiüÿÿÿi   N(   R   R   R!   R$   R%   R]   R^   (   R”   R•   t   rotRR   R   R   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt1   test_compound_model_with_nonstandard_broadcasting  s    	'$c           C` s   t  j t t ƒ d S(   u›  
    Regression test for an issue raised here:
    https://github.com/astropy/astropy/pull/3231#discussion_r22221123

    The issue is that part of the `help` implementation calls a utility
    function called `inspect.classify_class_attrs`, which was leading to an
    infinite recursion.

    This is a useful test in its own right just in that it tests that compound
    models can be introspected in some useful way without crashing--this works
    as sort of a test of its somewhat complicated internal state management.

    This test does not check any of the results of
    `~inspect.classify_class_attrs`, though it might be useful to at some
    point.
    N(   t   inspectt   classify_class_attrsR   (    (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt'   test_compound_model_classify_attributes¨  s    c           C` s    t  j t ƒ  t t BWd QXt  j t ƒ  t d ƒ t d d d ƒ BWd QXt  j t ƒ  t t Wd QXt  j t ƒ  t d ƒ t d d d ƒ Wd QXd S(   uq   
    Test that certain operators do not work with models whose inputs/outputs do
    not match up correctly.
    NiZ   i   i    gš™™™™™¹?(   R0   R1   R
   R   R   (    (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_invalid_operands½  s     t   _ConstraintsTestAc           B` sG   e  Z e d  d d d d d ƒ Z e d  d d e ƒ Z e d „  ƒ Z RS(   t   defaulti    t   mint   maxg333333Ó?t   fixedc         C` s
   |  | f S(   N(    (   Re   Rc   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   evaluateÔ  s    (   t   __name__t
   __module__R   Re   t   TrueRc   t   staticmethodR£   (    (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyRž   Ð  s   t   _ConstraintsTestBc           B` s,   e  Z e d  d d e ƒ Z e d „  ƒ Z RS(   RŸ   i    R¢   c         C` s   |  S(   N(    (   Rc   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR£   Ü  s    (   R¤   R¥   R   R¦   Rc   R§   R£   (    (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR¨   Ù  s   t   boundsg333333Ó?u   stddevR¢   u   meanc         C` sÌ  t  |  ƒ }  d |  j k s! t ‚ |  j d d k s: t ‚ |  j j d k sR t ‚ d |  j k sg t ‚ |  j d t k s€ t ‚ |  j j t k s˜ t ‚ d |  j k s­ t ‚ |  j d t k sÆ t ‚ |  j j t k sÞ t ‚ d |  d j _ |  j d d k st ‚ |  j j d k st ‚ |  d j j d k s;t ‚ |  d j d d k sXt ‚ d |  d j d <|  j d d k s‚t ‚ |  j j d k sšt ‚ |  d j j d k s¶t ‚ |  d j d d k sÓt ‚ t	 |  d
 j
 _ |  j d t	 k süt ‚ |  j j t	 k st ‚ |  d
 j
 j t	 k s0t ‚ |  d
 j d t	 k sMt ‚ t |  d
 j d <|  j d t k swt ‚ |  j j t k st ‚ |  d
 j
 j t k s«t ‚ |  d
 j d t k sÈt ‚ d S(   u©  
    Various tests for copying of constraint values between compound models and
    their members.

    There are two versions of this test: One where a compound model is created
    from two model instances, and another where a compound model is created
    from two model classes that have default constraints set on some of their
    parameters.

    Regression test for https://github.com/astropy/astropy/issues/3481
    u   stddev_0i    g333333Ó?u   mean_0u   mean_1gš™™™™™Ù?u   stddevgš™™™™™¹?g      à?i   u   meanN(   i    g333333Ó?(   i    g333333Ó?(   i    gš™™™™™Ù?(   i    gš™™™™™Ù?(   i    gš™™™™™Ù?(   i    gš™™™™™Ù?(   i    gš™™™™™Ù?(   gš™™™™™¹?g      à?(   gš™™™™™¹?g      à?(   gš™™™™™¹?g      à?(   gš™™™™™¹?g      à?(   gš™™™™™¹?g      à?(   R   R©   R!   Rf   R¢   R¦   Rd   t   mean_1Re   R.   Rc   (   Rs   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_inherit_constraintsá  s<    c          C` s¶   t  d d d d d ƒ}  t d ƒ } t d ƒ } |  | B} |  | _ | | B} t | j d ƒ |  | j Bd ƒ ƒ t j t ƒ  | | j Wd QXt j t ƒ  | |  @j Wd QXd S(   uê   
    Test that a compound model with a custom inverse has that inverse applied
    when the inverse of another model, of which it is a component, is computed.
    Regression test for https://github.com/astropy/astropy/issues/3542
    i   Ri   Rj   i   N(   R   R   R   Ro   R   R0   R1   Rr   (   Rm   t   scaleR‚   t   model1t   model2(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_compound_custom_inverse  s    
	
#u   polyc         C` s‹   d d d d d d g |  _  t d ƒ } |  | B} t j d d … d d … f \ } } | | | ƒ } | |  | | ƒ ƒ } t | | ƒ d S(   uY   
    Tests that polynomials are scaled when used in compound models.
    Issue #3699
    i   i   i   i   Ni   i%   (   R_   R   R]   t   mgridR   (   Rm   R‚   Rs   R   R   t   result_compoundR'   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_compound_with_polynomials<  s    
%t   _TestPickleModelc           B` s   e  Z RS(    (   R¤   R¥   (    (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyR³   N  s   u   sys.version_info < (2, 7, 3)c          C` s²  t  t  }  t j t j |  ƒ ƒ } |  j | j k s: t ‚ |  j | j k sR t ‚ |  ƒ  d ƒ | ƒ  d ƒ k sv t ‚ t  d d d ƒ } t  d d g d d g d d g ƒ } | | } t j t j | ƒ ƒ } | j | j k sæ t ‚ | j j | j j k st ‚ t j	 | j
 | j
 k ƒ s%t ‚ t j	 | d	 ƒ | d	 ƒ k ƒ sLt ‚ t j t d
 d	 ƒ} d } | | j d ƒ  | | j d ƒ  k s“t ‚ t j | ƒ t k s®t ‚ d S(   ug   
    Regression test for
    https://github.com/astropy/astropy/issues/3867#issuecomment-114547228
    g|ò°Pkš¿?g      ð?g        gš™™™™™¹?g       @g      @gš™™™™™É?g333333Ó?i    t   protocols;   castropy.modeling.tests.test_compound
_TestPickleModel
p0
.RH   N(   R   t   picklet   loadst   dumpsRU   R!   R¤   t	   __class__R]   R^   R_   R³   t   rfind(   t   GGt   GG2t   g1RD   RR   t   m2RH   t   exp(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_pickle_compoundR  s"    
$$
!',u   sys.version_info >= (2, 7, 3)c          C` s4   t  t  ƒ  }  t j t ƒ  t j |  ƒ Wd QXd S(   u~   
    Test fallback for pickling compound model on old versions of Python
    affected by http://bugs.python.org/issue7689
    N(   R   R0   R1   t   RuntimeErrorRµ   R·   (   t   gg(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_pickle_compound_fallbackz  s    c          C` s¢   t  d ƒ }  t d ƒ } |  | B} | d ƒ d k s: t ‚ d |  _ | d ƒ d k s[ t ‚ d | _ | d ƒ d k s| t ‚ | |  B} | d ƒ d k sž t ‚ d  S(   Ni   i   i   i*   id   iÈ   iò   (   R   R   R!   t   offsett   factor_1(   R”   t   sclRR   R½   (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_update_parameters†  s    
		
c          C` s°   t  d ƒ }  t d ƒ } |  | B} d | _ | j d k s@ t ‚ | j d  k sU t ‚ d | _ | j d k ss t ‚ | j d ƒ } | j d k s— t ‚ | j d k s¬ t ‚ d  S(	   Ni   i   u   scaleu   None_0u   None_1u   Mu   M1(   u   None_0u   None_1(   R   R   RO   t   _submodel_namesR!   t   NoneRT   (   R”   RÅ   RR   t   m1(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt	   test_name•  s    
		u   not HAS_SCIPY_14c          C` s±   t  d d d d g f d d d d g d	 t ƒ }  t d
 ƒ } t d ƒ } t j d ƒ j d ƒ } | |  @| B} | | | ƒ \ } } | j d
 k s˜ t ‚ | j d
 k s­ t ‚ d S(   uK   
    Issue #7411 - evaluate should not change the shape of the output.
    t   pointsi   i   i   t   lookup_tablei   i   i   t   bounds_errori   i   i   N(   i   i   (	   R   R.   R   R   R]   t   aranget   reshapet   ndimR!   (   Rp   R˜   RH   R   Rs   t   x1t   y1(    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   test_tabular_in_compound¢  s    '	(   u   expru   resultgUUUUUUå?(   u   expru   resultgUUUUUUå?gUUUUUUå?(   u   expru   resultgUUUUUUå?gUUUUUUå?(   u   expru   resultgUUUUUUå?(   u   expru   resultgUUUUUUå?(   i    g333333Ó?(W   t
   __future__R    R   R   R   Rš   t   copyR   R0   t   numpyR]   t   numpy.testingR   R   t   extern.six.movesR   Rµ   t   utilsR   t   coreR	   R
   R_   R   t   modelsR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   scipyR   R¦   t	   HAS_SCIPYt   ImportErrorR.   t   HAS_SCIPY_14t   markt   parametrizeR+   R/   R3   R4   R:   R;   RB   RI   RN   RS   R\   R`   Rn   Rq   Rt   R|   R}   R…   RŒ   R   R—   R™   Rœ   R   Rž   R¨   R«   R¯   R²   R³   t   skipift   strR¿   RÂ   RÆ   RÊ   RÓ   (    (    (    sC   lib/python2.7/site-packages/astropy/modeling/tests/test_compound.pyt   <module>   s®   "j

$$
				;	'	8	*	7	
1
				(						 ;	--!(!		