
[c           @` sk  d  Z  d d l m Z m Z m Z m Z d d l 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 m Z d d l Td 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 d d l  Z  y d d l! m" Z" e# Z$ Wn e% k
 rQe& Z$ n Xe# Z' y d d l( m) Z) Wn; e% k
 ry d d l) Z) Wqe% k
 re& Z' qXn Xy d d l* m+ Z+ e# Z, Wn e% k
 re& Z, n Xe- e. g Z/ d Z0 d e1 f d     YZ2 d e1 f d     YZ3 e j4 j5 d  d e1 f d     Y Z6 d e1 f d     YZ7 e j4 j5 d  d  e1 f d!     Y Z8 e j4 j5 d"  e j4 j5 d#  d$ e1 f d%     Y  Z9 e j4 j5 d  d& e1 f d'     Y Z: e j4 j5 d  d( e1 f d)     Y Z; e j4 j5 d  d* d. d+     Y Z< e j4 j5 d  d,    Z= e j4 j5 d  d-    Z> d S(/   u!   
Module to test fitting routines
i    (   t   absolute_importt   unicode_literalst   divisiont   print_functionN(   t   linalg(   t   assert_allcloset   assert_almost_equali   (   t   irafutili   (   t   models(   t   Fittable2DModelt	   Parameter(   t   *i   (   t   NumpyRNGContext(   t   get_pkg_data_filename(   t   ignore_non_integer_warning(   t
   sigma_clip(   t   AstropyUserWarning(   t   populate_entry_points(   t   optimize(   t   mock(   t
   EntryPointi7  t   TestPolynomial2Dc           B` sD   e  Z d  Z d   Z d   Z d   Z e j j d  d    Z	 RS(   u    Tests for 2D polynomail fitting.c         C` sn   t  j d  |  _ t j d  d  d  d  f \ |  _ |  _ d   } | |  j |  j  |  _ t   |  _	 d  S(   Ni   i   c         S` s8   d d |  d |  d d | d | d d |  | S(   Ni   i   i   i   i   i   (    (   t   xt   y(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   poly2?   s    (
   R   t   Polynomial2Dt   modelt   npt   mgridR   R   t   zt   LinearLSQFittert   fitter(   t   selfR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   setup_class;   s
    +	c         C` sx   |  j  j d |  j d |  j  } t j | |  j j    d } |  j |  j  |  j |  j |  j  } t	 | j
 |  d  S(   NR   R   i    (   R   t	   fit_derivR   R   R   t   lstsqR   t   flattenR   R   t
   parameters(   R    t   vt   pt	   new_model(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_poly2D_fittingD   s    !$c         C` sG   |  j  |  j |  j |  j |  j  } t | |  j |  j  |  j  d  S(   N(   R   R   R   R   R   R   (   R    R(   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt	   test_evalJ   s    $u   not HAS_SCIPYc         C` sn   d d d d d d g |  j  _ t   } | |  j  |  j |  j |  j  } t | j d d d	 d
 d d g  d  S(   Ng333333?g?g333333@g@g@g@i   i   i   i   i   i   (   R   R%   t   LevMarLSQFitterR   R   R   R   (   R    t   nlfitterR(   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt#   test_polynomial2D_nonlinear_fittingN   s    	!(
   t   __name__t
   __module__t   __doc__R!   R)   R*   t   pytestt   markt   skipifR-   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   8   s
   				t   TestICheb2Dc           B` s_   e  Z d  Z d   Z d   Z d   Z e j j d  d    Z	 e j j d  d    Z
 RS(   u   
    Tests 2D Chebyshev polynomial fitting

    Create a 2D polynomial (z) using Polynomial2DModel and default coefficients
    Fit z using a ICheb2D model
    Evaluate the ICheb2D polynomial and compare with the initial z
    c         C` s}   t  j d  |  _ t j d  d  d  d  f \ |  _ |  _ |  j |  j |  j  |  _ t  j d d  |  _	 t
   |  _ d  S(   Ni   i   (   R   R   t   pmodelR   R   R   R   R   t   Chebyshev2Dt   cheb2R   R   (   R    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!   _   s
    +c      
   C` s   t  j d  |  j _ t  j d d d d d d d d	 d
 g	  } |  j |  j |  j  } |  j |  j |  j |  j |  } t | j |  d  S(   Ni	   g      @g     @g      y@g     @g      @g     @@g      {@g     @g      `@(	   R   t   arangeR7   R%   t   arrayR   R   R   R   (   R    R'   R   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_default_paramsf   s    !c         C` sM   |  j  |  j |  j |  j |  j  } | |  j |  j  } t |  j |  d  S(   N(   R   R7   R   R   R   R   (   R    R   t   z1(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_poly2D_cheb2Dn   s    $u   not HAS_SCIPYc         C` s   t  j d d  } t j d  | _ | |  j |  j  } d d d d d d d	 d
 d g	 | _ t   } | | |  j |  j |  } t | j d d d d d d d d d g	 d d d  S(   Ni   i	   g?g333333?g?g333333@g@g@g@g      @g!@i    i   i   i   i   i   i   i   t   atoli
   ig&.>(	   R   R6   R   R8   R%   R   R   R+   R   (   R    t   cheb2dR   R,   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt"   test_chebyshev2D_nonlinear_fittings   s    $	*c         C` s   t  j d d  } t j d  | _ | |  j |  j  } d d d d d d d	 d
 d g	 | _ t   } t j |  j  } | | |  j |  j | d | } t	 | j d d d d d d d d d g	 d d d  S(   Ni   i	   g?g333333?g?g333333@g@g@g@g      @g!@t   weightsi    i   i   i   i   i   i   i   R=   i
   ig&.>(
   R   R6   R   R8   R%   R   R   R+   t	   ones_likeR   (   R    R>   R   R,   R@   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt/   test_chebyshev2D_nonlinear_fitting_with_weights~   s    $	!*(   R.   R/   R0   R!   R:   R<   R1   R2   R3   R?   RB   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR4   V   s   			u   not HAS_SCIPYt   TestJointFitterc           B` s)   e  Z d  Z d   Z d   Z d   Z RS(   uA   
    Tests the joint fitting routine using 2 gaussian models
    c         C` s#  t  j d d d d d |  _ t  j d d d d d |  _ t |  j |  j g i d g |  j 6d g |  j 6d	 g  |  _ t j d d
 d  |  _ |  j |  j  } |  j |  j  } t	 t
   t j j d  } Wd QX| d | |  _ | d | |  _ |  j |  j |  j |  j |  j  d S(   u   
        Create 2 gaussian models and some data with noise.
        Create a fitter for the two models keeping the amplitude parameter
        common for the two models.
        i
   t   meang-@t   stddevg333333?i   g?u	   amplitudeg#@i   g?id   Ni   (   R   t
   Gaussian1Dt   g1t   g2t   JointFittert   jfR   R8   R   R   t   _RANDOM_SEEDt   randomt   randnt   ny1t   ny2(   R    t   y1t   y2t   n(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!      s    c         C` sF   t  |  j j d |  j j d  t  |  j j d |  j j d  d S(   uH   
        Tests that the amplitude of the two models is the same
        i    N(   R   RJ   t	   fitparamsRG   R%   RH   (   R    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_joint_parameter   s    !c         ` s   d d g } d d g } d } t  j | | | f } d       f d   } t j | | d |  j |  j |  j |  j f \ } } t | |  j j	 d	 d d S(   uk   
        Tests the fitting routine with similar procedure.
        Compares the fitted parameters.
        g-@g333333?i   g?g#@c         S` s-   |  t  j d | d d | | d d  S(   Ng      i   i   i    (   R   t   exp(   t   AR'   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR      s    c         ` sM   t  j t  j   |  d |  d d !|  |   |  d |  d |  | f  S(   Ni    i   i   (   R   t   ravelt   r_(   R'   t   x1RP   t   x2RQ   (   R   (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   errfunc   s    *t   argst   rtoli
   iNg{Gz?(
   R   RX   R   t   leastsqR   RN   RO   R   RJ   RS   (   R    t   p1t   p2RV   R'   R[   t   coefft   _(    (   R   sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_joint_fitter   s    	'(   R.   R/   R0   R!   RT   Rc   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyRC      s   		t   TestLinearLSQFitterc           B` s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  t j j d d   } t |  " } | j   } | j d  } Wd QXt j | d  } | j	 } t
 | j d  } t j | d d | j   } t   }	 |	 | | j | j  }
 t |
 j t j |  d d	 d S(
   u@   Tests fitting a 1D Chebyshev polynomial to some real world data.u   datau   idcompspec.fitsu   beginNi   u   ordert   domainR]   g?(   R   t   ost   patht   joint   opent   readt   splitR   t   IdentifyRecordRa   t   intt   fieldsR   t   Chebyshev1Dt	   get_rangeR   R   R   R   R%   R   R9   (   R    t	   test_filet   ft   linest   reclistt   recordt   coeffst   ordert   initial_modelR   t   fitted_model(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_chebyshev1D   s    		c      
   C` s   t  j d d d d d g d d  } t j d  } | | d t } | j d k sZ t  t t  ' | t j	 j
 d d	 d
 | j } Wd QXt   } | | | |  } t | | d t | d d d S(   u-   Tests fitting multiple models simultaneously.t   degreei   t   c0i   t   n_modelsi
   t   model_set_axisi    g{Gz?t   sizeNR]   g?(   i   i
   (   R   t   Polynomial1DR   R8   t   Falset   shapet   AssertionErrorR   RK   RL   t   normalR   R   (   R    t
   init_modelR   t
   y_expectedR   R   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_linear_fit_model_set   s    $(	c      
   C` s   t  j d d d d d g d d  } t j d  } t j d  } | | | d t } | j d k sl t  t t  ' | t j	 j
 d d	 d
 | j } Wd QXt   } | | | | |  } t | | | d t | d d d S(   u0   Tests fitted multiple 2-D models simultaneously.R{   i   t   c0_0i   R}   i
   R~   i    g{Gz?R   NR]   g?(   i   i
   (   R   R   R   R8   R   R   R   R   RK   RL   R   R   R   (   R    R   R   R   t
   z_expectedR   R   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_linear_fit_2d_model_set   s    $(	c         C` s   t  j d d d d  } t | j _ t j d  } d | d | | } t   } | | | |  } t | j	 d d d g d	 d
 d S(   uX   
        Tests fitting a polynomial model with a fixed parameter (issue #6135).
        R{   i   t   c1i   i
   g      ?g       @g      ?R=   g+=N(
   R   R   t   TrueR   t   fixedR   R8   R   R   R%   (   R    R   R   R   R   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_linear_fit_fixed_parameter   s    	c         C` s   t  j d d d d d g d d  } t | j _ t j d  } t j d | d | | d | g  } t   } | | | |  } t	 | j
 d	 d
 g d d t	 | j d d g d d t	 | j d d
 g d d d S(   uV   
        Tests fitting a polynomial model set with a fixed parameter (#6135).
        R{   i   R   i   iR}   i
   g      ?g       @g        R=   g+=g      ?g       N(   R   R   R   R   R   R   R8   R9   R   R   R|   t   c2(   R    R   R   t   yyR   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt)   test_linear_fit_model_set_fixed_parameter  s    $)	c         C` s   t  j d d d d d g d d d g d d d i t d	 6t d
 6 } t j d d  d d  f \ } } t j d | d | d | | d | | d | | g  } t   } | | | | |  } t | | | d t | d d d S(   uX   
        Tests fitting a 2d polynomial model set with fixed parameters (#6135).
        R{   i   t   c1_0i   t   c0_1g      R}   R   u   c1_0u   c0_1i    i   g      ?g?g?R~   R=   g+=N(	   R   R   R   R   R   R9   R   R   R   (   R    R   R   R   t   zzR   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt-   test_linear_fit_2d_model_set_fixed_parameters  s    '%A	(   R.   R/   Rz   R   R   R   R   R   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyRd      s   					t   TestNonLinearFittersc           B` st   e  Z d  Z d   Z d   Z d   Z d   Z d   Z e j	 j
 d e  d    Z d   Z d	   Z d
   Z RS(   u?   Tests non-linear least squares fitting and the SLSQP algorithm.c         C` s   d d d g |  _  t j d d d  |  _ d t j |  j  } t t   t j j d |  } Wd  QXd   } | |  j  |  j  | |  _	 t
 j d d d	 d |  _ d  S(
   Nid   i   i   i    i
   g?g      @c         S` s1   |  d t  j d |  d d | |  d d  S(   Ni    g      i   i   (   R   RU   (   R'   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   func<  s    RE   (   t   initial_valuesR   R8   t   xdataRA   R   RK   RL   R   t   ydataR   RF   t   gauss(   R    t   sigmat   yerrorR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!   3  s    	c         C` s   t    } | |  j |  j |  j  } t j d d d d } t    } | | |  j |  j d t } t | j | j d d
 d	 S(   uk   
        Runs `LevMarLSQFitter` with estimated and analytic derivatives of a
        `Gaussian1D`.
        id   g      @RE   i   t   estimate_jacobianR]   i
   iNgMbP?(	   R+   R   R   R   R   RF   R   R   R%   (   R    R   R   t   g1et   efittert   emodel(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt    test_estimated_vs_analytic_derivB  s    		c         C` s   d |  j  d } t   } | |  j |  j |  j  d | } t j d d d d } t   } | | |  j |  j  d | d t } t | j | j d	 d d S(   uk   
        Runs `LevMarLSQFitter` with estimated and analytic derivatives of a
        `Gaussian1D`.
        g      ?g      $@R@   id   g      @RE   i   R   R]   i
   iNgMbP?(	   R   R+   R   R   R   RF   R   R   R%   (   R    R@   R   R   R   R   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt-   test_estimated_vs_analytic_deriv_with_weightsO  s    	!	$c         ` s   t    } | |  j |  j |  j d t } d       f d   } t j | |  j d |  j |  j f } t | j	 | d d d
 d	 S(   uX   
        Tests results from `LevMarLSQFitter` against `scipy.optimize.leastsq`.
        R   c         S` s1   |  d t  j d |  d d | |  d d  S(   Ni    g      i   i   (   R   RU   (   R'   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   g  s    c         ` s     |  |  | S(   N(    (   R'   R   R   (   R   (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR[   j  s    R\   i    R]   i
   iNgMbP?(
   R+   R   R   R   R   R   R^   R   R   R%   (   R    R   R   R[   t   result(    (   R   sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_with_optimize^  s    			c      	   C` s  t    } | |  j |  j |  j d t } | |  j |  j |  j d t d t j |  j  } t | j | j d d	 t j	 |  j  } d | d d d  <| d k } | |  j |  j | |  j | d t } | |  j |  j |  j d t d | } t | j | j d d
 d S(   uD   
        Tests results from `LevMarLSQFitter` with weights.
        R   R@   R]   i
   ig      ?Ni   g-C6?g-C6?(
   R+   R   R   R   R   R   RA   R   R%   t
   zeros_like(   R    R   R   t   withwR@   t   mask(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_with_weightsq  s    		 	u   fitter_classc         C` su   t    } |   } t     | |  j |  j |  j  } Wd QX| |  j |  j |  j  } t | j | j d d d S(   u@   Tests results from non-linear fitters against `LevMarLSQFitter`.NR]   i
   ig-C6?(   R+   R   R   R   R   R   R%   (   R    t   fitter_classt   levmarR   R(   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_fitter_against_LevMar  s    		
!c         C` s   t  j d d d d } t | j _ t   } t   } t    | | |  j |  j	  } Wd QX| | |  j |  j	  } t
 | j | j d d	 d S(
   ub   
        Runs `LevMarLSQFitter` and `SLSQPLSQFitter` on a model with
        constraints.
        id   i   RE   i   NR]   i
   ig-C6?(   R   RF   R   RD   R   R+   t   SLSQPLSQFitterR   R   R   R   R%   (   R    RG   R   t   fslsqpt   slsqp_modelR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_LSQ_SLSQP_with_constraints  s    		
c      
   C` s   d t  f d     Y} t j d d d  } } t t  ? | j | | d d  } | t j j d d	 d
 | j 7} Wd QXt	   } | d d  } | | | | |  } t
 | j d d g d d d S(   u)   A basic test for the `SimplexLSQ` fitter.t
   Rosenbrockc           B` s)   e  Z e   Z e   Z e d     Z RS(   c         S` s    | |  d | | |  d d S(   Ni   (    (   R   R   t   at   b(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   evaluate  s    (   R.   R/   R
   R   R   t   staticmethodR   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR     s   		g      g      @id   g      ?g      Y@g        g?R   Ni   R]   g{Gz?(   R	   R   t   linspaceR   RK   R   RL   R   R   t   SimplexLSQFitterR   R%   (   R    R   R   R   R   R   t   r_it   r_f(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_simplex_lsq_fitter  s    (	c         C` sk  d } d } t  t  > t j d d d  } | | | t j j t |   } Wd QXt j t j | t j	 t |   g  j
  } t j j | j
 |  | j
 t j |  j
 } t j | | | j j   d  t |  t |  } t j j | j
 |  | } t j | |  }	 t   }
 |
 |	 | |  } t | j | j j    t | |
 j d  d S(   u   
        Tests that the 'param_cov' fit_info entry gets the right answer for
        *linear* least squares, where the answer is exact
        i   id   i    i   Nu	   param_cov(   R   RK   R   R   RL   RM   t   lent   matrixt   vstackt   onest   TR   t   invt   sumRV   RW   R   t   Linear1DR+   R   R%   t   fit_info(   R    R   R   R   R   t   Xt   betat   s2t   olscovt   modR   t   fmod(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_param_cov  s    *008	(   R.   R/   R0   R!   R   R   R   R   R1   R2   t   parametrizet   fittersR   R   R   R   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   /  s   							u   not HAS_MOCKu   not HAS_PKGt   TestEntryPointc           B` s_   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   u4   Tests population of fitting with entry point fittersc         C` s   t  d  |  _ d  S(   NuC   The test should not have gotten here. There was no exception thrown(   t	   Exceptiont   exception_not_thrown(   R    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!     s    c         C` s   d t  f d     Y} | S(   Nt	   goodclassc           B` s   e  Z d  Z  RS(   u	   GoodClass(   R.   R/   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR     s   (   t   Fitter(   R    R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   successfulimport  s    c         C` s
   t   d  S(   N(   t   ImportError(   R    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   raiseimporterror  s    c         C` s   d   } | S(   Nc           S` s   d  S(   N(    (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   badfunc  s    (    (   R    R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   returnbadfunc  s    	c         C` s   d t  f d     Y} | S(   Nt   badclassc           B` s   e  Z RS(    (   R.   R/   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR     s   (   t   object(   R    R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   returnbadclass  s    c         C` s5   t  j t  } d | _ |  j | _ t | g  d S(   u   This should work fineu   WorkingN(   R   t   create_autospecR   t   nameR   t   loadR   (   R    t   mock_entry_working(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_working  s    	c      	   C` s   t  j    t  j d  y5 t j t  } d | _ |  j | _ t	 | g  Wn/ t
 k
 r } d | j d k rw q |  n
 X|  j  Wd QXd S(   uH   This raises an import error on load to test that it is handled correctlyu   erroru   IErru   ImportErrori    N(   t   warningst   catch_warningst   filterwarningsR   R   R   R   R   R   R   R   R\   R   (   R    t   mock_entry_importerrort   w(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_import_error   s    	
c      	   C` s   t  j    t  j d  y5 t j t  } d | _ |  j | _ t	 | g  Wn/ t
 k
 r } d | j d k rw q |  n
 X|  j  Wd QXd S(   u2   This returns a function which fails the type checku   erroru   BadFuncu   Classi    N(   R   R   R   R   R   R   R   R   R   R   R   R\   R   (   R    t   mock_entry_badfuncR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_bad_func  s    	
c      	   C` s   t  j    t  j d  y5 t j t  } d | _ |  j | _ t	 | g  Wn/ t
 k
 r } d | j d k rw q |  n
 X|  j  Wd QXd S(   u9   This returns a class which doesn't inherient from fitter u   erroru   BadClassu   modeling.Fitteri    N(   R   R   R   R   R   R   R   R   R   R   R   R\   R   (   R    t   mock_entry_badclassR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_bad_class"  s    	
(   R.   R/   R0   R!   R   R   R   R   R   R   R   R   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR     s   								t   Test1DFittingWithOutlierRemovalc           B` s   e  Z d    Z d   Z RS(   c         C` sF   t  j d d d  |  _ d |  _ d   } | |  j |  j  |  _ d  S(	   Ng      g      @i   g      @g?g?c         S` s1   |  d t  j d | |  d d |  d d  S(   Ni    g      i   i   (   R   RU   (   R'   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   :  s    (   g      @g?g?(   R   R   R   t   model_paramsR   (   R    R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!   6  s    		c         C` s  d d  l  j } t j j d  | j j d d |  j j } |  j	 t j j
 d d |  j j  | t j j
 d d |  j j  7_	 t j d d	 d
 d d d	  } t t   t d d d d } | | |  j |  j	  \ } } t | j |  j d d t t   t d d d d } | | |  j |  j	  \ } } t | j |  j d d t t   t d d d d } | | |  j |  j	  \ } } t | j |  j d d d  S(   Ni    g      ?R   g        g?g      @g      @t	   amplitudeg      ?RD   RE   t   niteri   R   R]   g?R=   (   t   scipy.statst   statsR   RL   t   seedt	   bernoullit   rvsR   R   R   R   R   RF   t   FittingWithOutlierRemovalR+   R   R   R%   R   R   R   (   R    R   t   ct   g_initt   fitRb   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt    test_with_fitters_and_sigma_clip?  s$    "%(   R.   R/   R!   R   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   4  s   		t   Test2DFittingWithOutlierRemovalc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sq   t  j d d d  d d d  f \ |  _ |  _ d	 |  _ d   } | |  j t  j |  j |  j g   |  _ d  S(
   Nii   y              `@g      @g      ?g        g?c         S` sY   |  d t  j d | d |  d d |  d d d | d |  d d |  d d  S(   Ni    g      i   i   g      ?i   i   (   R   RU   (   R'   t   pos(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   Gaussian_2D_  s    0(   g      @g      ?g        g?g?(   R   R   R   R   R   R9   R   (   R    R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!   [  s    1		c         C` sD  | d } | d } | | } | | } t  j |  } t  j |  | } t  j |  | }	 | d j | | d j d | d j d | d d }
 | d j | | d j d | d j d | d d } t  j | |
 | d j d  j t  } t  j |	 | | d j d  j t  } | | | } | | |	 f S(   Ni    i   g       @(   R   R   R   t   aroundt   astypeRm   (   R    t   dataR   R   R   t   wxt   wyt   total_intensityt   x_meant   y_meant
   x_to_pixelt
   y_to_pixelt   x_post   y_posR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   initial_guesse  s    



;;++c         C` s  d d  l  j } t j j d  | j j d d |  j j } |  j t j j	 d d |  j j  | t j j	 |  j d |  j j  7_ |  j
 |  j t j |  j |  j g   } t j d | d d | d	 d
 | d d d d d  } t t   t d d d d } | | |  j |  j |  j  \ } } t | j d d !|  j d d t t   t d d d d } | | |  j |  j |  j  \ } } t | j d d !|  j d d t t   t d d d d } | | |  j |  j |  j  \ } } t | j d d !|  j d d d  S(   Ni    g      ?R   g        g?g       @R   R   i   R  i   t   x_stddevg      ?t   y_stddevg      ?R   i   R   g      @i   R=   g?(   R   R   R   RL   R   R   R   R   R   R   R  R9   R   R   R   t
   Gaussian2DR   R+   R   R   R%   R   R   R   (   R    R   R   t   guesst   g2_initR   Rb   Ry   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   {  s0    "(*	$	$$(   R.   R/   R!   R  R   (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR   Y  s   	
	t%   TestWeightedFittingWithOutlierRemovalc           B` s_   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   u   Issue #7020 c         C` s   t  j d d  d d  f \ |  _ |  _ t  j |  j |  j d  d d |  _ t  j |  j |  j d  d d |  _ d |  j d <d |  j d <|  j j   |  _ |  j j   |  _	 |  j j   |  _
 d  S(   Ni    i   i   i   g     @@(   i    i    (   i    i   (   R   R   R   R   R   R   R@   R$   t   x1dt   z1dt	   weights1d(   R    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR!     s    +''c         C` sW   t  j d  } t   } | | |  j |  j  } t | j d |  j j   d d d  S(   Ni    R=   i
   ig{Gz?(   R   R   R   R  R  R   R%   RD   (   R    R   R   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt*   test_1d_without_weights_without_sigma_clip  s    	c         C` s   t  j d  } t t   t d d d d } | | |  j |  j  \ } } | j   |  j j d k sm t	  | j
 d r | j
 d s t	  t | j d d d	 d d  S(   Ni    R   i   R   g      @i   i   g        R=   i
   ig{Gz?(   R   R   R   R   R   R  R  t   countR   R   R   R   R%   (   R    R   R   t   filteredR   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt'   test_1d_without_weights_with_sigma_clip  s    " c         C` sV   t  j d  } t   } | | |  j |  j d |  j } | j d d k sR t  d  S(   Ni    R@   g      ?(   R   R   R   R  R  R  R%   R   (   R    R   R   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt'   test_1d_with_weights_without_sigma_clip  s    	!c         C` s   t  j d  } t t   t d d d d } | | |  j |  j d |  j \ } } | j d d k sm t	  | j d d	 k  s t	  d
 S(   uX   smoke test for #7020 - fails without fitting.py patch because weights does not propagatei    R   i   R   g      @R@   i
   ig      ?Ng{Gz?(
   R   R   R   R   R   R  R  R  R%   R   (   R    R   R   R  R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt$   test_1d_with_weights_with_sigma_clip  s    'c         C` s]   t  j d  } t   } | | |  j |  j |  j  } t | j d |  j j   d d d  S(   Ni    R=   i
   ig{Gz?(	   R   R   R   R   R   R   R   R%   RD   (   R    R   R   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt*   test_2d_without_weights_without_sigma_clip  s    	c         C` s   t  j d  } t t   t d d d d } | | |  j |  j |  j  \ } } | j   |  j j	 d k ss t
  | j d r | j d s t
  t | j d d d	 d d  S(   Ni    R   i   R   g      @i   i   g        R=   i
   i(   i    i    (   i    i   g{Gz?(   R   R   R   R   R   R   R   R   R  R   R   R   R   R%   (   R    R   R   R  R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt'   test_2d_without_weights_with_sigma_clip  s    $" c         C` s\   t  j d  } t   } | | |  j |  j |  j d |  j } | j d d k sX t  d  S(   Ni    R@   g      ?(	   R   R   R+   R   R   R   R@   R%   R   (   R    R   R   R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt'   test_2d_with_weights_without_sigma_clip  s    	'c         C` s   t  j d  } t t   t d d d d } | | |  j |  j |  j d |  j \ } } | j	 d d k ss t
  | j	 d d	 k  s t
  d
 S(   uX   smoke test for #7020 - fails without fitting.py patch because weights does not propagatei    R   i   R   g      @R@   i
   ig      ?Ng{Gz?(   R   R   R   R+   R   R   R   R   R@   R%   R   (   R    R   R   R  R   (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt$   test_2d_with_weights_with_sigma_clip  s    -(   R.   R/   R0   R!   R  R  R  R  R  R  R  R  (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyR    s   											c    	   	   C` sC  t  j d d  d d  f \ }  } t   } t t  # t  j j d d d |  j } Wd QXt j	 d d d d d	  } | |  |  } | t j	 d
 d d d d  |  | | |  } t
 | j | j d d t j d	  } t  j d  d | _ | |  |  } | t j d	  |  | | |  } t
 | j | j d d d S(   u   Issue #5737 i    i   g{Gz?R   Ni
   i	   i   i   i   i   i   g?g333333?R=   ig{Gz?g{Gz?(   R   R   R+   R   RK   RL   R   R   R   R	  R   R%   R   R8   (	   t   Xint   YinR   t   zsigRH   R   t   gmodR`   t   pmod(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_fitters_with_weights  s    %	$."c          C` s   t    }  t   } t   } i d d 6d d 6d d 6d d 6} i d d 6d d 6d d 6} t j d	 d
 d  } t j d  } | |  } | | | | |  } | | | | |  }	 | j d  |  | | | |  }
 d S(   uV   
    Test that **kwargs work with all optimizers.
    This is a basic smoke test.
    iM   u   maxiteri   u	   verblevelg{Gz?u   epsilongư>u   acci
   i   g333333?i   N(   R+   R   R   R   RF   R   R8   t   pop(   R   t   slsqpt   simplext   kwargst   simplex_kwargsR   R   R   R   t   simplex_modelt   lm_model(    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   test_fitters_interface  s    			"(    (?   R0   t
   __future__R    R   R   R   t   os.pathRf   R1   t   numpyR   R   t   numpy.testingR   R   t    R   R   t   coreR	   R
   t   fittingt   utilsR   t
   utils.dataR   R   R   R   t   utils.exceptionsR   R   R   t   scipyR   R   t	   HAS_SCIPYR   R   t   HAS_MOCKt   unittestR   t   pkg_resourcesR   t   HAS_PKGR   R   R   RK   R   R   R4   R2   R3   RC   Rd   R   R   R   R   R  R  R'  (    (    (    sB   lib/python2.7/site-packages/astropy/modeling/tests/test_fitters.pyt   <module>   sl   "




59jW$B%L