o
    Ö­j?V  ã                   @   s¦   d dl Z 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ejj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:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&dDS )EÚTestODRc                 C   s    t ttddƒ t ttddƒ d S )Né   é   )Úassert_raisesÚ
ValueErrorr   r   )Úself© r   úU/var/www/html/CropPilot/venv/lib/python3.10/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   ó   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%   ÚlinearÚ	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_fjd2   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   r0   Úresr   r   r   Úexplicit_fjb7   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¿)rL   gÖq·¦õØð?ç]�F fß_¿)rM   rN   gO©Ê¥ñ>)r	   r.   r7   r1   Údictr   r
   Úset_jobÚ
set_iprintÚrunr   Úbetar*   ÚarrayÚsd_betaÚcov_beta)r   Úexplicit_modÚexplicit_datÚ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_fcnd   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. 49r8   )Úimplicitr=   )ç      à?g333333ó?gš™™™™™ù?gÃõ(\�Âý?gö(\�Âõ @çáz®Gá@g…ëQ¸…@ra   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ÀçÃõ(\�ÂÀrd   g¤p=
×£Àg      Àg…ëQ¸…Àg      Àgö(\�ÂõÀgq=
×£pÀ)rc   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ãª?)re   gÜdbóœb @çgßRŠ¯¿ç‰	�<Œ°§?çkÊüõ®¿)rf   ri   g};ªyWzg?ç
¤W¦´÷W¿çm&ïˆØÍW?)rg   rj   rl   gªK}ÆU?ç�û$_ÎËT¿)rh   rk   rm   rn   gàôª¢a?g�íµ ÷Æ°>g�íµ ÷ÆÀ>)ÚrtolÚatol)r	   r^   rO   r   r
   rR   r   rS   r*   rT   rU   r   rV   )r   Úimplicit_modÚimplicit_datÚimplicit_odrrZ   r   r   r   Útest_impliciti   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#   r\   r/   r   r)   r   r   r]   )Úanyr   r   r*   ÚcosÚsinr+   r,   Úarctan2Úsqrtr3   )
r   r   r   ÚthetaÚcthetaÚ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 ]P}|| dk rnd||< n,|| dkrun%|| dkr€d||< n|| dkr‹d||< n|| dkr–d||< nd||< || dks¦|| dkr±d|d d …d d …|f< qat||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. 56r8   ©r=   )rA   g      I@g     €Q@rB   ç     Àb@g      i@g     Àr@g     @@g     à…@ç     @�@rC   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“Ô?r†   g…ëQ¸…Ó?gåÐ"Ûù~Ò?gî|?5^ºÑ?gR¸…ëQÐ?g¸…ëQ¸Î?g�•C‹lçË?gB`åÐ"ÛÉ?g²�ï§ÆKÇ?g/Ý$�Å?g/Ý$�•Ã?g˜nƒÀÊÁ?r   ©ÚdtypegÍÌÌÌÌ|�@r   g     ˆ™Àr   g    €fÀ@rB   r‚   rƒ   g      9@r„   g     €�@r…   g     ŽÂ@g     ”Ar#   g-Cëâ6?©ÚwdÚwe)ç      @r/   r?   çš™™™™™Ù?r`   )r%   Údelta0rF   )rH   Ú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	   r€   rO   r*   rT   ÚlenÚzerosÚfloatr4   ÚintÚranger   r+   r
   rP   rR   r   rS   rU   rV   )r   Ú	multi_modÚmulti_xÚmulti_yÚnÚmulti_weÚmulti_ifixxÚmulti_deltaÚiÚ	multi_datÚ	multi_odrrZ   r   r   r   Ú
test_multi©   st   ÿþü$



€ÿÿþþ
øþzTestODR.test_multic                 C   s   |d |d |  S r   r   r   r   r   r   Úpearson_fcnö   r!   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#   rb   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°   r`   gffffffÖ?r¯   r¯   ç¸…ëQ¸¾?r±   çš™™™™™¹?r®   ©ÚsxÚsyzUni-linear Fit©r9   r�   r)   r$   g4ÛÔ‰.è@gvùñ¾æ±Þ¿grtA-úÖ?gcŒú¿²?g‚;ª”Þµ?g=‘¬‘�¿g˜µ±äk?gO®­¡Ö&@g’ªj(® Àg3
Ù»lï?gZöÕ—»¦Ó?gF�­€)tä?g¿…`=LÉ¿gË!�¹ˆþ¯?)r*   rT   r   r	   rª   rO   r
   rR   r   rS   rU   rV   )r   Úp_xÚp_yÚp_sxÚp_syÚp_datÚpr_datÚp_modÚp_odrÚpr_odrrZ   Ú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*   ry   r+   )r   rS   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¶   r�   )rƒ   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*   rT   r   r	   rÂ   rO   r
   rR   r   rS   rU   rV   )r   Úl_syÚl_sxÚl_datÚl_modÚl_odrrZ   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&   W  r!   z(TestODR.test_ticket_1253.<locals>.linearr/   ç      @r   é
   r)   r‰   r$   r   )r*   Úlinspacer	   r   r
   rR   r   Úinfo)	r   r&   rÍ   r   ÚyÚmodelÚdataÚjobÚresultr   r   r   Útest_ticket_1253V  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=
@r‡   r   )rÒ   Úfixc                 S   s,   |dd d …f | d |dd d …f d   S )Nr   r   r/   r   )rS   r   r   r   r   Ú<lambda>k  s   , z$TestODR.test_ifixx.<locals>.<lambda>T)r_   r)   r$   rE   )r*   r3   Ú
zeros_liker�   Ú	ones_liker   r	   r
   rT   rR   r   rS   )
r   Úx1Úx2rØ   rÔ   rÓ   Úodr1Úsol1Úodr2Úsol2r   r   r   Ú
test_ifixxf  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š™™™™™ñ?rc   gÍÌÌÌÌÌô?r`   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   r\   r]   é   )r*   r3   )rS   r   Ú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*   r5   r›   r4   rT   Ústack)rS   r   Únr_measr›   r4   Ú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   r]   rä   )r*   r5   r4   rT   rè   )rS   r   ré   r4   rê   rë   r   r   r   Ú	df_dx_odr›  s
   
z,TestODR.test_ticket_11800.<locals>.df_dx_odrr   )r;   r<   r³   rb   éd   )r%   Úmaxitr\   rG   )r*   rT   rÐ   r	   r   r
   rP   rR   r   rÑ   r   rS   )r   Ú	beta_trueÚnr_measurementsÚ	std_dev_xÚx_errorÚ	std_dev_yÚy_errorÚbeta_solutionrç   rì   rí   Úx0_trueÚx1_trueÚx_trueÚy_trueÚx_measÚy_measÚmodel_frÔ   Úodr_objÚodr_outr   r   r   Útest_ticket_11800t  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   rR   r   rS   ©r   r   rÒ   rÔ   rþ   Úoutputr   r   r   Útest_multilinear_model¼  ó   

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      $Àr`   )	r*   rÐ   r,   r   r
   r   rR   r   rS   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Œ   r\   )r)   r/   rÎ   rŒ   )r*   rÐ   r   r   r
   rR   r   rS   )r   r   rÒ   Ú
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   rR   r   rS   r  r   r   r   Útest_unilinear_modelÕ  r  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   rR   r   rS   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   )Úparr   Úb0Úb1r   r   r   rç   ç  s   z#TestODR.test_work_ind.<locals>.funcr]   r   r²   r³   r�   r$   r   )Úfit_typeÚsd)r*   ÚarangeÚwhereÚfullr	   r   r
   rP   rR   Úwork_indr   rU   Úworkrš   )r   rç   Ún_datar   rÒ   Úx_errÚy_errÚlinear_modelÚ	real_datarþ   rZ   Ú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¡}z#t	||ddg||d	� 
¡  t	||ddg||d
d� 
¡  W t |¡ dS t |¡ w )z(
        Verify fix for gh-1892
        c                 S   ó   | d | d |  S r   r   ©Úbr   r   r   r   rç     r!   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
   rR   ÚshutilÚrmtree)r   rç   ÚprÔ   Útmp_dirÚerror_file_pathÚ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   r  r   r   r  r   r   r   rç     r!   z1TestODR.test_odr_model_default_meta.<locals>.funczSample Model MetaÚODRPACKr8   )r	   Ú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 ]}t||d
d
gt  |d¡d�}|jddd� | ¡  qpdS )zA
        Verify fix for gh-18739 where del_init=1 fails.
        c                 S   r  r   r   r  r   r   r   rç      r!   z.TestODR.test_work_array_del_init.<locals>.funcr]   r   r²   r³   r   rã   )r´   Úcovyr�   rD   )r%   rŽ   r   )r  r�   N)	r*   r  r  r  r	   r   r
   rP   rR   )r   rç   r  r   rÒ   r  r  r  Úrd0Úrd1Úrd2Úrd3Úrd4Úrd5Úrdrþ   r   r   r   Útest_work_array_del_init  s(   

ÿ
ûz TestODR.test_work_array_del_initc                 C   ó<   t  dd¡}d| d }t||ƒ}t |¡}~t |¡ d S r  )r*   rÐ   r   ÚpickleÚdumpsÚloads©r   r   rÒ   rÔ   Ú
obj_pickler   r   r   Útest_pickling_data9  ó   

zTestODR.test_pickling_datac                 C   r>  r  )r*   rÐ   r   r?  r@  rA  rB  r   r   r   Útest_pickling_real_dataB  rE  zTestODR.test_pickling_real_datac                 C   s   t  t¡}t  |¡ d S r  )r?  r@  r   rA  )r   rC  r   r   r   Útest_pickling_modelK  s   
zTestODR.test_pickling_modelc                 C   sB   t  dd¡}d| d }tt||ƒtƒ}t |¡}~t |¡ d S r  )r*   rÐ   r
   r   r   r?  r@  rA  )r   r   rÒ   rþ   rC  r   r   r   Útest_pickling_odrO  s   
zTestODR.test_pickling_odrc                 C   sD   t  dd¡}d| d }tt||ƒtƒj}t |¡}~t |¡ d S r  )	r*   rÐ   r
   r   r   rR   r?  r@  rA  )r   r   rÒ   r  rC  r   r   r   Útest_pickling_outputX  s   
zTestODR.test_pickling_outputN)'Ú__name__Ú
__module__Ú__qualname__r   r    ÚpytestÚmarkÚthread_unsafer(   r.   r1   r7   r[   r^   rt   r€   r©   rª   rÁ   rÂ   rÌ   r×   râ   r   r  r  r  r	  r
  r  Úskipifr1  r4  r=  rD  rF  rG  rH  rI  r   r   r   r   r      sF    
&2M1(H	
			r   )r?  r&  r+  r(  Únumpyr*   r   Únumpy.testingr   r   r   r   rM  r   r   Ú	scipy.odrr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   s    4