Ë
    âQ(hÌ2  ã            
       ó*  — U d Z ddlmZ ddlZddlmZ ddlmZ	 g d¢Z
 G d„ d	e«      Z G d
„ de«      Z G d„ de«      Zddddddddddœ	Z ej"                  e«      Zeed<   	 d„ Zd„ Zddœd„ZeZdZd„ Zd'd „Z G d!„ d"«      Z G d#„ d$«      Zd%„ Zd&„ Zy)(zf
Base classes for MATLAB file stream reading.

MATLAB is a registered trademark of the Mathworks inc.
é    )ÚFinalN)Údocceré   )Ú_byteordercodes)ÚMatReadErrorÚMatReadWarningÚMatWriteErrorc                   ó   — e Zd ZdZy)r   z"Exception indicating a read issue.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/io/matlab/_miobase.pyr   r      s   „ Ú,r   r   c                   ó   — e Zd ZdZy)r	   z#Exception indicating a write issue.Nr   r   r   r   r	   r	      s   „ Ú-r   r	   c                   ó   — e Zd ZdZy)r   zWarning class for read issues.Nr   r   r   r   r   r      s   „ Ú(r   r   zfile_name : str
   Name of the mat file (do not need .mat extension if
   appendmat==True) Can also pass open file-like object.z�appendmat : bool, optional
   True to append the .mat extension to the end of the given
   filename, if not already present. Default is True.až  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).ab  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.zAmat_stream : file-like
   Object with file API, open for reading.a  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.6z[do_compression : bool, optional
   Whether to compress matrices on write. Default is False.z’oned_as : {'row', 'column'}, optional
   If 'column', write 1-D NumPy arrays as column vectors.
   If 'row', write 1D NumPy arrays as row vectors.zbunicode_strings : bool, optional
   If True, write strings as Unicode, else MATLAB usual encoding.)	Úfile_argÚ
append_argÚ	load_argsÚ
struct_argÚmatstream_argÚlong_fieldsÚdo_compressionÚoned_asÚunicode_stringsÚ	docfillerc                 óˆ   — | j                  «       }|D ],  }t        j                  ||   «      j                  |«      ||<   Œ. |S )až   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(   ƒ   sI   € ð" × Ñ Ó"€FØò AˆÜ—H‘H˜V A™YÓ'×4Ñ4°ZÓ@ˆˆqŠ	ðAà€Mr   c                 ón   — |j                   }t        j                  d|| j                  |«      d¬«      }|S )af  
    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.

    r   ÚF)Úshaper"   ÚbufferÚorder)Úitemsizer!   ÚndarrayÚread)Ú
mat_streamÚa_dtypeÚ	num_bytesÚarrs       r   Ú
read_dtyper5   š   s8   € ð$ × Ñ €IÜ
�*‰*˜2Ø"Ø&ŸO™O¨IÓ6Øô €Cð €Jr   T©Ú	appendmatc                ód   — ddl m}  || |¬«      5 }t        |«      cddd«       S # 1 sw Y   yxY w)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
    r   )Ú_open_file_contextr6   N)Ú_mior9   Ú_get_matfile_version)Ú	file_namer7   r9   Úfileobjs       r   Úmatfile_versionr>   ´   s1   € õJ )Ù	˜I°Ô	;ð -¸wÜ# GÓ,÷-÷ -ò -ús   ‘&¦/é   c                 óf  — | j                  d«       | j                  t        «      }t        |«      t        k  rt	        d«      ‚|j                  d«      t        k(  rt	        dt        › d�«      ‚t        j                  dt        j                  |d d ¬«      }d|v r| j                  d«       y| j                  d	«       | j                  d«      }| j                  d«       t        |d
   dk(  «      }t        ||   «      }t        |d|z
     «      }||f}|dv r|S t         dj                  |Ž «      ‚)Nr   z Mat file appears to be truncatedz&Mat file appears to be corrupt (first z bytes == 0))é   rA   ©r+   r"   r,   ©r   r   é|   é   éI   r   )r   rE   z%Unknown mat file type, version {}, {})Úseekr0   Ú_HDR_N_BYTESÚlenr   Úcountr!   r/   Úuint8ÚintÚ
ValueErrorÚformat)r=   Ú	hdr_bytesÚ	mopt_intsÚtst_strÚmaj_indÚmaj_valÚmin_valÚrets           r   r;   r;   ä   s"  € à‡L�L�„OØ—‘œ\Ó*€IÜ
ˆ9ƒ~œÒ$ÜÐ=Ó>Ð>Ø‡��qÓœ\Ò)Üð %Ü%1 N°,ð@ó Að 	Aä—
‘
 ¬R¯X©X¸iÈÈ¸mÔL€IØˆI�~Ø�‰�QŒØð ‡L�L�ÔØ�l‰l˜1‹o€GØ‡L�L�„OÜ�'˜!‘* Ñ'Ó(€GÜ�'˜'Ñ"Ó#€GÜ�'˜!˜g™+Ñ&Ó'€GØ�GÐ
€CØ�&ÑØˆ
Ü
ÐCÐ<×CÑCÀSÐIÓ
JÐJr   c                 óž   — | j                   }|dk(  ryt        |«      dk(  r,|d   dk(  ry|dk(  r|dz   S |dk(  rd|z   S t        d	|› d
�«      ‚|S )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

    r   )r   r   r   r   rC   Úcolumn)r   Úrowz1-D option "z" is strange)r+   rI   rM   )r4   r   r+   s      r   ÚmatdimsrY      sn   € ð~ �I‰I€EØ�‚{ØÜ
ˆ5ƒz�Q‚Ø�‰8�qŠ=ØØ˜Ò Ø˜4‘<ÐØ˜ÒØ˜%‘<Ðä˜|¨G¨9°LÐAÓBÐBØ€Lr   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚMatVarReaderz; Abstract class defining required interface for var readersc                  ó   — y )Nr   )ÚselfÚfile_readers     r   Ú__init__zMatVarReader.__init__P  s   € Ør   c                  ó   — y)z Returns header Nr   ©r]   s    r   Úread_headerzMatVarReader.read_headerS  ó   € àr   c                  ó   — y)z Reads array given header Nr   )r]   Úheaders     r   Úarray_from_headerzMatVarReader.array_from_headerW  rc   r   N)r   r   r   r   r_   rb   rf   r   r   r   r[   r[   N  s   „ ÙEòòór   r[   c                   óD   — e Zd ZdZe	 	 	 	 	 	 	 	 dd„«       Zd„ Zd„ Zd„ Zy)ÚMatFileReadera   Base 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
                 ó  — || _         i | _        |s| j                  «       }nt        j                  |«      }|| _        || _        |r| j                  «        n|| _        || _	        || _
        || _        |	| _        |	rd| _        d| _        yy)z–
        Initializer for mat file reader

        mat_stream : file-like
            object with file API, open for reading
    %(load_args)s
        TFN)r1   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]   r1   rm   rr   rp   rq   Úmatlab_compatiblern   rs   rt   s
             r   r_   zMatFileReader.__init__f  sŽ   € ð$ %ˆŒØˆŒÙØ×.Ñ.Ó0‰Jä×*Ñ*¨:Ó6ˆJØ$ˆŒØ 0ˆÔÙØ×&Ñ&Õ(à(ˆDŒOØ$4ˆDÔ!Ø&ˆDŒNØ0PˆÔ-Ø,ˆÔÙØ"ˆDŒOØ$)ˆDÕ!ð r   c                 ó.   — d| _         d| _        d| _        y)z4 Sets options to return arrays as MATLAB loads them TFN)rr   rp   rq   ra   s    r   ro   z#MatFileReader.set_matlab_compatibleŒ  s   € àˆŒØˆŒØ %ˆÕr   c                 ó"   — t         j                  S )z9 As we do not know what file type we have, assume native )rk   Únative_codera   s    r   rj   zMatFileReader.guess_byte_order’  s   € ä�‰Ðr   c                 óÄ   — | j                   j                  d«      }| j                   j                  «       }| j                   j                  |dz
  «       t	        |«      dk(  S )Nr   r   )r1   r0   ÚtellrG   rI   )r]   ÚbÚcurposs      r   Úend_of_streamzMatFileReader.end_of_stream–  sL   € Ø�O‰O× Ñ  Ó#ˆØ—‘×%Ñ%Ó'ˆØ�‰×Ñ˜V A™XÔ&Ü�1‹v˜‰{Ðr   )NFFTFTTF)	r   r   r   r   r   r_   ro   rj   r}   r   r   r   rh   rh   \  sC   „ ñð à Ø Ø!Ø"&Ø#(Ø"&Ø26Ø %ò#*ó ð#*òJ&òór   rh   c                 ór   — t        j                  | j                  j                  dd t        |«      z   «      S )z3 Return dtype for given number of items per elementNrE   )r!   r"   Ústr)r4   Únums     r   Úarr_dtype_numberr�   �  s)   € ä�8‰8�C—I‘I—M‘M " 1Ð%¬¨C«Ñ0Ó1Ð1r   c                 ó”  — t        | j                  «      }|sdg}|j                  t        | j                  j
                  dd «      «       t        j                  |t        | d«      | ¬«      } | t        j                  d| j                  ¬«      k(  g}t        j                  |«      s| S | j                  «       } d| t        |«      <   | S )z$ Convert string array to char array r   rE   NrB   Ú )r"   ú )Úlistr+   ÚappendrL   r"   r   r!   r/   r�   ÚarrayÚanyr    Útuple)r4   ÚdimsÚemptiess      r   Úarr_to_charsrŒ   ¢  s¢   € ä�—	‘	‹?€DÙØˆsˆØ‡K�K”�C—I‘I—M‘M ! "Ð%Ó&Ô'Ü
�*‰*˜4Ü+¨C°Ó3Øô!€Cð ”b—h‘h˜r¨¯©Ô3Ñ3Ð4€GÜ�6‰6�'Œ?Øˆ
Ø
�(‰(‹*€CØ€CŒˆg‹ÑØ€Jr   )rW   )r   Útypingr   Únumpyr!   Ú
scipy._libr   rƒ   r   rk   Ú__all__Ú	Exceptionr   r	   ÚUserWarningr   Údoc_dictÚfilldocr   Ú__annotations__r(   r5   r>   Úget_matfile_versionrH   r;   rY   r[   rh   r�   rŒ   r   r   r   ú<module>r—      së   ðòõ ã Ý å $ò€ô-�9ô -ô.�Iô .ô)�[ô )ð
<ð
9ð
ð 
>ð
.ð
#ð
?ð
6ð
Eña1Fð 	ðh "�6—>‘> (Ó+€	ˆ5Ó +ð*òZò.ð4 -1ô '-ðT &Ð ð €òKó8K÷\ñ ÷>ñ >òB2ó
r   