3
OdE                 @   s|   d dl Zd dl mZ d dlmZ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 G dd deZdS )    N)pi)assert_array_almost_equalassert_equalassert_warns)raises)DataModelODRRealDataOdrStop
OdrWarningmultilinearexponential	unilinear	quadratic
polynomialc               @   s   e Z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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d+d, Zd-d. Zd/S )0TestODRc             C   s    t ttdd t ttdd d S )N      )assert_raises
ValueErrorr   r
   )self r   L/var/www/html/virt/lib64/python3.6/site-packages/scipy/odr/tests/test_odr.pytest_bad_data   s    zTestODR.test_bad_datac             C   s   |d | |d  S )Nr   r   r   )r   Bxr   r   r   empty_data_func   s    zTestODR.empty_data_funcc             C   sN   ddg}t | j}tg g }ttt|||d tg g }ttt|||d d S )Ng{Gz?g        )beta0)r   r   r   r   r   r	   r
   )r   r   linearZ	empty_datr   r   r   test_empty_data   s    


zTestODR.test_empty_datac             C   s2   |d |d t jt j|d | d d  }|S )Nr   r   r   g      ?)nppowerexp)r   r   r   retr   r   r   explicit_fcn&   s    .zTestODR.explicit_fcnc             C   s6   t j|d | }|d d |d  |d  | }|S )Nr   r   g       @g      ?)r!   r#   )r   r   r   eBxr$   r   r   r   explicit_fjd*   s     zTestODR.explicit_fjdc             C   sV   t j|d | }t jt j|jd t j|d d|d d |d  | | g}|S )Nr   r   g      ?g       @)r!   r#   vstackonesshaper"   )r   r   r   r&   resr   r   r   explicit_fjb/   s
     zTestODR.explicit_fjbc             C   s  t | j| j| jtdddd}tdddddd	d
dddddgddddddddddddg}t||dd1d2gddd d d d d d d d d dgd!}|jd"d# |jdddd$ |j	 }t
|jtjd%d3d4g t
|jtjd(d)d*g t
|jtjd+d5d6gd7d.d8gd9d:d0gg d S );NzSample Explicit ModelzODRPACK UG, pg. 39)nameref)fjacbfjacdmetag        g      @g      @g      @g      $@g      0@g      :@g      >@g      A@g     @A@g      Y@g     ē@gfffff@g     @g     @g     @g33333@g     T@g     @gfffff@g33333@g     @g     @g     p@g      I@g?r   r   )r   ifixxr   )deriv)inititerfinalg8@gLA[K@gxQ}?gֳ?g1X?gy?ggC?gNM=y7?g	J?gq?g]F f_?gO>g      IggLA[KgxQ}gNM=y7׿g	JgNM=y7׿g]F f_g	Jg]F f_)r   r%   r-   r'   dictr   r	   set_jobZ
set_iprintrunr   betar!   arraysd_betacov_beta)r   Zexplicit_modZexplicit_datZexplicit_odroutr   r   r   test_explicit6   s:     
zTestODR.test_explicitc             C   sp   |d t j|d |d  d d|d  |d |d   |d |d    |d t j|d |d  d  d S )Nr   r   g       @   r      g      ?)r!   r"   )r   r   r   r   r   r   implicit_fcn\   s    zTestODR.implicit_fcnc             C   s   t | jdtdddd}tdddd	d
ddddddddJdKdLdMdNdOdPdQgdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddeggd}t||dfdgd-d.d/gd0}|j }t|jtj	dhdid3d4d5g t|j
tj	d6d7d8d9d:g t|jtj	d;djd=dkd?gdld@dmdBdngd=dodDdpdFgdqdBdrdGdsgd?dtdFdudIgg d S )vNr   zSample Implicit ModelzODRPACK UG, pg. 49)r.   r/   )implicitr2   g      ?g333333?g?g(\?g(\ @gzG@gQ@g{Gz @gףp=
?gq=
ףp?g?gQ?g(\?g(\?gffffff?g      @g
ףp=
@gq=
ףp	@gQ@gQ?g333333?g      ?gffffff?gRQ@gzG
@g      @g      @g      @g(\@gzG@gHzG@g(\@gp=
ף@g      @gQ@g      @g(\@gq=
ףp@g      @g
ףp=
?g{Gz?g{Gz?)r   g{ 3?gzJr@gJ/k?g&Z薞?gkj?g?g29?g3"͇p?g[=f?gx#+l?g:\ @g8%?g??g'M['?g%GRR?gdbb @ggR?g	<?gk?g};yWzg?g
WW?gm&W?gK}U?g$_T?ga?gQѿg(\g(\gffffffg      g
ףp=
gq=
ףp	gQgQg333333g      gffffffgRQgzG
g      g      g      g(\gzGgHzGg(\g(\gp=
ףg      gQg      g(\gq=
ףpg      g      g{ 3gzJrg8%g'M['g8%ggRgkggRg
WWg'M['g
WWg$_Tgkg$_T)r   rC   r8   r   r	   r:   r   r;   r!   r<   r=   r>   )r   Zimplicit_modZimplicit_datZimplicit_odrr?   r   r   r   test_implicita   sN    

zTestODR.test_implicitc       
      C   s   |dk j  rtt|d  d }tj|}tj|}tjdt | tj|d   |d }tj|| d||  }|d |d  tjtj	tjd||  dtj|| d |d   }tj
|d |tj|d |   |tj|d |  g}	|	S )	Ng        rA   g       @r   g      ?r   r   rB   )anyr   r   r!   cossinr"   r#   Zarctan2sqrtr)   )
r   r   r   thetaZcthetaZsthetaomegaphirr$   r   r   r   	multi_fcn   s    

((  zTestODR.multi_fcnc             C   s  t | jtdddd}tjddddd	d
dddddddddddddddddg}tjddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2gd3d4d5d6d7d8d9d:d;d<d=d<d>d?d@dAdBdCdDdEdFdGdHgg}t|}tjdIdI|ftdJ}tj|t	dJ}tj|tdJ}dK|dLdLd d f< dw |dNdLd d f< |dLdNd d f< dO|dNdNd d f< xt
|D ]}|| dk r^dL||< n`|| d	krnnP|| dkrdP||< n8|| dkrdQ||< n || dkrdR||< ndS||< || dks|| d	krBdT|d d d d |f< qBW t||dUtj|dI |dV}	t|	|dWdXdYdZd[g||d\}
|
jdNdNd] |
j }t|jtjd^d_d`dadbg t|jtjdcdddedfdgg t|jtjdhdidjdxdlgdidmdndydpgdjdndqdzdsgd{d|d}dtd~gdldpdsddvgg d S )NzSample Multi-Response ModelzODRPACK UG, pg. 56)r.   r/   )r2   g      >@g      I@g     Q@g      Y@g     b@g      i@g     r@g     @@g     @g     @@g     p@g     @@g     p@g     @g     X@g     @g     L@g     @g     L@g     j@g     @g     j@g    OAgzG@g^I@gI+@gx&@g~jt@gS@gOn@gʡE@gNbX9@gMb@gRQ@gX9v@gw/
@gMb
@g%C	@g/$	@gFx@gZd;@gFx@g5^I@gNbX9@gMb@gOn@g rh?gK7A`?gMb?gA`"?gh|?5?g r?gDl?g5^I?g-?gCl?gjt?gQ?g"~?g|?5^?gRQ?gQ?gCl?gB`"?gK?g/$?g/$?gn?r   )dtypeg|@r   g     @r   g    f@g      9@g     @g     @g     Ag        g-C6?)wdweg      @g       @g      @g?g      ?)r   Zdelta0r3   )r4   Zdel_initg@gNUiw@gz @gR?gFu?gfkl,?g 1w?gAS?g@L*?g?g?#0z?g_ n=m?g-Mu?gG:x?ggTÚ?gaǇ
z?g4<n?ggjt?gܪVŊ?gHAcO?gK*rԬ?ga/??gk{?gy7?g
P/{7?g     gG:xggjtgK*rԬgG:xggjtgK*rԬgy7gy7)r   rN   r8   r!   r<   lenzerosfloatr*   intranger   r"   r	   r9   r:   r   r;   r=   r>   )r   Z	multi_modZmulti_xZmulti_ynZmulti_weZmulti_ifixxZmulti_deltaiZ	multi_datZ	multi_odrr?   r   r   r   
test_multi   sz    $







zTestODR.test_multic             C   s   |d |d |  S )Nr   r   r   )r   r   r   r   r   r   pearson_fcn   s    zTestODR.pearson_fcnc             C   sx  t jddddddddd	d
g
}t jddddddddddg
}t jddddddddddg
}t jddddddddddg
}t||||d }t||||d }t| jtd!d"d#}t||ddgd$}t||ddgd$}	|j }
t|
j	t jd%d3g t|
j
t jd'd(g t|
jt jd)d4gd5d+gg |	j }t|j	t jd,d6g t|j
t jd.d/g t|jt jd0d7gd8d2gg d S )9Ng        g?g?g@gffffff
@g@g@gffffff@g      @g@g@g@gffffff@g      @g@gffffff@g333333@g      ?gQ?g{Gz?gQ?gQ?g)\(?gp=
ף?g)\(?gGz?g      ?g      ?gffffff?gQ?g?)sxsyzUni-linear Fit)r.   )r2   )r   g4ԉ.@gv?grtA-?gc?g;޵?g=?gk?gO&@gj( @g3
ٻl?gZ՗?gF)t?g`=L?g!?gv޿g=g=gj( g`=Lɿg`=Lɿ)r!   r<   r
   r   rZ   r8   r	   r:   r   r;   r=   r>   )r   Zp_xZp_yZp_sxZp_syZp_datZpr_datZp_modZp_odrZpr_odrr?   Zroutr   r   r   test_pearson   s>    

zTestODR.test_pearsonc             C   sR   |d |d  |d  t jt j|| |d |d   dt j|d | d  S )Nr   r   r   g       @)r!   rI   r"   )r   r;   r   r   r   r   lorentz!  s    $zTestODR.lorentzc             C   s  t jdgd }t jddddddd	d
ddddddddddg}tdddddddddddd d!d"d#d$d%d&gd'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8g||d9}t| jtd:d;d<}t||dMd@}|j }t|j	t jdAdBdCg t|j
t jdDdEdFg t|jt jdGdNdOgdPdJdKgdQdKdLgg d S )RNg(\?   gdOO?gO?g&0G?gpt͘(G?g^"G?g eG?genBF?g8=?g-=?g`EE?g,!WsE?g01cE?g&-}Ԭ>g;vQ?gPmQ?gGus#T?gW UW?g>c?gׁsF@g`TR'@gxN@gs@g3@gN#-@g	ϛ@gW[N@gp:@@g@gs,&6@g@g2c@gHIOG@g?@g;@gx&q@gҌEY@i  g     t@i  i  g     |@i  g     "@g     @i  ib  g     @i  g     L@g     ,@i  g     @g     (z@g     8q@)r[   r\   zLorentz Peak)r.   )r2        @@皙?ffffff@)r   gA5[Z@gO#?gF=@g(1?gȕ6?gQ.q;0?g\j?gEG?gp` ?g3<n>gG!fc>gq[cсE]>)r`   ra   rb   gEGgp` gEGgp` )r!   r<   r
   r   r^   r8   r	   r:   r   r;   r=   r>   )r   Zl_syZl_sxZl_datZl_modZl_odrr?   r   r   r   test_lorentz%  s@    


zTestODR.test_lorentzc       	      C   sh   dd }ddg}t jdd}|||}t|}t||ddd}t||ddgd	}|j }t|jd
 d S )Nc             S   s   | d | | d  S )Nr   r   r   )cr   r   r   r   r   N  s    z(TestODR.test_ticket_1253.<locals>.linearg       @g      @r   
   g      ?)rP   rQ   )r   r   )r!   linspacer   r   r	   r:   r   info)	r   r   rd   r   ymodeldataZjobresultr   r   r   test_ticket_1253M  s    
zTestODR.test_ticket_1253c       
      C   s   dddddg}ddddd	g}t jt j|td
t j|td
f}tt j||fd|d}tdd dd}t||t jdgd}|j	 }t||t jdg|d}|j	 }	t
|j|	j d S )NgGz @gGz?gMbP?gRQ?gGz?gףp=
@g)\(?gV-?g
ףp=
@)rO   r   )rh   fixc             S   s,   |dd d f | d |dd d f d   S )Nr   r   g       @r   )r;   r   r   r   r   <lambda>b  s    z$TestODR.test_ifixx.<locals>.<lambda>T)rD   g      ?)r   )r   r3   gGz gGzgMbP)r!   r)   Z
zeros_likerU   Z	ones_liker   r   r	   r<   r:   r   r;   )
r   x1Zx2rm   rj   ri   Zodr1Zsol1Zodr2Zsol2r   r   r   
test_ifixx]  s    "zTestODR.test_ifixxc             C   sb  t jddddEddg}d}d}t jdd	d
ddFdddGdHdIg
dJdKdLddMdddNdOdg
g}d}t jdddPd d!d"d#dQdRdSg
d'd(d)d*dTdUdVd.d/dWg
g}t jd1dXd3dYd5dZg}d7d8 }d9d: }	d;d< }
t jd=d|}t jd=d|}t j||g}|||}|| }|| }t||	|
d>}t||||d?}t||d@| dAdB}|jdCdD |j }t|j	d= t
|j| d S )[Ng      ?gffffff@g?g?g      ?re   g{Gz?g	 'D?g"u?gsfZ?gt?g	Yqo?g?s?gJf?g>xF}?gvIx?g!͒&|?g?gÚр?gz7X0ت`?gN77?ga5|?gLl	TZj?g^1;e?g<%gw?g%.h?gܾ#ń?g?g!Kr?gR#?g)B?gH]N?gK?gNr}?gt%?g')vU~?g^'2?g?)?gÊ?giP?gލho?gʐ:l?gM*?gD3?g\`?gg֓А?g3p~?ghϬ?g>@gk_@gʖ6`@g<u+?g|㉘S@g2dS@c             S   s~   | d | d |dd d f   | d |dd d f   }| d | d |dd d f   | d |dd d f   }t j||fS )Nr   r   r   rA   rB      )r!   r)   )r;   r   Zy0y1r   r   r   func  s    88z'TestODR.test_ticket_11800.<locals>.funcc          
   S   s   t j|d }t j|}t j|}t j||dd d f |dd d f |||g}t j|||||dd d f |dd d f g}t j||fS )Nr   r   )r!   r+   rS   r*   r<   stack)r;   r   nr_measrS   r*   dy0dy1r   r   r   df_dbeta_odr  s    

..z/TestODR.test_ticket_11800.<locals>.df_dbeta_odrc             S   sb   t j|d }t j|}t j| d | | d | g}t j| d | | d | g}t j||fS )Nr   r   rB   rq   )r!   r+   r*   r<   rt   )r;   r   ru   r*   rv   rw   r   r   r   	df_dx_odr  s
    
z,TestODR.test_ticket_11800.<locals>.df_dx_odrr   )r0   r1   )r[   r\   g?d   )r   ZmaxitrA   )r4   g      g	Yqog>xF}gvIxg!͒&|ggÚрgz7X0ت`ga5|g<%gwg%.hg)Bg')vU~g^'2g?)gM*gD3g\`ghϬgk_g<u+g2dS)r!   r<   rf   r   r
   r	   r9   r:   r   rg   r   r;   )r   Z	beta_trueZnr_measurementsZ	std_dev_xZx_errorZ	std_dev_yZy_errorZbeta_solutionrs   rx   ry   Zx0_trueZx1_trueZx_trueZy_trueZx_measZy_measZmodel_frj   odr_objZodr_outr   r   r   test_ticket_11800k  s>    


	
zTestODR.test_ticket_11800c             C   sH   t jdd}dd|  }t||}t|t}|j }t|jddg d S )Ng        g      @g      $@)r!   rf   r   r	   r   r:   r   r;   )r   r   rh   rj   r{   outputr   r   r   test_multilinear_model  s    

zTestODR.test_multilinear_modelc             C   sN   t jdd}dt jd|  }t||}t|t}|j }t|jddg d S )Ng        g      @g      $@g      ?g      $g      $)	r!   rf   r#   r   r	   r   r:   r   r;   )r   r   rh   rj   r{   r}   r   r   r   test_exponential_model  s    

zTestODR.test_exponential_modelc             C   sl   t jdd}dd|  d|d   d|d   }td}t||}t||}|j }t|jddddg d S )	Ng        g      @g      ?g       @g      @r   g      @rA   )r!   rf   r   r   r	   r:   r   r;   )r   r   rh   Z
poly_modelrj   r{   r}   r   r   r   test_polynomial_model  s    $

zTestODR.test_polynomial_modelc             C   sH   t jdd}d| d }t||}t|t}|j }t|jddg d S )Ng        g      @g      ?g       @)r!   rf   r   r	   r   r:   r   r;   )r   r   rh   rj   r{   r}   r   r   r   test_unilinear_model  s    

zTestODR.test_unilinear_modelc             C   sV   t jdd}d|d  d|  d }t||}t|t}|j }t|jdddg d S )Ng        g      @g      ?r   g       @g      @)r!   rf   r   r	   r   r:   r   r;   )r   r   rh   rj   r{   r}   r   r   r   test_quadratic_model  s    

zTestODR.test_quadratic_modelN)__name__
__module____qualname__r   r   r    r%   r'   r-   r@   rC   rE   rN   rY   rZ   r]   r^   rc   rl   rp   r|   r~   r   r   r   r   r   r   r   r   r      s.   &1M1(G	r   )Znumpyr!   r   Znumpy.testingr   r   r   Zpytestr   r   Z	scipy.odrr   r   r	   r
   r   r   r   r   r   r   r   objectr   r   r   r   r   <module>   s
   4