+
    /i.3                     ^  a  R, t 0 t R t^ RIHt ^ RIt^ RIHt ^RIH	t
 . R-Ot ! R	 R]4      t ! R
 R]4      t ! R R]4      t ! R R]4      tRRRRRRRRRRRRRRRRRR/	t]P&                  ! ]4      t] ^ k  R tR  tR!R"/R# lt]t^tR$ tR.R% lt ! R& R'4      t ! R( R)4      tR* tR+ tR# )/zf
Base classes for MATLAB file stream reading.

MATLAB is a registered trademark of the Mathworks inc.
)FinalN)doccer)_byteordercodesMatReadErrorMatReadWarningMatWriteErrorMatWriteWarningc                       ] tR t^tRtRtR# )r   z"Exception indicating a read issue. N__name__
__module____qualname____firstlineno____doc____static_attributes__r
       V/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/io/matlab/_miobase.pyr   r      s    ,r   c                       ] tR t^tRtRtR# )r   z#Exception indicating a write issue.r
   Nr   r
   r   r   r   r      s    -r   c                       ] tR t^tRtRtR# )r   zWarning class for read issues.r
   Nr   r
   r   r   r   r      s    (r   c                       ] tR t^tRtRtR# )r   zWarning class for write issues.r
   Nr   r
   r   r   r   r      s    )r   file_argzfile_name : str
   Name of the mat file (do not need .mat extension if
   appendmat==True) Can also pass open file-like object.
append_argzappendmat : bool, optional
   True to append the .mat extension to the end of the given
   filename, if not already present. Default is True.	load_argsa  byte_order : str or None, optional
   None by default, implying byte order guessed from mat
   file. Otherwise can be one of ('native', '=', 'little', '<',
   'BIG', '>').
mat_dtype : bool, optional
   If True, return arrays in same dtype as would be loaded into
   MATLAB (instead of the dtype with which they are saved).
squeeze_me : bool, optional
   Whether to squeeze unit matrix dimensions or not.
chars_as_strings : bool, optional
   Whether to convert char arrays to string arrays.
matlab_compatible : bool, optional
   Returns matrices as would be loaded by MATLAB (implies
   squeeze_me=False, chars_as_strings=False, mat_dtype=True,
   struct_as_record=True).
struct_argab  struct_as_record : bool, optional
   Whether to load MATLAB structs as NumPy record arrays, or as
   old-style NumPy arrays with dtype=object. Setting this flag to
   False replicates the behavior of SciPy version 0.7.x (returning
   numpy object arrays). The default setting is True, because it
   allows easier round-trip load and save of MATLAB files.matstream_argzAmat_stream : file-like
   Object with file API, open for reading.long_fieldsa  long_field_names : bool, optional
   * False - maximum field name length in a structure is 31 characters
     which is the documented maximum length. This is the default.
   * True - maximum field name length in a structure is 63 characters
     which works for MATLAB 7.6do_compressionz[do_compression : bool, optional
   Whether to compress matrices on write. Default is False.oned_aszoned_as : {'row', 'column'}, optional
   If 'column', write 1-D NumPy arrays as column vectors.
   If 'row', write 1D NumPy arrays as row vectors.unicode_stringszbunicode_strings : bool, optional
   If True, write strings as Unicode, else MATLAB usual encoding.c                    V P                  4       pV F0  p\        P                  ! W#,          4      P                  V4      W#&   K2  	  V# )am  Convert dtypes in mapping to given order

Parameters
----------
dtype_template : mapping
   mapping with values returning numpy dtype from ``np.dtype(val)``
order_code : str
   an order code suitable for using in ``dtype.newbyteorder()``

Returns
-------
dtypes : mapping
   mapping where values have been replaced by
   ``np.dtype(val).newbyteorder(order_code)``

)copynpdtypenewbyteorder)dtype_template
order_codedtypesks   &&  r   convert_dtypesr)      s>    "   "FHHVY'44Z@	 Mr   c                p    VP                   p\        P                  ! RVV P                  V4      RR7      pV# )a2  
Generic get of byte stream data of known type

Parameters
----------
mat_stream : file_like object
    MATLAB (tm) mat file stream
a_dtype : dtype
    dtype of array to read. `a_dtype` is assumed to be correct
    endianness.

Returns
-------
arr : ndarray
    Array of dtype `a_dtype` read from stream.

F)shaper#   bufferorderr
   )itemsizer"   ndarrayread)
mat_streama_dtype	num_bytesarrs   &&  r   
read_dtyper6      s8    $   I
**2"&OOI6 C Jr   	appendmatTc                   ^RI Hp V! WR7      ;_uu_ 4       p\        V4      uuRRR4       #   + '       g   i     R# ; i)a$  
Return major, minor tuple depending on apparent mat file type

Where:

 #. 0,x -> version 4 format mat files
 #. 1,x -> version 5 format mat files
 #. 2,x -> version 7.3 format mat files (HDF format)

Parameters
----------
file_name : str
   Name of the mat file (do not need .mat extension if
   appendmat==True). Can also pass open file-like object.
appendmat : bool, optional
   True to append the .mat extension to the end of the given
   filename, if not already present. Default is True.

Returns
-------
major_version : {0, 1, 2}
    major MATLAB File format version
minor_version : int
    minor MATLAB file format version

Raises
------
MatReadError
    If the file is empty.
ValueError
    The matfile version is unknown.

Notes
-----
Has the side effect of setting the file read pointer to 0
)_open_file_context)r7   N)_mior9   _get_matfile_version)	file_namer7   r9   fileobjs   &$  r   matfile_versionr>      s,    J )	I	;	;w#G, 
<	;	;	;s   .?	c                    V P                  ^ 4       V P                  \        4      p\        V4      \        8  d   \	        R4      hVP                  ^ 4      \        8X  d   \	        R\         R24      h\        P                  ! R\        P                  VR,          R7      p^ V9   d   V P                  ^ 4       R# V P                  ^|4       V P                  ^4      pV P                  ^ 4       \        V^,          ^I8H  4      p\        W4,          4      p\        V^V,
          ,          4      pWV3pVR	9   d   V# \        RP                  ! V!  4      h)
    z Mat file appears to be truncatedz&Mat file appears to be corrupt (first z bytes == 0):N   Nr,   r#   r-   z%Unknown mat file type, version {}, {})rA   r@   r@   )      )seekr1   _HDR_N_BYTESlenr   countr"   r0   uint8int
ValueErrorformat)r=   	hdr_bytes	mopt_intstst_strmaj_indmaj_valmin_valrets   &       r   r;   r;      s   LLO\*I
9~$=>>q\) %%1N,@ A 	A

RXXimLII~Q LLll1oGLLO'!*'(G'"#G'!g+&'G
C&

<CCSI
JJr   c                    V P                   pVR8X  d   R# \        V4      ^8X  d@   V^ ,          ^ 8X  d   R# VR8X  d
   VR,           # VR8X  d
   RV,           # \        RV R24      hV# )	a.  
Determine equivalent MATLAB dimensions for given array

Parameters
----------
arr : ndarray
    Input array
oned_as : {'column', 'row'}, optional
    Whether 1-D arrays are returned as MATLAB row or column matrices.
    Default is 'column'.

Returns
-------
dims : tuple
    Shape tuple, in the form MATLAB expects it.

Notes
-----
We had to decide what shape a 1 dimensional array would be by
default. ``np.atleast_2d`` thinks it is a row vector. The
default for a vector in MATLAB (e.g., ``>> 1:12``) is a row vector.

Versions of scipy up to and including 0.11 resulted (accidentally)
in 1-D arrays being read as column vectors. For the moment, we
maintain the same tradition here.

Examples
--------
>>> import numpy as np
>>> from scipy.io.matlab._miobase import matdims
>>> matdims(np.array(1)) # NumPy scalar
(1, 1)
>>> matdims(np.array([1])) # 1-D array, 1 element
(1, 1)
>>> matdims(np.array([1,2])) # 1-D array, 2 elements
(2, 1)
>>> matdims(np.array([[2],[3]])) # 2-D array, column vector
(2, 1)
>>> matdims(np.array([[2,3]])) # 2-D array, row vector
(1, 2)
>>> matdims(np.array([[[2,3]]])) # 3-D array, rowish vector
(1, 1, 2)
>>> matdims(np.array([])) # empty 1-D array
(0, 0)
>>> matdims(np.array([[]])) # empty 2-D array
(0, 0)
>>> matdims(np.array([[[]]])) # empty 3-D array
(0, 0, 0)

Optional argument flips 1-D shape behavior.

>>> matdims(np.array([1,2]), 'row') # 1-D array, 2 elements
(1, 2)

The argument has to make sense though

>>> matdims(np.array([1,2]), 'bizarre')
Traceback (most recent call last):
   ...
ValueError: 1-D option "bizarre" is strange

columnrowz1-D option "z" is stranger
   )rD   rD   rC   rD   )r,   rH   rL   )r5   r   r,   s   && r   matdimsrY     sr    ~ IIE{
5zQ8q=M 4<%<|G9LABBLr   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )MatVarReaderiQ  z:Abstract class defining required interface for var readersc                    R # )Nr
   )selffile_readers   &&r   __init__MatVarReader.__init__S  s    r   c                    R# )zReturns header Nr
   r]   s   &r   read_headerMatVarReader.read_headerV      r   c                    R# )zReads array given header Nr
   )r]   headers   &&r   array_from_headerMatVarReader.array_from_headerZ  re   r   r
   N)
r   r   r   r   r   r_   rc   rh   r   __classdictcell____classdict__s   @r   r[   r[   Q  s     E r   r[   c                   J   a  ] tR tRt o Rt]R	R l4       tR tR tR t	Rt
V tR# )
MatFileReaderi_  zBase object for reading mat files

To make this class functional, you will need to override the
following methods:

matrix_getter_factory   - gives object to fetch next matrix from stream
guess_byte_order        - guesses file byte order from file
Nc
                4   Wn         / V n        V'       g   V P                  4       pM\        P                  ! V4      pW n        Wpn        V'       d   V P                  4        MW@n        WPn	        W0n
        Wn        Wn        V	'       d   RV n        RV n        R# R# )z
    Initializer for mat file reader

    mat_stream : file-like
        object with file API, open for reading
%(load_args)s
    TFN)r2   r'   guess_byte_orderbocto_numpy_code
byte_orderstruct_as_recordset_matlab_compatible
squeeze_mechars_as_strings	mat_dtype verify_compressed_data_integritysimplify_cells)
r]   r2   rs   rx   rv   rw   matlab_compatiblert   ry   rz   s
   &&&&&&&&&&r   r_   MatFileReader.__init__i  s~    $ %..0J**:6J$ 0&&((O$4!&N0P-,"DO$)D! r   c                0    RV n         RV n        RV n        R# )z3Sets options to return arrays as MATLAB loads them TFN)rx   rv   rw   rb   s   &r   ru   #MatFileReader.set_matlab_compatible  s     %r   c                "    \         P                  # )z8As we do not know what file type we have, assume native )rq   native_coderb   s   &r   rp   MatFileReader.guess_byte_order  s    r   c                    V P                   P                  ^4      pV P                   P                  4       pV P                   P                  V^,
          4       \	        V4      ^ 8H  # rX   )r2   r1   tellrF   rH   )r]   bcurposs   &  r   end_of_streamMatFileReader.end_of_stream  sL    OO  #%%'VAX&1v{r   )	rs   rw   r'   rx   r2   rz   rv   rt   ry   )NFFTFTTF)r   r   r   r   r   	docfillerr_   ru   rp   r   r   rj   rk   s   @r   rn   rn   _  s3      #* #*J& r   rn   c                    \         P                  ! V P                  P                  R,          \        V4      ,           4      # )z2Return dtype for given number of items per element:NrE   N)r"   r#   str)r5   nums   &&r   arr_dtype_numberr     s'    88CIIMM"%C011r   c                   \        V P                  4      pV'       g   ^.pVP                  \        V P                  P
                  R,          4      4       \        P                  ! V\        V ^4      V R7      p V \        P                  ! RV P                  R7      8H  .p\        P                  ! V4      '       g   V # V P                  4       p RV \        V4      &   V # )z#Convert string array to char array :rE   NNrB    )r#    )listr,   appendrK   r#   r   r"   r0   r   arrayanyr!   tuple)r5   dimsemptiess   &  r   arr_to_charsr     s    		?DsKKCIIMM"%&'
**4+C3!C bhhr334G66'??

((*CCgJr   c                @    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   # )rE   r   )__conditional_annotations__r   )rM   s   "r   __annotate__r      s       h , +5 +ir   )r   r   r   r   )rV   )!r   r   typingr   numpyr"   
scipy._libr   r   r   rq   __all__	Exceptionr   r   UserWarningr   r   doc_dictfilldocr   r)   r6   r>   get_matfile_versionrG   r;   rY   r[   rn   r   r   r   )r   s   @r   <module>r      s      $-9 -.I .)[ )*k *
 
< 
9 
 
> 
.
#
 
?
6 
Ea1F 	h >>(+	 +*Z.4'-D '-T &  K8K\ > >B2
r   