§
    2?ÄjØ2  ã                   óà   — d Z ddl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
  ej        ded¬¦  «         da ej        e¦  «        Zd„ Zej        d	k    Zd
„ Zd„ Z G d„ de¦  «        ZdS )a  Read DICOM files.

Backend Library: internal

.. deprecated::
    The legacy ``DICOM`` plugin is deprecated and will be removed in a future
    ImageIO release. Prefer ``plugin='pydicom'`` for single-file DICOM I/O
    (``pip install imageio[pydicom]``). Reading a folder of DICOM files is
    deprecated and will be removed without replacement.

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_bytesa  The legacy `DICOM` plugin is deprecated and will be removed in a future ImageIO release. Prefer `plugin='pydicom'` for single-file DICOM (install via `pip install imageio[pydicom]`). Reading a folder of DICOM files is deprecated and will be removed without replacement.)Ú
stacklevelc                  ó   — ddl ma t          S )Né   )Ú_dicom)Ú r   © ó    úFC:\Projects\Historical\venv\Lib\site-packages\imageio/plugins/dicom.pyÚload_libr   A   s   € àÐÐÐÐÐå€Mr   Úlittlec                  ó4  — ddt           j                             d¦  «        z  z   } dD ]F}t          j                             || ¦  «        }t          j                             |¦  «        r|gc S ŒG	 t          j        | dg¦  «         | gS # t          $ r Y d S 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%   L   s¶   € Ø˜¥#¤,×"9Ò"9¸%Ñ"@Ô"@Ñ@Ñ@€Eðð ð ˆõ ”7—<’<  UÑ+Ô+ˆÝŒ7�>Š>˜(Ñ#Ô#ð 	Ø�:ÐÐÐð	ðÝÔ˜u kÐ2Ñ3Ô3Ð3ØˆwˆøÝð ð ð Øˆtˆtðøøøs   Á0B	 Â	
BÂBc            	      ól  — ddt           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                             |¦  «        r�t          j	        |¦  «        D ]z}| 
                    ¦   «                              d¦  «        rQ|dd …                              ¦   «         }|                     |t          j                             ||¦  «        f¦  «         Œ{Œ±|                     d	¬
¦  «         d }|D ]Œ\  }}t          j                             |d¦  «        }	t          j                             |dd¦  «        }
t          j                             |	¦  «        r|	} n&t          j                             |
¦  «        r|
} nŒ�d S |dgS )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;   _   sÉ  € Ø˜¥#¤,×"9Ò"9¸%Ñ"@Ô"@Ñ@Ñ@€EðÝÔ˜u kÐ2Ñ3Ô3Ð3Ø�wÐÐøÝð ð ð Øˆðøøøð €JØ$Ð%€IØð Oð OˆÝŒ7�=Š=˜Ñ"Ô"ð 	OÝœ HÑ-Ô-ð Oð O�Ø—;’;‘=”=×+Ò+¨FÑ3Ô3ð OØ" 1 2 2œYŸ_š_Ñ.Ô.�FØ×%Ò% v­r¬w¯|ª|¸HÀeÑ/LÔ/LÐ&MÑNÔNÐNøøà‡O‚O˜D€OÑ!Ô!Ð!à€HØ ð 
ð 
‰
ˆˆ7ÝŒw�|Š|˜G ^Ñ4Ô4ˆÝŒw�|Š|˜G U¨NÑ;Ô;ˆÝŒ7�>Š>˜$ÑÔð 	ØˆHØˆEÝŒ7�>Š>˜$ÑÔð 	ØˆHØˆEð	ð ˆtØ�gÐÐs   §A Á
AÁAc                   óD   — e Zd ZdZd„ Zd„ Z G d„ dej        ¦  «        ZdS )ÚDicomFormatz See :mod:`imageio.plugins.dicom`c                 óê  — t           j                             |j        ¦  «        r½t          j        |j        ¦  «        }t          |¦  «        D ]’}t           j                             |j        |¦  «        }t           j                             |¦  «        rLd|vrHt          |d¦  «        5 }t          |d¦  «        }d d d ¦  «         n# 1 swxY w Y   |dd…         dk    c S Œ“dS |j
        dd…         dk    S )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�=Š=˜Ô)Ñ*Ô*ð 		Ý”J˜wÔ/Ñ0Ô0ˆEÝ ™œð ð �Ýœ7Ÿ<š<¨Ô(8¸%Ñ@Ô@�Ý”7—>’> (Ñ+Ô+ð ;°
À%Ð0GÐ0GÝ˜h¨Ñ-Ô-ð ;°Ý&2°1°cÑ&:Ô&:˜ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;à& s¨3 wÔ/°7Ò:Ð:Ð:Ð:øà�uàÔ! # c 'Ô*¨gÒ5Ð5s   Â'CÃC	ÃC	c                 ó   — dS ©NFr   )rG   rH   s     r   Ú
_can_writezDicomFormat._can_write”   s	   € ð ˆur   c                   ó^   — e Zd Z e¦   «         Zd
d„Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
d„ Zd„ Zd	S )úDicomFormat.ReaderTc                 óÖ  — t           st          ¦   «          t          j                             | j        j        ¦  «        ri | _        d | _        �n²	 t            	                    | j         
                    ¦   «         ¦  «        }�nY# t           j        $ �rF}t          ¦   «         }|sdt          |¦  «        v rt          ¦   «         }|s@|j        d                              dd¦  «        }|                     dd¦  «        }|f|_        ‚ | j                             ¦   «         }|dz   }	 t%          j        |||gz   ¦  «         n# t(          $ r |‚w xY wt          j                             |¦  «        }|| j        vr@| j                             |¦  «         t0                               d|d         z   d	z   ¦  «         t            	                    |¦  «        }Y d }~nd }~ww xY w|j        | _        |                     ¦   «         | _        d | _        t9          |t:          ¦  «        r	|| _        d S |d
u rt?          d¦  «        }	|	| _        d S |dv rt;          d¦  «        | _        d S tA          d¦  «        ‚)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 DICOMrN   ÚDummyzInvalid value for progress.)!r   r   r   r   r,   rH   r$   Ú_infoÚ_dataÚSimpleDicomReaderÚget_fileÚCompressedDicomr;   Ústrr%   ÚargsÚreplaceÚget_local_filenamer   r    r!   r8   Ú_compressed_warning_dirsÚaddÚloggerÚwarningÚget_numpy_arrayÚ_seriesÚ
isinstancer   Ú_progressIndicatorr   Ú
ValueError)
rG   ÚprogressÚdcmÚerrÚcmdÚmsgÚfname1Úfname2ÚdÚps
             r   Ú_openzDicomFormat.Reader._openž   s‚  € Ýð Ý‘
”
�
ÝŒw�}Š}˜Tœ\Ô2Ñ3Ô3ð %3à�”
Ø!�”
‘
ð?Ý ×2Ò2°4´<×3HÒ3HÑ3JÔ3JÑKÔK�C‘CøÝÔ-ð ?ñ ?ð ?å*Ñ,Ô,�CØð 1 6­S°©X¬XÐ#5Ð#5Ý.Ñ0Ô0˜Øð ?Ø!œh qœk×1Ò1°'¸<ÑHÔH˜Ø!Ÿkšk¨)°^ÑDÔD˜Ø$' 6˜œØà!%¤×!@Ò!@Ñ!BÔ!B˜Ø!'¨&¡˜ð&Ý&Ô1°#¸ÀÐ8HÑ2HÑIÔIÐIÐIøÝ(ð &ð &ð &Ø"%˜Ið&øøøåœGŸOšO¨FÑ3Ô3˜Ø DÔ$AÐAÐAØ Ô9×=Ò=¸aÑ@Ô@Ð@Ý"ŸNšNð!9à"% a¤&ñ!)ð #Uñ!Uñô ð õ %×6Ò6°vÑ>Ô>˜˜˜˜˜˜øøøøð5?øøøð8 !œY�”
Ø ×0Ò0Ñ2Ô2�”
ð  ˆDŒLõ ˜(Õ$9Ñ:Ô:ð @Ø*2�Ô'Ð'Ð'Ø˜TÐ!Ð!Ý+¨OÑ<Ô<�Ø*+�Ô'Ð'Ð'Ø˜]Ð*Ð*Ý*?ÀÑ*HÔ*H�Ô'Ð'Ð'å Ð!>Ñ?Ô?Ð?s2   Á1B ÂGÂBGÄ#D=Ä<GÄ=E
Å
BGÇGc                 ó0   — d | _         d | _        d | _        d S ©N)rX   rY   rf   )rG   s    r   Ú_closezDicomFormat.Reader._closeÖ   s   € àˆDŒJØˆDŒJØˆDŒLˆLˆLr   c                 óv   — | j         €,| j        }t                               | j        |¦  «        | _         | j         S ru   )rf   rh   r   Úprocess_directoryrH   )rG   Úpis     r   ÚserieszDicomFormat.Reader.seriesÜ   s3   € àŒ|Ð#ØÔ,�Ý%×7Ò7¸¼ÀbÑIÔI�”Ø”<Ðr   c                 óF  — | j         €8| j        d         d         }|j        | _        |                     ¦   «         | _         | j         j        dk    r| j         j        d         nd}| j        j        d         dk    r|S | j        j        d         dk    r&|dk    r|S t          d„ | j        D ¦   «         ¦  «        S | j        j        d         dk    r|dk    rdS t          | j        ¦  «        S | j        j        d         dk    rt          | j        ¦  «        S t          d	¦  «        ‚)
Nr   é   r
   ÚiÚIc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úlen)Ú.0Úseries     r   ú
<listcomp>z2DicomFormat.Reader._get_length.<locals>.<listcomp>ô   s   € ÐDÐDÐD¨u¥ E¡
¤
ÐDÐDÐDr   ÚvÚVú(DICOM plugin should know what to expect.)rY   rz   rX   re   ÚndimÚshaperH   ÚmodeÚsumr€   ÚRuntimeError)rG   rk   Únslicess      r   Ú_get_lengthzDicomFormat.Reader._get_lengthã   s  € ØŒzÐ!Ø”k !”n QÔ'�Ø œY�”
Ø ×0Ò0Ñ2Ô2�”
à.2¬j¬oÀÒ.BÐ.B�d”jÔ& qÔ)Ð)ÈˆGàŒ|Ô  Ô# sÒ*Ð*à�Ø”Ô" 1Ô%¨Ò,Ð,ð ˜Q’;�;Ø"�NåÐDÐD¸¼ÐDÑDÔDÑEÔEÐEØ”Ô" 1Ô%¨Ò,Ð,ð ˜Q’;�;Ø˜1å˜tœ{Ñ+Ô+Ð+Ø”Ô" 1Ô%¨Ò,Ð,å˜4œ;Ñ'Ô'Ð'å"Ð#MÑNÔNÐNr   c                 óÄ   — | j         j        dk    r| j         j        d         nd}|dk    r| j         |         | j        fS |dk    r| j         | j        fS t	          d¦  «        ‚)Nr|   r   r
   z#Dicom file contains only one slice.)rY   r‡   rˆ   rX   Ú
IndexError)rG   ÚindexrŒ   s      r   Ú_get_slice_dataz"DicomFormat.Reader._get_slice_data  sj   € Ø.2¬j¬oÀÒ.BÐ.B�d”jÔ& qÔ)Ð)ÈˆGð ˜Š{ˆ{Ø”z %Ô(¨$¬*Ð4Ð4Ø˜!’�Ø”z 4¤:Ð-Ð-å Ð!FÑGÔGÐGr   c                 ó¨  — | j         €8| j        d         d         }|j        | _        |                     ¦   «         | _         | j         j        dk    r| j         j        d         nd}| j        j        d         dk    r|                      |¦  «        S | j        j        d         dk    rr|dk    r|dk    r| j         |         | j        fS g }| j        D ]!}| 	                    d„ |D ¦   «         ¦  «         Œ"||                              ¦   «         ||         j
        fS | j        j        d         dv rK|dk    r|dk    r| j         | j        fS | j        |                              ¦   «         | j        |         j
        fS t          | j        ¦  «        dk    r1| j        |                              ¦   «         | j        |         j
        fS |                      |¦  «        S )Nr   r|   r
   r}   r~   c                 ó   — g | ]}|‘ŒS r   r   ©r�   Údcm_s     r   rƒ   z0DicomFormat.Reader._get_data.<locals>.<listcomp>  ó   € Ð!9Ð!9Ð!9¨4 $Ð!9Ð!9Ð!9r   ÚvV)rY   rz   rX   re   r‡   rˆ   rH   r‰   r‘   ÚextendÚinfor€   ©rG   r�   rk   rŒ   ÚLr‚   s         r   Ú	_get_datazDicomFormat.Reader._get_data  sÖ  € ØŒzÐ!Ø”k !”n QÔ'�Ø œY�”
Ø ×0Ò0Ñ2Ô2�”
à.2¬j¬oÀÒ.BÐ.B�d”jÔ& qÔ)Ð)ÈˆGàŒ|Ô  Ô# sÒ*Ð*Ø×+Ò+¨EÑ2Ô2Ð2Ø”Ô" 1Ô%¨Ò,Ð,à˜A’:�: '¨A¢+ +Øœ: eÔ,¨d¬jÐ8Ð8à�AØ!%¤ð ;ð ;˜ØŸšÐ!9Ð!9°5Ð!9Ñ!9Ô!9Ñ:Ô:Ð:Ð:Ø˜Uœ8×3Ò3Ñ5Ô5°q¸´x´}ÐDÐDØ”Ô" 1Ô%¨Ð-Ð-à˜A’:�: '¨A¢+ +Øœ: t¤zÐ1Ð1ð œ EÔ*×:Ò:Ñ<Ô<Øœ EÔ*Ô/ðð õ �T”[Ñ!Ô! AÒ%Ð%ð ”K Ô&×6Ò6Ñ8Ô8Ø”K Ô&Ô+ðð ð ×+Ò+¨EÑ2Ô2Ð2r   c                 óf  — | j         €8| j        d         d         }|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    rK|dk    r|dk    r| j        S g }| j        D ]!}|                     d„ |D ¦   «         ¦  «         Œ"||         j	        S | j        j        d         dv r%|dk    r|dk    r| j        S | j        |         j	        S t          d¦  «        ‚)	Nr   r|   r
   r}   r~   c                 ó   — g | ]}|‘ŒS r   r   r”   s     r   rƒ   z5DicomFormat.Reader._get_meta_data.<locals>.<listcomp>L  r–   r   r—   r†   )rY   rz   rX   re   r‡   rˆ   rH   r‰   r˜   r™   ri   rš   s         r   Ú_get_meta_dataz!DicomFormat.Reader._get_meta_data7  sE  € ØŒzÐ!Ø”k !”n QÔ'�Ø œY�”
Ø ×0Ò0Ñ2Ô2�”
à.2¬j¬oÀÒ.BÐ.B�d”jÔ& qÔ)Ð)ÈˆGð ˆ}Ø”zÐ!àŒ|Ô  Ô# sÒ*Ð*Ø”zÐ!Ø”Ô" 1Ô%¨Ò,Ð,à˜A’:�: '¨A¢+ +Øœ:Ð%à�AØ!%¤ð ;ð ;˜ØŸšÐ!9Ð!9°5Ð!9Ñ!9Ô!9Ñ:Ô:Ð:Ð:Ø˜Uœ8œ=Ð(Ø”Ô" 1Ô%¨Ð-Ð-à˜A’:�: '¨A¢+ +Øœ:Ð%àœ; uÔ-Ô2Ð2å Ð!KÑLÔLÐLr   N)T)Ú__name__Ú
__module__Ú__qualname__Úsetra   rs   rv   Úpropertyrz   r�   r‘   rœ   rŸ   r   r   r   ÚReaderrQ   ›   s«   € € € € € Ø#& 3¡5¤5Ð ð6	@ð 6	@ð 6	@ð 6	@ðp	 ð 	 ð 	 ð 
ð	 ð 	 ñ 
Œð	 ð	Oð 	Oð 	Oð>		Hð 		Hð 		Hð(	3ð (	3ð (	3ðT	Mð 	Mð 	Mð 	Mð 	Mr   r¥   N)r    r¡   r¢   Ú__doc__rL   rO   r   r¥   r   r   r   r=   r=   ‚   sx   € € € € € Ø*Ð*ð6ð 6ð 6ðð ð ðzMð zMð zMð zMð zM�”ñ zMô zMð zMð zMð zMr   r=   )r¦   r   r   Úloggingr   ÚwarningsÚcorer   r   r   r   ÚwarnÚDeprecationWarningr   Ú	getLoggerr    rc   r   Ú	byteorderÚsys_is_little_endianr%   r;   r=   r   r   r   ú<module>r¯      s9  ðð$ð $ðL 
€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€à IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ Ð Ð Ð Ð Ð à €„ðCð Øðñ ô ð ð 
€à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ”}¨Ò0Ð ðð ð ð& ð  ð  ðFSMð SMð SMð SMð SM�&ñ SMô SMð SMð SMð SMr   