o
    i                     @   s&  d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ edd eD ZdZdZdZdZeeeef edB eedB ef Z G dd dZ!		dde	de"de"deeege"f dB de#eB e$B dB dee  fddZ%dS )zRead a dicom media file    N)Structunpack)TracebackType)castBinaryIO)IteratorCallable)size_in_bytes)dictionary_VR)TupleTagItemTag)UID)EXPLICIT_VR_LENGTH_32c                 c   s    | ]}| d V  qdS )asciiN)encode).0vr r   K/mnt/sdb/aimis/docanh/lib/python3.10/site-packages/pydicom/util/leanread.py	<genexpr>   s    r   s   1.2.840.10008.1.2.1s   1.2.840.10008.1.2s   1.2.840.10008.1.2.1.99s   1.2.840.10008.1.2.2c                	   @   sv   e Zd ZdZdeeB ejB ddfddZdddZ	d	e
e dB d
edB dedB dedB fddZdee fddZdS )	dicomfilezCContext-manager based DICOM file object with data element iterationfilenamereturnNc                 C   sF   t |d | _}|d| _|d}|dkr!d | _|d d S d S )Nrb      s   DICMr   )openfobjreadpreambleseek)selfr   r   dicom_prefixr   r   r   __init__   s   
zdicomfile.__init__c                 C   s   | S Nr   )r!   r   r   r   	__enter__(   s   zdicomfile.__enter__exc_typeexc_valexc_tbc                 C   s   | j   d S r$   )r   close)r!   r&   r'   r(   r   r   r   __exit__+   s   
zdicomfile.__exit__c                 c   s    d }t | jdddd d}|D ]}|d dkr)tt|d }t|d	d
}|V  q|s3tdt | j|j|j	}|D ]}|V  q>d S )NFTc                 S   s   | dkS )N   r   )groupelemr   r   r   <lambda>>   s    z$dicomfile.__iter__.<locals>.<lambda>)is_implicit_VRis_little_endian	stop_whenr   )r+         s     r   z$No transfer syntax in file meta info)
data_element_generatorr   r   bytesr   stripdecodeNotImplementedErrorr/   r0   )r!   tsyntax	file_metar-   valueds_genr   r   r   __iter__5   s*   zdicomfile.__iter__)r   r   )__name__
__module____qualname____doc__strr5   osPathLiker#   r%   typeBaseExceptionr   boolr*   r   _ElementTyper=   r   r   r   r   r      s    




r   fpr/   r0   r1   
defer_sizer   c              
   c   s   |rdnd}|rt |d }nt |d }t |d }|j}| j}	| j}
|j}t|}	 |	d}t|dk r9dS |rEd}||\}}}n||\}}}}|tv rY||	d	d
 }|
 }|durz|||rzd}|sq|tv rq|d	7 }| ||  dS |dkr|dur||krd}| |
 |  n|	|}||f||||fV  nL|du rzt||f	d}W n) t
y   tttttf t|d |	d	}| |
 d	  |tkrd}Y nw |dkr||f||d|fV  ntdq-)zX:return: (tag, VR, length, value, value_tell,
    is_implicit_VR, is_little_endian)
    <>HHLHH2sHLT   Nr   r   l    r   HHs   SQz:This reader does not handle undefined length except for SQ)r   r   r   tellr	   lenextra_length_VRs_br    r
   r   KeyErrorr   r   tupleintr   r8   )rI   r/   r0   r1   rJ   
endian_chrelement_structextra_length_structextra_length_unpackfp_readfp_tellelement_struct_unpack
bytes_readr   r,   r-   length
value_tellrewind_lengthr;   next_tagr   r   r   r4   S   sp   


r4   )NN)&rA   rC   structr   r   typesr   typingr   r   collections.abcr   r   pydicom.miscr	   pydicom.datadictr
   pydicom.tagr   r   pydicom.uidr   pydicom.valuerepr   rV   rT   ExplicitVRLittleEndianImplicitVRLittleEndianDeflatedExplicitVRLittleEndianExplicitVRBigEndianrW   r5   rH   r   rG   rB   floatr4   r   r   r   r   <module>   sB   "<