a
    ‡ù»jHT  ã                   @   sž   d dl 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m	Z	m
Z
 d dl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ƒZdS )é    N)Úpi)Úassert_array_almost_equalÚassert_equalÚassert_warnsÚassert_allclose)Ú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/d0„ Zejjd1d2d3�d4d5„ ƒZd6d7„ Zd8d9„ Z d:S );ÚTestODRc                 C   s    t ttddƒ t ttddƒ d S )Né   é   )Úassert_raisesÚ
ValueErrorr   r   )Úself© r   ú>E:\soccer\ml_env\Lib\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 )Nç{®Gáz”?ç        ©Ú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  t  |d | ¡d d¡  }|S )Nr   r   r   ç      ð?)ÚnpÚpowerÚexp)r   r   r   Úretr   r   r   Úexplicit_fcn,   s    .zTestODR.explicit_fcnc                 C   s6   t  |d | ¡}|d d |d  |d  | }|S )Nr   r   ç       @r'   )r(   r*   )r   r   r   ÚeBxr+   r   r   r   Úexplicit_fjd0   s     zTestODR.explicit_fjdc                 C   sV   t  |d | ¡}t  t  |jd ¡t  |d d¡|d d |d  | | g¡}|S )Nr   éÿÿÿÿr'   r   r-   )r(   r*   ÚvstackÚonesÚshaper)   )r   r   r   r.   Úresr   r   r   Úexplicit_fjb5   s    þzTestODR.explicit_fjbc                 C   sÀ   t | j| j| jtddd�d�}tg d¢g d¢ƒ}t||g d¢g d¢d	�}|jd
d� |jdddd� | 	¡ }t
|jt g d¢¡ƒ t
|jt g d¢¡ƒ t
|jt g d¢g d¢g d¢g¡ƒ d S )NzSample Explicit ModelzODRPACK UG, pg. 39©ÚnameÚref)ÚfjacbÚfjacdÚmeta)r"   r"   ç      @ç      @g      @ç      $@g      0@g      :@ç      >@g      A@g     @A@ç      Y@)g     Ä“@gfffff¾“@g     ¨“@g     ˜“@g     ”“@g33333‡“@g     T“@g     “@gfffff“@g33333÷’@g     þ’@g     ð’@)ç     p—@g      IÀçš™™™™™¹¿)r   r   r   r   r   r   r   r   r   r   r   r   ©r$   Úifixxr   ©Úderivr   )ÚinitÚiterÚfinal)gÊ8…žÂ“@gLíèA[KÀg x¶˜Q}¶¿)g�Ö³¤�ð?g1ÊXù?g¥¤°Êïy?)ggC�ŠÄÜ?çNM=y7ó×¿çã	„úñˆJ¿)rJ   gÖq·¦õØð?ç]�F fß_¿)rK   rL   gO©Ê¥ñ>)r	   r,   r5   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_explicit<   s@    ÿüÿÿþþ
üþzTestODR.test_explicitc                 C   sp   |d t  |d |d  d¡ d|d  |d |d   |d |d    |d t  |d |d  d¡  d S )Nr   r   r-   é   r   é   r'   )r(   r)   r   r   r   r   Úimplicit_fcnb   s    *ÿþþzTestODR.implicit_fcnc              
   C   s®   t | jdtddd�d�}tg d¢g d¢gdƒ}t||g d¢d	�}| ¡ }t|jt 	g d
¢¡ƒ t|j
t 	g d¢¡ƒ t|jt 	g d¢g d¢g d¢g d¢g d¢g¡ddd� d S )Nr   zSample Implicit ModelzODRPACK UG, pg. 49r6   )Úimplicitr;   )ç      à?g333333ó?gš™™™™™ù?gÃõ(\�Âý?gö(\�Âõ @çáz®Gá@g…ëQ¸…@r[   g{®Gáz @g×£p=
×û?gq=
×£põ?çÍÌÌÌÌÌì?gìQ¸…ëÑ¿gö(\�Âõè¿gÃõ(\�Âõ¿gffffffþ¿g      Àg
×£p=
Àgq=
×£p	Àg…ëQ¸…À)g¸…ëQ¸¾¿g333333ã¿ç      ð¿gffffffö¿gR¸…ëQÀgáz®Gá
Àg      Àg      Àg      Àg�Âõ(\�Àgáz®GáÀgHáz®GÀçÃõ(\�ÂÀr^   g¤p=
×£Àg      Àg…ëQ¸…Àg      Àgö(\�ÂõÀgq=
×£pÀ)r]   g      Àg
×£p=
·?r!   g{®Gáz´?r#   )g{ 3°íúï¿gzJ¨‰ÉrÀgJòêú/k¶?g&Zåè–ž�?g�k³¾j´?)g…ªƒ¼?g2ê9¶¼?g3¦"Í‡Ñp?g[œ™ª=‡f?g¨x#+¤l?)gµ:\ß @ç8÷Ž%­ÿ¿ç?“ÅÊü±?ç�'M['¨¿ç%GRRãª?)r_   gÜdbóœb @çgßRŠ¯¿ç‰	�<Œ°§?çkÊüõ®¿)r`   rc   g};ªyWzg?ç
¤W¦´÷W¿çm&ïˆØÍW?)ra   rd   rf   gªK}ÆU?ç�û$_ÎËT¿)rb   re   rg   rh   gàôª¢a?g�íµ ÷Æ°>g�íµ ÷ÆÀ>)ZrtolZatol)r	   rX   rM   r   r
   rO   r   rP   r(   rQ   rR   r   rS   )r   Zimplicit_modZimplicit_datZimplicit_odrrT   r   r   r   Útest_implicitg   sF    ÿýýûÿþþ
ôïzTestODR.test_implicitc           
   
   C   sú   |dk   ¡ rt‚t|d  d }t |¡}t |¡}t dt | t |d  ¡ |d ¡}t || d||  ¡}|d |d  t t 	t d||  d¡t || d¡ ¡|d  ¡ }t 
|d |t |d | ¡  |t |d | ¡ g¡}	|	S )	Nr"   rV   r-   r   r'   r   r   rW   )Úanyr   r   r(   ÚcosÚsinr)   r*   Zarctan2Úsqrtr1   )
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 g d¢¡}t g d¢g d¢g¡}t|ƒ}tjdd|ftd	�}tj|t	d	�}tj|td	�}d
|ddd d …f< d |ddd d …f< |ddd d …f< d|ddd d …f< t
|ƒD ]¨}|| dk rÜd||< n^|| dkrênP|| dk�rd||< n8|| dk�rd||< n || dk�r2d||< nd||< || dk�sT|| dkrÂd|d d …d d …|f< qÂt||dt |d¡ |d�}	t|	|g d¢||d�}
|
jddd� |
 ¡ }t|jt g d¢¡ƒ t|jt g d¢¡ƒ t|jt g d ¢g d!¢g d"¢g d#¢g d$¢g¡ƒ d S )%NzSample Multi-Response ModelzODRPACK UG, pg. 56r6   ©r;   )r?   g      I@g     €Q@r@   ç     Àb@g      i@g     Àr@g     @@g     à…@ç     @�@rA   g     @Ÿ@g     p§@g     ˆ³@g     X»@ç     ˆÃ@g     LÍ@g     ˆÓ@g     LÝ@g     jè@g     ñ@ç     jø@g    €OA)gáz®Gá@g^ºI«@gºI+‡@gôýÔxé&@gú~j¼t@gÙÎ÷Sã¥@gßO�—n@gƒÀÊ¡E@gNbX9´@gªñÒMb@gR¸…ëQ@gX9´Èv@gw¾Ÿ/Ý
@gªñÒMb
@g%�•C‹	@g /Ý$	@gF¶óýÔx@g¬Zd;ß@gF¶óýÔx@g5^ºI@gNbX9´@gü©ñÒMb@gßO�—n@)gœÄ °rhÁ?gÇK7‰A`Å?gªñÒMbÈ?g‰A`åÐ"Ë?gh‘í|?5Î?g¦›Ä °rÐ?gD‹lçû©Ñ?g5^ºIÓ?g-²�ï§ÆÓ?ç�•C‹lçÓ?gj¼t“Ô?rx   g…ëQ¸…Ó?gåÐ"Ûù~Ò?gî|?5^ºÑ?gR¸…ëQÐ?g¸…ëQ¸Î?g�•C‹lçË?gB`åÐ"ÛÉ?g²�ï§ÆKÇ?g/Ý$�Å?g/Ý$�•Ã?g˜nƒÀÊÁ?r   ©ZdtypegÍÌÌÌÌ|�@r   g     ˆ™Àr   g    €fÀ@r@   rt   ru   g      9@rv   g     €�@rw   g     ŽÂ@g     ”Ar"   g-Cëâ6?©ÚwdZwe)ç      @r-   r=   çš™™™™™Ù?rZ   )r$   Údelta0rD   )rF   Údel_init)gÄ•…@gN¡Uiw@g¨ÿÆz @g°õåÜRà?g‘àFöuŽà?)gfkl,†ÀŠ?g 1èwò¹Š?g¬AïS�à½?g»ê@ÙL*‹?g»¦€±ž‹�?)g?Ž#…0—z?ç_Š n=Ÿm?ç«-¶Mu¦?çGé”:x¿çgïTÃš‡?)r€   gaÇ‡
Šz?ç4ÁÐ<n€ª?çÙgj±¿öt¿çÜªVÛÅŠ?)r�   r„   gHA¦cO•à?çKþ*rÔ¬¿çÎa/Þ?À?)r‚   r…   r‡   g—žµk{?çy7³µŒ¿)rƒ   r†   rˆ   r‰   g
P/£{7 ?)r	   rr   rM   r(   rQ   ÚlenÚzerosÚfloatr2   ÚintÚranger   r)   r
   rN   rO   r   rP   rR   rS   )r   Z	multi_modZmulti_xZmulti_yÚnZmulti_weZmulti_ifixxZmulti_deltaÚiZ	multi_datZ	multi_odrrT   r   r   r   Ú
test_multi§   sr    ÿþü$



ÿÿþþ
øþzTestODR.test_multic                 C   s   |d |d |  S r   r   r   r   r   r   Úpearson_fcnô   s    zTestODR.pearson_fcnc                 C   s8  t  g d¢¡}t  g d¢¡}t  g d¢¡}t  g d¢¡}t||||d�}t||||d�}t| jtdd�d�}t||d	d	gd
�}t||d	d	gd
�}	| ¡ }
t|
j	t  ddg¡ƒ t|
j
t  ddg¡ƒ t|
jt  ddgddgg¡ƒ |	 ¡ }t|j	t  ddg¡ƒ t|j
t  ddg¡ƒ t|jt  ddgddgg¡ƒ d S )N)
r"   r\   gÍÌÌÌÌÌü?gÍÌÌÌÌÌ@gffffff
@çš™™™™™@gÍÌÌÌÌÌ@gffffff@g      @gš™™™™™@)
gš™™™™™@gš™™™™™@r“   gffffff@g      @gš™™™™™@çffffff@r”   g333333@g      ø?)
ç¸…ëQ¸ž?r•   ç{®Gáz¤?gìQ¸…ë¡?gìQ¸…ë±?g)\�Âõ(¼?g¤p=
×£À?ç)\�Âõ(Ì?ç®Gáz®ç?r'   )
r'   r˜   rZ   gffffffÖ?r—   r—   ç¸…ëQ¸¾?r™   çš™™™™™¹?r–   ©ÚsxZsyzUni-linear Fit©r7   rs   r'   r#   g4ÛÔ‰.è@gvùñ¾æ±Þ¿grtA-úÖ?gcŒú¿²?g‚;ª”Þµ?g=‘¬‘�¿g˜µ±äk?gO®­¡Ö&@g’ªj(® Àg3
Ù»lï?gZöÕ—»¦Ó?gF�­€)tä?g¿…`=LÉ¿gË!�¹ˆþ¯?)r(   rQ   r   r	   r’   rM   r
   rO   r   rP   rR   rS   )r   Zp_xZp_yZp_sxZp_syZp_datZpr_datZp_modZp_odrZpr_odrrT   Úroutr   r   r   Útest_pearson÷   sN    þþ
ÿþþþ
ÿþzTestODR.test_pearsonc              	   C   sR   |d |d  |d  t  t  || |d |d   d¡t  |d | d¡ ¡ S )Nr   r   r   r-   )r(   rm   r)   )r   rP   r   r   r   r   Úlorentz(  s    $ÿÿÿzTestODR.lorentzc                 C   s´   t  dgd ¡}t  g d¢¡}tg d¢g d¢||d�}t| jtdd�d	�}t||d
d�}| ¡ }t|j	t  g d¢¡ƒ t|j
t  g d¢¡ƒ t|jt  g d¢g d¢g d¢g¡ƒ d S )Ng�Âõ(\�Ò?é   )gd’þOßáO?gíº¦O?gƒÛ&0G?gptÍ˜(G?g÷ÿˆ^ú"G?g eäG?göeånBçF?g›8”Åð=?g‡‹-Õ=?g¾`¶ëE·E?g,­!™WsE?g«—0±1cE?gÊ&á-}Ô¬>gÀ‡;¬ªvQ?g¿PÙÑmQ?gGuøs#�T?gW ÃUW?gé¯>»Ïc?)gõÛ×�sF@gª`TR'à@gx—‹øNÌ@g»ÕsÒûÆ@g‡3¿šÃ@gºN#-•·@g–	¿ÔÏ›@gWÿ[ÉN@gp”¼:Ç@@g®ãüÍ@gsº,&6Ÿ@g£¼”@g2¬â�Ìc@gHùIµOG@gäÉå?@gŽ;¥ƒõÿ@gþÔxé&q@gÒŒEÓY@)iŒ  g     tŒ@iØ  iè  g     |�@i  g     "’@g     –@i–  ib  g     ì�@i˜  g     Lˆ@g     ,†@iº  g     ‚@g     (z@g     8q@r›   zLorentz Peakr�   rs   )ru   rš   gffffff@r#   )gA5Ð[¶Z–@g’æOÍ#Á?g˜FÀî=@)gÌ(1�ç?gÊð–È•û6?gÙQ.q;0?)g�°\åj¢Ï?çE˜G†¿çp²Š�` ¿)r¢   gò3¼<n>çG!fc>)r£   r¤   gq[cÑ�E]>)r(   rQ   r   r	   r    rM   r
   rO   r   rP   rR   rS   )r   Zl_syZl_sxZl_datZl_modZl_odrrT   r   r   r   Útest_lorentz,  s4    ù	þþ
üþzTestODR.test_lorentzc           	      C   sh   dd„ }ddg}t  dd¡}|||ƒ}t|ƒ}t||ddd�}t||ddgd	�}| ¡ }t|jd
ƒ d S )Nc                 S   s   | d | | d  S r   r   )Úcr   r   r   r   r%   U  s    z(TestODR.test_ticket_1253.<locals>.linearr-   ç      @r   é
   r'   rz   r#   r   )r(   Úlinspacer	   r   r
   rO   r   Úinfo)	r   r%   r¦   r   ÚyÚmodelÚdataZjobÚresultr   r   r   Útest_ticket_1253T  s    
zTestODR.test_ticket_1253c           
      C   sª   g d¢}g d¢}t  t j|td�t j|td�f¡}tt  ||f¡d|d�}tdd„ dd	�}t||t  d
g¡d�}| 	¡ }t||t  d
g¡|d�}| 	¡ }	t
|j|	jƒ d S )N)g®Gáz Àg®Gáz®ï¿gü©ñÒMbP¿gR¸…ëQð?g®Gáz®ÿ?)g×£p=
×@g)\�Âõ(ð?gü©ñÒMbP?gV-²�ïï?g
×£p=
@ry   r   )r«   Úfixc                 S   s,   |dd d …f | d |dd d …f d   S )Nr   r   r-   r   )rP   r   r   r   r   Ú<lambda>i  ó    z$TestODR.test_ifixx.<locals>.<lambda>T)rY   r'   r#   rC   )r(   r1   Z
zeros_liker�   Z	ones_liker   r	   r
   rQ   rO   r   rP   )
r   Úx1Zx2r°   r­   r¬   Zodr1Zsol1Zodr2Zsol2r   r   r   Ú
test_ifixxd  s    "zTestODR.test_ifixxc                 C   s  t  g d¢¡}d}d}t  g d¢g d¢g¡}d}t  g d¢g d¢g¡}t  g d	¢¡}d
d„ }dd„ }	dd„ }
t  dd|¡}t  dd|¡}t  ||g¡}|||ƒ}|| }|| }t||	|
d�}t||||d�}t||d| dd�}|jdd� | ¡ }t|j	dƒ t
|j|ƒ d S )N)r'   gffffff@gš™™™™™ñ?r]   gÍÌÌÌÌÌô?rZ   r¨   ç{®Gáz„?)
g±	 'ÊD?g"º�ÜÔu?gýsfõí¨Z?gÀ‰t�Ãò„?g	Yqo£�¿g?ÛùÄs?g’†èJã›f?g>²Úx‡F}¿gvIƒx°ƒ¿g±!Í’ß&|¿)
g¬�¿gÃš¿‚Ñ€¿gz7X0Øª`¿gÀËN77ƒ?gªaà5¿|¿gL�l	TZj?g^í1±;e?g<¯%¢gÌw¿g%œÌ.ÎÎh¿gÜ¾á#Å„?gš™™™™™©?)
gœ!Kr«?gÚR‹±á#§?g»Ý)üB³¿gÞH]ªN¢?gäÝäžK¨?g´N¦r}£?gt%†ä²?g')vUÞ~¿gø^ð'2Œš¿gýê?¥)†˜¿)
g“ÃŠÇ™¢?gÒÏiP±?gÐÞ�Ãhoµ?g“Ê�:l¤?gÐMö*�ó‚¿g¿Dþ‘Ð3£¿gôŒ\»Ý` ¿gg·Ö“Ð�?gðî3ôp~Š?g¢­ïhˆÏ¬¿)gé„â>›@gªÍkñ¦_ÀgÊ–«ƒ6`@g¤ðÿ<u+þ¿g|–ã‰˜S@gö¤2ãd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  ||f¡S )Nr   r   r   rV   rW   é   )r(   r1   )rP   r   Zy0Úy1r   r   r   Úfunc‰  s    88z'TestODR.test_ticket_11800.<locals>.funcc                 S   sŒ   t  |¡d }t  |¡}t  |¡}t  ||dd d …f |dd d …f |||g¡}t  |||||dd d …f |dd d …f g¡}t  ||f¡S )Nr   r   )r(   r3   r‹   r2   rQ   Ústack)rP   r   Únr_measr‹   r2   Údy0Údy1r   r   r   Údf_dbeta_odr�  s    

..z/TestODR.test_ticket_11800.<locals>.df_dbeta_odrc                 S   sb   t  |¡d }t  |¡}t  | d | | d | g¡}t  | d | | d | g¡}t  ||f¡S )Nr   r   rW   r¶   )r(   r3   r2   rQ   r¹   )rP   r   rº   r2   r»   r¼   r   r   r   Ú	df_dx_odr™  s
    
z,TestODR.test_ticket_11800.<locals>.df_dx_odrr   )r9   r:   r›   r\   éd   )r$   ZmaxitrV   rE   )r(   rQ   r©   r	   r   r
   rN   rO   r   rª   r   rP   )r   Z	beta_trueZnr_measurementsZ	std_dev_xZx_errorZ	std_dev_yZy_errorZbeta_solutionr¸   r½   r¾   Zx0_trueZx1_trueZx_trueZy_trueZx_measZy_measZmodel_fr­   Úodr_objZodr_outr   r   r   Útest_ticket_11800r  s6    
þ
þ
	
zTestODR.test_ticket_11800c                 C   sH   t  dd¡}dd|  }t||ƒ}t|tƒ}| ¡ }t|jddgƒ d S )Nr"   r<   r>   )r(   r©   r   r
   r   rO   r   rP   ©r   r   r«   r­   rÀ   Úoutputr   r   r   Útest_multilinear_modelº  s    

zTestODR.test_multilinear_modelc                 C   sN   t  dd¡}dt  d| ¡ }t||ƒ}t|tƒ}| ¡ }t|jddgƒ d S )Nr"   r<   g      $ÀrZ   )	r(   r©   r*   r   r
   r   rO   r   rP   rÂ   r   r   r   Útest_exponential_modelÂ  s    

zTestODR.test_exponential_modelc                 C   sh   t  dd¡}dd|  d|d   d|d   }tdƒ}t||ƒ}t||ƒ}| ¡ }t|jg d	¢ƒ d S )
Nr"   r<   r'   r-   r§   r   r|   rV   )r'   r-   r§   r|   )r(   r©   r   r   r
   rO   r   rP   )r   r   r«   Z
poly_modelr­   rÀ   rÃ   r   r   r   Útest_polynomial_modelÊ  s    $

zTestODR.test_polynomial_modelc                 C   sH   t  dd¡}d| d }t||ƒ}t|tƒ}| ¡ }t|jddgƒ d S )Nr"   r<   r'   r-   )r(   r©   r   r
   r   rO   r   rP   rÂ   r   r   r   Útest_unilinear_modelÓ  s    

zTestODR.test_unilinear_modelc                 C   sT   t  dd¡}d|d  d|  d }t||ƒ}t|tƒ}| ¡ }t|jg d¢ƒ d S )Nr"   r<   r'   r   r-   r§   )r'   r-   r§   )r(   r©   r   r
   r   rO   r   rP   rÂ   r   r   r   Útest_quadratic_modelÛ  s    

zTestODR.test_quadratic_modelc                 C   s´   dd„ }d}t  |¡}t  |d |d |d ¡}t  |d¡}t  |d¡}t|ƒ}t||||d�}t||ddgd�}	|	jd	d
� |	 ¡ }
|
j	d }t
|
j|
j||t|
jƒ … ƒ d S )Nc                 S   s   | \}}|||  S )Nr   )Zparr   Zb0Úb1r   r   r   r¸   å  s    z#TestODR.test_work_ind.<locals>.funcrW   r   rš   r›   r}   r#   r   )Úfit_typeÚsd)r(   ÚarangeÚwhereÚfullr	   r   r
   rN   rO   Zwork_indr   rR   ZworkrŠ   )r   r¸   Ún_datar   r«   Úx_errÚy_errÚlinear_modelZ	real_datarÀ   rT   Zsd_indr   r   r   Útest_work_indã  s    

ÿzTestODR.test_work_indTzJFortran I/O prone to crashing so better not to run this test, see gh-13127)Úreasonc              	   C   s¤   dd„ }t |ƒ}tt d¡dt d¡ ƒ}t ¡ }tj |d¡}tj |d¡}zDt	||ddg||d	� 
¡  t	||ddg||d
d� 
¡  W t |¡ nt |¡ 0 dS )z(
        Verify fix for gh-1892
        c                 S   s   | d | d |  S r   r   ©Úbr   r   r   r   r¸     s    z0TestODR.test_output_file_overwrite.<locals>.funcr¨   é   z	error.datz
report.datrš   é   )r$   ÚerrfileÚrptfileT)r$   rÙ   rÚ   Ú	overwriteN)r	   r   r(   rÌ   ÚtempfileÚmkdtempÚosÚpathÚjoinr
   rO   ÚshutilÚrmtree)r   r¸   Úpr­   Ztmp_dirZerror_file_pathZreport_file_pathr   r   r   Útest_output_file_overwriteû  s    ÿ
ÿz"TestODR.test_output_file_overwritec                 C   s4   dd„ }t |ƒ}|jddd� t|jdddœƒ d S )Nc                 S   s   | d | d |  S r   r   rÕ   r   r   r   r¸     s    z1TestODR.test_odr_model_default_meta.<locals>.funczSample Model MetaZODRPACKr6   )r	   Zset_metar   r;   )r   r¸   rã   r   r   r   Útest_odr_model_default_meta  s    z#TestODR.test_odr_model_default_metac              	   C   s  dd„ }d}t  |¡}t  |d |d |d ¡}t  |d¡}t  |d¡}t|ƒ}t||||d�}t|||dd�}	t|||dgd�}
t|||t  d|fd¡d�}t|||dggd	�}t|||t  dd|fd¡d	�}||	|
|||fD ]6}t||d
d
gt  |d¡d�}|jddd� | ¡  qàdS )zA
        Verify fix for gh-18739 where del_init=1 fails.
        c                 S   s   | d | d |  S r   r   rÕ   r   r   r   r¸     s    z.TestODR.test_work_array_del_init.<locals>.funcrW   r   rš   r›   r   rµ   )rœ   Zcovyr}   rB   )r$   r~   r   )rÊ   r   N)	r(   rÌ   rÍ   rÎ   r	   r   r
   rN   rO   )r   r¸   rÏ   r   r«   rÐ   rÑ   rÒ   Zrd0Zrd1Zrd2Zrd3Zrd4Zrd5ÚrdrÀ   r   r   r   Útest_work_array_del_init  s&    

ÿz TestODR.test_work_array_del_initN)!Ú__name__Ú
__module__Ú__qualname__r   r    r&   r,   r/   r5   rU   rX   ri   rr   r‘   r’   rŸ   r    r¥   r¯   r´   rÁ   rÄ   rÅ   rÆ   rÇ   rÈ   rÓ   ÚpytestÚmarkZskipifrä   rå   rç   r   r   r   r   r      s8   &2M1(H	
r   )rÜ   rá   rÞ   Únumpyr(   r   Znumpy.testingr   r   r   r   rë   r   r   Z	scipy.odrr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   4