3

6^7              	   @   sH  d Z ddlmZmZmZ ddlZddlmZ ddddd	d
gZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zee
eeed!d"d#d$d%Zd&d
 Zeeeeed'd(d)d$d*Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zeeeeed;d<d=d$d*Z eeeeed>d?d@d$d*Z!dS )AzI Collection of Model instances for use with the odrpack fitting package.
    )divisionprint_functionabsolute_importN)Modelr   exponentialmultilinear	unilinear	quadratic
polynomialc             C   s:   | d | dd   }}|j d df|_ ||| jdd S )Nr      )axis)shapesum)Bxab r   1/tmp/pip-build-vw4w4j08/scipy/scipy/odr/models.py_lin_fcn   s    r   c             C   s>   t j|jd t}t j||j f}| jd |jd f|_|S )Nr   r   r   )nponesr   floatconcatenateZravel)r   r   r   resr   r   r   _lin_fjb   s    r   c             C   s:   | dd  }t j||jd f|jd  dd}|j|_|S )Nr   r   )r   r   r   )r   repeatr   )r   r   r   r   r   r   _lin_fjd   s    "r   c             C   s4   t | jjdkr| jjd }nd}tj|d ftS )N   r   r   )lenr   r   r   r   r   )datamr   r   r   _lin_est!   s    r#   c             C   sD   | d | dd   }}|j d df|_ |tj|tj|| dd S )Nr   r   )r   )r   r   r   power)r   r   powersr   r   r   r   r   	_poly_fcn.   s    r&   c             C   s@   t jt j|jd tt j||jf}| jd |jd f|_|S )Nr   r   r   r   )r   r   r   r   r   r$   Zflat)r   r   r%   r   r   r   r   _poly_fjacb5   s    r'   c             C   sB   | dd  }|j d df|_ || }tj|tj||d  ddS )Nr   r   )r   )r   r   r   r$   )r   r   r%   r   r   r   r   _poly_fjacd<   s    r(   c             C   s   | d t j| d |  S )Nr   r   )r   exp)r   r   r   r   r   _exp_fcnE   s    r*   c             C   s   | d t j| d |  S )Nr   )r   r)   )r   r   r   r   r   _exp_fjdI   s    r+   c             C   sB   t jt j|jd t|t j| d |  f}d|jd f|_|S )Nr   r   r   r   )r   r   r   r   r   r)   )r   r   r   r   r   r   _exp_fjbM   s    .r,   c             C   s   t jddgS )Ng      ?)r   array)r!   r   r   r   _exp_estS   s    r.   zArbitrary-dimensional Linearz y = B_0 + Sum[i=1..m, B_i * x_i]z&$y=\beta_0 + \sum_{i=1}^m \beta_i x_i$)nameequTeXequ)fjacbfjacdestimatemetac             C   sx   t j| }|jf kr$t jd|d }t|df|_t|d }|fdd}tttt||fdd|d  d|d  ddS )	a  
    Factory function for a general polynomial model.

    Parameters
    ----------
    order : int or sequence
        If an integer, it becomes the order of the polynomial to fit. If
        a sequence of numbers, then these are the explicit powers in the
        polynomial.
        A constant term (power 0) is always included, so don't include 0.
        Thus, polynomial(n) is equivalent to polynomial(range(1, n+1)).

    Returns
    -------
    polynomial : Model instance
        Model instance.

    r   c             S   s   t j|ftS )N)r   r   r   )r!   len_betar   r   r   	_poly_est{   s    zpolynomial.<locals>._poly_estzSorta-general Polynomialz$y = B_0 + Sum[i=1..%s, B_i * (x**i)]z)$y=\beta_0 + \sum_{i=1}^{%s} \beta_i x^i$)r/   r0   r1   )r3   r2   r4   
extra_argsr5   )	r   Zasarrayr   Zaranger    r   r&   r(   r'   )orderr%   r6   r7   r   r   r   r
   _   s    


ZExponentialzy= B_0 + exp(B_1 * x)z$y=\beta_0 + e^{\beta_1 x}$)r3   r2   r4   r5   c             C   s   || d  | d  S )Nr   r   r   )r   r   r   r   r   _unilin   s    r:   c             C   s   t j|jt| d  S )Nr   )r   r   r   r   )r   r   r   r   r   _unilin_fjd   s    r;   c             C   s(   t j|t j|jtf}d|j |_|S )Nr   )r   )r   r   r   r   r   )r   r   _retr   r   r   _unilin_fjb   s    r=   c             C   s   dS )N      ?)r>   r>   r   )r!   r   r   r   _unilin_est   s    r?   c             C   s    ||| d  | d   | d  S )Nr   r   r   r   )r   r   r   r   r   
_quadratic   s    r@   c             C   s   d| | d  | d  S )Nr   r   r   r   )r   r   r   r   r   	_quad_fjd   s    rA   c             C   s.   t j|| |t j|jtf}d|j |_|S )N   )rB   )r   r   r   r   r   )r   r   r<   r   r   r   	_quad_fjb   s    rC   c             C   s   dS )N      ?)rD   rD   rD   r   )r!   r   r   r   	_quad_est   s    rE   zUnivariate Linearzy = B_0 * x + B_1z$y = \beta_0 x + \beta_1$Z	Quadraticzy = B_0*x**2 + B_1*x + B_2z&$y = \beta_0 x^2 + \beta_1 x + \beta_2)"__doc__
__future__r   r   r   Znumpyr   Zscipy.odr.odrpackr   __all__r   r   r   r#   r&   r'   r(   r*   r+   r,   r.   r   r
   r   r:   r;   r=   r?   r@   rA   rC   rE   r   r	   r   r   r   r   <module>   sT   
	(