§
    2?Äjš�  ã                   ó|  — d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
 ddlZ	 ddlZn# e$ rZ ed¦  «        e‚dZ[ww xY wddlmZmZmZmZ ddlmZmZ ddlmZ d	ed
efd„Zdej        dee         d
eeef         fd„Zdeeef         d
ej        fd„Zdej        ded	ed
dfd„Z G d„ d¦  «        Z  G d„ de¦  «        Z!dS )uö  Read/Write single-file DICOM instances using pydicom.

.. note::
    To use this plugin you need to have `pydicom <https://pydicom.github.io/pydicom/>`_
    installed::

        pip install pydicom


Backend Library: `pydicom <https://pydicom.github.io/pydicom/>`_

This plugin reads and writes DICOM files using pydicom. It operates in
individual files, meaning while it supports multi-frame files natively, it does
**not** assemble data across files in a directory.


Methods
-------
.. note::
    Check the respective function for supported kwargs and detailed
    documentation.

.. autosummary::
    :toctree:

    PydicomPlugin.read
    PydicomPlugin.iter
    PydicomPlugin.write
    PydicomPlugin.properties
    PydicomPlugin.metadata

Additional methods available inside the :func:`imopen <imageio.v3.imopen>`
context:

.. autosummary::
    :toctree:

    PydicomPlugin.write_frame
    PydicomPlugin.lut_dense
    PydicomPlugin.lut_linear
    PydicomPlugin.instance_metadata
    PydicomPlugin.shared_frame_metadata
    PydicomPlugin.compression

Advanced API
------------

In addition to the default ImageIO v3 API this plugin exposes custom functions
and attributes for writing DICOM. These are available inside the
:func:`imopen <imageio.v3.imopen>` context and allow fine-grained control over
tags, functional groups, palettes, and compression. The callables are documented
above; below is a usage example::

    import imageio.v3 as iio

    frames = [...]  # list of (rows, cols) arrays, e.g. uint16
    with iio.imopen("out.dcm", "w", plugin="pydicom") as f:
        # global metadata
        f.instance_metadata["PatientName"] = "Anonymous"
        f.instance_metadata["Modality"] = "OT"

        # bit depth
        f.instance_metadata["BitsStored"] = 12

        # pixel compression
        f.compression = "rle"  # or "jpeg-ls", "jpeg2000-lossless", ...

        # shared FG (written once, applied to each frame)
        f.shared_frame_metadata["PixelMeasuresSequence"] = [
            {"PixelSpacing": [1.0, 1.0]}
        ]

        # write each frame
        for i, frame in enumerate(frames):
            f.write_frame(
                frame,
                # set frame-level metadata
                metadata={"FrameContentSequence": [{"FrameAcquisitionNumber": i}]},
            )

    meta = iio.immeta("out.dcm", plugin="pydicom")
    assert meta["PatientName"] == "Anonymous"

Frames are buffered until flush (``close()`` / context exit).

Compression
-----------

Compression is imopen-only. ``imwrite`` / ``write()`` always produce an
uncompressed Dataset; set ``f.compression`` before close to run pydicom
``Dataset.compress()`` once at flush. Changing the value after some
``write_frame`` calls is fine â€” only the value at flush matters.

Accepted values are short names (resolved to transfer syntax UIDs) or a raw
UID string:

- ``"rle"`` â€” RLE Lossless
- ``"jpeg-ls"`` â€” JPEG-LS Lossless
- ``"jpeg-ls-near"`` â€” JPEG-LS Near-Lossless
- ``"jpeg2000"`` â€” JPEG 2000
- ``"jpeg2000-lossless"`` â€” JPEG 2000 Lossless

Availability depends on pydicomâ€™s installed encoders (RLE is built-in; others
may need extra packages). Unknown names raise immediately; unsupported UIDs
fail at flush.

Example::

    import imageio.v3 as iio
    import numpy as np

    img = np.arange(64, dtype=np.uint8).reshape(8, 8)
    with iio.imopen("compressed.dcm", "w", plugin="pydicom") as f:
        f.compression = "rle"
        f.write(img)

Palette LUTs
------------

The plugin offers helpers to build color palettes when writing palettized
DICOM images. Supported palettes are either **dense** or **linear**:

- A **dense** palette maps each pixel index to a color from a lookup table.
- A **linear** palette maps each pixel index via piecewise-linear
  interpolation between the provided ``colors`` at the provided ``indices``.

Dense color maps use the ordinary LookupTableData tags, linear maps use
SegmentedLookupTableData tags. Please ensure your reader supports these. Optional
alpha is supported as a 4th LUT channel. Pixel frames must be **index** arrays
into the LUT (not already-colored RGB).

When using a LUT, do **not** set ``BitsStored`` in ``instance_metadata``.

Example using a dense palette::

    import imageio.v3 as iio
    import numpy as np

    frame = ...  # (rows, cols) index array, with values 0..3
    colormap = np.array(
        [[0, 0, 0], [255, 0, 0], [0, 255, 0], [0, 0, 255]],
        dtype=np.uint8,
    )
    with iio.imopen("palette_dense.dcm", "w", plugin="pydicom") as f:
        f.lut_dense(colormap)
        f.write(frame)

Example using a linear palette::

    import imageio.v3 as iio

    frame = ...  # (rows, cols) index array, uint8
    with iio.imopen("palette_linear.dcm", "w", plugin="pydicom") as f:
        f.lut_linear(
            colors=[(0, 0, 0), (65535, 65535, 65535)],
            indices=[0, 255],
        )
        f.write(frame)

Calling either helper **replaces** any previous palette state and clears the
other encoding's data tags (explicit and segmented are mutually exclusive).
While we offer helpers for dense and linear, you can still manually build and assign
other tables directly to the respective metadata tags.

Pixel reconstruction
--------------------

By default ``read`` / ``iter`` / ``imread`` / ``imiter`` reconstruct the image.
This means any LUT (lookup table), grayscale correction, or ROI (region of
interest) windowing is applied before the image is returned.

Pass ``raw=True`` to skip that pipeline and get stored values
(``pixel_array(..., raw=True)``). ``improps`` / ``properties`` take the same
``raw`` flag so reported shape and dtype match ``read``.

Notes
-----
Be aware that ``.write()`` on ``"<bytes>"`` needs to flush immediately so
``imwrite`` can return encoded bytes. This may cause surprising behavior when used
inside an explicit ``imopen`` context.

é    )	ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚSequenceÚTupleÚUnionNzSThe pydicom plugin requires pydicom. Install it via `pip install imageio[pydicom]`.é   )Ú	URI_BYTESÚInitializationErrorÚIOModeÚRequest)ÚImagePropertiesÚPluginV3)Ú	ArrayLikeÚvalueÚreturnc                 óx  — t          | t          j        ¦  «        rt          | d¬¦  «        S t          | t          j        j        ¦  «        rd„ | D ¦   «         S t          | t          ¦  «        r| S t          | t          t          f¦  «        rd„ | D ¦   «         S t          | d¦  «        r|  
                    ¦   «         S | S )N© ©Ú	omit_keysc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©Ú
_as_python)Ú.0Úitems     úHC:\Projects\Historical\venv\Lib\site-packages\imageio/plugins/pydicom.pyú
<listcomp>z_as_python.<locals>.<listcomp>Ì   s    € Ð3Ð3Ð3 T•
˜4Ñ Ô Ð3Ð3Ð3ó    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   r   ©r   Úvs     r   r    z_as_python.<locals>.<listcomp>Ð   s   € Ð-Ð-Ð- !•
˜1‘”Ð-Ð-Ð-r!   Útolist)Ú
isinstanceÚpdcmÚDatasetÚ_dataset_to_dictÚsequencer	   ÚbytesÚlistÚtupleÚhasattrr%   )r   s    r   r   r   È   sº   € Ý�%�œÑ&Ô&ð 5Ý °Ð4Ñ4Ô4Ð4Ý�%�œÔ/Ñ0Ô0ð 4Ø3Ð3¨UÐ3Ñ3Ô3Ð3Ý�%�ÑÔð ØˆÝ�%�$¥˜Ñ'Ô'ð .Ø-Ð- uÐ-Ñ-Ô-Ð-Ýˆu�hÑÔð Ø�|Š|‰~Œ~ÐØ€Lr!   Údsr   c                ó¤   — i }t          |¦  «        }| D ];}|j        �|j        dk    rŒ|j        |v rŒt          |j        ¦  «        ||j        <   Œ<|S )NÚ	PixelData)ÚsetÚkeywordr   r   )r/   r   ÚoutÚomitÚelems        r   r)   r)   Ö   sf   € Ø€CÝˆy‰>Œ>€DØð 3ð 3ˆØŒ<Ð 4¤<°;Ò#>Ð#>ØØŒ<˜4ÐÐØÝ& t¤zÑ2Ô2ˆˆDŒLÑÐØ€Jr!   Údatac                 ó‚   — t          j        ¦   «         }|                      ¦   «         D ]\  }}t          |||¦  «         Œ|S ©N)r'   r(   ÚitemsÚ_set_dataset_value)r7   r/   Úkeyr   s       r   Ú_dict_to_datasetr=   â   sB   € Ý	Œ‰Œ€BØ—j’j‘l”lð +ð +‰
ˆˆUÝ˜2˜s EÑ*Ô*Ð*Ð*Ø€Ir!   r<   c                 óf  — t          |t          ¦  «        r t          | |t          |¦  «        ¦  «         d S t          |t          ¦  «        rU|rSt          d„ |D ¦   «         ¦  «        r:t          | |t          j                             d„ |D ¦   «         ¦  «        ¦  «         d S t          | ||¦  «         d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r9   )r&   Údictr#   s     r   ú	<genexpr>z%_set_dataset_value.<locals>.<genexpr>ì   s,   è è € Ð2VÐ2VÈ1µ:¸aÅÑ3FÔ3FÐ2VÐ2VÐ2VÐ2VÐ2VÐ2Vr!   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©r=   r#   s     r   r    z&_set_dataset_value.<locals>.<listcomp>í   s!   € Ð0TÐ0TÐ0TÈÕ1AÀ!Ñ1DÔ1DÐ0TÐ0TÐ0Tr!   )	r&   r@   Úsetattrr=   r,   Úallr'   r*   r	   )r/   r<   r   s      r   r;   r;   é   s¼   € Ý�%�ÑÔð  Ý��CÕ)¨%Ñ0Ô0Ñ1Ô1Ð1Ð1Ð1Ý	�E�4Ñ	 Ô	 ð   Uð  ­sÐ2VÐ2VÐPUÐ2VÑ2VÔ2VÑ/VÔ/Vð  Ý��C�œ×/Ò/Ð0TÐ0TÈeÐ0TÑ0TÔ0TÑUÔUÑVÔVÐVÐVÐVå��C˜ÑÔÐÐÐr!   c                   ó¦   — e Zd ZdZdeg ej        f         ddfd„Zdede	fd„Z
dede	ddfd	„Zdedefd
„Zddede	de	fd„Zdeee	f         ddfd„ZdS )Ú_TagMapuB   Dict-like keyword â†’ value view that writes through to a Dataset.Úget_dsr   Nc                 ó   — || _         d S r9   )Ú_get_ds)ÚselfrH   s     r   Ú__init__z_TagMap.__init__õ   s   € ØˆŒˆˆr!   r<   c                 ó`   — t          t          |                      ¦   «         |¦  «        ¦  «        S r9   )r   ÚgetattrrJ   ©rK   r<   s     r   Ú__getitem__z_TagMap.__getitem__ø   s"   € Ý�' $§,¢,¡.¤.°#Ñ6Ô6Ñ7Ô7Ð7r!   r   c                 óL   — t          |                      ¦   «         ||¦  «         d S r9   )r;   rJ   )rK   r<   r   s      r   Ú__setitem__z_TagMap.__setitem__û   s"   € Ý˜4Ÿ<š<™>œ>¨3°Ñ6Ô6Ð6Ð6Ð6r!   c                 óp   — t          |t          ¦  «        o!t          |                      ¦   «         |¦  «        S r9   )r&   Ústrr.   rJ   rO   s     r   Ú__contains__z_TagMap.__contains__þ   s)   € Ý˜#�sÑ#Ô#ÐD­°·²±´ÀÑ(DÔ(DÐDr!   Údefaultc                 ó   — || v r| |         n|S r9   r   )rK   r<   rV   s      r   Úgetz_TagMap.get  s   € Ø 4˜K˜Kˆt�CŒyˆy¨WÐ4r!   Úotherc                 óD   — |                      ¦   «         D ]
\  }}|| |<   Œd S r9   )r:   )rK   rY   r<   r   s       r   Úupdatez_TagMap.update  s2   € ØŸ+š+™-œ-ð 	ð 	‰JˆC�ØˆD�‰IˆIð	ð 	r!   r9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   r(   rL   rT   r   rP   rR   ÚobjectÚboolrU   rX   r   r[   r   r!   r   rG   rG   ò   s  € € € € € ØLÐLð˜x¨¨D¬LÐ(8Ô9ð ¸dð ð ð ð ð8˜sð 8 sð 8ð 8ð 8ð 8ð7˜sð 7¨3ð 7°4ð 7ð 7ð 7ð 7ðE ð E¨4ð Eð Eð Eð Eð5ð 5�sð 5 Sð 5°Cð 5ð 5ð 5ð 5ð˜D  c œNð ¨tð ð ð ð ð ð r!   rG   c                   ó
  ‡ — e Zd ZdZdeddfˆ fd„Zd-d„Zdej        de	dej        fd	„Z
dd
dœdee         de	dej        fd„Zd
dœde	deej                 fd„Zdd
dœdee         de	defd„Zedd
dœdede	de	deeef         fd„Zdd
dœdeeee         f         deeeef                  de	dee         fd„Zedefd„¦   «         Zej        deeef         ddfd„¦   «         Zedefd„¦   «         Z e j        deeef         ddfd„¦   «         Z edee         fd„¦   «         Z!e!j        deeeef                  ddfd „¦   «         Z!dd!œd"edeeeef                  ddfd#„Z"d.d%ed&eddfd'„Z#	 d.d(ed)ed&eddfd*„Z$d-d+„Z%d-d,„Z&ˆ xZ'S )/ÚPydicomPluginz×Read and write DICOM images via pydicom.

    Parameters
    ----------
    request : iio.Request
        Image resource request.
    kwargs : Any
        Additional kwargs are forwarded to ``pydicom.dcmread``.
    Úrequestr   Nc                 ó0  •— t          ¦   «                              |¦  «         || _        | j                             dd¦  «         d | _        i | _        g | _        g | _        d| _        |j	        j
        t          j        k    r]	 t          j        |                     ¦   «         fi | j        ¤Ž| _        d S # t          j        j        $ r}t'          d¦  «        |‚d }~ww xY wt          j        ¦   «         | _        t          j        j        | j        _        t          j                             ¦   «         | j        _        t          j                             ¦   «         | j        _        t          j                             ¦   «         | j        _        d| j        _        d S )NÚstop_before_pixelsTFz'pydicom cannot read this file as DICOM.ÚOT)ÚsuperrL   Ú_dcmread_kwargsÚ
setdefaultÚ_compressionÚ_save_kwargsÚ_framesÚ_frame_metadataÚ_flushedÚmodeÚio_moder   Úreadr'   ÚdcmreadÚget_fileÚ_datasetÚerrorsÚInvalidDicomErrorr   r(   ÚuidÚSecondaryCaptureImageStorageÚSOPClassUIDÚgenerate_uidÚSOPInstanceUIDÚStudyInstanceUIDÚSeriesInstanceUIDÚModality)rK   rd   ÚkwargsÚexcÚ	__class__s       €r   rL   zPydicomPlugin.__init__  s\  ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!ð 06ˆÔØÔ×'Ò'Ð(<¸dÑCÔCÐCð ,0ˆÔØ,.ˆÔØ)+ˆŒØ?AˆÔØˆŒàŒ<Ô¥6¤;Ò.Ð.ðÝ $¤¨W×-=Ò-=Ñ-?Ô-?Ð XÐ XÀ4ÔCWÐ XÐ X�”��øÝ”;Ô0ð ð ð Ý)Ø=ñô àðøøøøðøøøõ
 !œL™NœNˆDŒMÝ(,¬Ô(MˆDŒMÔ%Ý+/¬8×+@Ò+@Ñ+BÔ+BˆDŒMÔ(Ý-1¬X×-BÒ-BÑ-DÔ-DˆDŒMÔ*Ý.2¬h×.CÒ.CÑ.EÔ.EˆDŒMÔ+Ø%)ˆDŒMÔ"Ð"Ð"s   Â.B3 Â3CÃCÃCc                 óÌ   — | j         d         sd S | j                             ¦   «         }|                     d¦  «         d| j         d<   t	          j        |fi | j         ¤Ž| _        d S )Nrf   r   F)ri   rd   rt   Úseekr'   rs   ru   )rK   Úfhs     r   Ú_ensure_pixel_datasetz#PydicomPlugin._ensure_pixel_dataset1  sh   € àÔ#Ð$8Ô9ð 	ØˆFØŒ\×"Ò"Ñ$Ô$ˆØ
�Š�‰
Œ
ˆ
Ø5:ˆÔÐ1Ñ2Ýœ RÐ@Ð@¨4Ô+?Ð@Ð@ˆŒˆˆr!   ÚarrÚrawc                ó  — |r|S | j         j        dk    r%t          j                             || j         ¦  «        S t          j                             || j         ¦  «        }t          j                             || j         ¦  «        S )NúPALETTE COLOR)ru   ÚPhotometricInterpretationr'   ÚpixelsÚapply_color_lutÚapply_rescaleÚapply_voi_lut)rK   r‡   rˆ   s      r   Ú_postprocesszPydicomPlugin._postprocess:  sl   € Øð 	ØˆJàŒ=Ô2°oÒEÐEÝ”;×.Ò.¨s°D´MÑBÔBÐBÝŒk×'Ò'¨¨T¬]Ñ;Ô;ˆÝŒ{×(Ò(¨¨d¬mÑ<Ô<Ð<r!   F©Úindexrˆ   r’   c                óL  — |                       ¦   «          |t          dfv rdn|}t          j        t	          j        j        | j        f||dœ|¤Ž¦  «        }|                      ||¬¦  «        }|t          u r/t          t          | j        dd¦  «        ¦  «        dk    r|d         }|S )u4  Read pixel data from the DICOM instance.

        Parameters
        ----------
        index : int or Ellipsis or None
            ``None`` (default) returns the full array. ``int`` selects one
            frame. ``...`` ensures a leading batch axis (shape
            ``(frames, rows, cols[, channels])``).
        raw : bool
            If ``False`` (default), return a fully reconstructed image:
            pydicom decode (including YBRâ†’RGB), then palette LUT **or**
            modality rescale / modality LUT followed by VOI LUT / windowing.
            Otherwise, return stored pixel values only.
        kwargs : Any
            Additional kwargs are forwarded to pydicom ``pixel_array``.

        Returns
        -------
        ndimage : np.ndarray
            Decoded pixels (always channel-last).
        Nr‘   ©rˆ   ÚNumberOfFramesé   ©N.)r†   ÚEllipsisÚnpÚasarrayr'   rŒ   Úpixel_arrayru   r�   ÚintrN   )rK   r’   rˆ   r€   Úframe_indexr‡   s         r   rr   zPydicomPlugin.readC  s¸   € ð8 	×"Ò"Ñ$Ô$Ð$Ø#­°$Ð'7Ð7Ð7�d�d¸UˆÝŒjÝŒKÔ# D¤MÐX¸È#ÐXÐXÐQWÐXÐXñ
ô 
ˆð ×Ò ¨ÐÑ-Ô-ˆð •HÐÐ¥¥W¨T¬]Ð<LÈaÑ%PÔ%PÑ!QÔ!QÐUVÒ!VÐ!VØ�i”.ˆCàˆ
r!   r”   c             +   óÊ   K  — |                       ¦   «          t          j        j        | j        fd|i|¤ŽD ]-}|                      t          j        |¦  «        |¬¦  «        V — Œ.dS )a³  Yield decoded frames one at a time (frame-wise decode).

        Parameters
        ----------
        raw : bool
            Same meaning as ``read(..., raw=...)``. Default ``False`` applies
            full reconstruction per frame.
        kwargs : Any
            Forwarded to pydicom ``iter_pixels``.

        Yields
        ------
        frame : np.ndarray
            One frame with shape ``(rows, cols[, channels])``.
        rˆ   r”   N)r†   r'   rŒ   Úiter_pixelsru   r�   r™   rš   )rK   rˆ   r€   Úframes       r   ÚiterzPydicomPlugin.iterl  s   è è € ð  	×"Ò"Ñ$Ô$Ð$Ý”[Ô,¨T¬]ÐNÐNÀÐNÀvÐNÐNð 	@ð 	@ˆEØ×#Ò#¥B¤J¨uÑ$5Ô$5¸3Ð#Ñ?Ô?Ð?Ð?Ð?Ð?ð	@ð 	@r!   c          
      óü  — t          | j        j        ¦  «        }t          | j        j        ¦  «        }t          t	          | j        dd¦  «        ¦  «        }|t
          u p	|du o|dk    }|s-t          | j        d¦  «        st          | j        d¦  «        rd}n.|s| j        j        dk    rd}nt          | j        j        ¦  «        }|r|||f}n||f}|dk    r||fz   }t          | j        j	        ¦  «        }	t          | j        d	¦  «        rt          | j        j
        ¦  «        dk    nd}
|sa| j        j        dk    rQt          | j        j        d
         ¦  «        }t          j        |dk    rt          j        nt          j        ¦  «        }�n¿|srt	          | j        dd¦  «        �\t          | j        j        d         j        d
         ¦  «        }t          j        |dk    rt          j        nt          j        ¦  «        }�nK|sJt          | j        d¦  «        r5t          | j        d¦  «        r t          j        t          j        ¦  «        }�nÿ|srt	          | j        dd¦  «        �\t          | j        j        d         j        d
         ¦  «        }t          j        |dk    rt          j        nt          j        ¦  «        }�n‹|sJt          | j        d¦  «        r5t          | j        d¦  «        r t          j        t          j        ¦  «        }�n?|
€&|	dk    r t          j        t          j        ¦  «        }�n|
€%|	dk    rt          j        t          j        ¦  «        }nð|
�%|	dk    rt          j        t          j        ¦  «        }nÉ|
�3|	dk    r-t          j        |
rt          j        nt          j        ¦  «        }n”|
�3|	dk    r-t          j        |
rt          j        nt          j        ¦  «        }n_|
�3|	dk    r-t          j        |
rt          j        nt          j        ¦  «        }n*t3          d|	› dt	          | j        d	d¦  «        › d�¦  «        ‚d}d}d}t	          | j        dd¦  «        }|�*t5          |d         ¦  «        }t5          |d         ¦  «        }t	          | j        dd¦  «        }|�t5          |¦  «        }t	          | j        dd¦  «        }|�€t	          |d         dd¦  «        }|�g|d         }t	          |dd¦  «        }|�*t5          |d         ¦  «        }t5          |d         ¦  «        }t	          |dd¦  «        }|�t5          |¦  «        }t7          |t           ¦  «        r˜t	          | j        dd¦  «        }|�€t	          ||         dd¦  «        }|�g|d         }t	          |dd¦  «        }|�*t5          |d         ¦  «        }t5          |d         ¦  «        }t	          |dd¦  «        }|�t5          |¦  «        }|�|€d}n^g }|r|                     |�|nd¦  «         |                     ||g¦  «         |dk    r|                     d¦  «         t=          |¦  «        }t?          |||r|nd||¬¦  «        S ) u�  Standardized ndimage metadata from Dataset tags (no PixelData decode).

        Parameters
        ----------
        index : int or Ellipsis or None
            Same conventions as ``read``.
        raw : bool
            If ``False`` (default), shape and dtype match reconstructed
            ``read`` / ``iter`` output (palette â†’ RGB channels; rescale /
            VOI may change dtype). Otherwise, report stored layout: integer
            ``Pixel Data`` (has ``PixelRepresentation``) or float modules
            (no ``PixelRepresentation``, ``BitsAllocated`` 32 / 64).

        Returns
        -------
        properties : ImageProperties
        r•   r–   NÚ AlphaPaletteColorLookupTableDataÚ)SegmentedAlphaPaletteColorLookupTableDataé   rŠ   é   ÚPixelRepresentationr   é   ÚVOILUTSequencer   ÚWindowCenterÚWindowWidthÚModalityLUTSequenceÚRescaleSlopeÚRescaleIntercepté    é@   é   z-Unsupported stored pixel type: BitsAllocated=z, PixelRepresentation=ú.ÚPixelSpacingÚSpacingBetweenSlicesÚSharedFunctionalGroupsSequenceÚPixelMeasuresSequenceÚ PerFrameFunctionalGroupsSequenceg      ð?)ÚshapeÚdtypeÚn_imagesÚis_batchÚspacing) rœ   ru   ÚRowsÚColumnsrN   r˜   r.   r‹   ÚSamplesPerPixelÚBitsAllocatedr§   Ú$RedPaletteColorLookupTableDescriptorr™   r¹   Úuint8Úuint16r©   ÚLUTDescriptorÚfloat64r¬   Úfloat32Úint8Úint16Úint32Úuint32Ú
ValueErrorÚfloatr&   ÚappendÚextendr-   r   )rK   r’   rˆ   ÚrowsÚcolsÚn_framesr»   Úchannelsr¸   Úbits_allocatedÚ	is_signedÚbitsr¹   Úrow_spÚcol_spÚslice_spÚpixel_spacingÚspacing_between_slicesÚ	shared_fgÚmeasures_seqÚmeasuresÚper_frame_fgr¼   Úspacing_lists                           r   Ú
propertieszPydicomPlugin.properties€  s»  € õ( �4”=Ô%Ñ&Ô&ˆÝ�4”=Ô(Ñ)Ô)ˆÝ•w˜tœ}Ð.>ÀÑBÔBÑCÔCˆØ�HÐ$ÐH¨°$¨Ð)G¸8Àaº<ˆð ð 	:Ý�D”MÐ#EÑFÔFð	:å�t”}Ð&QÑRÔRð	:ð ˆHˆHØð 	:˜œÔ@ÀOÒSÐSØˆHˆHå˜4œ=Ô8Ñ9Ô9ˆHàð 	!Ø&.°°dÐ%;ˆEˆEà˜4�LˆEØ�aŠ<ˆ<Ø˜X˜KÑ'ˆEõ ˜Tœ]Ô8Ñ9Ô9ˆõ �t”}Ð&;Ñ<Ô<ð�C�”Ô1Ñ2Ô2°aÒ7Ð7àð 	ð
 ð (	�t”}Ô>À/ÒQÐQÝ�t”}ÔIÈ!ÔLÑMÔMˆDÝ”H¨°ª¨�RœX˜X½¼	ÑBÔBˆE‰EØð %	� ¤Ð0@À$ÑGÔGÐSÝ�t”}Ô3°AÔ6ÔDÀQÔGÑHÔHˆDÝ”H¨°ª¨�RœX˜X½¼	ÑBÔBˆE‰Eàð"	å˜œ ~Ñ6Ô6ð"	õ ˜œ }Ñ5Ô5ð"	õ
 ”H�RœZÑ(Ô(ˆE‰Eàð	Ý ¤Ð/DÀdÑKÔKÐWå�t”}Ô8¸Ô;ÔIÈ!ÔLÑMÔMˆDÝ”H¨°ª¨�RœX˜X½¼	ÑBÔBˆE‰Eàð	å˜œ ~Ñ6Ô6ð	õ ˜œÐ'9Ñ:Ô:ð	õ
 ”H�RœZÑ(Ô(ˆE‰EØÐ >°RÒ#7Ð#7Ý”H�RœZÑ(Ô(ˆE‰EØÐ >°RÒ#7Ð#7Ý”H�RœZÑ(Ô(ˆEˆEØÐ" ~¸Ò':Ð':Ý”H�RœXÑ&Ô&ˆEˆEØÐ" ~¸Ò':Ð':Ý”H¨	Ð?�RœW˜Wµr´xÑ@Ô@ˆEˆEØÐ" ~¸Ò';Ð';Ý”H¨ÐA�RœX˜X½¼	ÑBÔBˆEˆEØÐ" ~¸Ò';Ð';Ý”H¨ÐA�RœX˜X½¼	ÑBÔBˆEˆEåðJØ!ðJð Jå˜4œ=Ð*?ÀÑFÔFðJð Jð Jñô ð ð ˆØˆØˆõ   ¤¨~¸tÑDÔDˆØÐ$Ý˜=¨Ô+Ñ,Ô,ˆFÝ˜=¨Ô+Ñ,Ô,ˆFÝ!(¨¬Ð8NÐPTÑ!UÔ!UÐØ!Ð-ÝÐ3Ñ4Ô4ˆHõ ˜DœMÐ+KÈTÑRÔRˆ	ØÐ Ý" 9¨Q¤<Ð1HÈ$ÑOÔOˆLØÐ'Ø'¨œ?�Ý '¨°.À$Ñ GÔ G�Ø Ð,Ý" =°Ô#3Ñ4Ô4�FÝ" =°Ô#3Ñ4Ô4�FÝ)0°Ð;QÐSWÑ)XÔ)XÐ&Ø)Ð5Ý$Ð%;Ñ<Ô<�Hõ �e�SÑ!Ô!ð 	AÝ"Ø”ÐAÀ4ñô ˆLð Ð'Ý&Ø  Ô'Ð)@À$ñ ô  �ð  Ð+Ø+¨Aœ�HÝ$+¨H°nÀdÑ$KÔ$K�MØ$Ð0Ý!& }°QÔ'7Ñ!8Ô!8˜Ý!& }°QÔ'7Ñ!8Ô!8˜Ý-4Ø Ð"8¸$ñ.ô .Ð*ð .Ð9Ý#(Ð)?Ñ#@Ô#@˜ð ˆ>˜V˜^ØˆGˆGà&(ˆLØð OØ×#Ò#°Ð0D H HÈ#ÑNÔNÐNØ×Ò ¨Ð 0Ñ1Ô1Ð1Ø˜!Š|ˆ|Ø×#Ò# CÑ(Ô(Ð(Ý˜LÑ)Ô)ˆGåØØØ!)Ð3�X�X¨tØØð
ñ 
ô 
ð 	
r!   T)r’   Úexclude_appliedrˆ   rá   c                ó€  — |r|sdnd}i }|t           dfv r�|                     t          | j        ddg|¢R ¬¦  «        ¦  «         t	          | j        d¦  «        rL| j        j        �@t          | j        j        dd¦  «        }|�#|                     dt          |¦  «        ¦  «         t          | j        dd¦  «        }|�*|                     t          |d	         |¬¦  «        ¦  «         t          |t          ¦  «        rBt          | j        dd¦  «        }|�*|                     t          ||         |¬¦  «        ¦  «         |S )
uù  Read (non-data) DICOM tags.

        Parameters
        ----------
        index : Ellipsis or int
            Metadata is built by layered ``dict.update``:

            1. If ``index`` is ``...`` or ``None``, add instance-level tags
               (FG sequences omitted as top-level keys;
               ``TransferSyntaxUID`` included from file_meta).
            2. If a shared functional group is present, update with its macros.
            3. If ``index`` is an ``int``, update with that frame's per-frame
               FG (per-frame wins on conflict).

            Classic files with no FG data therefore yield ``{}`` for an
            integer ``index``.
        exclude_applied : bool
            If True (default) and ``raw`` is False, drop tags consumed by the
            default ``read`` / ``iter`` reconstruction (rescale / windowing).
            Otherwise, leave those tags in the returned dict.
        raw : bool
            Pair with ``read(..., raw=...)``. If ``False`` (default),
            ``exclude_applied`` may drop reconstruction tags. Otherwise,
            those tags are kept even when ``exclude_applied`` is True.

        Returns
        -------
        metadata : dict
            Keyword â†’ value mapping (pydicom keyword names).
        )r­   r®   ÚRescaleTyperª   r«   ÚWindowCenterWidthExplanationÚVOILUTFunctionr   Nrµ   r·   r   Ú	file_metaÚTransferSyntaxUIDr   )r˜   r[   r)   ru   r.   ræ   rN   rj   rT   r&   rœ   )	rK   r’   rá   rˆ   Úomit_appliedÚmetaÚtsÚ
shared_seqÚper_seqs	            r   ÚmetadatazPydicomPlugin.metadata"  s}  € ð` ð
ð (+ð
ð ð ð ð 	ð  "ˆð •X˜tÐ$Ð$Ð$Ø�KŠKÝ Ø”Mà8Ø:ðð &ðð ðñ ô ñ	ô 	ð 	õ ˜œ {Ñ3Ô3ðBà”MÔ+Ð7å˜Tœ]Ô4Ð6IÈ4ÑPÔP�Ø�>Ø—O’OÐ$7½¸R¹¼ÑAÔAÐAõ ˜Tœ]Ð,LÈdÑSÔSˆ
ØÐ!Ø�KŠKÕ(¨°A¬À,ÐOÑOÔOÑPÔPÐPõ �e�SÑ!Ô!ð 	VÝ˜dœmÐ-OÐQUÑVÔVˆGØÐ"Ø—’Õ,¨W°U¬^À|ÐTÑTÔTÑUÔUÐUàˆr!   )rí   Ú	is_planarÚndimagerí   rî   c                óL  — |r0|                      ¦   «         D ]\  }}t          | j        ||¦  «         Œt          |¦  «        | j        _        | j                             |¦  «         t          j        |¦  «        }|j	        dk    s)|j	        dk    r|s|j	        dk    r|j
        d         dk    r|d         }|D ]}|                      |¦  «         Œ| j        j        t          k    r?|                      ¦   «          | j                             ¦   «                              ¦   «         S dS )aé  Write an image stack to DICOM.

        Parameters
        ----------
        ndimage : ArrayLike
            The ndimage to write.
        metadata : dict
            Global metadata (instance-level) to write to the file.
        is_planar : bool
            If True, the provided ndimage is assumed to use planar color layout
            ([Frame, Channel], Height, Width). Otherwise, it is assumed to
            be interleaved ([Frame], Height, Width, [Channel]).
            Stored as DICOM ``PlanarConfiguration``.
        kwargs : Any
            Additional kwargs are forwarded to ``pydicom.dcmwrite``.

        Returns
        -------
        bytes or None
            Encoded bytes when the URI is ``"<bytes>"``, else ``None``.
        r   r¦   éÿÿÿÿr—   N)r:   r;   ru   rœ   ÚPlanarConfigurationrl   r[   r™   rš   Úndimr¸   Úwrite_framerd   Ú	_uri_typer   Ú_flushrt   Úgetvalue)	rK   rï   rí   rî   r€   r<   r   r‡   r    s	            r   ÚwritezPydicomPlugin.writey  s  € ð: ð 	>Ø&ŸnšnÑ.Ô.ð >ð >‘
��UÝ" 4¤=°#°uÑ=Ô=Ð=Ð=Ý,/°	©N¬NˆŒÔ)ØÔ× Ò  Ñ(Ô(Ð(õ Œj˜Ñ!Ô!ˆàŒH˜ŠMˆMØ”˜A’� )�Ø”˜A’� #¤)¨B¤-°1Ò"4Ð"4à�i”.ˆCàð 	$ð 	$ˆEØ×Ò˜UÑ#Ô#Ð#Ð#àŒ<Ô!¥YÒ.Ð.Ø�KŠK‰MŒMˆMØ”<×(Ò(Ñ*Ô*×3Ò3Ñ5Ô5Ð5Øˆtr!   c                 ó(   ‡ — t          ˆ fd„¦  «        S )z-Instance-level (global) metadata of the file.c                  ó   •— ‰ j         S r9   )ru   ©rK   s   €r   ú<lambda>z1PydicomPlugin.instance_metadata.<locals>.<lambda>±  s	   ø€ ˜tœ}€ r!   )rG   rû   s   `r   Úinstance_metadatazPydicomPlugin.instance_metadata®  s   ø€ õ Ð,Ð,Ð,Ð,Ñ-Ô-Ð-r!   r   c                 ó€   — t          |¦  «                             ¦   «         D ]\  }}t          | j        ||¦  «         Œd S r9   )r@   r:   r;   ru   )rK   r   r<   Úvals       r   rý   zPydicomPlugin.instance_metadata³  sH   € å˜U™œ×)Ò)Ñ+Ô+ð 	8ð 	8‰HˆC�Ý˜tœ}¨c°3Ñ7Ô7Ð7Ð7ð	8ð 	8r!   c                 óF   ‡ — dt           j        fˆ fd„}t          |¦  «        S )z”Metadata in the shared functional group.

        The tags stored here are writen once but applied to each frame
        in the dicom file.
        r   c                  óú   •— t          ‰ j        d¦  «        rt          ‰ j        j        ¦  «        s;t          j                             t	          j        ¦   «         g¦  «        ‰ j        _        ‰ j        j        d         S )Nrµ   r   )r.   ru   Úlenrµ   r'   r*   r	   r(   rû   s   €r   Úget_itemz5PydicomPlugin.shared_frame_metadata.<locals>.get_itemÀ  st   ø€ Ý˜4œ=Ð*JÑKÔKð ÕSVØ”Ô<ñTô Tð õ @D¼}×?UÒ?UÝ”\‘^”^Ð$ñ@ô @�”Ô<ð ”=Ô?ÀÔBÐBr!   )r'   r(   rG   )rK   r  s   ` r   Úshared_frame_metadataz#PydicomPlugin.shared_frame_metadata¸  sA   ø€ ð	C�$œ,ð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cõ �xÑ Ô Ð r!   c                 óŽ   — t           j                             t          t	          |¦  «        ¦  «        g¦  «        | j        _        d S r9   )r'   r*   r	   r=   r@   ru   rµ   )rK   r   s     r   r  z#PydicomPlugin.shared_frame_metadataË  s8   € å7;´}×7MÒ7MÝ�d 5™kœkÑ*Ô*Ð+ñ8
ô 8
ˆŒÔ4Ð4Ð4r!   c                 ó   — | j         S )a  The pixel compression to use when writing.

        Available options:
        - None: (system default)
        - "rle": RLE lossless compression
        - "jpeg-ls": JPEG-LS lossless compression
        - "jpeg-ls-near": JPEG-LS near lossless compression
        - "jpeg2000": JPEG 2000 lossless compression
        - "jpeg2000-lossless": JPEG 2000 lossless compression
        - Any transfer syntax UID string

        Returns
        -------
        compression : str or None
            Resolved transfer syntax UID, or ``None``.
        )rk   rû   s    r   ÚcompressionzPydicomPlugin.compressionÑ  s   € ð$ Ô Ð r!   c                 óÀ  — |€	d | _         d S t          |¦  «        }t          j        j        t          j        j        t          j        j        t          j        j        t          j        j        dœ}||v rt          ||         ¦  «        | _         d S |r'|d          	                    ¦   «         rd|v r	|| _         d S t          d|›dd                     |¦  «        › d�¦  «        ‚)N)Úrlezjpeg-lszjpeg-ls-nearÚjpeg2000zjpeg2000-losslessr   r²   zUnknown compression z. Use one of: z, z# (or a transfer syntax UID string).)rk   rT   r'   rx   ÚRLELosslessÚJPEGLSLosslessÚJPEGLSNearLosslessÚJPEG2000ÚJPEG2000LosslessÚisdigitrË   Újoin)rK   r   ÚtextÚnamess       r   r  zPydicomPlugin.compressionå  sé   € àˆ=Ø $ˆDÔØˆFÝ�5‰zŒzˆå”8Ô'Ý”xÔ.Ý œHÔ7ÝœÔ)Ý!%¤Ô!:ð
ð 
ˆð �5ˆ=ˆ=Ý # E¨$¤KÑ 0Ô 0ˆDÔØˆFØð 	�D˜”G—O’OÑ%Ô%ð 	¨#°¨+¨+Ø $ˆDÔØˆFÝð1 5ð 1ð 1¸$¿)º)ÀEÑ:JÔ:Jð 1ð 1ð 1ñ
ô 
ð 	
r!   )rí   r    c                ó´   — | j                              t          j        |¦  «        ¦  «         | j                             |rt          |¦  «        nd¦  «         dS )zíAdd the given ndimage to the frames in this image.

        Parameters
        ----------
        frame : ArrayLike
            Single frame array.
        metadata : dict
            Local metadata associated with this ndimage.
        N)rm   rÍ   r™   rš   rn   r@   )rK   r    rí   s      r   rô   zPydicomPlugin.write_frameý  sP   € ð 	Œ×Ò�BœJ uÑ-Ô-Ñ.Ô.Ð.ØÔ×#Ò#°hÐ$H¥D¨¡N¤N NÀDÑIÔIÐIÐIÐIr!   r   ÚcolormapÚfirst_mappedc                 óè  — t          j        |d¬¦  «        }d|j        j        z  }|j        d         dk    rdn|j        d         }dD ] }|| j        v rt          | j        |¦  «         Œ!|||g}dd|j        d	         …         }t          |¦  «        D ]S\  }	}
t          | j        |
› d
�|¦  «         t          | j        |
› d�|dd…|	f          	                    ¦   «         ¦  «         ŒTd| j        _
        dS )ax  Set the given colormap as the image's LUT.

        Parameters
        ----------
        colormap : ArrayLike
            RGB(A) colormap as a 2D array of shape ``(N, 3)`` or ``(N, 4)``
            with dtype ``uint8`` or ``uint16`` (up to ``2**16`` entries).
        first_mapped : int
            Offset subtracted from stored pixel values before indexing the LUT.
        ÚF©Úorderr¨   r   é   ©rÁ   Ú&GreenPaletteColorLookupTableDescriptorÚ%BluePaletteColorLookupTableDescriptorÚ&AlphaPaletteColorLookupTableDescriptorÚRedPaletteColorLookupTableDataÚ GreenPaletteColorLookupTableDataÚBluePaletteColorLookupTableDatar£   Ú'SegmentedRedPaletteColorLookupTableDataÚ)SegmentedGreenPaletteColorLookupTableDataÚ(SegmentedBluePaletteColorLookupTableDatar¤   ©ÚRedÚGreenÚBlueÚAlphaNr–   Ú!PaletteColorLookupTableDescriptorÚPaletteColorLookupTableDatarŠ   )r™   rš   r¹   Úitemsizer¸   ru   ÚdelattrÚ	enumeraterD   Útobytesr‹   )rK   r  r  ÚcmaprÕ   Ú	n_entriesÚnameÚ
descriptorrÒ   ÚiÚchannels              r   Ú	lut_densezPydicomPlugin.lut_dense  s2  € õ Œz˜(¨#Ð.Ñ.Ô.ˆØ�4”:Ô&Ñ&ˆØœ Aœ¨%Ò/Ð/�A�A°T´ZÀ´]ˆ	ð
ð 	-ð 	-ˆDð �t”}Ð$Ð$Ý˜œ tÑ,Ô,Ð,øà ¨tÐ4ˆ
Ø4°_°t´zÀ!´}°_ÔEˆÝ# HÑ-Ô-ð 
	ð 
	‰JˆAˆwÝØ”ØÐ=Ð=Ð=Øñô ð õ
 Ø”ØÐ7Ð7Ð7Ø�Q�Q�Q˜�T”
×"Ò"Ñ$Ô$ñô ð ð ð
 3BˆŒÔ/Ð/Ð/r!   ÚcolorsÚindicesc                 ó  — t          j        |d¬¦  «        }t          j        |¦  «        }|d                              ¦   «         dz   }|dk    rdn|}d}dD ] }|| j        v rt	          | j        |¦  «         Œ!|||g}	d	d
|j        d         …         }
t          |
¦  «        D ]ß\  }}t          | j        |› d�|	¦  «         |d
d
…|f         }t          j        dt          |¦  «        z  d¬¦  «        }dd|d         f|dd…<   t          t          |¦  «        dz
  ¦  «        D ]3}d||dz            ||         z
  ||dz            f|d|dz   z  d|dz   z  …<   Œ4t          | j        d|› d�|                     ¦   «         ¦  «         Œàd| j        _        d
S )aº  Set a piecewise linear gradient as the image's LUT.

        Builds a gradient LUT using DICOM's segmented palette tags.
        This allows more efficient storage of a gradient palette. The
        palette is defined by a sequence of knot points at different
        pixel intensities.

        Parameters
        ----------
        colors : ArrayLike
            Knot colors as a 2D array of shape (K, 3) or (K, 4).
        indices : ArrayLike
            0-based indicies of pixel intensities where each knot is
            located. Assumed to be strictly increasing.
        first_mapped : int
            Offset subtracted from stored pixel values before indexing
            the LUT.
        r  r  rñ   r–   r  r   r±   r  r&  Nr+  r¦   z<u2)r¹   r   Ú	Segmentedr,  rŠ   )r™   rš   r   ru   r.  r¸   r/  rD   Úemptyr  Úranger0  r‹   )rK   r8  r9  r  r1  Únr2  rÕ   r3  r4  rÒ   r5  r6  Úchannel_valsÚwordsÚks                   r   Ú
lut_linearzPydicomPlugin.lut_linear;  sè  € õ0 Œz˜&¨Ð,Ñ,Ô,ˆÝ”*˜WÑ%Ô%ˆØ�BŒK×ÒÑÔ Ñ"ˆØ˜eš˜�A�A¨ˆ	Øˆð
ð 	-ð 	-ˆDð �t”}Ð$Ð$Ý˜œ tÑ,Ô,Ð,øà ¨tÐ4ˆ
Ø4°_°t´zÀ!´}°_ÔEˆÝ# HÑ-Ô-ð 	ð 	‰JˆAˆwÝØ”ØÐ=Ð=Ð=Øñô ð ð      1 œ:ˆLÝ”H˜Q¥ W¡¤Ñ-°UÐ;Ñ;Ô;ˆEØ˜Q ¨Q¤Ð0ˆE�!�A�#‰JÝ�3˜w™<œ<¨!Ñ+Ñ,Ô,ð ð �àØ˜A ™E”N W¨Q¤ZÑ/Ø   Q¡Ô'ð4��a˜1˜q™5‘k A¨¨Q©¡KÐ/Ñ0Ð0õ
 Ø”Ø@˜GÐ@Ð@Ð@Ø—’‘”ñô ð ð ð
 3BˆŒÔ/Ð/Ð/r!   c                 óä  — | j         rd S | j        j        j        t          j        k    rd S | j        s	d| _         d S t          t          | j	        dd¦  «        ¦  «        dk    }t          | j	        d¦  «        pt          | j	        d¦  «        }t          | j        ¦  «        dk    r| j        d         nt          j        | j        d¬¦  «        }t          | j	        d¦  «        r| j	        j        nd	|j        j        z  }|rd
}nJt          | j	        d¦  «        rt#          | j	        j        ¦  «        }n| j        d         j        dk    rd}nd}|�r|j        dd …         \  }}}t          | j        ¦  «        dk    rd| j	        v rt+          | j	        d¦  «         nt          | j        ¦  «        | j	        _        || j	        _        || j	        _        d| j	        _        || j	        _        || j	        _        d	|j        j        z  | j	        _        || j	        _        |dz
  | j	        _        |j        j        dk    rdnd| j	        _        t          j        |¦  «                              ¦   «         }	t          |	¦  «        dz  dk    r|	dz  }	|	| j	        _!        | j	        j        d	k    rtD          j#        j$        j%        ntD          j#        j$        j&        | j	        d         _$        t          | j	        d¦  «        s(tD          j'         (                    ¦   «         | j	        _)        t          | j	        j)        dd ¦  «        }
|
�|
j*        r tD          j+        j,        | j	        j)        _-        n| j	         .                    |||d¬¦  «         t_          d„ | j0        D ¦   «         ¦  «        r:d„ | j0        D ¦   «         }tD          j1         2                    |¦  «        | j	        _3        	 | j4        �,| j	         5                    t#          | j4        ¦  «        ¦  «         tm          | j7        ¦  «        }| 8                    dd¦  «          | j	        j9        | j         :                    ¦   «         fi |¤Ž d| _         d S # d| _         w xY w)NTrò   r   r–   r   r#  )ÚaxisÚ
BitsStoredr¨   rŠ   r‹   r   ÚMONOCHROME2ÚRGBéýÿÿÿr•   Úuó    r1   ræ   rç   F)Úgenerate_instance_uidc              3   ó   K  — | ]}|d uV — Œ	d S r9   r   )r   Úms     r   rA   z'PydicomPlugin._flush.<locals>.<genexpr>Í  s&   è è € Ð;Ð; ˆq˜ˆ}Ð;Ð;Ð;Ð;Ð;Ð;r!   c                 ó0   — g | ]}t          |pi ¦  «        ‘ŒS r   rC   )r   ré   s     r   r    z(PydicomPlugin._flush.<locals>.<listcomp>Î  s%   € ÐSÐSÐS°dÕ% d j¨bÑ1Ô1ÐSÐSÐSr!   Úenforce_file_format);ro   rd   rp   rq   r   rø   rm   rœ   rN   ru   r.   r  r™   ÚstackrE  r¹   r-  rT   r‹   ró   r¸   r.  r•   r¿   rò   r½   r¾   rÀ   ÚHighBitÚkindr§   Úascontiguousarrayr0  r1   r'   ÚvaluerepÚVRÚOBÚOWÚdatasetÚFileMetaDatasetræ   Úis_compressedrx   ÚExplicitVRLittleEndianrç   Úset_pixel_dataÚanyrn   r*   r	   r·   rk   Úcompressr@   rl   rj   Úsave_asrt   )rK   rî   Úhas_paletter‡   Úbits_storedÚphotometricÚsamplesrÏ   rÐ   rˆ   Útsyntaxr:   Úsave_kwargss                r   rö   zPydicomPlugin._flushƒ  sJ  € ØŒ=ð 	ØˆFØŒ<ÔÔ$­¬Ò4Ð4ØˆFØŒ|ð 	Ø ˆDŒMØˆFå� ¤Ð/DÀaÑHÔHÑIÔIÈQÒNˆ	ÝØŒMÐ;ñ
ô 
ð Oå�T”]Ð$MÑNÔNð 	õ
 �4”<Ñ Ô  AÒ%Ð%ð ŒL˜ŒOˆOå”˜$œ,¨QÐ/Ñ/Ô/ð 	õ �t”} lÑ3Ô3ð(ˆDŒMÔ$Ð$à�S”YÔ'Ñ'ð 	ð ð 	 Ø)ˆKˆKÝ�T”]Ð$?Ñ@Ô@ð 	 Ý˜dœmÔEÑFÔFˆKˆKØŒ\˜!Œ_Ô! QÒ&Ð&Ø'ˆKˆKàˆKð ñ $	à"%¤)¨B¨C¨C¤.ÑˆG�T˜4Ý�4”<Ñ Ô  AÒ%Ð%Ø# t¤}Ð4Ð4Ý˜DœMÐ+;Ñ<Ô<Ð<øå/2°4´<Ñ/@Ô/@�”Ô,Ø,3ˆDŒMÔ)Ø6AˆDŒMÔ3Ø01ˆDŒMÔ-Ø!%ˆDŒMÔØ$(ˆDŒMÔ!Ø*+¨c¬iÔ.@Ñ*@ˆDŒMÔ'Ø'2ˆDŒMÔ$Ø$/°!¡OˆDŒMÔ!Ø58´Y´^ÀsÒ5JÐ5J°°ÐPQˆDŒMÔ-ÝÔ& sÑ+Ô+×3Ò3Ñ5Ô5ˆCÝ�3‰xŒx˜!‰|˜qÒ Ð Ø�w‘�Ø&)ˆDŒMÔ#ð ”=Ô.°!Ò3Ð3õ ”Ô Ô#Ð#å”]Ô%Ô(ð ŒM˜+Ô&Ô)õ
 ˜4œ=¨+Ñ6Ô6ð IÝ*.¬,×*FÒ*FÑ*HÔ*H�”Ô'Ý˜dœmÔ5Ð7JÈDÑQÔQˆGØˆ 'Ô"7ˆå”HÔ3ð ”Ô'Ô9øð ŒM×(Ò(Ø�[ +ÀUð )ñ ô ð õ
 Ð;Ð; dÔ&:Ð;Ñ;Ô;Ñ;Ô;ð 	ØSÐS¸dÔ>RÐSÑSÔSˆEÝ=A¼]×=SÒ=SØñ>ô >ˆDŒMÔ:ð
	!ØÔ Ð,Ø”×&Ò&¥s¨4Ô+<Ñ'=Ô'=Ñ>Ô>Ð>Ý˜tÔ0Ñ1Ô1ˆKØ×"Ò"Ð#8¸$Ñ?Ô?Ð?Ø!ˆDŒMÔ! $¤,×"7Ò"7Ñ"9Ô"9ÐIÐI¸[ÐIÐIÐIà ˆDŒMˆMˆMø˜DˆDŒMÐ Ð Ð Ð s   ÏBQ& Ñ&	Q/c                 óž   — | j         j        j        t          j        k    r|                      ¦   «          | j                              ¦   «          dS )z9Flush a write buffer (if needed) and release the request.N)rd   rp   rq   r   rø   rö   Úfinishrû   s    r   ÚclosezPydicomPlugin.closeÝ  s>   € àŒ<ÔÔ$­¬Ò4Ð4Ø�KŠK‰MŒMˆMØŒ×ÒÑÔÐÐÐr!   )r   N)r   )(r\   r]   r^   r_   r   rL   r†   r™   Úndarrayra   r�   r   rœ   rr   r   r¡   r   rà   r˜   r   r   rT   rí   r   r   r   r+   rø   ÚpropertyrG   rý   Úsetterr  r  rô   r7  rB  rö   rh  Ú__classcell__)r‚   s   @r   rc   rc   	  sz  ø€ € € € € ðð ð* ð *°dð *ð *ð *ð *ð *ð *ð:Að Að Að Að= ¤
ð =°Dð =¸R¼Zð =ð =ð =ð =ð  $Øð	'ð 'ð 'ð ˜Œ}ð'ð ð	'ð 
Œð'ð 'ð 'ð 'ðR #(ð @ð @ð @˜4ð @°h¸r¼zÔ6Jð @ð @ð @ð @ð* )-¸%ð`
ð `
ð `
Ø  œð`
Ø37ð`
à	ð`
ð `
ð `
ð `
ðJ Ø $ØðUð Uð Uð ðUð ð	Uð
 ðUð 
ˆc�3ˆhŒðUð Uð Uð Uðv .2Øð3ð 3ð 3à�y $ y¤/Ð1Ô2ð3ð ˜4  S œ>Ô*ð	3ð
 ð3ð 
�%Œð3ð 3ð 3ð 3ðj ð. 7ð .ð .ð .ñ „Xð.ð Ôð8 t¨C°¨H¤~ð 8¸$ð 8ð 8ð 8ñ Ôð8ð ð! wð !ð !ð !ñ „Xð!ð$ Ô!ð
¨4°°S°¬>ð 
¸dð 
ð 
ð 
ñ "Ô!ð
ð
 ð!˜X cœ]ð !ð !ð !ñ „Xð!ð& Ôð
 ¨%°°S°¬/Ô!:ð 
¸tð 
ð 
ð 
ñ Ôð
ð0 IMðJð Jð JØðJØ-5°d¸3À¸8´nÔ-EðJà	ðJð Jð Jð Jð-Bð -B )ð -B¸3ð -BÀtð -Bð -Bð -Bð -Bðf ð	FBð FBàðFBð ðFBð ð	FBð
 
ðFBð FBð FBð FBðPX!ð X!ð X!ð X!ðtð ð ð ð ð ð ð r!   rc   )"r_   Útypingr   r   r   r   r   r   r	   r
   r   Únumpyr™   Úpydicomr'   ÚImportErrorr�   Úcore.requestr   r   r   r   Úcore.v3_plugin_apir   r   r   r   r(   rT   r)   r=   r;   rG   rc   r   r!   r   ú<module>rs     s  ððuð uðn YÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xà Ð Ð Ð ðØÐÐÐÐøØð ð ð Ø
ˆ+Ø]ñô àðøøøøðøøøð
 KÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð ð�cð ˜cð ð ð ð ð	˜œð 	°X¸c´]ð 	ÀtÈCÐQTÈHÄ~ð 	ð 	ð 	ð 	ð˜4  S œ>ð ¨d¬lð ð ð ð ð ˜4œ<ð  ¨cð  ¸#ð  À$ð  ð  ð  ð  ðð ð ð ð ñ ô ð ð.Xð Xð Xð Xð X�Hñ Xô Xð Xð Xð Xs   ž# £9¨4´9