
    ge                     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jA        dz   ejB        deC          D                    dd          z  ZEdddideEidgZFeFG                    dddid edg          id           eFG                    dddid ejH        eE          d ejI        eE          z  z   id            ejJ        d          ZK eL eMdd                     eKd<    eL eMdd                    eKdddf<   eFG                    d!d"did"eKid           eFG                    d#d$d#id$ e jN        eK          id           eKO                    eP          ZQeQd%xx         dz  cc<   eFG                    d&d'd#id' e jN        eQ          id           eFG                    d(ddd)eEeKd)d           eFG                    d*d+did+ e@d,          id           eFG                    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          D                    dd,          ZS ed2g          eSd%<   d3d4d3id4eSidgZT e@ e@d           e@d0           e@g            e@g            e@d5          feR          D                    dd,          ZU ejV        d6eR          ZW e@d          eWd%<   eTG                    d7d8d3id8eWid           eTG                    d9d:d3id:eUid           eTG                    d;d<did< eg d=          id           eTG                    d>d?did? ejX         ejD         eL eMdd@                    dA                    id            e ejY        d0           ejZ        d          ejA        g          D                    dd5          Z[dB dCD             Z\ ejJ        d6e\          Z] edDg          e]dE         d%<   e[e]dF         d%<   e[dGz  e]dH         d%<   eTG                    dIdJdIidJe]id            ejJ        dKeR          Z^ e@d          e^d%<    ejJ        dLeR          e^dM<    e@d0ej_                  e^dM         d%<    e@d5ggej_                  e^dM         dM<    ejJ        dKeR          e^dM         dN<    e@dej_                  e^dM         dN         d%<    e@dOej_                  e^dM         dN         dM<   eTG                    dPdQd3idQe^id            ejV        d6dR dSD                       Z` e@d          e`d%         dT<    ejV        d6dUeRfg          e`d%         dV<    edWg          e`d%         dV         d%         dU<   eTG                    dXdYdIidYe`id            ejV        dKdZ dSD                       Za e@d          ead%         dT<    e@d0          ead%         dV<    ed[g          eadM         dT<    ed\g          eadM         dV<   eTG                    d]d^dIid^eaid            ej\        d_ d`D                       Zb e& ejJ        d6eb          da          Zcecd%         Zd edbg          eddc<    eddg          edde<    edbg          eddf<    e@d          eddg<    e@d          eddh<    e@d          eddi<   eTG                    djdkdjidkecid            ee ee?dl          dm          Zfefg                                h                    dn          Ziefj                                 eTG                    dodpdidp eeig          id           eTG                    d#d$d#id$ e jN        eK          id           eTG                    d&d'd#id' e jN        eQ          id           eTG                    dqdrdsidr edtgdugg          id           eTdd         ZkekG                    dvdwdjidw ejl        ecd0          D                    dd0          id           dx Zmdy Zndz Zod{ Zpd| Zqdd~Zrejs        t                    did          d             Zuejs        t                    did          d             Zvejs        t                    ddddgfddg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js        t                    dg d          d             Zd ZdÄ ZdĄ Zdń ZdS )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      >lib/python3.11/site-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   c                      g | ]}|t           fS  object.0ns     r(   
<listcomp>rb      s    MMM!VMMMr*   )stringfielddoublefieldcomplexfieldzRats live on no evil star.rc   rd   y      ?      ?re   struct
teststructr/   rM   )r/   r:   r   r/   )r   rM   r;   cellnesttestcellnestc                      g | ]}|t           fS r\   r]   r_   s     r(   rb   rb      s    AAAQa[AAAr*   onetworn   rW   ro   znumber 3
structnestteststructnestc                      g | ]}|t           fS r\   r]   r_   s     r(   rb   rb      s    ???1Av;???r*   znumber 1znumber 2	structarrteststructarrc                      g | ]}|t           fS r\   r]   r_   s     r(   rb   rb      s(     4 4 4F 4 4 4r*   )expr	inputExprr%   isEmptynumArgsversioninlinexrv   z x = INLINE_INPUTS_{1};rw   r%   rx   ry   rz   r^   
testobjectzjapanese_utf8.txtrbzutf-8unicodetestunicodebool	testboolslogicalTFobjectarraytestobjectarrayc                 >   t          |           }t          |          }||u rdS |t          j        u r.| j        dk    r#t          |                                           |u S |t          j        u r.|j        dk    r#t          |                                          |u S dS )zkCheck if types are same or compatible.

    0-D numpy scalars are compatible with bare python scalars.
    Tr\   F)typer#   ndarrayr$   item)var1var2type1type2s       r(   types_compatibler      s    
 JJEJJE~~t
tzR//DIIKK  E))
tzR//DIIKK  E))5r*   c           	      H   t          j        |          rZt          t          j        |                     t          |                                |                                | d           dS t          t          ||          dt          |          dt          |          d|            t          |t          j	        t          j
        t          f          st          ||           dS t          |j        |j        k    d                    |j        |j        |                      |j        }|j        rdt          |t                    rt          |j        |j                   t%          |          D ]#\  }}d	| |fz  }t'          ||||                    $dS |j        r1|j        D ]'}|  d
| d}t'          |||         ||                    (dS |j        t*          t          j        t          j        fv rt          |||            dS t          ||| d           dS )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      sa   	{8 F##$$$!&.."2"2"*"2"2"4"4*/*+	- 	- 	- 	- 	Xv...(^^^^T&\\\\5523 3 3
 hw
L9; ; Xv&&&HNfl*1885;\5:< <= = = = ~H h-- 	?+V-=>>>x(( 	5 	5EAr&%3Kb&)4444 / 	3 	3B"22B222K!"vbz3 3 3 3}# # # 	VXu5555fhqIIIIIIr*   c                     |D ]h}t          |d          }d|  d| }|                                D ]8\  }}| d| }t          ||v d|z             t          ||||                    9id S )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 8	)d;;;000Y00::<< 	8 	8KAx..1..GAL"5"?@@@(GAJ7777	88 8r*   c           
         |D ]z}d|  d| }t          |          }fd|                                D             }|                                 |                                 t          ||| d|d|           {d S )Nr   r   c                 6    g | ]\  }}||j         |         fS r\   )r$   )r`   r   r4   r3   s      r(   rb   z$_whos_check_case.<locals>.<listcomp>9  s=     M M M0;8Q
+M M Mr*   z: z != )r   r   sortr   )r2   r   r   r3   r   r   whosexpected_whoss      `    r(   _whos_check_caser   3  s      	000Y00y!!M M M M?Czz||M M M 			T=>>>>]>>	 	 	 	 r*   c                     t                      }t          |||           |                    d           t          | |g|           d S )Nr   r   )r   r   seekr   )r2   r4   r   
mat_streams       r(   _rt_check_caser   D  sL    JJ0000OOATJ<22222r*   test%(name)s_*.matc              #   d  K   | dk    rt           }n| dk    rt          }n| dk    sJ t          }|D ]}|d         }|d         }|d }nXt          t          |t          |          z            }t          |          }t          |          dk    sJ d| d	|             |d
         }||||fV  d S )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)	rz   filtcasesr   r2   r4   r   use_filtr3   s	            r(   _casesr   L  s      #~~	C&     - -F|
#<EE^TDdOOO-CDDHNNEu::>>>?T???? ">>y/E8W,,,,,- -r*   r   r   c                 L    t          |           D ]}t          |d d           d S )Nr:   )r   r   rz   r   s     r(   	test_loadr   b  s7    w $ $$rr(###$ $r*   c                 <    t          |           D ]}t          |  d S N)r   r   r   s     r(   	test_whosr   h  s/    w    $   r*   zversion, fmtsr   r   r   c                 r    t          | d           D ]$}|D ]}t          |d         |d         |            %d S )N)r   r   rM   )r   r   )rz   fmtsr   fmts       r(   test_round_tripr   o  s[    
 wT*** 2 2 	2 	2C47DGS1111	22 2r*   c                     t          j        d          } d| d<   d| d<   t          j        |           }d}d|i}d}t	                      }	 t          ||          }t          j        |d	
          }t          |||           |	                                 t          j        |d
          }t          |d          }|	                                 t          j        |           n# t          j        |           w xY wt          |d                                         |d                                         t          |                     d S )N)   r   gffffff@rM   r:   g      @)r+   r;   	gzip_testr|   r   wb)moder   r~   Tr   r   )r#   zerosr   
csc_matrixr   r   gzipopenr   closer   shutilrmtreer
   r   repr)	xdenser|   r2   r4   r   tmpdirfnamer   r   s	            r(   test_gzip_simpler   y  sM   XgFF3KF3K
fADAwHFYYF
fT""Yu4000

HV4444Yu4000
d;;;fffSk1133&sm3355&*6ll4 4 4 4 4 4s   
BC& &C<c                     t                      } 	 t          t          j        d                    }t	          | d          }t          ||           t          j        |           t          ||           t          |           t          j        |           t          |d          }t          ||           |
                    d           |                                 t          |d          }t          |           |
                    d           |                                 t          j        |            d S # t          j        |            w xY w)N)rM   rM   r|   za.matr   r   r~   )r   r   r#   r   r   r   osunlinkr   r   r   r   r   r   )r   r|   r   fs       r(   test_multiple_openr     s"   YYF28F##$$$fg&& 	q
	%q
	% 1	q							


	q							ffs   DE   Ec                     t          t          t          d                    } t          t	          |           dk               | D ]C}t          |d          }t          t          t          |d           |	                                 Dd S )Nztesthdf5*.matr   r~   Tr   )
r   r   r   r   r   r   assert_raisesNotImplementedErrorr   r   )	filenamesfilenamefps      r(   
test_mat73r     s    no..0 0IC	NNQ  (D!!)'+	- 	- 	- 	- 	



 r*   c                      t          t          d          } t          j                    5  t          j        d           t          | d           t          | d           d d d            d S # 1 swxY w Y   d S )Nztestdouble_7.1_GLNX86.materrorTr   F)r   r   warningscatch_warningssimplefilterr   )r   s    r(   test_warningsr    s     ."=>>E		 	"	" / /g&&&----..../ / / / / / / / / / / / / / / / / /s   7A--A14A1c                  (   t                      } t          | dddiid           t          |           d         }t          |j        d           t          |j        t          j        t                               t          |d         d u            d S )Ndr/   rM   r   r   rP   rA   	r   r   r   r   r$   r.   r#   r^   r   )siobacks     r(   test_regression_653r    s     ))CC#qeS))))3<<DU###RXf--...DIr*   c                  4   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           d S )	N   rF   rP   r-   
longstructr   r   r/   r#   r   r^   r   r   r   
ValueErrorlimfldnamest1s      r(   test_structname_lenr    s    
CCiG
(5'6!2 3
4
4
4CGIIc*37777SUmG
(5'6!2 3
4
4
4C*gwyy%c3 3 3 3 3 3r*   c                      t          j        ddt          fg          } t          t          t
          t                      d| idd           d S )NrP   my_fieldnamer-   	my_structr   Tr   long_field_names)r#   r   r^   r   r  r   r   )r  s    r(   (test_4_and_long_field_names_incompatibler    s[    ~f&=%>???I*gwyyy)#N N N N N Nr*   c                  8   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           d S )
N?   rF   rP   r-   r
  r   Tr  r/   r  r  s      r(   test_long_field_namesr    s    
CCiG
(5'6!2 3
4
4
4CGIIc*3MMMMSUmG
(5'6!2 3
4
4
4C*gwyy%c4I I I I I Ir*   c                  6   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           d S )Nr  rF   rh   r-   rP   rA   ri   r
  r   Tr  F)r#   r   r^   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
4
4
4CDIDIGIId+CNNNN *gwyy&sUL L L L L 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	           d S )Nrh   r-   HellorA   Worldri   r|   r   r   rP   zHello, world)r#   r   r^   r   r   )cellss    r(   test_cell_with_one_thing_in_itr!  	  s     Ju6***EE#JE#JGIIU|C0000Ju6***EE#JGIIU|C000000r*   c                  f   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           d S )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          }|                    d|i           t          |                                           }|                     d           |                     d           |                    d|i           t          |t          |                                           z
  dk               |                     d           |                     d           |                    d|i           t          t          |                                           |z
  dk                d S )N
   aaaaar   aaaar+   aaaaaa)
r   r   r#   r   put_variablesr   getvaluetruncater   r   )r  wtrr'   w_szs       r(   test_use_small_elementr2  %  s   
))C


C
(2,,Cwn%%%s||~~DLLOOOHHQKKKvsm$$$D3s||~~&&&*+++LLOOOHHQKKKxo&&&C$&*+++++r*   c                  z   t          j        dggdt          fdt          fg          } t          t          fD ]} |ddg          }t                      }t          |d|i           |                    d           t          |          d         }t          |j
        j        d	           t          ||            d S )
Nrh   rF   br-   )rF   r/   )r4  rM   r   r   rF   r4  )r#   r   r^   r   r   r   r   r   r   r   r.   namesr	   )ab_exp	dict_typer  streamvalss        r(   test_save_dictr;  9  s     Xxj#vf(FGGGFK( ) )	Ix*++$$$Avv&TZ%z22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           d S )
Nr;   r   onedr   )r/   r;   column)r   oned_as)r;   r/   row)r#   aranger   r   r   r   r$   )r'   r   r9  r:  s       r(   test_1d_shaperB  H  s   
)A,,C 0 0f5555vT&\'000 	" 	" 	" 	" vT&\'///	 	 	 	 vT&\'////'0 0r*   c                  r   t          j        d                              d          } d| d<   t                      }t	          |d| i           t          |                                          }t          |          }t          |d         |            t                      }t	          |d| id           t          |                                          }t          |          }t          |d         |            t          ||k               | 
                                }d|d<   t                      }t	          || |d	d
           t          |          }t          |d         |           t                      }t	          || |d	d           t          |          }t          |d         |           d S )Nd   )r;   r   r/   )rM   r)  r'   T)do_compressionrA   )r'   arr2FrF  )r#   r   reshaper   r   r   r.  r   r	   r   copy)r'   r9  raw_lenr:  compressed_lenrF  s         r(   test_compressionrK  a  s   
(3--


'
'CCIYYFFU3K   &//##$$G6??DtE{C(((YYFFU3K5555**++N6??DtE{C(((Gn$%%%88::DDIYYFF3t,,UCCCC6??DtF|T***YYFF3t,,TBBBB6??DtF|T*****r*   c                  x    t                      } t          | dt          j        dt                    i           d S )NAr/   r-   )r   r   r#   r   r^   )r9  s    r(   test_single_objectrN  |  s5    YYFFS!6222344444r*   c                  <   t          t          d          } t          | d          }t          d|v            t          d|v            t	          | d          \  }}|                    d          }t          d|v            |j                                         d S )Nztest_skip_variable.matTr   firstsecond)r   r   r   r   r   get_variablesr   r   )r   r  factoryfile_openeds       r(   test_skip_variablerU    s     ^$<==H 	4000AGqLHM .hNN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          ||           d S )Nztest_empty_struct.matTr   rF   rP   rA   r\   Ur-   r'   )r   r   r   r   r$   r.   r#   r^   r   r   r   r   r	   )r   r  rF   r9  r'   a2s         r(   test_empty_structrY    s    ^$;<<H 	4000A	#A%   "(6**+++AcFdNYYF
(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            d S )Nr'   rP   rA   r  )r9  r  rF   s      r(   test_save_empty_dictr[    s}    YYFFUBK   A	%A%   "(6**+++AcFdNr*   c                 j    d}|D ]}t          j        | |k              rd} nt          |           dS )zH Assert `output` is equal to at least one element in `alternatives`
    FTN)r#   allr   )outputalternatives	one_equalr4   s       r(   assert_any_equalra    sT     I   6&H$%% 	IE	 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                     d S )Nr/   )r/   rh   )rF   |O8)r4  rc  r-   )rM   r/   rM   r5  r:   )rF   r4  _c)rF   r4  rD  )rF   r4  99c                       e Zd ZdS ) test_to_writeable.<locals>.klassN__name__
__module____qualname__r\   r*   r(   klassrg            r*   rl  r   r\   a stringc                       e Zd ZdS )test_to_writeable.<locals>.CNrh  r\   r*   r(   Crq    rm  r*   rr  rF   1_a)rs  r   rM   )r   rc  )r   r#   r   r   r$   r	   ra  rF   r4  r.   r   float64r   str_r    r^   object_)res	expected1	expected2r_  rl  crr  s          r(   test_to_writeabler}    s   
rx}}
%
%CD!!!sA&,)EFFFI&,)EFFFIy)L\qQ--00,???\qQQ"7"788,GGG\qQA"6"677FFF\qQQ"7"788,GGG        	A
AC
AC\!__l333
r

CD!!!,,,
r

CD!!!,,,L$&'''j))/4bg>>>
q//CB!!2!7888sAL 11222L""d*+++        L!22333
Qx
 
 
%CD!!!,,,L#a!!%66777L$q""&7788811oo..4&7779 9 9 9 9r*   c                     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           d S )N)f1f8)f2S10ru  r-   g      ?r   r  pythonr  c   r/   znot perlr'   Fr   rA   T)r  O)r  r  )
r#   r   r   r   r   r   r  r  r.   flat)dtr'   r9  r  a20a21s         r(   test_recarrayr    sj   


B
(4r
"
"
"CCF4LCF4LCF4LCF4LYYFFUCL!!!///A
E(3-C"""...A
E(3-CTC   TH%%%BHk&1&3 4 4 5 5 5
E(-
CTBTJ'''''r*   c                      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           d S )Nc                       e Zd ZdS )test_save_object.<locals>.CNrh  r\   r*   r(   rr  r  #  rm  r*   rr  r/   ro  r|  Fr   rA   Tfield1field2)r  r  r   r   r   r   )rr  r|  r9  r  c2s        r(   test_save_objectr  "  s           	AAHAHYYFFS!H///A	
3BAJ'''...A	
3BHq!!!Hz*****r*   c                     t          j        d                              dd          } t                      }t	          |d| i           t          |          }|                                }|d         }t          ||            t          |d          }t          |                                d         |                     d                     d|_        t          ||            t          |t          j
                  }t          |                                d         |            t          |t          j                  }t          t          |j                   t          j
        |_        t          |                                d         |            t          j        d	g          } |                    d
           |                    d
           t	          |d| i           t          |          }t          |                                d         |            t          |d          }t          j        t          j        t'          |                                           d                    }t          |                                d         |           d|_        t          |                                d         |            d S )Nr<   r/   rF   T
squeeze_me)r<   F)
byte_orderro  r   )chars_as_stringsU1r-   )r#   rA  rG  r   r   r   rR  r	   r  bocnative_codeswapped_coder   	Exceptionr  r   r/  r   
atleast_2dlistr   r  )r'   r9  rdr	back_dictrarrcarrs         r(   test_read_optsr  4  sX    )A,,

q
#
#CYYFFS#J

 
 C!!##IS>DtS!!!
D
1
1
1Cs((**3/T1B1BCCCCNtS!!!
CO
<
<
<Cs((**3/555 C,<
=
=
=C)S.///_CNs((**3/555
(J<
 
 C
OOA
KKNNNFS#J

 
 Cs((**3/555
%
8
8
8C=$sxxzz"2"2$???@@Ds((**3/666Cs((**3/55555r*   c                  t   t          t          d          } t          | d          }t          |          }|                                }|                                 t          |d         t          j        g d                     t                      }t          |dt          j        dg          i           t          |          }|                                }t          |d         t          j        g d                     |                    d           |                    d           t          |dt          j        g d          i           t          |          }|                                }t          |d         t          j        g d                     |                                 d S )Nzsingle_empty_string.matr~   rF   r  r-    r   )r   r   r   r   rR  r   r	   r#   r   r   r   r/  r   )estring_fnamer   r  r  r9  s        r(   test_empty_stringr  W  sq   .*CDDM	mT	"	"B


CAHHJJJqvrx$777888 YYFFS"(B4..)***

 
 CAqvrx$777888
OOA
KKNNNFS"(2T2223444

 
 CAqvrx$777888
LLNNNNNr*   c                      dd l } t          df| j        dffD ]d\  }}t          t	          t
          |          d          5 }t          |          }t          ||j                   d d d            n# 1 swxY w Y   ed S )Nr   corrupted_zlib_data.matzcorrupted_zlib_checksum.matr~   )	zlibr  r   r   r   r   r   r   rR  )r  excr   r   r  s        r(   test_corrupted_datar  r  s    KKK"$=>
$ABD 2 2
U%..55 	2 $$C#s0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	22 2s   %A00A4	7A4	c                      t          t          t          d          d          5 } t          | d          }|                                 d d d            d S # 1 swxY w Y   d S )Nr  r~   F) verify_compressed_data_integrity)r   r   r   r   rR  )r   r  s     r(   )test_corrupted_data_check_can_be_disabledr  {  s    	eN$=>>	E	E R%HHH                 s   &AAAc            	         dD ]} t          t          t          |           d          }t          |          }|                                }|                                 t          |d         t          j        dgdggt                               t          |d         t          j        dd	gd	d
ggt          j
                             d S )N)zbig_endian.matzlittle_endian.matr~   stringshelloworldr-   floats       @      @      @)r   r   r   r   rR  r   r	   r#   r   r^   float32)r   r   r  r  s       r(   test_read_both_endianr    s    8 
C 
C%..55R  



1Y<8gY&-Y%07=? ? ?	@ 	@ 	@ 	1X;8b"X&("X%/68jB B B	C 	C 	C 	C
C 
Cr*   c                     t          j        ddgddgg          } t          j        d                              d          }t          j        ddgd	          }t	                      }t          ||                                                                 |                                                                |                                                                d
           t          |          }|	                                }t          |d         |            t          |d         |           t          |d         |           |                                 d S )Nr  r  r  r<   r   r  r  rW  r-   )r  intsuni_arrr  r  r  )r#   r   rA  rG  r   r   byteswapnewbyteorderr   rR  r	   r   )	float_arrint_arrr  r9  r  r  s         r(   test_write_opposite_endianr    sD    2r(r($ % %Iill""6**Gh)555GYYFFy1133@@BB$+$4$4$6$6$C$C$E$E'.'7'7'9'9'F'F'H'HJ J K K K 
 
 CAq{I...qy'***q|W---
LLNNNNNr*   c                  z   t          t          t          d          d          5 } t          | d          }|                                }d d d            n# 1 swxY w Y   t          j        dgdggt
          j                  }t          |d         |           t          |d         j
        |j
                   d S )Nztestbool_8_WIN64.matr~   T	mat_dtypeFr-   r   )r   r   r   r   rR  r#   r   r   r	   r   r.   )fobjr  r  r|   s       r(   test_logical_arrayr    s     
eN$:;;T	B	B  dTT222                              	4&5'""(333Aq~q)));%qw/////s   &AAAc                     t                      } t          j        g d          }t          | d|i           |                     d           t          |           }|                                 |                                 |                                \  }}t          |j
        t          j                   t          |j        d           |                    |d          }t          |j        j        t          j                   d S )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)r9  barrreaderhdr_vars         r(   test_logical_out_typer    s     YYF8((())DFXt$%%%
KKNNNF##F

##%%FCU0111&&&


U
+
+C*****r*   c                      t                      } t          | dt          j        d          i           t	          |           }|d         j        dk    sJ d S )Nr  )r)  r   )r   r   r#   emptyr   r$   )r9  r  s     r(   test_roundtrip_zero_dimensionsr    sR    YYFFS'**+,,,AS6<7""""""r*   c                      t                      } t          j        d                              d          }t	          t
          t          | d|idd           d S )N   )rM   r:   r+   rF   Tr   )r   r#   rA  rG  r   r  r   )r9  r'   s     r(   test_mat4_3dr    sH    YYF
)B--


(
(C*gvSz4EEEEEr*   c                  h   t          t          d          } t          | d          }t          |          }|                                }|                                 t          |d         t                    sJ t                      }t          |          }t          t          |j        |           d S )Nztestfunc_7.4_GLNX86.matr~   testfunc)r   r   r   r   rR  r   r   r   r   r   r   r   r-  )func_egr   r  r  r9  r0  s         r(   test_func_readr    s    N$=>>G	gt		B


CAHHJJJa
m^44444YYF

 
 C-!2A66666r*   c                     t          t          d          } t          | d          }t          |d          }|                                }|                                 t          |d         j        j        d           t          | d          }t          |d          }|                                }|                                 t          |d         j        j        d           d S )	Nztestmatrix_6.1_SOL2.matr~   Fr  r>   uTr   )	r   r   r   r   rR  r   r   r.   kind)	double_egr   r  r  s       r(   test_mat_dtyper    s    n&?@@I	i		B
u
-
-
-CAHHJJJ<&+S111	i		B
t
,
,
,CAHHJJJ<&+S11111r*   c                  D   dt          j        t          j        d                    i} t	                      }t          |d| i           t          |d          }t          |d         d         d                                         t          j        d                     d S )Nsparsefieldr+   rF   Tr   rA   )	r   
coo_matrixr#   eyer   r   r   r	   r   )str9  r  s      r(   test_sparse_in_structr    s     rvayy11	2BYYFFSH...Aqvd|M2::<<bfQiiHHHHHr*   c                      t                      } ddddi}t          | |           t          | d           t          | dd           d S )	Nr  r/   rM   rm   Fr   T)r   r  )r   r   r   )r9  in_ds     r(   test_mat_struct_squeezer    s[    YYF##$DFDFU++++FUt<<<<<<r*   c                  t   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                             d S )N皙?zmy namer/   rM   rm   )scalarr5   r  Tr  r  r5   r  )	r   r   r   r   r   floatr   r#   r   )r9  r  out_ds      r(   test_scalar_squeezer    s    YYFug9K9KLLDFDFt,,,EJuX..///JuX,,---JuT{BJ//00000r*   c                  L   t                      } t          j        ddg          }t          j        ddg          }t          | t	          |                     t          |           }t          |d         |           |                     d           |                     d           |	                    d          }t          j
        t          j        |j        d|	          }t          | t	          |                     t          |d         |           |                     d           |                     d           |                    d
          }|                    d
          }t          | d|i           t          |           }t          |d         |           d S )Nr  FoobzFoob )rF   rF   r   F)order)r$   r.   r  bufferrW  )r   r#   r   r   r   r   r	   r/  r   tobytesr   rF   r$   r.   astype)r9  in_arrout_arrry  in_strin_from_strin_arr_u	out_arr_us           r(   test_str_roundr    sp   YYFXw'((Fh)**GFD6NNN###
&//Cs3x)))
OOA
KKNNN^^#^&&F*17#)<#&$*, , ,K FD;'''(((s3x)))
OOA
KKNNN}}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           d S )NrF   r/   rM   r5  r4  )r   r   r   r.   r6  r   set)r9  ry  field_namess      r(   test_fieldnamesr  #  sa    YYFFSqa..)***
&//Cc(.&K[!!C:.....r*   c                     g d} t          t          d          g ft          t          d          | ffD ]\  }}t          |          }t          t	          |                                          t	          ddg|z                        t          |d          }t          t	          |                                          t	          dg|z                        t          |dg          }t          t	          |                                          t	          dg|z                        t          |dg          }t          t	          |                                          t	          dg|z                        t          |d          }t          t	          |                                          t	          dg|z                        t          |g           }t          t	          |                                          t	          |                     dg}t          ||          }t          |dg           d S )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  ,  s   % % %N 
~8	9	92>6B8 B89GAI!J ( ( wS%%sC>K+G'H'HIIIws333S%%sC5;+>'?'?@@@wu555S%%sC5;+>'?'?@@@wy999S%%sG9{+B'C'CDDDwz:::S%%sG9{+B'C'CDDDwr222S%%s;'7'7888wv666VgY''''#( (r*   c                  j   t          j        d          } t                      }dD ]}|                    d           |                    d           t          |d|                     |          i           t          |          }t          t          j	        |          |d         j	                   d S )Nr)  )r  f4i8i4i2i1u8u4u2u1c16c8r   r'   )
r#   rA  r   r/  r   r   r  r   r   r.   )r'   r9  dtsr  s       r(   test_round_typesr   E  s    
)B--CYYF0 7 7A

30111vRXc]]DK$566667 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 ]M}||         \  }}	|         \  }}t          ||           t          |          }t          ||         |           Nd S )	Nr'   r)  mystrro  mynumc                       e Zd Z fdZdS ) 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)ri  rj  rk  r   )r(  s   r(   rr  r%  Y  s.        	 	 	 	 	 	 	r*   rr  r:   )r)   r#   rA  r   r   r   r   r   ranger   r	   )
rr  r9  varmatsr   r2   
var_streamexp_nameexp_resry  r(  s
            @r(   test_varmats_from_matr.  R  s%   %	"../E*--.E"II&(J
          YYFFAACCv&&GWq!!!1XX / /"1:j&qM'T8$$$j!!3t9g..../ /r*   c                      t          t          d          } t          | d          }t          |          }|                                }|                                 t          |d         j        d           d S )Nzone_by_zero_char.matr~   r  rn  )r   r   r   r   rR  r   r   r$   )r  r   r  r  s       r(   test_one_by_zeror0  h  sh    N$:;;G	gt		B


CAHHJJJ5&&&&&r*   c                      t          t          d          } t          |           }t          |d         ddgg           d S )Nztest_mat4_le_floats.matrF   r  g333333?)r   r   r   r	   )
mat4_fnamer  s     r(   test_load_mat4_ler3  r  sA     ~'@AAJ:DtCyC:,/////r*   c                      t                      } ddi}t          | |d           t          |           }t          |d         |d                    d S )N
second_catu   Schrödingerr   r   )r   r   r   r   )bior  var_backs      r(   test_unicode_mat4r8  z  sU    
))C
(CCS!!!!s||H,'\):;;;;;r*   c            	      Z   t          t          d          } t          | d          }|d         }t          t	          |t
          j                             t          |j        j	        t          j                   t          |                                g dg dg dg dg dg           d S )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_sparser<    s     ^$899H 	4000A|_FJvr}--..."BH---v~~''111333333444444	67 7 7 7 7r*   c                  n   t                      } dd l}|j                            ddgddgg          }t	          | t          |                     |                     d           t          |           }t          |d         j	        |j	                   t          |d         
                                d           |                     d           t          |           }|                                 |                                 |                                \  }}t          |j        d           d S )Nr   r   r|   r/   )r   scipy.sparser?   
csr_matrixr   r   r   r   r	   r$   r   r   r  r  r  r   nzmax)r  scipyempty_sparsery  r  r  r  s          r(   test_empty_sparserC    s   
))C<**QqE1Q%=99LC%%%&&&HHQKKK
#,,Cs3x~|'9:::s3x''))1--- HHQKKKC  F

##%%FCAr*   c                  X    t                      } t          t          t          |            d S r   )r   r   r   r   )r  s    r(   test_empty_mat_errorrE    s#    
))C,-----r*   c                  T   t          t          d          } t          |           }t          |d         t	          j        d          d d d f                    t          t          d          } t          t                    5  t          |            d d d            d S # 1 swxY w Y   d S )Nzmiuint32_for_miint32.matan_arrayr)  zbad_miuint32.mat)r   r   r   r   r#   rA  r   r  r   ry  s     r(   test_miuint32_compromiserI    s     ^%?@@H
(

CZ")B--aaa"8999^%788H	z	"	"                   s    BB!$B!c                      t          t          d          } t          |           }t          |d         dgg           t          t          d          } t	          t
                    5  t          |            d d d            d S # 1 swxY w Y   d S )Nzmiutf8_array_name.mat
array_namer/   zbad_miutf8_array_name.mat)r   r   r   r   r   r  rH  s     r(   !test_miutf8_for_miint8_compromiserL    s    ^%<==H
(

C\"aSE***^%@AAH	z	"	"                   s   &BB
Bc                      t          t          d          } t          |           }t          |d         d                    dd                     d S )Nzbroken_utf8.mat
bad_strings    am brokenutf8replace)r   r   r   r   decoderH  s     r(   test_bad_utf8rR    sU    ^$566H
(

C\""))&)<<> > > > >r*   c                     t           j                            t          |           d          }ddddi}t	          ||           d S )Ntest.matrF   r/   test_str)r4  r|  )r   pathr   r   r   )r   r   	test_dicts      r(   test_save_unicode_fieldrX    sE    w||CKK44H!
++,IHi     r*   c                      G d d          } |            }t           j                            t          |           d          }t	          |d|i           t          |          }t          |d         t          j        |                     d S )Nc                       e Zd Zd ZdS )0test_save_custom_array_type.<locals>.CustomArrayc                 R    t          j        d                              dd          S )Ng      @rM   r:   )r#   rA  rG  )r'  s    r(   	__array__z:test_save_custom_array_type.<locals>.CustomArray.__array__  s     9S>>))!Q///r*   N)ri  rj  rk  r]  r\   r*   r(   CustomArrayr[    s#        	0 	0 	0 	0 	0r*   r^  rT  rF   )	r   rV  r   r   r   r   r	   r#   r   )r   r^  rF   r   outs        r(   test_save_custom_array_typer`    s    0 0 0 0 0 0 0 0 	Aw||CKK44HHsAh
(

Cs3x!-----r*   c                  r    t          t          t          d           t          t          t          d           d S )NzNotExistentFile00.matNotExistentFile00)r   OSErrorr   r\   r*   r(   test_filenotfoundrd    s.    '7$;<<<'7$78888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                     d S )Nztestsimplecell.matTsimplify_cellsFsmycell)rF   r4  r|  )
r   r   r   r   r   r   r#   r   r	   r   )r   res1res2s      r(   test_simplify_cellsrl    s    ^%9::H8D111D8E222DJtCy$''(((JtCy"*--...tCy*BH___,E,EFFFFFr*   zversion, filt, regex))r   z_4*_*N)r/   z_5*_*N)r/   z_6*_*N)r/   _7*_*z^((?!hdf5).)*$)rM   rm  z.*hdf5.*)r/   z8*_*Nc                     t          t          d|z            }t          |          }fd|D             }t          |          dk    sJ d|  d|             |D ]}t	          |          }|d         | k    sJ  d S )Nztest*%s.matc                 >    g | ]}t          j        |          |S r   )rematch)r`   fileregexs     r(   rb   z(test_matfile_version.<locals>.<listcomp>  s*    MMM$28E4+@+@+L+L+L+Lr*   r   zNo files for version r   )r   r   r   r   r   )rz   r   rs  r   r   rr  got_versions     `    r(   test_matfile_versionru    s     ^]T%9::HNNEMMMM%MMMu::>>>===t== >> ) )%d++1~((((() )r*   c                     t          t          t          d                    } t          | d         t                    sJ t          | d                                         d                                         d         t                    sJ dS )z,Test that we can read a MatlabOpaque object.parabola.matparabolar:   N)r   r   r   r   r   r   r   r!   s    r(   test_opaquerz    sw    58899Dd:&77777d:&++--a05577:LIIIIIIIr*   c                      t          t          t          d          d          } t          | d         t                    sJ dS )zETest that we can read a MatlabOpaque object when simplify_cells=True.rw  Trf  rx  N)r   r   r   r   r   ry  s    r(   test_opaque_simplifyr|    s?    588NNNDd:&7777777r*   c                      t          t                    5  t          j        j        j        j         ddd           n# 1 swxY w Y   t          t                    5  ddlm}  ddd           dS # 1 swxY w Y   dS )z4Test that access to previous attributes still works.Nr   r   )	r   DeprecationWarningrA  iomatlabmio5_paramsr   scipy.io.matlab.miobaser   r~  s    r(   test_deprecationr    s     
(	)	) 1 1#001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
(	)	) 9 98888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s!   =AAA00A47A4c                 *   t           j                            d          }| dz  }|                    d          }|                    d          }||g}t           j                                        5 }|                    t           j                   t          |d|idd           d d d            n# 1 swxY w Y   i }t          ||           t          |d         d         d         |           t          |d         d         d	         |           d S )
Ni90  z	lists.mat)r;   r:   )r<   r:   r!   T)r  rE  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    sQ   
)


&
&C$G

5!!I

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

2/000(!%#	% 	% 	% 	%% % % % % % % % % % % % % % % HG  HV$Q'*I666HV$Q'*I66666s   15B22B69B6)r   )__doc__r   collectionsr   os.pathr   r   r   r   r  r   rp  tempfiler   r   r   r   numpy.testingr	   r
   r   r   r   r   pytestr   r   numpyr#   r   r>  r?   r   scipy.iorA  scipy.io.matlabr   r   r   scipy.io.matlab._byteordercodesr  _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)   pirA  r  rG  rE   r   appendcossinr   rM  r  r)  r  r  r8   Br^   CAr   CAEr  objarr	transposesqrtexp
st_sub_arrr.   r  CNr  st2rF   ODTMOm0r   fp_u_strreadrQ  u_strr   r   repeatr   r   r   r   r   r   markparametrizer   r   r   r   r   r   r  r  r  r  r  r  r!  r'  r2  r;  rB  rK  rN  rU  rY  r[  ra  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r.  r0  r3  r8  r<  rC  rE  rI  rL  rR  rX  r`  rd  rl  ru  rz  r|  r  r  r\   r*   r(   <module>r     s   
 
			 # # # # # # * * * * * * * *             				         Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q  * * * * * *                  F F F F F F F F F F - - - - - - - - - - - -; ; ; ; ; ; ; ; ; ; ; ; N N N N N N N N N N N N              - , , , , , , , , , , ,wwx((&11   	a		!%(((001555x(& 
   v&%FGHHJ      )FBF5MM1A!AB   
 BHUOOtEE!AJJ!	eeAajj		!!!A#   x("   
   x(a 0 01   
 HHW #"   $h/%}r}Q'7'78   
   "22 q))   
   h'uuRyy)   
   'u.    U
qc

!ugwwwi	 "(	) ) ) *12	 
 %GHJ J3 V$b!# #$ e	E!HH	E!HH	E"II	E"II	E!HH
   
 %WQr]]  
%f	%	%	%eAhhs   !6*"F+   
    &)!3') )* * *   "F+#UU&! &! "      *LBLDDq,=,=w!G!GHHJ    UGBGAJJvrvayy/00881==
MMLMMMbhue%!= >??M 3 $M 3 %0N C    x($   
 RXe6"""
%((3
"(5
'
'
'3uQbh'''3uqcU"(+++3rxV,,,3E!28,,,3S E!28,,,3S    ( "%   
 bhuAA.AAABBB%((C"(5'6):(;<<<C %zl 3 3C W    !8,"C(   
 BHU?????@@@a#ua#uzl###uzl###u    (+!1%   
 bh 4 434 4 4 5 5 \("(5,,,h77WUC5\\6
%2344;UC5\\6
a9a9a9   x(#   
 4n&9::DAAw''       'ug/   
   x(a 0 01   
   $h/%}r}Q'7'78   
   i(%$%)**,    QQQ   "H-#YRYr1%5%5%=%=a%B%BCE EF F F   ,J ,J ,J^8 8 8  "3 3 3- - - -, J//$ $ 0/$
 J//    0/  3*cUO+  2 2	 24 4 48  :  
/ 
/ 
/	 	 		3 	3 	3N N N	I 	I 	IL L L"1 1 1- - -, , ,() ) )0 0 02+ + +65 5 5
  <     &    <9 <9 <9~( ( (6+ + +$ 6  6  6F  62 2 2  C C C  &0 0 0+ + +"# # #F F F	7 	7 	72 2 2I I I= = =1 1 1, , ,:/ / /( ( (2
7 
7 
7/ / /,' ' '0 0 0< < <7 7 7*  (. . .	 	 	  > > >! ! !. . .9 9 9G G G / 2 2 2  	) 	) 	)J J J8 8 89 9 97 7 7 7 7r*   