o
    Ö­jÃi  ã                   @   sx  d gZ ddlZddlZddlZddlZddlZddddddd	d	d
d	d	dddddœZdddddddddddddddœZi Z	dd „ Z
d!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ ZG d9d:„ d:ƒZG d;d<„ d<eƒZd=d>„ Zd?d@„ ZdAdB„ ZdCdD„ ZdEdF„ ZdGdH„ ZdIdJ„ ZdKdL„ Z dMdN„ Z!dOdP„ Z"dQdR„ Z#G dSdT„ dTe$ƒZ%	U	UdWdVd „Z&dS )XÚreadsavé    Nz>u1z>i2z>i4z>f4z>f8z>c8z|Oz>c16z>u2z>u4z>i8z>u8)é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   ÚSTART_MARKERÚCOMMON_VARIABLEÚVARIABLEÚSYSTEM_VARIABLEÚ
END_MARKERÚ	TIMESTAMPÚCOMPILEDÚIDENTIFICATIONÚVERSIONÚHEAP_HEADERÚ	HEAP_DATAÚ	PROMOTE64ÚNOTICEÚDESCRIPTION)r   r   r   r   r   r   r   r   r   r   é   é   é   é   c                 C   s.   |   ¡ }|d dkr|  |d |d  ¡ dS )z+Align to the next 32-bit position in a filer   r   N)ÚtellÚseek)ÚfÚpos© r(   úJ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/io/_idl.pyÚ	_align_32K   s   r*   c                 C   s   |   |¡ dS )zSkip `n` bytesN©Úread©r&   Únr(   r(   r)   Ú_skip_bytesT   s   
r/   c                 C   s
   |   |¡S )zRead the next `n` bytesr+   r-   r(   r(   r)   Ú_read_bytesZ   s   
r0   c                 C   s$   t  t d|  d¡dd… ¡d ¡S )zRead a single bytez>Br   Nr   r   )ÚnpÚuint8ÚstructÚunpackr,   ©r&   r(   r(   r)   Ú
_read_byte_   ó   $r6   c                 C   ó   t  t d|  d¡¡d ¡S )úRead a signed 32-bit integerú>lr   r   ©r1   Úint32r3   r4   r,   r5   r(   r(   r)   Ú
_read_longd   ó   r=   c                 C   ó$   t  t d|  d¡dd… ¡d ¡S )zRead a signed 16-bit integerz>hr   r   r   )r1   Úint16r3   r4   r,   r5   r(   r(   r)   Ú_read_int16i   r7   rA   c                 C   r8   )r9   z>ir   r   r;   r5   r(   r(   r)   Ú_read_int32n   r>   rB   c                 C   r8   )zRead a signed 64-bit integerz>qr
   r   )r1   Úint64r3   r4   r,   r5   r(   r(   r)   Ú_read_int64s   r>   rD   c                 C   r?   )zRead an unsigned 16-bit integerz>Hr   r   r   )r1   Úuint16r3   r4   r,   r5   r(   r(   r)   Ú_read_uint16x   r7   rF   c                 C   r8   )zRead an unsigned 32-bit integerú>Ir   r   )r1   Úuint32r3   r4   r,   r5   r(   r(   r)   Ú_read_uint32}   r>   rI   c                 C   r8   )zRead an unsigned 64-bit integerz>Qr
   r   )r1   Úuint64r3   r4   r,   r5   r(   r(   r)   Ú_read_uint64‚   r>   rK   c                 C   r8   )zRead a 32-bit floatz>fr   r   )r1   Úfloat32r3   r4   r,   r5   r(   r(   r)   Ú_read_float32‡   r>   rM   c                 C   r8   )zRead a 64-bit floatz>dr
   r   )r1   Úfloat64r3   r4   r,   r5   r(   r(   r)   Ú_read_float64Œ   r>   rO   c                   @   s   e Zd ZdZdd„ ZdS )ÚPointerzClass used to define pointersc                 C   s
   || _ d S ©N)Úindex)ÚselfrR   r(   r(   r)   Ú__init__”   s   zPointer.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rT   r(   r(   r(   r)   rP   ‘   s    rP   c                   @   s   e Zd ZdZdS )ÚObjectPointerz$Class used to define object pointersN)rU   rV   rW   rX   r(   r(   r(   r)   rY   ™   s    rY   c                 C   s4   t | ƒ}|dkrt| |ƒ d¡}t| ƒ |S d}|S )zRead a stringr   Úlatin1Ú )r=   r0   Údecoder*   )r&   ÚlengthÚcharsr(   r(   r)   Ú_read_stringž   s   ÿr_   c                 C   s6   t | ƒ}|dkrt | ƒ}t| |ƒ}t| ƒ |S d}|S )z.Read a data string (length is specified twice)r   r[   )r=   r0   r*   )r&   r]   Ústring_datar(   r(   r)   Ú_read_string_data©   s   
ÿra   c                 C   sL  |dkrt | ƒdkrtdƒ‚t| ƒS |dkrt| ƒS |dkr"t | ƒS |dkr*t| ƒS |dkr2t| ƒS |dkrGt| ƒ}t| ƒ}t ||d  ¡S |d	krOt| ƒS |d
krWtdƒ‚|dkrlt| ƒ}t| ƒ}t 	||d  ¡S |dkrvt
t | ƒƒS |dkr€tt | ƒƒS |dkrˆt| ƒS |dkr�t| ƒS |dkr˜t| ƒS |dkr t| ƒS td| ƒ‚)z*Read a variable with a specified data typer   z*Error occurred while reading byte variabler   r   r   r   r   y              ð?r	   r
   z'Should not be here - please report thisr   r   r   r   r   r   r   z)Unknown IDL type: %i - please report this)rB   Ú	Exceptionr6   rA   rM   rO   r1   Ú	complex64ra   Ú
complex128rP   rY   rF   rI   rD   rK   )r&   ÚdtypeÚrealÚimagr(   r(   r)   Ú
_read_dataµ   sJ   rh   c           
      C   s|  |d }|d }g }|D ]<}|d s|d r'|  |d  ¡ |d ftjf¡ q|d tv rA|  |d  ¡ |d ft|d  f¡ qtd|d  ƒ‚tjj|f|d�}t|ƒD ]J}|D ]E}|d }|d r}t	| |d	 |d  |d
 |d  ƒ||d  |< qZ|d r”t
| ||d	 |d  ƒ||d  |< qZt| |ƒ||d  |< qZqV|d dkr¼|d dt|d ƒ… }	|	 ¡  | |	¡}|S )z�
    Read a structure, with the array and structure descriptors given as
    `array_desc` and `structure_desc` respectively.
    Ú	nelementsÚtagtableÚ	structureÚarrayÚnameÚtypecodez Variable type %i not implemented©re   ÚarrtableÚstructtableÚndimsr   ÚdimsN)ÚappendÚlowerr1   Úobject_Ú
DTYPE_DICTrb   ÚrecÚrecarrayÚrangeÚ_read_structureÚ_read_arrayrh   ÚintÚreverseÚreshape)
r&   Ú
array_descÚstruct_descÚnrowsÚcolumnsre   Úcolrk   Úirs   r(   r(   r)   r{   ß   sB   "
ÿÿþÿö
r{   c           	      C   s  |dv r(|dkrt | ƒ}||d krtjddd� tj|  |d ¡t| d�}n9|dv rBtj|  |d d	 ¡t| d�dd
d	… }ng }t|d ƒD ]}|}t| |ƒ}| 	|¡ qJtj
|tjd�}|d dkr||d d
t|d ƒ… }| ¡  | |¡}t| ƒ |S )z`
    Read an array of type `typecode`, with the array descriptor given as
    `array_desc`.
    )	r   r   r   r   r   r   r   r   r   r   Únbytesz.Not able to verify number of bytes from headerr   ©Ú
stacklevelro   )r   r   r   Nri   rr   rs   )rB   ÚwarningsÚwarnr1   Ú
frombufferr,   rw   rz   rh   rt   rl   rv   r}   r~   r   r*   )	r&   rn   r€   r†   rl   r…   re   Údatars   r(   r(   r)   r|     s8   ÿÿÿÿ

r|   c                    s"  dt ˆ ƒi}tˆ ƒ}|tˆ ƒ tj¡d 7 }tˆ dƒ |d tvr)td|d  ƒ‚t|d  |d< |d dv r¤|d dkrDtˆ ƒ|d< nt ˆ ƒ|d< tˆ dƒ t	ˆ ƒ}|d	 d
kri|ˆ  
¡ kred|d< �n%tdƒ‚t ˆ ƒ}|dkrutdƒ‚|d r‡tˆ |d |d ƒ|d< �n|d r˜tˆ |d	 |d ƒ|d< nò|d	 }tˆ |ƒ|d< næ|d dkrÂtˆ dƒ tˆ ƒ|d< tˆ ƒ|d< tˆ ƒ|d< nÈ|d dkrát ˆ ƒ|d< tˆ ƒ|d< tˆ ƒ|d< tˆ ƒ|d< n©|d dkrútˆ ƒ|d< tˆ ƒ|d < tˆ ƒ|d!< n�|d d"k�rtˆ ƒ|d#< n‚|d d$k�rtˆ ƒ|d%< nt|d d&k�r3t ˆ ƒ|d'< ‡ fd(d)„t|d' ƒD ƒ|d*< nW|d d+k�rVt ˆ ƒ|d,< tˆ ƒ|d-< ‡ fd.d)„t|d, ƒD ƒ|d/< n4|d d0k�rbd1|d2< n(|d d3k�rqtjd4d5d6� n|d d7k�r€tjd8d5d6� n
td9|d › d:�ƒ‚ˆ  |¡ |S );z!Function to read in a full recordÚrectypeì        r   zUnknown RECTYPE: %i)r   r   r   ÚvarnameÚ
heap_indexrn   r   NrŒ   zUnexpected type code: 0r	   zVARSTART is not 7rk   r€   r�   rl   r   i   ÚdateÚuserÚhostr   ÚformatÚarchÚosÚreleaseÚIDENTIFICATONÚauthorÚtitleÚidcoder   Únoticer   Údescriptionr   Únvaluesc                    ó   g | ]}t ˆ ƒ‘qS r(   ©r=   ©Ú.0Ú_r5   r(   r)   Ú
<listcomp>‹  ó    z _read_record.<locals>.<listcomp>ÚindicesÚCOMMONBLOCKÚnvarsrm   c                    rŸ   r(   ©r_   r¡   r5   r(   r)   r¤   ‘  r¥   Úvarnamesr   TÚendÚUNKNOWNzSkipping UNKNOWN recordr   r‡   r   zSkipping SYSTEM_VARIABLE recordzrecord['rectype']=z not implemented)r=   rI   Úastyper1   rC   r/   ÚRECTYPE_DICTrb   r_   Ú_read_typedescr$   Ú
ValueErrorr{   r|   rh   ra   rz   r‰   rŠ   r%   )r&   ÚrecordÚnextrecÚrectypedescÚvarstartre   r(   r5   r)   Ú_read_record<  s€   


ÿ

ÿ
  

rµ   c                 C   sŽ   t | ƒt | ƒdœ}|d d@ dkrtdƒ‚|d d@ dk|d< |d d@ dk|d< |d r;t| ƒ|d	< t| ƒ|d
< |S |d rEt| ƒ|d	< |S )z%Function to read in a type descriptor)rn   Úvarflagsr¶   r   z System variables not implementedr   rl   é    rk   r€   r�   )r=   rb   Ú_read_arraydescÚ_read_structdesc)r&   Útypedescr(   r(   r)   r¯   ¨  s   ýr¯   c                    s0  dt ˆ ƒi}|d dkr?tˆ dƒ t ˆ ƒ|d< t ˆ ƒ|d< t ˆ ƒ|d< tˆ dƒ t ˆ ƒ|d< ‡ fdd	„t|d ƒD ƒ|d
< |S |d dkr�tjddd� tˆ dƒ tˆ ƒ|d< tˆ ƒ|d< t ˆ ƒ|d< tˆ dƒ d|d< g |d
< t|d ƒD ]}t ˆ ƒ}|dkr„tdƒ‚|d
  t ˆ ƒ¡ qv|S td|d  ƒ‚)z'Function to read in an array descriptorÚarrstartr
   r   r†   ri   rr   Únmaxc                    rŸ   r(   r    r¡   r5   r(   r)   r¤   Í  r¥   z#_read_arraydesc.<locals>.<listcomp>rs   é   z$Using experimental 64-bit array readr   r‡   r   zExpected a zero in ARRAY_DESCzUnknown ARRSTART: %i)r=   r/   rz   r‰   rŠ   rK   rb   rt   )r&   Ú	arraydescÚdÚvr(   r5   r)   r¸   ¼  s4   

ç

þr¸   c                    sx  i }t ˆ ƒ}|dkrtdƒ‚tˆ ƒ|d< t ˆ ƒ}t ˆ ƒ|d< t ˆ ƒ|d< |d@ |d< |d@ |d	< |d
@ |d< |d sª‡ fdd„t|d ƒD ƒ|d< |d D ]}tˆ ƒ|d< qM‡ fdd„|d D ƒ|d< ‡ fdd„|d D ƒ|d< |d	 sx|d r¢tˆ ƒ|d< t ˆ ƒ|d< ‡ fdd„t|d ƒD ƒ|d< ‡ fdd„t|d ƒD ƒ|d< |t|d < |S |d tvr´tdƒ‚t|d  }|S )z*Function to read in a structure descriptorr   zSTRUCTSTART should be 9rm   Úntagsr†   r   Úpredefr   Úinheritsr   Úis_superc                    rŸ   r(   )Ú_read_tagdescr¡   r5   r(   r)   r¤   ÿ  s    ÿz$_read_structdesc.<locals>.<listcomp>rj   c                    ó"   i | ]}|d  r|d t ˆ ƒ“qS )rl   rm   )r¸   ©r¢   Útagr5   r(   r)   Ú
<dictcomp>  ó    þz$_read_structdesc.<locals>.<dictcomp>rp   c                    rÆ   )rk   rm   ©r¹   rÇ   r5   r(   r)   rÉ   	  rÊ   rq   Ú	classnameÚnsupclassesc                    rŸ   r(   r©   r¡   r5   r(   r)   r¤     ó    ÿÚsupclassnamesc                    rŸ   r(   rË   r¡   r5   r(   r)   r¤     rÎ   Úsupclasstablez"PREDEF=1 but can't find definition)r=   rb   r_   rz   ÚSTRUCT_DICT)r&   Ú
structdescÚstructstartrÂ   rÈ   r(   r5   r)   r¹   ë  sL   


ÿ

ÿ

ÿ


ÿ


ÿ	ûr¹   c                 C   sl   dt | ƒi}|d dkrt| ƒ|d< t | ƒ|d< t | ƒ}|d@ dk|d< |d@ dk|d< |d tv |d< |S )	z$Function to read in a tag descriptorÚoffsetéÿÿÿÿrn   r   rl   r·   rk   Úscalar)r=   rK   rw   )r&   ÚtagdescÚtagflagsr(   r(   r)   rÅ   !  s   rÅ   c                 C   sV  t | tƒr:t | tƒr+| jdkrd } n| j|v r|| j } n	tjddd� d } t | tƒs
t| |ƒ\}}|r6|} d| fS t | tjjƒr[t	| ƒD ]\}}t||ƒ\}}|rV|| |< qEd| fS t | tj
ƒr{t	| ƒD ]\}}t||ƒ\}}|rv|| |< qed| fS t | tjƒr§| jjtju r£t| jƒD ]}t|  |¡|ƒ\}}|r¢||  d¡|< q�d| fS d| fS )Nr   zNVariable referenced by pointer not found in heap: variable will be set to Noner   r‡   TFrÕ   )Ú
isinstancerP   rR   r‰   rŠ   Ú_replace_heapr1   rx   ry   Ú	enumerater±   Úndarrayre   Útyperv   rz   ÚsizeÚitemr   )ÚvariableÚheapÚreplaceÚnewÚirr±   ÚivÚvaluer(   r(   r)   rÚ   4  sL   



þ
õ€€€rÚ   c                       sF   e Zd ZdZddd„Z‡ fdd„Z‡ fdd„Zd	d
„ ZeZeZ	‡  Z
S )ÚAttrDicta]  
    A case-insensitive dictionary with access via item, attribute, and call
    notations:

        >>> from scipy.io._idl import AttrDict
        >>> d = AttrDict()
        >>> d['Variable'] = 123
        >>> d['Variable']
        123
        >>> d.Variable
        123
        >>> d.variable
        123
        >>> d('VARIABLE')
        123
        >>> d['missing']
        Traceback (most recent error last):
        ...
        KeyError: 'missing'
        >>> d.missing
        Traceback (most recent error last):
        ...
        AttributeError: 'AttrDict' object has no attribute 'missing'
    Nc                 C   s   |d u ri }t  | |¡ d S rQ   )ÚdictrT   )rS   Úinitr(   r(   r)   rT   ‘  s   zAttrDict.__init__c                    s   t ƒ  | ¡ ¡S rQ   )ÚsuperÚ__getitem__ru   ©rS   rm   ©Ú	__class__r(   r)   rë   –  s   zAttrDict.__getitem__c                    s   t ƒ  | ¡ |¡S rQ   )rê   Ú__setitem__ru   )rS   Úkeyræ   rí   r(   r)   rï   ™  s   zAttrDict.__setitem__c              	   C   s8   z|   |¡W S  ty   tdt| ƒ› d|› d�ƒd ‚w )Nú'z' object has no attribute ')rë   ÚKeyErrorÚAttributeErrorrÝ   rì   r(   r(   r)   Ú__getattr__œ  s   ÿÿÿzAttrDict.__getattr__rQ   )rU   rV   rW   rX   rT   rë   rï   rô   Ú__setattr__Ú__call__Ú__classcell__r(   r(   rí   r)   rç   w  s    
rç   Fc              	   C   sÔ  g }|s|r	i }nt ƒ }t| dƒ}t|dƒ}|dkr!td|› �ƒ‚t|dƒ}	|	dkr+nÏ|	dkró|r5tdƒ |r=t|dƒ}
ntjd	d
�}
|rMtd|
j› �ƒ |
 d¡ 	 t	|ƒ}|
 t
 dt|ƒ¡¡ t|ƒ}|t|ƒ tj¡d 7 }| d¡}t| dkr¦t d¡}|
 t
 dt|ƒ| ¡¡ |
 t
 dt|||  | ƒ¡¡ |
 |¡ nA| ¡ }t | || ¡¡}|
 ¡ t|ƒ d }|
 t
 dt|d ƒ¡¡ |
 t
 dt||d  d ƒ¡¡ |
 |¡ |
 |¡ qS| ¡  |
}| d¡ ntd|	› �ƒ‚	 t|ƒ}| |¡ d|v �r|d �rnqû| ¡  i }|D ]}|d dk�r)|d ||d < �q|D ]$}|d dk�rPt|d |ƒ\}}|�rF||d< |d ||d  ¡ < �q-|�rW|D ]+}|d dk�r�tdƒ td|d › �ƒ td |d! › �ƒ td"|d# › �ƒ  n�qW|D ]4}|d d$k�r¸tdƒ td%|d& › �ƒ td'|d( › �ƒ td)|d* › �ƒ td+|d, › �ƒ  n�q…|D ]+}|d d-k�rætdƒ td.|d/ › �ƒ td0|d1 › �ƒ td2|d3 › �ƒ  n�q¼|D ]}|d d4k�rtdƒ td5|d6 › �ƒ  n�qêtdƒ td7t|ƒ› d8�ƒ d9d:„ |D ƒ}t|ƒD ]}|dk�r/td;| |¡|f ƒ �qtdƒ d|v �rWtd<ƒ |D ]}td=|› d>t|| ƒ› d?�ƒ �q@tdƒ |�rh|D ]	}|| ||< �q\|S |S )@aâ	  
    Read an IDL .sav file.

    Parameters
    ----------
    file_name : str
        Name of the IDL save file.
    idict : dict, optional
        Dictionary in which to insert .sav file variables.
    python_dict : bool, optional
        By default, the object return is not a Python dictionary, but a
        case-insensitive dictionary with item, attribute, and call access
        to variables. To get a standard Python dictionary, set this option
        to True.
    uncompressed_file_name : str, optional
        This option only has an effect for .sav files written with the
        /compress option. If a file name is specified, compressed .sav
        files are uncompressed to this file. Otherwise, readsav will use
        the `tempfile` module to determine a temporary filename
        automatically, and will remove the temporary file upon successfully
        reading it in.
    verbose : bool, optional
        Whether to print out information about the save file, including
        the records read, and available variables.

    Returns
    -------
    idl_dict : AttrDict or dict
        If `python_dict` is set to False (default), this function returns a
        case-insensitive dictionary with item, attribute, and call access
        to variables. If `python_dict` is set to True, this function
        returns a Python dictionary with all variable names in lowercase.
        If `idict` was specified, then variables are written to the
        dictionary specified, and the updated dictionary is returned.

    Examples
    --------
    >>> from os.path import dirname, join as pjoin
    >>> import scipy.io as sio
    >>> from scipy.io import readsav

    Get the filename for an example .sav file from the tests/data directory.

    >>> data_dir = pjoin(dirname(sio.__file__), 'tests', 'data')
    >>> sav_fname = pjoin(data_dir, 'array_float32_1d.sav')

    Load the .sav file contents.

    >>> sav_data = readsav(sav_fname)

    Get keys of the .sav file contents.

    >>> print(sav_data.keys())
    dict_keys(['array1d'])

    Access a content with a key.

    >>> print(sav_data['array1d'])
    [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
     0. 0. 0.]

    Úrbr   s   SRzInvalid SIGNATURE: s    s    zIDL Save file is compressedzw+bz.sav)Úsuffixz -> expanding to s   SR Tr:   rŽ   r   r   rG   r   zInvalid RECFMT: r«   r�   r   rŒ   r�   r   r�   r   z2--------------------------------------------------zDate: r‘   zUser: r’   zHost: r“   r   zFormat: r”   zArchitecture: r•   zOperating System: r–   zIDL Version: r—   r˜   zAuthor: r™   zTitle: rš   z	ID Code: r›   r   zDescription: r�   zSuccessfully read z records of which:c                 S   s   g | ]}|d  ‘qS )r�   r(   )r¢   Úrr(   r(   r)   r¤   …  r¥   zreadsav.<locals>.<listcomp>z - %i are of type %szAvailable variables:z - z [ú]) rç   Úopenr0   rb   ÚprintÚtempfileÚNamedTemporaryFilerm   Úwriter=   r3   Úpackr}   rI   r­   r1   rC   r,   r®   r$   ÚzlibÚ
decompressÚlenÚcloser%   rµ   rt   rÚ   ru   ÚsetÚcountrÝ   )Ú	file_nameÚidictÚpython_dictÚuncompressed_file_nameÚverboseÚrecordsÚ	variablesr&   Ú	signatureÚrecfmtÚfoutr�   r²   ÚunknownÚmodvalr'   Ú
rec_stringrú   rá   râ   rã   r±   ÚrectypesÚrtÚvarr(   r(   r)   r   §  sè   F





ÿ
"

Ü'


û€€ûú	ûý
€
")NFNF)'Ú__all__r3   Únumpyr1   rþ   r  r‰   rw   r®   rÑ   r*   r/   r0   r6   r=   rA   rB   rD   rF   rI   rK   rM   rO   rP   rY   r_   ra   rh   r{   r|   rµ   r¯   r¸   r¹   rÅ   rÚ   rè   rç   r   r(   r(   r(   r)   Ú<module>   sˆ   òó	*-0l/6C0ÿ