
    xf                        d 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ZddlmZ ddlZddlZddlZddlmZmZmZmZmZmZ ddlZdd	lmZ ddlZdd
lmZ ddlmZ  ddl!Z"ddl#m$Z$m%Z%m&Z& ddl'm	c m(c m)Z* ddl+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m	c m(c m<Z=  e ee>      d      Z?d Z@ej                  dz   ej                  deC      j                  dd      z  ZEdddideEidgZFeFj                  dddid edg      id       eFj                  dddid ej                  eE      d ej                  eE      z  z   id        ej                  d      ZK eL eMdd             eKd<    eL eMdd            eKdddf<   eFj                  d!d"did"eKid       eFj                  d#d$d#id$ e j                  eK      id       eKj                  eP      ZQeQd%xx   dz  cc<   eFj                  d&d'd#id' e j                  eQ      id       eFj                  d(ddd)eEeKd)d       eFj                  d*d+did+ e@d,      id       eFj                  d-d.did. ed/g      id        e@g  e@dg       e@dd0gg       e@g d1g      feR      j                  dd,      ZS ed2g      eSd%<   d3d4d3id4eSidgZT e@ e@d       e@d0       e@g        e@g        e@d5      feR      j                  dd,      ZU ej                  d6eR      ZW e@d      eWd%<   eTj                  d7d8d3id8eWid       eTj                  d9d:d3id:eUid       eTj                  d;d<did< eg d=      id       eTj                  d>d?did? ej                   ej                   eL eMdd@            dA            id        e ej                  d0       ej                  d      ej                  g      j                  dd5      Z[dBD  cg c]  } | eRf c} Z\ ej                  d6e\      Z] edCg      e]dD   d%<   e[e]dE   d%<   e[dFz  e]dG   d%<   eTj                  dHdIdHidIe]id        ej                  dJeR      Z^ e@d      e^d%<    ej                  dKeR      e^dL<    e@d0ej                        e^dL   d%<    e@d5ggej                        e^dL   dL<    ej                  dJeR      e^dL   dM<    e@dej                        e^dL   dM   d%<    e@dNej                        e^dL   dM   dL<   eTj                  dOdPd3idPe^id        ej                  d6dQD  cg c]  } | eRf c}       Z` e@d      e`d%   dR<    ej                  d6dSeRfg      e`d%   dT<    edUg      e`d%   dT   d%   dS<   eTj                  dVdWdHidWe`id        ej                  dJdQD  cg c]  } | eRf c}       Za e@d      ead%   dR<    e@d0      ead%   dT<    edXg      eadL   dR<    edYg      eadL   dT<   eTj                  dZd[dHid[eaid        ej                  d\D  cg c]  } | eRf c}       Zb e& ej                  d6eb      d]      Zcecd%   Zd ed^g      edd_<    ed`g      edda<    ed^g      eddb<    e@d      eddc<    e@d      eddd<    e@d      edde<   eTj                  dfdgdfidgecid        ee ee?dh      di      Zfefj                         j                  dj      Ziefj                          eTj                  dkdldidl eeig      id       eTj                  d#d$d#id$ e j                  eK      id       eTj                  d&d'd#id' e j                  eQ      id       eTj                  dmdndoidn edpgdqgg      id       eTdd Zkekj                  drdsdfids ej                  ecd0      j                  dd0      id       dt Zmdu Zndv Zodw Zpdx ZqddyZrej                  j                  dedz      d{        Zuej                  j                  dedz      d|        Zvej                  j                  d}d~d~dgfddgfg      d        Zwd Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j                  dg d      d        Zd Zd Zd Zd Zyc c} w c c} w c c} w c c} w )zD Nose test generators

Need function load / save / roundtrip tests

    N)OrderedDict)joindirname)glob)BytesIO)mkdtemp)assert_array_equalassert_array_almost_equalassert_equalassert_assert_warnsassert_allclose)raises)array)MatlabOpaqueMatlabFunctionMatlabObject)matdimsMatWriteErrorMatReadErrormatfile_version)mat_reader_factoryloadmatsavematwhosmat)MatFile5WriterMatFile5Readervarmats_from_matto_writeableEmptyStructMarkerdatac                  P    t        j                  | i |}t        |      |_        |S )z;Convenience function to return matlab-compatible 2-D array.)npr   r   shape)argskwargsarrs      @/usr/lib/python3/dist-packages/scipy/io/matlab/tests/test_mio.pymlarrr)   )   s%    
((D
#F
#CCIJ       	   dtype   double
testdouble)nameclassesexpectedstring
teststringcharz+"Do nine men interpret?" "Nine men," I nod.complextestcomplexy              ?)         matrix
testmatrixsparse
testsparser   r   sparsecomplextestsparsecomplexmulti)thetaaminus	testminusonechartestonecharr   )r/   rM   r:   z@This cell contains this string and 3 arrays of increasing lengthcelltestcellr:   r/   r/   
scalarcelltestscalarcell	emptycelltestemptycellstringarrayteststringarray)zone  ztwo  three3dmatrixtest3dmatrix   )r+   r:   rM   )stringfielddoublefieldcomplexfieldzRats live on no evil star.r[   r\   y      ?      ?r]   struct
teststructr/   rM   )r/   r:   r   r/   )r   rM   r;   cellnesttestcellnestonetwore   rW   rf   znumber 3
structnestteststructnestznumber 1znumber 2	structarrteststructarr)expr	inputExprr%   isEmptynumArgsversioninlinexrk   z x = INLINE_INPUTS_{1};rl   r%   rm   rn   ro   object
testobjectzjapanese_utf8.txtrbzutf-8unicodetestunicodebool	testboolslogicalTFobjectarraytestobjectarrayc                 *   t        |       }t        |      }||u ry|t        j                  u r*| j                  dk(  rt        | j	                               |u S |t        j                  u r*|j                  dk(  rt        |j	                               |u S y)zkCheck if types are same or compatible.

    0-D numpy scalars are compatible with bare python scalars.
    T F)typer#   ndarrayr$   item)var1var2type1type2s       r(   types_compatibler      s}    
 JEJE~

tzzR/DIIK E))

tzzR/DIIK E))r*   c           	      $   t        j                  |      rJt        t        j                  |             t        |j	                         |j	                         | d       yt        t        ||      dt        |      dt        |      d|        t        |t        j                  t        j                  t        f      st        ||       yt        |j                  |j                  k(  dj                  |j                  |j                  |              |j                  }|j                   r[t        |t              r t        |j"                  |j"                         t%        |      D ]  \  }}d	| |fz  }t'        ||||           y|j(                  r-|j(                  D ]  }|  d
| d}t'        |||   ||           y|j                  t*        t        j,                  t        j.                  fv rt        |||        yt        ||| d       y)z/ Check one level of a potentially nested array r;   )err_msgdecimalNzExpected type z, got z at zExpected shape {}, got {} at {})msgz
%s, [%d], z, field z, r   )SPissparser   r
   toarrayr   r~   
isinstancer#   voidr   r   r   r$   formatr.   	hasobject	classname	enumerate_check_levelfieldsstrunicode_bool_)labelr4   actualex_dtypeievlevel_labelfns           r(   r   r      s   	{{8F#$!&.."2"*"2"2"4*/*+	- 	Xv.(^T&\523
 hww

L9;Xv&HNNfll*1885;\\5:<= ~~Hh-++V-=-=>x( 	5EAr&%3Kb&)4	5 	// 	3B"G8B4r2K!"vbz3	3 	}}# # 	VXu5fhqIr*   c                     |D ]W  }t        |d      }d|  d| }|j                         D ]-  \  }}| d| }t        ||v d|z         t        ||||          / Y y )NTstruct_as_recordtest ; file z, variable zMissing key at %s)r   itemsr   r   )	r2   filescase	file_namematdictr   kr4   k_labels	            r(   _load_check_caser   )  s|     8	)d;vWYK0::< 	8KAx{1#.GAL"5"?@(GAJ7	88r*   c           
         |D ]|  }d|  d| }t        |      }|j                         D cg c]  \  }}||j                  ||   f }	}}|j                          |	j                          t	        ||	| d|d|	       ~ y c c}}w )Nr   r   z: z != )r   r   r$   sortr   )
r2   r   r   r3   r   r   whosr   r4   expected_whoss
             r(   _whos_check_caser   3  s     	vWYK0y! @Dzz|M0;8Q
+M M 			T=wb],=>	
Ms   Bc                 r    t               }t        |||       |j                  d       t        | |g|       y )Nr   r   )r   r   seekr   )r2   r4   r   
mat_streams       r(   _rt_check_caser   D  s/    JJ0OOATJ<2r*   c              #   "  K   | dk(  rt         }n| dk(  rt        }n| dk(  sJ t        }|D ]a  }|d   }|d   }|d }nCt        t        |t        |      z        }t        |      }t        |      dkD  sJ d| d	|        |d
   }||||f c y w)N455_rtr2   r4   )r2   r   zNo files for test  using filter r3   )case_table4case_table5case_table5_rtpjointest_data_pathdictr   len)	ro   filtcasesr   r2   r4   r   use_filtr3   s	            r(   _casesr   L  s     #~	C&    -F|
#<E^TDdO-CDHNEu:> @$TF.?@>y/E8W,,-s   BBr   r   c                 :    t        |       D ]  }t        |d d    y )Nr:   )r   r   ro   r   s     r(   	test_loadr   b  s#    w $$r(#$r*   c                 4    t        |       D ]
  }t        |   y N)r   r   r   s     r(   	test_whosr   h  s    w  $ r*   zversion, fmtsr   r   r   c                 \    t        | d       D ]  }|D ]  }t        |d   |d   |         y )N)r   r   rM   )r   r   )ro   fmtsr   fmts       r(   test_round_tripr   o  s=    
 wT* 2 	2C47DGS1	22r*   c                  L   t        j                  d      } d| d<   d| d<   t        j                  |       }d}d|i}d}t	               }	 t        ||      }t        j                  |d	
      }t        |||       |j                          t        j                  |d
      }t        |d      }|j                          t        j                  |       t        |d   j                         |d   j                         t        |             y # t        j                  |       w xY w)N)   r   gffffff@rM   r:   g      @)r+   r;   	gzip_testrq   r   wb)moder   rt   Tr   r   )r#   zerosr   
csc_matrixr   r   gzipopenr   closer   shutilrmtreer
   r   repr)	xdenserq   r2   r4   r   tmpdirfnamer   r   s	            r(   test_gzip_simpler   y  s    XXgFF3KF3K
fADAwHFYF
fT"YYu40

HV4YYu40
d;ffSk113&sm335&*6l4 	fs   A5D D#c                  J   t               } 	 t        t        j                  d            }t	        | d      }t        ||       t        j                  |       t        ||       t        |       t        j                  |       t        |d      }t        ||       |j                  d       |j                          t        |d      }t        |       |j                  d       |j                          t        j                  |        y # t        j                  |        w xY w)N)rM   rM   rq   za.matr   r   rt   )r   r   r#   r   r   r   osunlinkr   r   r   r   r   r   )r   rq   r   fs       r(   test_multiple_openr     s    YF288F#$fg& 	q
		%q
		% 1	q			
	q			ffs   C)D D"c                      t        t        t        d            } t        t	        |       dkD         | D ]5  }t        |d      }t        t        t        |d       |j                          7 y )Nztesthdf5*.matr   rt   Tr   )
r   r   r   r   r   r   assert_raisesNotImplementedErrorr   r   )	filenamesfilenamefps      r(   
test_mat73r     sa    no.0IC	NQ (D!)'+	- 	
r*   c                      t        t        d      } t        j                         5  t        j                  d       t        | d       t        | d       d d d        y # 1 sw Y   y xY w)Nztestdouble_7.1_GLNX86.materrorTr   F)r   r   warningscatch_warningssimplefilterr   )r   s    r(   test_warningsr     sT     ."=>E		 	 	" /g&-./ / /s   0AA'c                      t               } t        | dddiid       t        |       d   }t        |j                  d       t        |j
                  t        j
                  t                     t        |d   d u        y )Ndr/   rM   r   r   rP   rA   	r   r   r   r   r$   r.   r#   rr   r   )siobacks     r(   test_regression_653r     sc     )CC#qeS)3<DU#RXXf-.DIr*   c                     d} d| z  }t        j                  d|t        fg      }t        t	               d|id       d| dz   z  }t        j                  d|t        fg      }t        t        t        t	               d|id       y )	N   rF   rP   r-   
longstructr   r   r/   r#   r   rr   r   r   r   
ValueErrorlimfldnamest1s      r(   test_structname_lenr    sz    
CCiG
((5'6!2 3
4CGIc*37SUmG
((5'6!2 3
4C*gwy%c3r*   c                      t        j                  ddt        fg      } t        t        t
        t               d| idd       y )NrP   my_fieldnamer-   	my_structr   Tr   long_field_names)r#   r   rr   r   r  r   r   )r	  s    r(   (test_4_and_long_field_names_incompatibler    s7    ~f&=%>?I*gwyy)#Nr*   c                     d} d| z  }t        j                  d|t        fg      }t        t	               d|idd       d| d	z   z  }t        j                  d|t        fg      }t        t        t        t	               d|idd       y )
N?   rF   rP   r-   r   r   Tr
  r/   r   r  s      r(   test_long_field_namesr    s    
CCiG
((5'6!2 3
4CGIc*3MSUmG
((5'6!2 3
4C*gwy%c4Ir*   c                     d} d| z  }t        j                  dt              }t        j                  d|t        fg      }||d<   ||d<   t	        t               d|id	d
       t        t        t        t               d|id	d       y )Nr  rF   r`   r-   rP   rA   ra   r   r   Tr
  F)r#   r   rr   r   r   r   r   r  )r  r  rN   r  s       r(   test_long_field_names_in_structr    s     CCiG::e&)D
((5'6!2 3
4CDIDIGId+CN *gwy&sULr*   c                      t        j                  dt              } d| d<   d| d<   t        t	               d| id	       t        j                  d
t              } d| d<   t        t	               d| id	       y )Nr`   r-   HellorA   Worldra   rq   r   r   rP   zHello, world)r#   r   rr   r   r   )cellss    r(   test_cell_with_one_thing_in_itr  	  sc     JJu6*EE#JE#JGIU|C0JJu6*EE#JGIU|C0r*   c                  `   t        t                     } t        | j                  g        dg| _        t        | j                  dg       t        | j                  d       d| _        t        | j                  d       t        | j
                  d       d| _        t        | j
                  d       y )NavarFT)r   r   r   global_varsunicode_stringsr  )mfws    r(   test_writer_propertiesr    s    

#C"%hCO6(+$$e,C$$d+%%u-C%%t,r*   c                  $   t               } t        |       }t        j                  d      }|j	                  d|i       t        | j                               }| j                  d       | j                  d       |j	                  d|i       t        |t        | j                               z
  dkD         | j                  d       | j                  d       |j	                  d|i       t        t        | j                               |z
  dk         y )N
   aaaaar   aaaar+   aaaaaa)
r   r   r#   r   put_variablesr   getvaluetruncater   r   )r   wtrr'   w_szs       r(   test_use_small_elementr'  %  s    
)C

C
((2,Cwn%s||~DLLOHHQKvsm$D3s||~&&*+LLOHHQKxo&C$&*+r*   c                  N   t        j                  dggdt        fdt        fg      } t        t        fD ]o  } |ddg      }t               }t        |d|i       |j                  d       t        |      d   }t        |j                  j                  d	       t        ||        q y )
Nr`   rF   br-   )rF   r/   )r)  rM   r   r   rF   r)  )r#   r   rr   r   r   r   r   r   r   r   r.   namesr	   )ab_exp	dict_typer   streamvalss        r(   test_save_dictr0  9  s     XXxj#vf(FGFK( )	x*+$Avv&TZZ%%z24()r*   c                     t        j                  d      } dD ]  }t               }t        |d| i|       t	        |      }t        |d   j                  d       t               }t        |d| i|d       t	        |      }t        |d   j                  d       t               }t        |d| i|d	       t	        |      }t        |d   j                  d        y )
Nr;   r   onedr   )r/   r;   column)r   oned_as)r;   r/   row)r#   aranger   r   r   r   r$   )r'   r   r.  r/  s       r(   test_1d_shaper7  H  s    
))A,C 0f5vT&\''0 	" vT&\''/	 vT&\''/'0r*   c                     t        j                  d      j                  d      } d| d<   t               }t	        |d| i       t        |j                               }t        |      }t        |d   |        t               }t	        |d| id       t        |j                               }t        |      }t        |d   |        t        ||kD         | j                         }d|d<   t               }t	        || |d	d
       t        |      }t        |d   |       t               }t	        || |d	d       t        |      }t        |d   |       y )Nd   )r;   r   r/   )rM   r  r'   T)do_compressionrA   )r'   arr2Fr;  )r#   r   reshaper   r   r   r#  r   r	   r   copy)r'   r.  raw_lenr/  compressed_lenr;  s         r(   test_compressionr@  a  s   
((3-


'CCIYFFU3K &//#$G6?DtE{C(YFFU3K5*+N6?DtE{C(Gn$%88:DDIYFF3t,UC6?DtF|T*YFF3t,TB6?DtF|T*r*   c                  f    t               } t        | dt        j                  dt              i       y )NAr/   r-   )r   r   r#   r   rr   )r.  s    r(   test_single_objectrC  |  s#    YFFS!6234r*   c                     t        t        d      } t        | d      }t        d|v        t        d|v        t	        | d      \  }}|j                  d      }t        d|v        |j                  j                          y )Nztest_skip_variable.matTr   firstsecond)r   r   r   r   r   get_variablesr   r   )r   r   factoryfile_openeds       r(   test_skip_variablerJ    sz     ^$<=H 	40AGqLHM .hNG[ 	h'AHMr*   c                     t        t        d      } t        | d      }|d   }t        |j                  d       t        |j
                  t        j
                  t                     t        |d   d u        t               }t        j                  dd	      }t        |d
|i       t        |      }|d
   }t        ||       y )Nztest_empty_struct.matTr   rF   rP   rA   r}   Ur-   r'   )r   r   r   r   r$   r.   r#   rr   r   r   r   r   r	   )r   r   rF   r.  r'   a2s         r(   test_empty_structrN    s    ^$;<H 	40A	#A% "((6*+AcFdNYF
((2S
!CFU3K A	
5Br3r*   c                      t               } t        | di i       t        |       }|d   }t        |j                  d       t        |j
                  t        j
                  t                     t        |d   d u        y )Nr'   rP   rA   r   )r.  r   rF   s      r(   test_save_empty_dictrP    s^    YFFUBK A	%A% "((6*+AcFdNr*   c                 d    d}|D ]  }t        j                  | |k(        sd} n t        |       y)zH Assert `output` is equal to at least one element in `alternatives`
    FTN)r#   allr   )outputalternatives	one_equalr4   s       r(   assert_any_equalrV    s;     I  66&H$%I Ir*   c                     t        t        j                  dg            } t        | j                  d       t        | d       t        j                  dgddg      }t        j                  dgddg      }||f}t        t        ddd	      |       t        t        ddd
d      |       t        t        ddd
d      |       t        t        ddd
d      |        G d d      }|}d|_        d|_        t        t        |      |       t        g       } t        | j                  d       t        | j                  j                  t        j                         t        d      } t        | j                  d       t        | j                  j                  t        j                         t        t        d       d u        t        t        d      j                  j                  t        j                         t        d      } t        | j                  d       t        | j                  j                  t        j                  d      j                  j                         t        | d       t        t        i       t        u        t        t        t                     d u         G d d      }t        t         |             t        u        t        ddi      d   } t        | j                  d       t        | j                  j                  t        j                          t        t        ddi      t        u        t        t        ddi      t        u        t        t        ddd      t        j                  dgdg             y )Nr/   )r/   r`   )rF   |O8)r)  rX  r-   )rM   r/   rM   r*  r:   )rF   r)  _c)rF   r)  r9  )rF   r)  99c                       e Zd Zy) test_to_writeable.<locals>.klassN__name__
__module____qualname__r}   r*   r(   klassr\        r*   ra  r   r}   a stringc                       e Zd Zy)test_to_writeable.<locals>.CNr]  r}   r*   r(   Crf    rb  r*   rg  rF   1_a)rh  r   rM   )r   rX  )r   r#   r   r   r$   r	   rV  rF   r)  r.   r~   float64r   str_r    rr   object_)res	expected1	expected2rT  ra  crg  s          r(   test_to_writeablerr    s   
rxx}
%CD!sA&,)EFI&,)EFIy)L\qQ-0,?\qQQ"78,G\qQA"67F\qQQ"78,G  	A
AC
AC\!_l3
r
CD!,
r
CD!,L$&'j)//44bgg>
q/CB!!2!2!7!78sAL 112L"d*+  L!223
Qx
 
%CD!,L#a!%667L$q"&77811o.4&79r*   c                  H   ddg} t        j                  d|       }d|d   d<   d|d   d	<   d
|d   d<   d|d   d	<   t               }t        |d|i       t	        |d      }|d   d   }t        |j                  d       t        |j                  d       t	        |d      }|d   d   }t        |d   d       t        |d	   d       t        |j                  t        j                  ddg             |d   j                  d   }t        |d   d
       t        |d	   d       y )N)f1f8)f2S10rj  r-   g      ?r   rt  pythonrv  c   r/   znot perlr'   Fr   rA   T)rt  O)rv  rz  )
r#   r   r   r   r   r   rt  rv  r.   flat)dtr'   r.  r   a20a21s         r(   test_recarrayr    s#   


B
((4r
"CCF4LCF4LCF4LCF4LYFFUCL!/A
E(3-C".A
E(3-CTC TH%BHHk&1&3 4 5
E(--
CTBTJ'r*   c                  Z    G d d      }  |        }d|_         d|_        t               }t        |d|i       t	        |d      }|d   d   }t        |j                   d       t        |j                  d       t	        |d	      }|d   d   }t        |d
   d       t        |d   d       y )Nc                       e Zd Zy)test_save_object.<locals>.CNr]  r}   r*   r(   rg  r  #  rb  r*   rg  r/   rd  rq  Fr   rA   Tfield1field2)r  r  r   r   r   r   )rg  rq  r.  r   c2s        r(   test_save_objectr  "  s     	AAHAHYFFS!H/A	
3BAJ'.A	
3BHq!Hz*r*   c                     t        j                  d      j                  dd      } t               }t	        |d| i       t        |      }|j                         }|d   }t        ||        t        |d      }t        |j                         d   | j                  d             d|_        t        ||        t        |t        j                        }t        |j                         d   |        t        |t        j                        }t        t        |j                         t        j                  |_        t        |j                         d   |        t        j                  d	g      } |j!                  d
       |j#                  d
       t	        |d| i       t        |      }t        |j                         d   |        t        |d      }t        j$                  t        j                  t'        | j)                               d            }t        |j                         d   |       d|_        t        |j                         d   |        y )Nr<   r/   rF   T
squeeze_me)r<   F)
byte_orderrd  r   )chars_as_stringsU1r-   )r#   r6  r<  r   r   r   rG  r	   r  bocnative_codeswapped_coder   	Exceptionr  r   r$  r   
atleast_2dlistr   r  )r'   r.  rdr	back_dictrarrcarrs         r(   test_read_optsr  4  s    ))A,

q
#CYFFS#J

 C!!#IS>DtS!
D
1Cs((*3/T1BCCNtS!
COO
<Cs((*3/5 C,<,<
=C)S../__CNs((*3/5
((J<
 C
OOA
KKNFS#J

 Cs((*3/5
%
8C==$sxxz"2$?@Ds((*3/6Cs((*3/5r*   c                     t        t        d      } t        | d      }t        |      }|j	                         }|j                          t        |d   t        j                  g d             t               }t        |dt        j                  dg      i       t        |      }|j	                         }t        |d   t        j                  g d             |j                  d       |j                  d       t        |dt        j                  g d      i       t        |      }|j	                         }t        |d   t        j                  g d             |j                          y )Nzsingle_empty_string.matrt   rF   r  r-    r   )r   r   r   r   rG  r   r	   r#   r   r   r   r$  r   )estring_fnamer   r  r   r.  s        r(   test_empty_stringr  W  s   .*CDM	mT	"B

CAHHJqvrxx$78 YFFS"((B4.)*

 CAqvrxx$78
OOA
KKNFS"((2T234

 CAqvrxx$78
LLNr*   c                      dd l } t        df| j                  dffD ]I  \  }}t        t	        t
        |      d      5 }t        |      }t        ||j                         d d d        K y # 1 sw Y   VxY w)Nr   corrupted_zlib_data.matzcorrupted_zlib_checksum.matrt   )	zlibr  r   r   r   r   r   r   rG  )r  excr   r   r  s        r(   test_corrupted_datar  r  sx    "$=>

$ABD 2
U%.5 	2 $C#s001	2 	22	2 	2s   "A((A1	c                      t        t        t        d      d      5 } t        | d      }|j	                          d d d        y # 1 sw Y   y xY w)Nr  rt   F) verify_compressed_data_integrity)r   r   r   r   rG  )r   r  s     r(   )test_corrupted_data_check_can_be_disabledr  {  sC    	eN$=>	E R%H  s   AAc            	      d   dD ]  } t        t        t        |       d      }t        |      }|j	                         }|j                          t        |d   t        j                  dgdggt                     t        |d   t        j                  dd	gd	d
ggt        j                                y )N)zbig_endian.matzlittle_endian.matrt   stringshelloworldr-   floats       @      @      @)r   r   r   r   rG  r   r	   r#   r   rr   float32)r   r   r  r   s       r(   test_read_both_endianr    s    8 
C%.5R 

1Y<88gY&-Y%07=?	@ 	1X;88b"X&("X%/68jjB	C
Cr*   c                  @   t        j                  ddgddgg      } t        j                  d      j                  d      }t        j                  ddgd	      }t	               }t        || j                         j                         |j                         j                         |j                         j                         d
       t        |      }|j                         }t        |d   |        t        |d   |       t        |d   |       |j                          y )Nr  r  r  r<   r   r  r  rL  r-   )r  intsuni_arrr  r  r  )r#   r   r6  r<  r   r   byteswapnewbyteorderr   rG  r	   r   )	float_arrint_arrr  r.  r  r   s         r(   test_write_opposite_endianr    s     2r(r($ %Iiil""6*Ghh)5GYFFy113@@B$+$4$4$6$C$C$E'.'7'7'9'F'F'HJ K 
 CAq{I.qy'*q|W-
LLNr*   c                  R   t        t        t        d      d      5 } t        | d      }|j	                         }d d d        t        j                  dgdggt
        j                        }t        d   |       t        |d   j                  |j                         y # 1 sw Y   exY w)Nztestbool_8_WIN64.matrt   T	mat_dtypeFr-   rx   )r   r   r   r   rG  r#   r   r   r	   r   r.   )fobjr  r   rq   s       r(   test_logical_arrayr    s     
eN$:;T	B  dTT2  	4&5'""((3Aq~q);%%qww/   s   BB&c                     t               } t        j                  g d      }t        | d|i       | j	                  d       t        |       }|j                          |j                          |j                         \  }}t        |j                  t        j                         t        |j                  d       |j                  |d      }t        |j                  j                   t        j"                         y )N)FTFbarrayr   TF)r   r#   r   r   r   r   initialize_readread_file_headerread_var_headerr   mclassmio5pmxUINT8_CLASS
is_logicalread_var_arrayr.   r~   uint8)r.  barrreaderhdr_vars         r(   test_logical_out_typer    s     YF88()DFXt$%
KKNF#F

##%FCU001&


U
+C*r*   c                      t               } t        | dt        j                  d      i       t	        |       }|d   j
                  dk(  sJ y )Nr   )r  r   )r   r   r#   emptyr   r$   )r.  r   s     r(   test_roundtrip_zero_dimensionsr    s@    YFFS'*+,AS6<<7"""r*   c                      t               } t        j                  d      j                  d      }t	        t
        t        | d|idd       y )N   )rM   r:   r+   rF   Tr   )r   r#   r6  r<  r   r  r   )r.  r'   s     r(   test_mat4_3dr    s7    YF
))B-


(C*gvSz4Er*   c                     t        t        d      } t        | d      }t        |      }|j	                         }|j                          t        |d   t              sJ t               }t        |      }t        t        |j                  |       y )Nztestfunc_7.4_GLNX86.matrt   testfunc)r   r   r   r   rG  r   r   r   r   r   r   r   r"  )func_egr   r  r   r.  r%  s         r(   test_func_readr    ss    N$=>G	gt	B

CAHHJa
m^444YF

 C-!2!2A6r*   c                     t        t        d      } t        | d      }t        |d      }|j	                         }|j                          t        |d   j                  j                  d       t        | d      }t        |d      }|j	                         }|j                          t        |d   j                  j                  d       y )	Nztestmatrix_6.1_SOL2.matrt   Fr  r>   uTr   )	r   r   r   r   rG  r   r   r.   kind)	double_egr   r  r   s       r(   test_mat_dtyper    s    n&?@I	i	B
u
-CAHHJ<&&++S1	i	B
t
,CAHHJ<&&++S1r*   c                     dt        j                  t        j                  d            i} t	               }t        |d| i       t        |d      }t        |d   d   d   j                         t        j                  d             y )Nsparsefieldr+   rF   Tr   rA   )	r   
coo_matrixr#   eyer   r   r   r	   r   )str.  r   s      r(   test_sparse_in_structr    sh     rvvay1	2BYFFSH.Aqvd|M2::<bffQiHr*   c                  t    t               } ddddi}t        | |       t        | d       t        | dd       y )	Nr  r/   rM   rd   Fr   T)r   r  )r   r   r   )r.  in_ds     r(   test_mat_struct_squeezer    s8    YF#$DFDFU+FUt<r*   c                     t               } dggddddd}t        | |       t        | d      }t        t	        |d	   t
                     t        t	        |d
   t                     t        t	        |d   t        j                               y )N皙?zmy namer/   rM   rd   )scalarr5   r  Tr  r  r5   r  )	r   r   r   r   r   floatr   r#   r   )r.  r  out_ds      r(   test_scalar_squeezer    sq    YFug9KLDFDFt,EJuX./JuX,-JuT{BJJ/0r*   c                     t               } t        j                  ddg      }t        j                  ddg      }t        | t	        |             t        |       }t        |d   |       | j                  d       | j                  d       |j                  d      }t        j                  t        j                  |j                  d|	      }t        | t	        |             t        |d   |       | j                  d       | j                  d       |j                  d
      }|j                  d
      }t        | d|i       t        |       }t        |d   |       y )Nr  FoobzFoob )rF   rF   r   F)order)r$   r.   r  bufferrL  )r   r#   r   r   r   r   r	   r$  r   tobytesr   rF   r$   r.   astype)r.  in_arrout_arrrn  in_strin_from_strin_arr_u	out_arr_us           r(   test_str_roundr    s   YFXXw'(Fhh)*GFD6N#
&/Cs3x)
OOA
KKN^^#^&F**177#)<<#&$*,K FD;'(s3x)
OOA
KKN}}S!Hs#IFS(O$
&/Cs3x+r*   c                      t               } t        | ddddi       t        |       }|d   j                  j                  }t        t        |      ddh       y )NrF   r/   rM   r*  r)  )r   r   r   r.   r+  r   set)r.  rn  field_namess      r(   test_fieldnamesr  #  sK    YFFSqa.)*
&/Cc(..&&K[!C:.r*   c                  x   g d} t        t        d      g ft        t        d      | ffD ]  \  }}t        |      }t        t	        |j                               t	        ddg|z                t        |d      }t        t	        |j                               t	        dg|z                t        |dg      }t        t	        |j                               t	        dg|z                t        |dg      }t        t	        |j                               t	        dg|z                t        |d      }t        t	        |j                               t	        dg|z                t        |g       }t        t	        |j                               t	        |             dg}t        ||      }t        |dg        y )N)__globals__
__header____version__ztestmulti_4.2c_SOL2.matztestmulti_7.4_GLNX86.matrF   rE   )variable_names)rE   )r   r   r   r   r  keys)mat5_sys_nameseg_filesys_v_namesvarsvnamess        r(   test_loadmat_varnamesr  ,  sv   %N 
~8	92>6B89GAI!J ( wS%sC>K+G'HIws3S%sC5;+>'?@wu5S%sC5;+>'?@wy9S%sG9{+B'CDwz:S%sG9{+B'CDwr2S%s;'78wv6VgY'#(r*   c                  <   t        j                  d      } t               }dD ]x  }|j                  d       |j	                  d       t        |d| j                  |      i       t        |      }t        t        j                  |      |d   j                         z y )Nr  )ru  f4i8i4i2i1u8u4u2u1c16c8r   r'   )
r#   r6  r   r$  r   r   r  r   r   r.   )r'   r.  dtsr  s       r(   test_round_typesr  E  sz    
))B-CYF0 7A

301vRXXc]DK$5$567r*   c                    	 dt        t        j                  d            fdt        d      fdt        d      ff	 G 	fdd      } t               }t	        | |               t        |      }t        t        |      d       t        d      D ]8  }||   \  }}	|   \  }}t        ||       t        |      }t        ||   |       : y )	Nr'   r  mystrrd  mynumc                       e Zd Z fdZy) test_varmats_from_mat.<locals>.Cc                     S r   r}   )self
names_varss    r(   r   z&test_varmats_from_mat.<locals>.C.itemsZ  s	    r*   N)r^  r_  r`  r   )r  s   r(   rg  r  Y  s    	r*   rg  r:   )r)   r#   r6  r   r   r   r   r   ranger   r	   )
rg  r.  varmatsr   r2   
var_streamexp_nameexp_resrn  r  s
            @r(   test_varmats_from_matr#  R  s    %		"./E*-.E"I&(J
  YFFACv&GWq!1X /"1:j&qM'T8$j!3t9g./r*   c                      t        t        d      } t        | d      }t        |      }|j	                         }|j                          t        |d   j                  d       y )Nzone_by_zero_char.matrt   r  rc  )r   r   r   r   rG  r   r   r$   )r  r   r  r   s       r(   test_one_by_zeror%  h  sN    N$:;G	gt	B

CAHHJ5&r*   c                  ^    t        t        d      } t        |       }t        |d   ddgg       y )Nztest_mat4_le_floats.matrF   r  g333333?)r   r   r   r	   )
mat4_fnamer  s     r(   test_load_mat4_ler(  r  s/     ~'@AJ:DtCyC:,/r*   c                  v    t               } ddi}t        | |d       t        |       }t        |d   |d          y )N
second_catu   Schrödingerr   r   )r   r   r   r   )bior  var_backs      r(   test_unicode_mat4r-  z  s<    
)C
(CCS!s|H,'\):;r*   c            	      <   t        t        d      } t        | d      }|d   }t        t	        |t
        j                               t        |j                  j                  t        j                         t        |j                         g dg dg dg dg dg       y )Nzlogical_sparse.matTr   
sp_log_5_4)TTTF)FFTF)FFFF)r   r   r   r   r   r   r   r   r.   r~   r#   r   r	   r   )r   r   log_sps      r(   test_logical_sparser1    sx     ^$89H 	40A|_FJvr}}-.""BHH-v~~'13344	67r*   c                     t               } dd l}|j                  j                  ddgddgg      }t	        | t        |             | j                  d       t        |       }t        |d   j                  |j                         t        |d   j                         d       | j                  d       t        |       }|j                          |j                          |j                         \  }}t        |j                   d       y )Nr   r   rq   r/   )r   scipy.sparser?   
csr_matrixr   r   r   r   r	   r$   r   r   r  r  r  r   nzmax)r   scipyempty_sparsern  r  r  r  s          r(   test_empty_sparser8    s    
)C<<**QqE1Q%=9LC%&HHQK
#,Cs3x~~|'9'9:s3x'')1- HHQKC F

##%FCAr*   c                  B    t               } t        t        t        |        y r   )r   r   r   r   )r   s    r(   test_empty_mat_errorr:    s    
)C,-r*   c                  
   t        t        d      } t        |       }t        |d   t	        j
                  d      d d d f          t        t        d      } t        t              5  t        |        d d d        y # 1 sw Y   y xY w)Nzmiuint32_for_miint32.matan_arrayr  zbad_miuint32.mat)r   r   r   r   r#   r6  r   r  r   rn  s     r(   test_miuint32_compromiser>    sl     ^%?@H
(
CZ"))B-a"89^%78H	z	"   s   $A99Bc                      t        t        d      } t        |       }t        |d   dgg       t        t        d      } t	        t
              5  t        |        d d d        y # 1 sw Y   y xY w)Nzmiutf8_array_name.mat
array_namer/   zbad_miutf8_array_name.mat)r   r   r   r   r   r  r=  s     r(   !test_miutf8_for_miint8_compromiserA    s^    ^%<=H
(
C\"aSE*^%@AH	z	"   s   A!!A*c                  x    t        t        d      } t        |       }t        |d   dj	                  dd             y )Nzbroken_utf8.mat
bad_strings    am brokenutf8replace)r   r   r   r   decoder=  s     r(   test_bad_utf8rG    s8    ^$56H
(
C\""))&)<>r*   c                 |    t         j                  j                  t        |       d      }ddddi}t	        ||       y )Ntest.matrF   r/   test_str)r)  rq  )r   pathr   r   r   )r   r   	test_dicts      r(   test_save_unicode_fieldrM    s3    ww||CK4H!
+,IHi r*   c                      G d d      } |       }t         j                  j                  t        |       d      }t	        |d|i       t        |      }t        |d   t        j                  |             y )Nc                       e Zd Zd Zy)0test_save_custom_array_type.<locals>.CustomArrayc                 L    t        j                  d      j                  dd      S )Ng      @rM   r:   )r#   r6  r<  )r  s    r(   	__array__z:test_save_custom_array_type.<locals>.CustomArray.__array__  s    99S>))!Q//r*   N)r^  r_  r`  rR  r}   r*   r(   CustomArrayrP    s    	0r*   rS  rI  rF   )	r   rK  r   r   r   r   r	   r#   r   )r   rS  rF   r   outs        r(   test_save_custom_array_typerU    s[    0 0 	Aww||CK4HHsAh
(
Cs3x!-r*   c                  X    t        t        t        d       t        t        t        d       y )NzNotExistentFile00.matNotExistentFile00)r   OSErrorr   r}   r*   r(   test_filenotfoundrY    s    '7$;<'7$78r*   c                  *   t        t        d      } t        | d      }t        | d      }t        t	        |d   t
                     t        t	        |d   t        j                               t        |d   d   t        j                  g d             y )Nztestsimplecell.matTsimplify_cellsFsmycell)rF   r)  rq  )
r   r   r   r   r   r   r#   r   r	   r   )r   res1res2s      r(   test_simplify_cellsra    sm    ^%9:H8D1D8E2DJtCy$'(JtCy"**-.tCy*BHH_,EFr*   zversion, filt, regex))r   z_4*_*N)r/   z_5*_*N)r/   z_6*_*N)r/   _7*_*z^((?!hdf5).)*$)rM   rb  z.*hdf5.*)r/   z8*_*Nc                    t        t        d|z        }t        |      }|&|D cg c]  }t        j                  ||      | }}t        |      dkD  sJ d|  d|        |D ]  }t        |      }|d   | k(  rJ  y c c}w )Nztest*%s.matr   zNo files for version r   )r   r   r   rematchr   r   )ro   r   regexr   r   filegot_versions          r(   test_matfile_versionri    s     ^]T%9:HNE"'M$288E4+@+LMMu:> >
ytf=>> )%d+1~((() Ns   A?A?c                      t        t        t        d            } t        | d   t              sJ t        | d   j                         d   j                         d   t              sJ y)z,Test that we can read a MatlabOpaque object.parabola.matparabolar:   N)r   r   r   r   r   r   r   r!   s    r(   test_opaquern    sY    589Dd:&777d:&++-a0557:LIIIr*   c                  d    t        t        t        d      d      } t        | d   t              sJ y)zETest that we can read a MatlabOpaque object when simplify_cells=True.rk  Tr[  rl  N)r   r   r   r   r   rm  s    r(   test_opaque_simplifyrp    s*    58NDd:&777r*   c                      t        t              5  t        j                  j                  j
                  j                   ddd       t        t              5  ddlm}  ddd       y# 1 sw Y   (xY w# 1 sw Y   yxY w)z4Test that access to previous attributes still works.Nr   r   )	r   DeprecationWarningr6  iomatlabmio5_paramsr   scipy.io.matlab.miobaser   rr  s    r(   test_deprecationrx    sa     
(	) 1##001 
(	) 989 9	1 19 9s   /A&A2&A/2A;c                    t         j                  j                  d      }| dz  }|j                  d      }|j                  d      }||g}t         j                  j	                         5 }|j                  t         j                         t        |d|idd       d d d        i }t        ||       t        |d   d   d   |       t        |d   d   d	   |       y # 1 sw Y   BxY w)
Ni90  z	lists.mat)r;   r:   )r<   r:   r!   T)r  r:  r   r/   )
r#   randomdefault_rngtestingsuppress_warningsfilterVisibleDeprecationWarningr   r   r   )tmp_pathrngoutfile	array_one	array_twolist_of_arrayssupnew_dicts           r(   test_gh_17992r    s    
))


&C$G

5!I

5!I+N		%	%	' %3

2//0(!%#	%% HGHV$Q'*I6HV$Q'*I6% %s   )1CC$)ztest%(name)s_*.mat)__doc__r   collectionsr   os.pathr   r   r   r   rt  r   rd  tempfiler   r   r   r   numpy.testingr	   r
   r   r   r   r   pytestr   r   numpyr#   r   r3  r?   r   scipy.ior6  scipy.io.matlabr   r   r   scipy.io.matlab._byteordercodesru  _byteordercodesr  scipy.io.matlab._miobaser   r   r   r   scipy.io.matlab._mior   r   r   r   scipy.io.matlab._mio5r   r   r   r   r    scipy.io.matlab._mio5_params_mio5_paramsr  __file__r   r)   pir6  r  r<  rE   r   appendcossinr   rB  r  r  r  r  r8   Brr   CAr   CAEr  objarr	transposesqrtexp
st_sub_arrr.   r  CNr  st2rF   ODTMOm0r   fp_u_strreadrF  u_strr   r   repeatr   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r  r  r  r  r  r  r'  r0  r7  r@  rC  rJ  rN  rP  rV  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r%  r(  r-  r1  r8  r:  r>  rA  rG  rM  rU  rY  ra  ri  rn  rp  rx  r  )ns   0r(   <module>r     s  
 
 # *   	    Q Q  *     F F - -; ; N N  - ,wx(&1 	a			!%(00155x(&
   v&FGHJ   )FBFF5M1A!AB
 BHHUOE!AJ!	eAaj	!A#   x("
   x(a 01
 HHW #"   $h/%}r}}Q'78
   "2 q)
   h'uRy)
   'u. 
qc
!ugwi	 "(	) *12	 
 GHJ3 V$b!#$ 	!H	!H	"I	"I	!H
 
 %WQr]  
%f	%Ahs   !6*"F+
    &)!3')*   "F+#U&! "   *LBLLDq,=w!GHJ GBGGAJvrvvay/0881=
LM!VMbhhue!= >?M 3 $M 3 %0N C    x($
 RXXe6"
(3
"((5
'3Qbhh'3qcU"((+3rxxV,3!288,3S !288,3S    ( "%
 bhhu.AQa[AB(C"((5'6):(;<C %zl 3C W    !8,"C(
 BHHU?1Av;?@a#ua#uzl##uzl##u    (+!1%
 bhh34F 4 5 ("((5,h7WC5\6
234;C5\6
a9a9a9   x(#
 n&9:DAw'     'ug/
   x(a 01
   $h/%}r}}Q'78
   i($%)*, Q   "H-#YRYYr1%5%=%=a%BCEF ,J^8"3-, J/$ 0$
 J/  0  3*cUO+ 2	248:
/		3N	IL"1-,()02+65
< &<9~(6+$ 6F62C&0+"#F	72I=1,:/(2
7/,'0<7*(.	>!.9G / 2 	)	)J897_$ 	N. B @4s   d>e

e
 e