
    _Mh                        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mZm Z 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/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<mc m)c m=Z> d dl?m@Z@  e eeA          d          ZBejC        jD        ZEd ZFejG        dz   ejH        deI          J                    dd          z  ZKdddideKidgZLeLM                    dddid edg          id           eLM                    dddid ejN        eK          d ejO        eK          z  z   id            ejP        d           ZQ eR eSdd!                    eQd <    eR eSdd                    eQddd f<   eLM                    d"d#did#eQid           eLM                    d$d%d$id% e eQ          id           eQT                    eU          ZVeVd&xx         dz  cc<   eLM                    d'd(d$id( e eV          id           eLM                    d)ddd*eKeQd*d           eLM                    d+d,did, eFd-          id           eLM                    d.d/did/ ed0g          id            eFg  eFdg           eFdd1gg           eFg d2g          feW          J                    dd-          ZX ed3g          eXd&<   d4d5d4id5eXidgZY eF eFd           eFd1           eFg            eFg            eFd6          feW          J                    dd-          ZZ ej[        d7eW          Z\ eFd          e\d&<   eYM                    d8d9d4id9e\id           eYM                    d:d;d4id;eZid           eYM                    d<d=did= eg d>          id           eYM                    d?d@did@ ej]         ejJ         eR eSddA                    dB                    id            e ej^        d1           ej_        d          ejG        g          J                    dd6          Z`dC dDD             Za ejP        d7ea          Zb edEg          ebdF         d&<   e`ebdG         d&<   e`dHz  ebdI         d&<   eYM                    dJdKdJidKebid            ejP        dLeW          Zc eFd          ecd&<    ejP        dMeW          ecdN<    eFd1ejd                  ecdN         d&<    eFd6ggejd                  ecdN         dN<    ejP        dLeW          ecdN         dO<    eFdejd                  ecdN         dO         d&<    eFdPejd                  ecdN         dO         dN<   eYM                    dQdRd4idRecid            ej[        d7dS dTD                       Ze eFd          eed&         dU<    ej[        d7dVeWfg          eed&         dW<    edXg          eed&         dW         d&         dV<   eYM                    dYdZdJidZeeid            ej[        dLd[ dTD                       Zf eFd          efd&         dU<    eFd1          efd&         dW<    ed\g          efdN         dU<    ed]g          efdN         dW<   eYM                    d^d_dJid_efid            eja        d` daD                       Zg e' ejP        d7eg          db          Zhehd&         Zi edcg          eidd<    edeg          eidf<    edcg          eidg<    eFd           eidh<    eFd          eidi<    eFd          eidj<   eYM                    dkdldkidlehid            ej eeBdm          dn          Zkekl                                m                    do          Zneko                                 eYM                    dpdqdidq eeng          id           eYM                    d$d%d$id% e eQ          id           eYM                    d'd(d$id( e eV          id           eYM                    drdsdtids edugdvgg          id           eYdd         ZpepM                    dwdxdkidx ejq        ehd1          J                    dd1          id           dy Zrdz Zsd{ Ztd| Zud} ZvddZwejC        x                    djd          d             ZyejC        x                    djd          d             ZzejC        x                    ddddgfddgfg          d             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 Zd Zd Zd Zd ZejC        x                    dg d          d             ZdÄ ZdĄ Zdń ZdƄ ZdǄ ZdȄ ZdɄ Zdʄ ZdS )    N)OrderedDict)joindirname)glob)BytesIO)mkdtemp)assert_array_equalassert_array_almost_equalassert_equalassert_assert_warnsassert_allclose)raises)array)issparse	eye_array	coo_array	csc_array)MatlabOpaqueMatlabFunctionMatlabObject)matdimsMatWriteErrorMatReadErrormatfile_version)mat_reader_factoryloadmatsavematwhosmat)MatFile5WriterMatFile5Readervarmats_from_matto_writeableEmptyStructMarker)VisibleDeprecationWarningdatac                  P    t          j        | i |}t          |          |_        |S )z;Convenience function to return matlab-compatible 2-D array.)npr   r   shape)argskwargsarrs      ^/var/www/html/test/jupyter/venv/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   )r4   rR   r?   z@This cell contains this string and 3 arrays of increasing lengthcelltestcellr?   r4   r4   
scalarcelltestscalarcell	emptycelltestemptycellstringarrayteststringarray)zone  ztwo  three3dmatrixtest3dmatrix   )r0   r?   rR   c                      g | ]}|t           fS  object.0ns     r-   
<listcomp>rg      s    MMM!VMMMr/   )stringfielddoublefieldcomplexfieldzRats live on no evil star.rh   ri   y      ?      ?rj   struct
teststructr4   rR   )r4   r?   r   r4   )r   rR   r@   cellnesttestcellnestc                      g | ]}|t           fS ra   rb   rd   s     r-   rg   rg      s    AAAQa[AAAr/   onetwors   r\   rt   znumber 3
structnestteststructnestc                      g | ]}|t           fS ra   rb   rd   s     r-   rg   rg      s    ???1Av;???r/   znumber 1znumber 2	structarrteststructarrc                      g | ]}|t           fS ra   rb   rd   s     r-   rg   rg      s(     4 4 4F 4 4 4r/   )expr	inputExprr*   isEmptynumArgsversioninlinexr{   z x = INLINE_INPUTS_{1};r|   r*   r}   r~   r   rc   
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.
    Tra   F)typer(   ndarrayr)   item)var1var2type1type2s       r-   types_compatibler      s    
 JJEJJE~~t
tzR//DIIKK  E))
tzR//DIIKK  E))5r/   c           	      "   t          |          rUt          t          |                     t          |                                |                                | d           dS t          t	          ||          dt          |           dt          |           d|             t          |t          j        t          j	        z  t          z            st          ||           dS t          |j        |j        k    d|j         d|j         d|             |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 )msgz
%s, [%d], z, field z, r   )r   r   r
   toarrayr   r   
isinstancer(   voidr   r   r   r)   r3   	hasobject	classname	enumerate_check_levelfieldsstrstr_bool_)labelr9   actualex_dtypeievlevel_labelfns           r-   r   r      sb      !!!!&.."2"2"*"2"2"4"4*/*+	- 	- 	- 	- 	Xv..LT(^^LL4<<LLULLN N N h"* 4| CDD Xv&&&HNfl*Q(.QQQQ%QQS S S S~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 ]i}t          |dd          }d|  d| }|                                D ]8\  }}| d| }t          ||v d|            t          ||||                    9jd S )NTFstruct_as_recordspmatrixtest ; file z, variable zMissing key at )r   itemsr   r   )	r7   filescase	file_namematdictr   kr9   k_labels	            r-   _load_check_caser   #  s     8 8	)dUKKK000Y00::<< 	8 	8KAx..1..GAL"=G"="=>>>(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 ra   )r)   )re   r   r9   r8   s      r-   rg   z$_whos_check_case.<locals>.<listcomp>3  s=     M M M0;8Q
+M M Mr/   z: z != )r   r   sortr   )r7   r   r   r8   r   r   whosexpected_whoss      `    r-   _whos_check_caser   -  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formatr   )r   r   seekr   )r7   r9   r   
mat_streams       r-   _rt_check_caser   >  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_rtr7   r9   )r7   r   zNo files for test  using filter r8   )case_table4case_table5case_table5_rtpjointest_data_pathdictr   len)	r   filtcasesr   r7   r9   r   use_filtr8   s	            r-   _casesr   F  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   r   r   s     r-   	test_loadr   \  s7    w $ $$rr(###$ $r/   c                 <    t          |           D ]}t          |  d S N)r   r   r   s     r-   	test_whosr   b  s/    w    $   r/   zversion, fmtsr   r   r   c                 r    t          | d           D ]$}|D ]}t          |d         |d         |            %d S )N)r   r   rR   )r   r   )r   fmtsr   fmts       r-   test_round_tripr   i  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          |           }d}d|i}d}t                      }	 t	          ||          }t          j        |d	
          }t          |||           |                                 t          j        |d
          }t          |dd          }|                                 t          j        |           n# t          j        |           w xY wt          |d                                         |d                                         t          |                     d S )N)   r   gffffff@rR   r?   g      @)r0   r@   	gzip_testr   r   wb)moder   r   TFr   r   )r(   zerosr   r   r   gzipopenr   closer   shutilrmtreer
   r   repr)	xdenser   r7   r9   r   tmpdirfnamer   r   s	            r-   test_gzip_simpler   s  sM   XgFF3KF3K&ADAwHFYYF
fT""Yu4000

HV4444Yu4000
dUKKKfffSk1133&sm3355&*6ll4 4 4 4 4 4s   BC" "C8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)rR   rR   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   Tr   )
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dr4   rR   r   r   rU   rF   	r   r   r   r   r)   r3   r(   rc   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   rK   rU   r2   
longstructr   r   r4   r(   r   rc   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 )NrU   my_fieldnamer2   	my_structr   Tr   long_field_names)r(   r   rc   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?   rK   rU   r2   r  r   Tr  r4   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  rK   rm   r2   rU   rF   rn   r  r   Tr  F)r(   r   rc   r   r   r   r   r  )r  r  rS   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 )Nrm   r2   HellorF   Worldrn   r   r   r   rU   zHello, world)r(   r   rc   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   aaaar0   aaaaaa)
r   r    r(   r   put_variablesr   getvaluetruncater   r   )r	  wtrr,   w_szs       r-   test_use_small_elementr6    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 )
Nrm   rK   br2   )rK   r4   )r8  rR   r   r   rK   r8  )r(   r   rc   r   r   r   r   r   r   r   r3   namesr	   )ab_exp	dict_typer  streamvalss        r-   test_save_dictr?  3  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   )r4   r@   column)r   oned_as)r@   r4   row)r(   aranger   r   r   r   r)   )r,   r   r=  r>  s       r-   test_1d_shaperF  B  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   r4   )rR   r-  r,   T)do_compressionrF   )r,   arr2FrJ  )r(   r   reshaper   r   r   r2  r   r	   r   copy)r,   r=  raw_lenr>  compressed_lenrJ  s         r-   test_compressionrO  [  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Ar4   r2   )r   r   r(   r   rc   )r=  s    r-   test_single_objectrR  v  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_variablerY  {  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   rK   rU   rF   ra   Ur2   r,   )r   r   r   r   r)   r3   r(   rc   r   r   r   r   r	   )r   r  rK   r=  r,   a2s         r-   test_empty_structr]    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,   rU   rF   r  )r=  r  rK   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_equalr9   s       r-   assert_any_equalre    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 )Nr4   )r4   rm   )rK   |O8)r8  rg  r2   )rR   r4   rR   r9  r?   )rK   r8  _c)rK   r8  rH  )rK   r8  99c                       e Zd ZdS ) test_to_writeable.<locals>.klassN__name__
__module____qualname__ra   r/   r-   klassrk            r/   rp  r   ra   a stringc                       e Zd ZdS )test_to_writeable.<locals>.CNrl  ra   r/   r-   Cru    rq  r/   rv  rK   1_a)rw  r   rR   )r   rg  )r#   r(   r   r   r)   r	   re  rK   r8  r3   r   float64r   r   r$   rc   object_)res	expected1	expected2rc  rp  crv  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S10ry  r2   g      ?r   r  pythonr  c   r4   znot perlr,   Fr   rF   T)r  O)r  r  )
r(   r   r   r   r   r   r  r  r3   flat)dtr,   r=  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>.CNrl  ra   r/   r-   rv  r    rq  r/   rv  r4   rs  r  Fr   rF   Tfield1field2)r  r  r   r   r   r   )rv  r  r=  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 )NrA   r4   rK   T
squeeze_me)rA   F)
byte_orderrs  r   )chars_as_stringsU1r2   )r(   rE  rK  r   r   r!   rV  r	   r  bocnative_codeswapped_coder   	Exceptionr  r   r3  r   
atleast_2dlistr   r  )r,   r=  rdr	back_dictrarrcarrs         r-   test_read_optsr  .  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   rK   r  r2    r   )r   r   r   r!   rV  r   r	   r(   r   r   r   r3  r   )estring_fnamer   r  r  r=  s        r-   test_empty_stringr  Q  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   rV  )r  excr   r   r  s        r-   test_corrupted_datar  l  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!   rV  )r   r  s     r-   )test_corrupted_data_check_can_be_disabledr  u  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worldr2   floats       @      @      @)r   r   r   r!   rV  r   r	   r(   r   rc   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            	      V   t          j        ddgddgg          } t          j        d                              d          }t          j        ddgd	          }t	                      }t          ||                                                     | j        	                                          |                                                    |j        	                                          |                                                    |j        	                                          d
           t          |          }|                                }t          |d         |            t          |d         |           t          |d         |           |                                 d S )Nr  r  r  rA   r   r  r  r[  r2   )r  intsuni_arrr  r  r  )r(   r   rE  rK  r   r   byteswapviewr3   newbyteorderr!   rV  r	   r   )	float_arrint_arrr  r=  r  r  s         r-   test_write_opposite_endianr    sp    2r(r($ % %Iill""6**Gh)555GYYFF$$&&++IO,H,H,J,JKK  ""''(B(B(D(DEE##%%**7=+E+E+G+GHH    
 
 
 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_dtypeFr2   r   )r   r   r   r!   rV  r(   r   r   r	   r   r3   )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_arrayr3   r   uint8)r=  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)   )r=  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   )rR   r?   r0   rK   Tr   )r   r(   rE  rK  r   r  r   )r=  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!   rV  r   r   r   r   r    r   r   r1  )func_egr   r  r  r=  r4  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  rC   uTr   )	r   r   r   r!   rV  r   r   r3   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t          d          i} t                      }t          |d| i           t          |d          }t	          |d         d         d                                         t          j        d                     d S )Nsparsefieldr0   rK   Tr   rF   )r   r   r   r   r	   r   r(   eye)str=  r  s      r-   test_sparse_in_structr    sz     1	&B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  r4   rR   rr   Fr   T)r   r  )r   r   r   )r=  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 namer4   rR   rr   )scalarr:   r  Tr  r  r:   r  )	r   r   r   r   r   floatr   r(   r   )r=  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 )rK   rK   r   F)order)r)   r3   r  bufferr[  )r   r(   r   r   r   r   r	   r3  r   tobytesr   rK   r)   r3   astype)r=  in_arrout_arrr|  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 )NrK   r4   rR   r9  r8  )r   r   r   r3   r:  r   set)r=  r|  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.matrK   rJ   )variable_names)rJ   )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(   rE  r   r3  r   r   r  r   r   r3   )r,   r=  dtsr  s       r-   test_round_typesr#  A  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-  mystrrs  mynumc                       e Zd Z fdZdS ) test_varmats_from_mat.<locals>.Cc                     S r   ra   )self
names_varss    r-   r   z&test_varmats_from_mat.<locals>.C.itemsV  s	    r/   N)rm  rn  ro  r   )r+  s   r-   rv  r(  U  s.        	 	 	 	 	 	 	r/   rv  r?   )r.   r(   rE  r   r   r"   r   r   ranger   r	   )
rv  r=  varmatsr   r7   
var_streamexp_nameexp_resr|  r+  s
            @r-   test_varmats_from_matr1  N  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  rr  )r   r   r   r!   rV  r   r   r)   )r  r   r  r  s       r-   test_one_by_zeror3  d  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.matrK   r  g333333?)r   r   r   r	   )
mat4_fnamer  s     r-   test_load_mat4_ler6  n  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_mat4r;  v  sU    
))C
(CCS!!!!s||H,'\):;;;;;r/   c            	      \   t          t          d          } t          | dd          }|d         }t          t	          |          o
|j        dk               t          |j        j        t          j
                   t          |                                g dg dg dg d	g d	g           d S )
Nzlogical_sparse.matTFr   
sp_log_5_4csc)TTTF)FFTF)FFFF)r   r   r   r   r   r   r   r3   r   r(   r   r	   r   )r   r  log_sps      r-   test_logical_sparser@    s     ^$899H 	4%@@@A|_FHV7%!7888"BH---v~~''111333333444444	67 7 7 7 7r/   c                  ~   t                      } dd l}|j                            ddgddgg          }t	          | t          |                     |                     d           t          | d          }|j                            |d                   rJ t          | d          }|j                            |d                   sJ t          |           }|j                            |d                   sJ t          |d         j
        |j
                   t          |d                                         d           |                     d           t          |           }|                                 |                                 |                                \  }}t!          |j        d           d S )Nr   r   F)r   r   Tr4   )r   scipy.sparserD   	csr_arrayr   r   r   r   
isspmatrixr	   r)   r   r!   r  r  r  r   nzmax)r	  scipyempty_sparser|  r  r  r  s          r-   test_empty_sparserH    s   
))C<))Aa5!A-88LC%%%&&&HHQKKK
#
&
&
&C|&&s3x00000
#
%
%
%C<""3s8,,,,,
#,,C<""3s8,,,,,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_errorrJ    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(   rE  r   r  r   r|  s     r-   test_miuint32_compromiserN    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_namer4   zbad_miutf8_array_name.mat)r   r   r   r   r   r  rM  s     r-   !test_miutf8_for_miint8_compromiserQ    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   decoderM  s     r-   test_bad_utf8rW    sU    ^$566H
(

C\""))&)<<> > > > >r/   c                     t           j                            t          |           d          }ddddi}t	          ||           d S )Ntest.matrK   r4   test_str)r8  r  )r   pathr   r   r   )r   r   	test_dicts      r-   test_save_unicode_fieldr]    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dZdS )0test_save_custom_array_type.<locals>.CustomArrayNc                 R    t          j        d                              dd          S )Ng      @rR   r?   )r(   rE  rK  )r*  r3   rL  s      r-   	__array__z:test_save_custom_array_type.<locals>.CustomArray.__array__  s     9S>>))!Q///r/   )NN)rm  rn  ro  rb  ra   r/   r-   CustomArrayr`    s(        	0 	0 	0 	0 	0 	0r/   rc  rY  rK   )	r   r[  r   r   r   r   r	   r(   r   )r   rc  rK   r   outs        r-   test_save_custom_array_typere    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   ra   r/   r-   test_filenotfoundri    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)rK   r8  r  )
r   r   r   r   r   r   r(   r   r	   r   )r   res1res2s      r-   test_simplify_cellsrq    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)r4   z_5*_*N)r4   z_6*_*N)r4   _7*_*z^((?!hdf5).)*$)rR   rr  z.*hdf5.*)r4   z8*_*Nc                    t          t          d| d          }t          |          }fd|D             }t          |          dk    sJ d|  d|             |D ]}t	          |          }|d         | k    sJ  d S )Nztest*z.matc                 >    g | ]}t          j        |          |S r   )rematch)re   fileregexs     r-   rg   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   )r   r   rx  r   r   rw  got_versions     `    r-   test_matfile_versionrz    s     ^%7T%7%7%788H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_opaquer  	  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.r|  Trk  r}  N)r   r   r   r   r   r~  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   DeprecationWarningrF  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                     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?   )rA   r?   r&   T)r  rI  r   r4   )
r(   randomdefault_rngtestingsuppress_warningsfilterr%   r   r   r   )tmp_pathrngoutfile	array_one	array_twolist_of_arrayssupnew_dicts           r-   test_gh_17992r  !  sO   
)


&
&C$G

5!!I

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

,---(!%#	% 	% 	% 	%% % % % % % % % % % % % % % % HG  HV$Q'*I666HV$Q'*I66666s   10B--B14B1c                     t          j        t          d          t          d          gd          t          j        ddg          d}| dz  }t          ||d           d S )	Nr<   r  r2   r:   )
char_arraystring_arrayztmp.matr   r   )r(   r   r  r   )r  r  r  s      r-   test_gh_19659r  6  sj    hVd6ll;4HHH(H!566	
 	
A "GGQs######r/   c                      t          t          d          } t          j        t          j        k    rdnd}t          j        t          |          5  t          |            d d d            d S # 1 swxY w Y   d S )Nzdebigged_m4.matz$Not enough bytes to read matrix 'a';z9Variable 'a' has byte length longer than largest possiblerv  )	r   r   r(   intpint64pytestr   r  r   )truncated_matrv  s     r-   test_large_m4r  @  s     .*;<<M28## 43H 
 
z	/	/	/                   s   A,,A03A0c                      ddl m}  d S )Nr   r"   )scipy.io.matlabr"   r  s    r-   test_gh_19223r  P  s    00000000r/   c                  T   dD ]T} t          j        t          d          5  t          t	          d| z                       d d d            n# 1 swxY w Y   Ut          j        t          d          5  t          t	          d                     d d d            d S # 1 swxY w Y   d S )N)rR   r0   r-     z Mat file appears to be truncatedr      zMat file appears to be corrupts                       )r  r   r   r   r   )rf   s    r-   test_corrupt_filesr  S  s8    * *]<!CE E E 	* 	*GGaK(()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 
|=
? 
? 
? ' '%%&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's#    AA	A	3BB!$B!)r   )r   collectionsr   os.pathr   r   r   r   r  r   ru  tempfiler   r  r   r   numpy.testingr	   r
   r   r   r   r   r  r   r   numpyr(   r   rB  r   r   r   r   scipy.iorF  r  r   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  scipy._lib._utilr%   __file__r   markthread_unsafe
pytestmarkr.   pirE  r  rK  rJ   r   appendcossinr   rQ  r  r,  r  r=   Brc   CAr   CAEr  objarr	transposesqrtexp
st_sub_arrr3   r  CNr  st2rK   ODTMOm0r   fp_u_strreadrV  u_strr   r   repeatr   r   r   r   r   r   parametrizer   r   r   r   r   r   r  r  r  r  r  r   r%  r+  r6  r?  rF  rO  rR  rY  r]  r_  re  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r#  r1  r3  r6  r;  r@  rH  rJ  rN  rQ  rW  r]  re  ri  rq  rz  r  r  r  r  r  r  r  r  ra   r/   r-   <module>r     sI   				 # # # # # # * * * * * * * *             				         Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q  * * * * * *           B B B B B B B B B B B B  F F F F F F F F F F - - - - - - - - - - - -; ; ; ; ; ; ; ; ; ; ; ; N N N N N N N N N N N N              - , , , , , , , , , , , 6 6 6 6 6 6 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(		!-   
 HHW #"   $h/%yy||4   
   "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(		!-   
   $h/%yy||4   
   i(%$%)**,    QQQ   "H-#YRYr1%5%5%=%=a%B%BCE EF F F   (J (J (JV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*  6. . .	 	 	  > > >! ! !. . .9 9 9G G G / 2 2 2  	) 	) 	)J J J8 8 89 9 97 7 7*$ $ $   1 1 1' ' ' ' 'r/   