Ë
    Eü´jM1  ã                   ó¶   — d Z ddlZddlZddlZddlZddlmZmZmZ ddlm	Z	 da
 ej                  e«      Zd„ Zej                  dk(  Zd„ Zd	„ Z G d
„ de«      Zy)aò  Read DICOM files.

Backend Library: internal

A format for reading DICOM images: a common format used to store
medical image data, such as X-ray, CT and MRI.

This format borrows some code (and ideas) from the pydicom project. However,
only a predefined subset of tags are extracted from the file. This allows
for great simplifications allowing us to make a stand-alone reader, and
also results in a much faster read time.

By default, only uncompressed and deflated transfer syntaxes are supported.
If gdcm or dcmtk is installed, these will be used to automatically convert
the data. See https://github.com/malaterre/GDCM/releases for installing GDCM.

This format provides functionality to group images of the same
series together, thus extracting volumes (and multiple volumes).
Using volread will attempt to yield a volume. If multiple volumes
are present, the first one is given. Using mimread will simply yield
all images in the given directory (not taking series into account).

Parameters
----------
progress : {True, False, BaseProgressIndicator}
    Whether to show progress when reading from multiple files.
    Default True. By passing an object that inherits from
    BaseProgressIndicator, the way in which progress is reported
    can be costumized.

é    Né   )ÚFormatÚBaseProgressIndicatorÚStdoutProgressIndicator)Úread_n_bytesc                  ó   — ddl ma t        S )Né   )Ú_dicom)Ú r
   © ó    úS/root/workspace/ytshorts/venv/lib/python3.12/site-packages/imageio/plugins/dicom.pyÚload_libr   9   s
   € åä€Mr   Úlittlec                  ó6  — ddt         j                  j                  d«      z  z   } dD ]F  }t        j                  j                  || «      }t        j                  j                  |«      sŒC|gc S  	 t        j                  | dg«       | gS # t        $ r Y y w xY w)NÚdcmdjpegú.exeÚwin)zc:\dcmtkúc:\Program Fileszc:\Program Files\dcmtkzc:\Program Files (x86)\dcmtkú	--version)
ÚsysÚplatformÚ
startswithÚosÚpathÚjoinÚisfileÚ
subprocessÚ
check_callÚ	Exception)ÚfnameÚdirÚfilenames      r   Úget_dcmdjpeg_exer$   D   s�   € Ø˜¤#§,¡,×"9Ñ"9¸%Ó"@Ñ@Ñ@€Eðò ˆô —7‘7—<‘<  UÓ+ˆÜ�7‰7�>‰>˜(Õ#Ø�:ÒððÜ×Ñ˜u kÐ2Ô3ØˆwˆøÜò Ùðús   Á2B Â	BÂBc            	      óN  — ddt         j                  j                  d«      z  z   } 	 t        j                  | dg«       | dgS # t
        $ r Y nw xY wg }dg}|D ]   }t        j                  j                  |«      sŒ#t        j                  |«      D ]f  }|j                  «       j                  d«      sŒ#|dd  j                  «       }|j                  |t        j                  j                  ||«      f«       Œh Œ¢ |j                  d	¬
«       d }|D ]’  \  }}t        j                  j                  |d«      }	t        j                  j                  |dd«      }
t        j                  j                  |	«      r|	} |dgS t        j                  j                  |
«      sŒ�|
} |dgS  y )NÚgdcmconvr   r   r   z--rawr   Úgdcmé   T)Úreversezgdcmconv.exeÚbin)r   r   r   r   r   r    r   r   ÚisdirÚlistdirÚlowerÚstripÚappendr   Úsortr   )r!   Ú
candidatesÚ	base_dirsÚbase_dirÚdnameÚsuffixr#   Ú_ÚdirnameÚexe1Úexe2s              r   Úget_gdcmconv_exer:   W   sŠ  € Ø˜¤#§,¡,×"9Ñ"9¸%Ó"@Ñ@Ñ@€EðÜ×Ñ˜u kÐ2Ô3Ø�wÐÐøÜò Ùðúð €JØ$Ð%€IØò OˆÜ�7‰7�=‰=˜Õ"ÜŸ™ HÓ-ò O�Ø—;‘;“=×+Ñ+¨FÕ3Ø" 1 2˜YŸ_™_Ó.�FØ×%Ñ% v¬r¯w©w¯|©|¸HÀeÓ/LÐ&MÕNñOðOð ‡O�O˜D€OÔ!à€HØ ò 
‰
ˆˆ7Ü�w‰w�|‰|˜G ^Ó4ˆÜ�w‰w�|‰|˜G U¨NÓ;ˆÜ�7‰7�>‰>˜$ÔØˆHØð �gÐÐô �7‰7�>‰>˜$ÕØˆHØð �gÐÐð
ð s   §A Á	AÁAc                   óF   — e Zd ZdZd„ Zd„ Z G d„ dej                  «      Zy)ÚDicomFormatz See :mod:`imageio.plugins.dicom`c                 óâ  — t         j                  j                  |j                  «      r©t        j                  |j                  «      }t        |«      D ]{  }t         j                  j                  |j                  |«      }t         j                  j                  |«      sŒMd|vsŒRt        |d«      5 }t        |d«      }d d d «       dd dk(  c S  y|j                  dd dk(  S # 1 sw Y   Œ'xY w)NÚDICOMDIRÚrbéŒ   é€   é„   s   DICMF)r   r   r+   r#   r,   Úsortedr   r   Úopenr   Ú
firstbytes)ÚselfÚrequestÚfilesr!   r#   ÚfÚfirst_bytess          r   Ú	_can_readzDicomFormat._can_read}   sÌ   € ä�7‰7�=‰=˜×)Ñ)Ô*Ü—J‘J˜w×/Ñ/Ó0ˆEÜ ›ò �ÜŸ7™7Ÿ<™<¨×(8Ñ(8¸%Ó@�Ü—7‘7—>‘> (Õ+°
À%Ò0GÜ˜h¨Ó-ð ;°Ü&2°1°cÓ&:˜÷;à& s¨3Ð/°7Ñ:Ò:ðð à×!Ñ! # cÐ*¨gÑ5Ð5÷;ð ;ús   Â2C%Ã%C.	c                  ó   — y©NFr   )rF   rG   s     r   Ú
_can_writezDicomFormat._can_writeŒ   s   € ð r   c                   óP   — e Zd Z e«       Zd	d„Zd„ Zed„ «       Zd„ Z	d„ Z
d„ Zd„ Zy)
úDicomFormat.Readerc                 ó†  — t         s
t        «        t        j                  j	                  | j
                  j                  «      ri | _        d | _        nT	 t         j                  | j
                  j                  «       «      }|j                  | _        |j5                  «       | _        d | _        t9        |t:        «      r|| _        y |d
u rt?        d«      }	|	| _        y |dv rt;        d«      | _        y tA        d«      ‚# t         j                  $ �r/}t        «       }|sdt        |«      v r
t        «       }|s:|j                  d   j!                  dd«      }|j!                  dd«      }|f|_        ‚ | j
                  j#                  «       }|dz   }	 t%        j&                  |||gz   «       n# t(        $ r |‚w xY wt        j                  j+                  |«      }|| j,                  vr9| j,                  j/                  |«       t0        j3                  d|d   z   d	z   «       t         j                  |«      }Y d }~�Œºd }~ww xY w)NÚJPEGr   ÚusingÚ
installingÚconvertzauto-convertz.rawz:DICOM file contained compressed data. Autoconverting with z0 (this warning is shown once for each directory)TzReading DICOMrM   ÚDummyzInvalid value for progress.)!r
   r   r   r   r+   rG   r#   Ú_infoÚ_dataÚSimpleDicomReaderÚget_fileÚCompressedDicomr:   Ústrr$   ÚargsÚreplaceÚget_local_filenamer   r   r    r7   Ú_compressed_warning_dirsÚaddÚloggerÚwarningÚget_numpy_arrayÚ_seriesÚ
isinstancer   Ú_progressIndicatorr   Ú
ValueError)
rF   ÚprogressÚdcmÚerrÚcmdÚmsgÚfname1Úfname2ÚdÚps
             r   Ú_openzDicomFormat.Reader._open–   sõ  € ÝÜ”
Ü�w‰w�}‰}˜TŸ\™\×2Ñ2Ô3à�”
Ø!�•
ð?Ü ×2Ñ2°4·<±<×3HÑ3HÓ3JÓK�Cð: !ŸY™Y�”
Ø ×0Ñ0Ó2�”
ð  ˆDŒLô ˜(Ô$9Ô:Ø*2�Õ'Ø˜TÑ!Ü+¨OÓ<�Ø*+�Õ'Ø˜]Ñ*Ü*?ÀÓ*H�Õ'ä Ð!>Ó?Ð?øôW ×-Ñ-ó ?ä*Ó,�CÙ 6¬S°«XÑ#5Ü.Ó0˜ÙØ!Ÿh™h q™k×1Ñ1°'¸<ÓH˜Ø!Ÿk™k¨)°^ÓD˜Ø$' 6˜œØà!%§¡×!@Ñ!@Ó!B˜Ø!'¨&¡˜ð&Ü&×1Ñ1°#¸ÀÐ8HÑ2HÕIøÜ(ò &Ø"%˜Ið&úäŸG™GŸO™O¨FÓ3˜Ø D×$AÑ$AÑAØ ×9Ñ9×=Ñ=¸aÔ@Ü"ŸN™Nð!9à"% a¡&ñ!)ð #Uñ!Uôô %×6Ñ6°vÓ>žûð5?ús2   Á-C= Ã=I ÄA>H;ÆF+Æ*H;Æ+F7Æ7A>H;È;I c                 ó.   — d | _         d | _        d | _        y ©N)rW   rX   re   )rF   s    r   Ú_closezDicomFormat.Reader._closeÎ   s   € àˆDŒJØˆDŒJØˆD�Lr   c                 ó”   — | j                   €1| j                  }t        j                  | j                  |«      | _         | j                   S rt   )re   rg   r
   Úprocess_directoryrG   )rF   Úpis     r   ÚserieszDicomFormat.Reader.seriesÔ   s9   € à�|‰|Ð#Ø×,Ñ,�Ü%×7Ñ7¸¿¹ÀbÓI�”Ø—<‘<Ðr   c                 ó¼  — | j                   €8| j                  d   d   }|j                  | _        |j                  «       | _         | j                   j                  dk(  r| j                   j
                  d   nd}| j                  j                  d   dk(  r|S | j                  j                  d   dk(  r3|dkD  r|S t        | j                  D �cg c]  }t        |«      ‘Œ c}«      S | j                  j                  d   dk(  r|dkD  ryt        | j                  «      S | j                  j                  d   dk(  rt        | j                  «      S t        d«      ‚c c}w )	Nr   é   r	   ÚiÚIÚvÚVú(DICOM plugin should know what to expect.)rX   ry   rW   rd   ÚndimÚshaperG   ÚmodeÚsumÚlenÚRuntimeError)rF   rj   ÚnslicesÚseries       r   Ú_get_lengthzDicomFormat.Reader._get_lengthÛ   s'  € Ø�z‰zÐ!Ø—k‘k !‘n QÑ'�Ø ŸY™Y�”
Ø ×0Ñ0Ó2�”
à.2¯j©j¯o©oÀÒ.B�d—j‘j×&Ñ& qÒ)ÈˆGà�|‰|× Ñ  Ñ# sÒ*à�Ø—‘×"Ñ" 1Ñ%¨Ò,ð ˜Q’;Ø"�Nä¸¿¹ÖD¨u¤ E¥
ÒDÓEÐEØ—‘×"Ñ" 1Ñ%¨Ò,ð ˜Q’;Øä˜tŸ{™{Ó+Ð+Ø—‘×"Ñ" 1Ñ%¨Ò,ä˜4Ÿ;™;Ó'Ð'ä"Ð#MÓNÐNùò  Es   ÃEc                 óú   — | j                   j                  dk(  r| j                   j                  d   nd}|dkD  r| j                   |   | j                  fS |dk(  r| j                   | j                  fS t	        d«      ‚)Nr{   r   r	   z#Dicom file contains only one slice.)rX   r�   r‚   rW   Ú
IndexError)rF   Úindexr‡   s      r   Ú_get_slice_dataz"DicomFormat.Reader._get_slice_dataú   sn   € Ø.2¯j©j¯o©oÀÒ.B�d—j‘j×&Ñ& qÒ)ÈˆGð ˜Š{Ø—z‘z %Ñ(¨$¯*©*Ð4Ð4Ø˜!’Ø—z‘z 4§:¡:Ð-Ð-ä Ð!FÓGÐGr   c                 ó$  — | j                   €8| j                  d   d   }|j                  | _        |j                  «       | _         | j                   j                  dk(  r| j                   j
                  d   nd}| j                  j                  d   dk(  r| j                  |«      S | j                  j                  d   dk(  ry|dk(  r |dkD  r| j                   |   | j                  fS g }| j                  D ]!  }|j                  |D �cg c]  }|‘Œ c}«       Œ# ||   j                  «       ||   j                  fS | j                  j                  d   dv rX|dk(  r|dkD  r| j                   | j                  fS | j                  |   j                  «       | j                  |   j                  fS t        | j                  «      dkD  r6| j                  |   j                  «       | j                  |   j                  fS | j                  |«      S c c}w )Nr   r{   r	   r|   r}   ÚvV)rX   ry   rW   rd   r�   r‚   rG   rƒ   r�   ÚextendÚinfor…   ©rF   rŒ   rj   r‡   ÚLrˆ   Údcm_s          r   Ú	_get_datazDicomFormat.Reader._get_data  sÙ  € Ø�z‰zÐ!Ø—k‘k !‘n QÑ'�Ø ŸY™Y�”
Ø ×0Ñ0Ó2�”
à.2¯j©j¯o©oÀÒ.B�d—j‘j×&Ñ& qÒ)ÈˆGà�|‰|× Ñ  Ñ# sÒ*Ø×+Ñ+¨EÓ2Ð2Ø—‘×"Ñ" 1Ñ%¨Ò,à˜A’: '¨A¢+ØŸ:™: eÑ,¨d¯j©jÐ8Ð8à�AØ!%§¡ò ;˜ØŸ™°5Ö!9¨4¢$Ò!9Õ:ð;à˜U™8×3Ñ3Ó5°q¸±x·}±}ÐDÐDØ—‘×"Ñ" 1Ñ%¨Ñ-à˜A’: '¨A¢+ØŸ:™: t§z¡zÐ1Ð1ð Ÿ™ EÑ*×:Ñ:Ó<ØŸ™ EÑ*×/Ñ/ðð ô �T—[‘[Ó! AÒ%ð —K‘K Ñ&×6Ñ6Ó8Ø—K‘K Ñ&×+Ñ+ðð ð ×+Ñ+¨EÓ2Ð2ùò/ ":s   Ä	H
c                 óø  — | j                   €8| j                  d   d   }|j                  | _        |j                  «       | _         | j                   j                  dk(  r| j                   j
                  d   nd}|€| j                  S | j                  j                  d   dk(  r| j                  S | j                  j                  d   dk(  rW|dk(  r|dkD  r| j                  S g }| j                  D ]!  }|j                  |D �cg c]  }|‘Œ c}«       Œ# ||   j                  S | j                  j                  d   dv r/|dk(  r|dkD  r| j                  S | j                  |   j                  S t        d«      ‚c c}w )Nr   r{   r	   r|   r}   r�   r€   )rX   ry   rW   rd   r�   r‚   rG   rƒ   r�   r‘   rh   r’   s          r   Ú_get_meta_dataz!DicomFormat.Reader._get_meta_data/  sO  € Ø�z‰zÐ!Ø—k‘k !‘n QÑ'�Ø ŸY™Y�”
Ø ×0Ñ0Ó2�”
à.2¯j©j¯o©oÀÒ.B�d—j‘j×&Ñ& qÒ)ÈˆGð ˆ}Ø—z‘zÐ!à�|‰|× Ñ  Ñ# sÒ*Ø—z‘zÐ!Ø—‘×"Ñ" 1Ñ%¨Ò,à˜A’: '¨A¢+ØŸ:™:Ð%à�AØ!%§¡ò ;˜ØŸ™°5Ö!9¨4¢$Ò!9Õ:ð;à˜U™8Ÿ=™=Ð(Ø—‘×"Ñ" 1Ñ%¨Ñ-à˜A’: '¨A¢+ØŸ:™:Ð%àŸ;™; uÑ-×2Ñ2Ð2ä Ð!KÓLÐLùò ":s   Ä	E7
N)T)Ú__name__Ú
__module__Ú__qualname__Úsetr`   rr   ru   Úpropertyry   r‰   r�   r•   r—   r   r   r   ÚReaderrP   “   sB   „ Ù#&£5Ð ó6	@òp	 ð 
ñ	 ó 
ð	 ò	Oò>		Hò(	3óT	Mr   r�   N)r˜   r™   rš   Ú__doc__rK   rN   r   r�   r   r   r   r<   r<   z   s#   „ Ù*ò6òôzM�—‘õ zMr   r<   )rž   r   r   Úloggingr   Úcorer   r   r   r   r
   Ú	getLoggerr˜   rb   r   Ú	byteorderÚsys_is_little_endianr$   r:   r<   r   r   r   ú<module>r¤      sj   ðñóP 
Û 
Û Û ç IÑ IÝ à	€à	ˆ×	Ñ	˜8Ó	$€òð —}‘}¨Ñ0Ð òò& ôFSM�&õ SMr   