Ë
    Eü´jz« ã                   ó&  — d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZdZdZdZd„ Zd—d„Zd˜d	„Z G d
„ de «      Z! G d„ de «      Z" G d„ de «      Z# G d„ de «      Z$ G d„ de «      Z% G d„ de «      Z& G d„ de «      Z' G d„ de(«      Z) G d„ de «      Z* G d„ de «      Z+ G d„ de «      Z, G d „ d!e «      Z- G d"„ d#e «      Z. G d$„ d%e «      Z/e/ G d&„ d'e «      «       Z0d™d(„Z1d)„ Z2d*„ Z3d+„ Z4d,„ Z5d-„ Z6d.„ Z7d/„ Z8d0„ Z9d1„ Z:d2„ Z;dšd3„Z<d4„ Z=d5„ Z>d6„ Z?d7„ Z@d8„ ZAd9„ ZBd:„ ZCd;„ ZDd<„ ZEd=„ ZFd>„ ZGd?„ ZHd@„ ZIdA„ ZJdB„ ZKdC„ ZLdD„ ZMdE„ ZNdF„ ZOdG„ ZPdH„ ZQdI„ ZR	 	 	 	 	 	 d›dJ„ZSdšdK„ZTdL„ ZUdM„ ZVdšdN„ZWdO„ ZXdP„ ZYdQ„ ZZdR„ Z[dS„ Z\dT„ Z]e^ddUfdV„Z_dW„ Z` e_dX«      dY„ «       Za e_dZ«      d[„ «       Zb e_d\«      dœd]„«       Zcd�d^„Zd e_d_«      d`„ «       Zedžda„Zfdb„ Zgdc„ Zhdd„ ZidŸde„Zjd df„Zkd¡dg„Zld¢dh„Zmdi„ Znd£dj„Zod¤dk„Zpdl„ Zqd¥dm„Zrdn„ Zsd¦do„Ztdšdp„Zud§dq„Zvdr„ Zwds„ Zxdt„ Zydu„ Zzdv„ Z{ej&                  jù                  dw«      fdx„Z}dœdy„Z~dz„ Zd{„ Z€d¨d|„Z�d©d~„Z‚d„ Zƒdªd€„Z„d�„ Z…d«d‚„Z†d¬dƒ„Z‡d„„ Zˆd…„ Z‰d†„ ZŠd­d‡„Z‹d®dˆ„ZŒ	 	 	 	 	 	 	 	 	 	 	 d¯d‰„Z�dŠ„ ZŽd‹„ Z�dšdŒ„Z�e�j"                  d   d}k(  r e’e“fZ”d�„ Z•d™dŽ„Z–dšd�„Z—d�„ Z˜ G d‘„ d’e™«      Zše%Z&ne’Z”e›eœfZ�e›ZžeŸZ•d°d“„Z–d±d”„Z—d•„ Z˜e d–k(  r e�jB                   e�«       «       yy)²a8  Read image and meta data from (bio) TIFF(R) files. Save numpy arrays as TIFF.

Image and metadata can be read from TIFF, BigTIFF, OME-TIFF, STK, LSM, NIH,
SGI, ImageJ, MicroManager, FluoView, ScanImage, SEQ, GEL, and GeoTIFF files.

Tifffile is not a general-purpose TIFF library.
Only a subset of the TIFF specification is supported, mainly uncompressed and
losslessly compressed 1, 8, 16, 32 and 64 bit integer, 16, 32 and 64-bit float,
grayscale and RGB(A) images, which are commonly used in scientific imaging.
Specifically, reading slices of image data, image trees defined via SubIFDs,
CCITT and OJPEG compression, chroma subsampling without JPEG compression,
or IPTC and XMP metadata are not implemented.

TIFF(R), the tagged Image File Format, is a trademark and under control of
Adobe Systems Incorporated. BigTIFF allows for files greater than 4 GB.
STK, LSM, FluoView, SGI, SEQ, GEL, and OME-TIFF, are custom extensions
defined by Molecular Devices (Universal Imaging Corporation), Carl Zeiss
MicroImaging, Olympus, Silicon Graphics International, Media Cybernetics,
Molecular Dynamics, and the Open Microscopy Environment consortium
respectively.

For command line usage run C{python -m tifffile --help}

:Author:
  `Christoph Gohlke <https://www.lfd.uci.edu/~gohlke/>`_

:Organization:
  Laboratory for Fluorescence Dynamics, University of California, Irvine

:Version: 2018.06.15

Requirements
------------
* `CPython 3.6 64-bit <https://www.python.org>`_
* `Numpy 1.14 <http://www.numpy.org>`_
* `Matplotlib 2.2 <https://www.matplotlib.org>`_ (optional for plotting)
* `Tifffile.c 2018.02.10 <https://www.lfd.uci.edu/~gohlke/>`_
  (recommended for faster decoding of PackBits and LZW encoded strings)
* `Tifffile_geodb.py 2018.02.10 <https://www.lfd.uci.edu/~gohlke/>`_
  (optional enums for GeoTIFF metadata)
* Python 2 requires 'futures', 'enum34', 'pathlib'.

Revisions
---------
2018.06.15
    Pass 2680 tests.
    Towards reading JPEG and other compressions via imagecodecs package (WIP).
    Add function to validate TIFF using 'jhove -m TIFF-hul'.
    Save bool arrays as bilevel TIFF.
    Accept pathlib.Path as filenames.
    Move 'software' argument from TiffWriter __init__ to save.
    Raise DOS limit to 16 TB.
    Lazy load lzma and zstd compressors and decompressors.
    Add option to save IJMetadata tags.
    Return correct number of pages for truncated series (bug fix).
    Move EXIF tags to TIFF.TAG as per TIFF/EP standard.
2018.02.18
    Pass 2293 tests.
    Always save RowsPerStrip and Resolution tags as required by TIFF standard.
    Do not use badly typed ImageDescription.
    Coherce bad ASCII string tags to bytes.
    Tuning of __str__ functions.
    Fix reading 'undefined' tag values (bug fix).
    Read and write ZSTD compressed data.
    Use hexdump to print byte strings.
    Determine TIFF byte order from data dtype in imsave.
    Add option to specify RowsPerStrip for compressed strips.
    Allow memory map of arrays with non-native byte order.
    Attempt to handle ScanImage <= 5.1 files.
    Restore TiffPageSeries.pages sequence interface.
    Use numpy.frombuffer instead of fromstring to read from binary data.
    Parse GeoTIFF metadata.
    Add option to apply horizontal differencing before compression.
    Towards reading PerkinElmer QPTIFF (no test files).
    Do not index out of bounds data in tifffile.c unpackbits and decodelzw.
2017.09.29 (tentative)
    Many backwards incompatible changes improving speed and resource usage:
    Pass 2268 tests.
    Add detail argument to __str__ function. Remove info functions.
    Fix potential issue correcting offsets of large LSM files with positions.
    Remove TiffFile sequence interface; use TiffFile.pages instead.
    Do not make tag values available as TiffPage attributes.
    Use str (not bytes) type for tag and metadata strings (WIP).
    Use documented standard tag and value names (WIP).
    Use enums for some documented TIFF tag values.
    Remove 'memmap' and 'tmpfile' options; use out='memmap' instead.
    Add option to specify output in asarray functions.
    Add option to concurrently decode image strips or tiles using threads.
    Add TiffPage.asrgb function (WIP).
    Do not apply colormap in asarray.
    Remove 'colormapped', 'rgbonly', and 'scale_mdgel' options from asarray.
    Consolidate metadata in TiffFile _metadata functions.
    Remove non-tag metadata properties from TiffPage.
    Add function to convert LSM to tiled BIN files.
    Align image data in file.
    Make TiffPage.dtype a numpy.dtype.
    Add 'ndim' and 'size' properties to TiffPage and TiffPageSeries.
    Allow imsave to write non-BigTIFF files up to ~4 GB.
    Only read one page for shaped series if possible.
    Add memmap function to create memory-mapped array stored in TIFF file.
    Add option to save empty arrays to TIFF files.
    Add option to save truncated TIFF files.
    Allow single tile images to be saved contiguously.
    Add optional movie mode for files with uniform pages.
    Lazy load pages.
    Use lightweight TiffFrame for IFDs sharing properties with key TiffPage.
    Move module constants to 'TIFF' namespace (speed up module import).
    Remove 'fastij' option from TiffFile.
    Remove 'pages' parameter from TiffFile.
    Remove TIFFfile alias.
    Deprecate Python 2.
    Require enum34 and futures packages on Python 2.7.
    Remove Record class and return all metadata as dict instead.
    Add functions to parse STK, MetaSeries, ScanImage, SVS, Pilatus metadata.
    Read tags from EXIF and GPS IFDs.
    Use pformat for tag and metadata values.
    Fix reading some UIC tags (bug fix).
    Do not modify input array in imshow (bug fix).
    Fix Python implementation of unpack_ints.
2017.05.23
    Pass 1961 tests.
    Write correct number of SampleFormat values (bug fix).
    Use Adobe deflate code to write ZIP compressed files.
    Add option to pass tag values as packed binary data for writing.
    Defer tag validation to attribute access.
    Use property instead of lazyattr decorator for simple expressions.
2017.03.17
    Write IFDs and tag values on word boundaries.
    Read ScanImage metadata.
    Remove is_rgb and is_indexed attributes from TiffFile.
    Create files used by doctests.
2017.01.12
    Read Zeiss SEM metadata.
    Read OME-TIFF with invalid references to external files.
    Rewrite C LZW decoder (5x faster).
    Read corrupted LSM files missing EOI code in LZW stream.
2017.01.01
    Add option to append images to existing TIFF files.
    Read files without pages.
    Read S-FEG and Helios NanoLab tags created by FEI software.
    Allow saving Color Filter Array (CFA) images.
    Add info functions returning more information about TiffFile and TiffPage.
    Add option to read specific pages only.
    Remove maxpages argument (backwards incompatible).
    Remove test_tifffile function.
2016.10.28
    Pass 1944 tests.
    Improve detection of ImageJ hyperstacks.
    Read TVIPS metadata created by EM-MENU (by Marco Oster).
    Add option to disable using OME-XML metadata.
    Allow non-integer range attributes in modulo tags (by Stuart Berg).
2016.06.21
    Do not always memmap contiguous data in page series.
2016.05.13
    Add option to specify resolution unit.
    Write grayscale images with extra samples when planarconfig is specified.
    Do not write RGB color images with 2 samples.
    Reorder TiffWriter.save keyword arguments (backwards incompatible).
2016.04.18
    Pass 1932 tests.
    TiffWriter, imread, and imsave accept open binary file streams.
2016.04.13
    Correctly handle reversed fill order in 2 and 4 bps images (bug fix).
    Implement reverse_bitorder in C.
2016.03.18
    Fix saving additional ImageJ metadata.
2016.02.22
    Pass 1920 tests.
    Write 8 bytes double tag values using offset if necessary (bug fix).
    Add option to disable writing second image description tag.
    Detect tags with incorrect counts.
    Disable color mapping for LSM.
2015.11.13
    Read LSM 6 mosaics.
    Add option to specify directory of memory-mapped files.
    Add command line options to specify vmin and vmax values for colormapping.
2015.10.06
    New helper function to apply colormaps.
    Renamed is_palette attributes to is_indexed (backwards incompatible).
    Color-mapped samples are now contiguous (backwards incompatible).
    Do not color-map ImageJ hyperstacks (backwards incompatible).
    Towards reading Leica SCN.
2015.09.25
    Read images with reversed bit order (FillOrder is LSB2MSB).
2015.09.21
    Read RGB OME-TIFF.
    Warn about malformed OME-XML.
2015.09.16
    Detect some corrupted ImageJ metadata.
    Better axes labels for 'shaped' files.
    Do not create TiffTag for default values.
    Chroma subsampling is not supported.
    Memory-map data in TiffPageSeries if possible (optional).
2015.08.17
    Pass 1906 tests.
    Write ImageJ hyperstacks (optional).
    Read and write LZMA compressed data.
    Specify datetime when saving (optional).
    Save tiled and color-mapped images (optional).
    Ignore void bytecounts and offsets if possible.
    Ignore bogus image_depth tag created by ISS Vista software.
    Decode floating point horizontal differencing (not tiled).
    Save image data contiguously if possible.
    Only read first IFD from ImageJ files if possible.
    Read ImageJ 'raw' format (files larger than 4 GB).
    TiffPageSeries class for pages with compatible shape and data type.
    Try to read incomplete tiles.
    Open file dialog if no filename is passed on command line.
    Ignore errors when decoding OME-XML.
    Rename decoder functions (backwards incompatible).
2014.08.24
    TiffWriter class for incremental writing images.
    Simplify examples.
2014.08.19
    Add memmap function to FileHandle.
    Add function to determine if image data in TiffPage is memory-mappable.
    Do not close files if multifile_close parameter is False.
2014.08.10
    Pass 1730 tests.
    Return all extrasamples by default (backwards incompatible).
    Read data from series of pages into memory-mapped array (optional).
    Squeeze OME dimensions (backwards incompatible).
    Workaround missing EOI code in strips.
    Support image and tile depth tags (SGI extension).
    Better handling of STK/UIC tags (backwards incompatible).
    Disable color mapping for STK.
    Julian to datetime converter.
    TIFF ASCII type may be NULL separated.
    Unwrap strip offsets for LSM files greater than 4 GB.
    Correct strip byte counts in compressed LSM files.
    Skip missing files in OME series.
    Read embedded TIFF files.
2014.02.05
    Save rational numbers as type 5 (bug fix).
2013.12.20
    Keep other files in OME multi-file series closed.
    FileHandle class to abstract binary file handle.
    Disable color mapping for bad OME-TIFF produced by bio-formats.
    Read bad OME-XML produced by ImageJ when cropping.
2013.11.03
    Allow zlib compress data in imsave function (optional).
    Memory-map contiguous image data (optional).
2013.10.28
    Read MicroManager metadata and little-endian ImageJ tag.
    Save extra tags in imsave function.
    Save tags in ascending order by code (bug fix).
2012.10.18
    Accept file like objects (read from OIB files).
2012.08.21
    Rename TIFFfile to TiffFile and TIFFpage to TiffPage.
    TiffSequence class for reading sequence of TIFF files.
    Read UltraQuant tags.
    Allow float numbers as resolution in imsave function.
2012.08.03
    Read MD GEL tags and NIH Image header.
2012.07.25
    Read ImageJ tags.
    ...

Notes
-----
The API is not stable yet and might change between revisions.

Tested on little-endian platforms only.

Other Python packages and modules for reading (bio) scientific TIFF files:

*  `python-bioformats <https://github.com/CellProfiler/python-bioformats>`_
*  `Imread <https://github.com/luispedro/imread>`_
*  `PyLibTiff <https://github.com/pearu/pylibtiff>`_
*  `ITK <https://www.itk.org>`_
*  `PyLSM <https://launchpad.net/pylsm>`_
*  `PyMca.TiffIO.py <https://github.com/vasole/pymca>`_ (same as fabio.TiffIO)
*  `BioImageXD.Readers <http://www.bioimagexd.net/>`_
*  `Cellcognition.io <http://cellcognition.org/>`_
*  `pymimage <https://github.com/ardoi/pymimage>`_
*  `pytiff <https://github.com/FZJ-INM1-BDA/pytiff>`_

Acknowledgements
----------------
*   Egor Zindy, University of Manchester, for lsm_scan_info specifics.
*   Wim Lewis for a bug fix and some LSM functions.
*   Hadrien Mary for help on reading MicroManager files.
*   Christian Kliche for help writing tiled and color-mapped files.

References
----------
1)  TIFF 6.0 Specification and Supplements. Adobe Systems Incorporated.
    http://partners.adobe.com/public/developer/tiff/
2)  TIFF File Format FAQ. http://www.awaresystems.be/imaging/tiff/faq.html
3)  MetaMorph Stack (STK) Image File Format.
    http://support.meta.moleculardevices.com/docs/t10243.pdf
4)  Image File Format Description LSM 5/7 Release 6.0 (ZEN 2010).
    Carl Zeiss MicroImaging GmbH. BioSciences. May 10, 2011
5)  The OME-TIFF format.
    http://www.openmicroscopy.org/site/support/file-formats/ome-tiff
6)  UltraQuant(r) Version 6.0 for Windows Start-Up Guide.
    http://www.ultralum.com/images%20ultralum/pdf/UQStart%20Up%20Guide.pdf
7)  Micro-Manager File Formats.
    http://www.micro-manager.org/wiki/Micro-Manager_File_Formats
8)  Tags for TIFF and Related Specifications. Digital Preservation.
    http://www.digitalpreservation.gov/formats/content/tiff_tags.shtml
9)  ScanImage BigTiff Specification - ScanImage 2016.
    http://scanimage.vidriotechnologies.com/display/SI2016/
    ScanImage+BigTiff+Specification
10) CIPA DC-008-2016: Exchangeable image file format for digital still cameras:
    Exif Version 2.31.
    http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf

Examples
--------
>>> # write numpy array to TIFF file
>>> data = numpy.random.rand(4, 301, 219)
>>> imsave('temp.tif', data, photometric='minisblack')

>>> # read numpy array from TIFF file
>>> image = imread('temp.tif')
>>> numpy.testing.assert_array_equal(image, data)

>>> # iterate over pages and tags in TIFF file
>>> with TiffFile('temp.tif') as tif:
...     images = tif.asarray()
...     for page in tif.pages:
...         for tag in page.tags.values():
...             _ = tag.name, tag.value
...         image = page.asarray()

é    )ÚdivisionÚprint_functionNz
2018.06.15zrestructuredtext en)ÚimsaveÚimreadÚimshowÚmemmapÚTiffFileÚ
TiffWriterÚTiffSequenceÚ
FileHandleÚlazyattrÚnatural_sortedÚ
decode_lzwÚ	stripnullÚcreate_outputÚ	repeat_ndÚformat_sizeÚproductÚxml2dictc                 ó  ‡ — t        |dd«      }t        |d«      }t        ‰ t        «      r)t        ˆ fd„dD «       «      rt	        j                  ‰ «      Š ‰ st        d«      ‚t        ‰ d«      st        ‰ «      dk(  r‰ d	   Š t        ‰ t        «      st        ‰ d«      r(t        ‰ fi |¤Ž5 } |j                  di |¤Žcd
d
d
«       S t        ‰ fi |¤Ž5 } |j                  di |¤Žcd
d
d
«       S # 1 sw Y   y
xY w# 1 sw Y   y
xY w)a¢  Return image data from TIFF file(s) as numpy array.

    Refer to the TiffFile class and member functions for documentation.

    Parameters
    ----------
    files : str, binary stream, or sequence
        File name, seekable binary stream, glob pattern, or sequence of
        file names.
    kwargs : dict
        Parameters 'multifile' and 'is_ome' are passed to the TiffFile class.
        The 'pattern' parameter is passed to the TiffSequence class.
        Other parameters are passed to the asarray functions.
        The first image series is returned if no arguments are provided.

    Examples
    --------
    >>> # get image from first page
    >>> imsave('temp.tif', numpy.random.rand(3, 4, 301, 219))
    >>> im = imread('temp.tif', key=0)
    >>> im.shape
    (4, 301, 219)

    >>> # get images from sequence of files
    >>> ims = imread(['temp.tif', 'temp.tif'])
    >>> ims.shape
    (2, 3, 4, 301, 219)

    Ú	multifileÚis_omeÚpatternc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚiÚfiless     €úW/root/workspace/ytshorts/venv/lib/python3.12/site-packages/imageio/plugins/_tifffile.pyú	<genexpr>zimread.<locals>.<genexpr>À  s   øè ø€ Ò,F¸A¨Q°%¬ZÑ,Fùó   ƒú?*úno files foundÚseeké   r   Nr   )Úparse_kwargsÚ
isinstanceÚ
basestringÚanyÚglobÚ
ValueErrorÚhasattrÚlenr	   Úasarrayr   )r   ÚkwargsÚkwargs_fileÚ
kwargs_seqÚtifÚimseqs   `     r    r   r   Ÿ  sù   ø€ ô< ˜v {°HÓ=€KÜ˜f iÓ0€Jä�%œÔ$¬Ó,FÀÔ,FÔ)FÜ—	‘	˜%Ó ˆÙÜÐ)Ó*Ð*Ü�5˜&Ô!¤c¨%£j°A¢oØ�a‘ˆä�%œÔ$¬°°vÔ(>Ü�eÑ+˜{Ñ+ð 	)¨sØ�3—;‘;Ñ( Ñ(÷	)ñ 	)ô ˜%Ñ. :Ñ.ð 	+°%Ø �5—=‘=Ñ* 6Ñ*÷	+ñ 	+÷	)ð 	)ú÷	+ð 	+ús   Â(C,ÃC8Ã,C5Ã8Dc                 ó
  — t        |dddd«      }|€Kt        |«      t        j                  |«      j                  z  }t        j                  |«      j
                  }n#	 |j                  }|j                  j
                  }||kD  r-d|vr)|j                  dd«      s|j                  dd«      sd	|d<   d|vr||d<   t        | fi |¤Ž5 }	 |	j                  |||fi |¤Žcddd«       S # t        $ r d}d}Y Œuw xY w# 1 sw Y   yxY w)
a
  Write numpy array to TIFF file.

    Refer to the TiffWriter class and member functions for documentation.

    Parameters
    ----------
    file : str or binary stream
        File name or writable binary stream, such as an open file or BytesIO.
    data : array_like
        Input image. The last dimensions are assumed to be image depth,
        height, width, and samples.
        If None, an empty array of the specified shape and dtype is
        saved to file.
        Unless 'byteorder' is specified in 'kwargs', the TIFF file byte order
        is determined from the data's dtype or the dtype argument.
    shape : tuple
        If 'data' is None, shape of an empty array to save to the file.
    dtype : numpy.dtype
        If 'data' is None, data-type of an empty array to save to the file.
    bigsize : int
        Create a BigTIFF file if the size of data in bytes is larger than
        this threshold and 'imagej' or 'truncate' are not enabled.
        By default, the threshold is 4 GB minus 32 MB reserved for metadata.
        Use the 'bigtiff' parameter to explicitly specify the type of
        file created.
    kwargs : dict
        Parameters 'append', 'byteorder', 'bigtiff', and 'imagej', are passed
        to TiffWriter(). Other parameters are passed to TiffWriter.save().

    Returns
    -------
    If the image data are written contiguously, return offset and bytecount
    of image data in the file.

    Examples
    --------
    >>> # save a RGB image
    >>> data = numpy.random.randint(0, 255, (256, 256, 3), 'uint8')
    >>> imsave('temp.tif', data, photometric='rgb')

    >>> # save a random array and metadata, using compression
    >>> data = numpy.random.rand(2, 5, 3, 301, 219)
    >>> imsave('temp.tif', data, compress=6, metadata={'axes': 'TZCYX'})

    ÚappendÚbigtiffÚ	byteorderÚimagejNr   FÚtruncateT)r'   r   ÚnumpyÚdtypeÚitemsizer8   ÚnbytesÚ	ExceptionÚgetr
   Úsave)
ÚfileÚdataÚshaper<   Úbigsizer0   ÚtifargsÚsizer8   r3   s
             r    r   r   Ï  s  € ô\ ˜6 8¨Y¸ÀXÓN€GØ€|Ü�u‹~¤§¡¨EÓ 2× ;Ñ ;Ñ;ˆÜ—K‘K Ó&×0Ñ0‰	ð	Ø—;‘;ˆDØŸ
™
×,Ñ,ˆIð
 	ˆwŠØ˜WÑ$Ø—‘˜X uÔ-°·±¸ZÈÔ1Oà!ˆ�	ÑØ˜'Ñ!Ø(ˆ�Ñä	�DÑ	$˜GÑ	$ð 6¨Øˆs�x‰x˜˜e UÑ5¨fÑ5÷6ñ 6øô ò 	ØˆDØŠIð	ú÷6ð 6ús   Á"C& ÃC9Ã&C6Ã5C6Ã9Dc                 ól  — |�E|�C|j                  d||dt        j                  ¬«       t        | fi |¤Ž}|€t	        d«      ‚|d   }nÈt        | fi |¤Ž5 }	|�N|	j                  |   }|j                  st	        d«      ‚|j                  \  }}
|j                  }|j                  }nJ|	j                  |   }|j                  €t	        d«      ‚|j                  }|j                  }|j                  }|	j                  |j                  z   }ddd«       t        j                   | |||d«      S # 1 sw Y   Œ#xY w)aT  Return memory-mapped numpy array stored in TIFF file.

    Memory-mapping requires data stored in native byte order, without tiling,
    compression, predictors, etc.
    If 'shape' and 'dtype' are provided, existing files will be overwritten or
    appended to depending on the 'append' parameter.
    Otherwise the image data of a specified page or series in an existing
    file will be memory-mapped. By default, the image data of the first page
    series is memory-mapped.
    Call flush() to write any changes in the array to the file.
    Raise ValueError if the image data in the file is not memory-mappable.

    Parameters
    ----------
    filename : str
        Name of the TIFF file which stores the array.
    shape : tuple
        Shape of the empty array.
    dtype : numpy.dtype
        Data-type of the empty array.
    page : int
        Index of the page which image data to memory-map.
    series : int
        Index of the page series which image data to memory-map.
    mode : {'r+', 'r', 'c'}, optional
        The file open mode. Default is to open existing file for reading and
        writing ('r+').
    kwargs : dict
        Additional parameters passed to imsave() or TiffFile().

    Examples
    --------
    >>> # create an empty TIFF file and write to memory-mapped image
    >>> im = memmap('temp.tif', shape=(256, 256), dtype='float32')
    >>> im[255, 255] = 1.0
    >>> im.flush()
    >>> im.shape, im.dtype
    ((256, 256), dtype('float32'))
    >>> del im

    >>> # memory-map image data in a TIFF file
    >>> im = memmap('temp.tif', page=0)
    >>> im[255, 255]
    1.0

    NT)rC   rD   r<   ÚreturnoffsetÚalignz"image data are not memory-mappabler   ÚC)ÚupdateÚTIFFÚALLOCATIONGRANULARITYr   r,   r	   ÚpagesÚis_memmappableÚis_contiguousrD   r<   ÚseriesÚoffsetr8   Úcharr;   r   )ÚfilenamerD   r<   ÚpagerR   Úmoder0   ÚresultrS   r3   Ú_s              r    r   r     s<  € ð^ Ð˜UÐ.à�‰ØØØØÜ×,Ñ,ð 	ô 	
ô ˜Ñ+ FÑ+ˆØˆ>äÐAÓBÐBØ˜‘‰ô �hÑ) &Ñ)ð 	/¨SØÐØ—y‘y ‘�Ø×*Ò*Ü$Ð%IÓJÐJØ ×.Ñ.‘	�˜ØŸ
™
�ØŸ
™
‘àŸ™ FÑ+�Ø—=‘=Ð(Ü$Ð%IÓJÐJØŸ™�ØŸ™�ØŸ™�Ø—M‘M E§J¡JÑ.ˆE÷	/ô  �<‰<˜ %¨¨v°u¸cÓBÐB÷!	/ð 	/ús   ÁB4D*Ä*D3c                   ó,   ‡ — e Zd ZdZdZd„ Zˆ fd„Zˆ xZS )r   z2Attribute whose value is computed on first access.©Úfuncc                 ó   — || _         y r   r[   )Úselfr\   s     r    Ú__init__zlazyattr.__init__m  s	   € Øˆ�	ó    c                 ó  •— |€| S 	 | j                  |«      }|t        u r*t	        t        ||«      | j                   j                  «      S t        || j                   j                  |«       |S # t        $ r}t        |«      ‚d }~ww xY wr   )r\   ÚAttributeErrorÚRuntimeErrorÚNotImplementedÚgetattrÚsuperÚ__name__Úsetattr)r^   ÚinstanceÚownerÚvalueÚeÚ	__class__s        €r    Ú__get__zlazyattr.__get__s  s€   ø€ àÐØˆKð	"Ø—I‘I˜hÓ'ˆEð ”NÑ"Üœ5 ¨Ó1°4·9±9×3EÑ3EÓFÐFÜ�˜$Ÿ)™)×,Ñ,¨eÔ4Øˆøô ò 	"Ü˜q“/Ð!ûð	"ús   ‡A- Á-	BÁ6BÂB)rg   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r_   rn   Ú__classcell__)rm   s   @r    r   r   g  s   ø„ Ù<ð €Iò÷ð r`   r   c                   ón   — e Zd ZdZdd„Zddddddddddddddddddi dd	fd
„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zy)r
   aª  Write numpy arrays to TIFF file.

    TiffWriter instances must be closed using the 'close' method, which is
    automatically called when using the 'with' context manager.

    TiffWriter's main purpose is saving nD numpy array's as TIFF,
    not to create any possible TIFF format. Specifically, JPEG compression,
    SubIFDs, ExifIFD, or GPSIFD tags are not supported.

    Examples
    --------
    >>> # successively append images to BigTIFF file
    >>> data = numpy.random.rand(2, 5, 3, 301, 219)
    >>> with TiffWriter('temp.tif', bigtiff=True) as tif:
    ...     for i in range(data.shape[0]):
    ...         tif.save(data[i], compress=6, photometric='minisblack')

    FNc                 óª  ‡	— |r¦	 t        |dd¬«      5 }|j                  «       }	 t        |«      5 Š	|dk7  rt        ˆ	fd„dD «       «      rt	        d«      ‚‰	j
                  }‰	j                  }‰	j                  j                  | _	        ddd«       |j                  |«       	 ddd«       |dv rt        j
                  dk(  rdnd}n|dvrt	        d|z  «      ‚|r|rt!        j"                  d«       || _        t'        |«      | _        d
| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _         d| _!        |r+d| _"        d| _#        d| _$        d| _%        d| _&        d| _'        n*d
| _"        d| _#        d| _$        d| _%        d| _&        d| _'        |r0t        |dd¬«      | _(        | jP                  j                  dd«       yt        |dd¬«      | _(        | jP                  jS                  dd dœ|   «       |r5| jP                  jS                  tU        jV                  |d!z   d"dd«      «       n2| jP                  jS                  tU        jV                  |dz   d#«      «       | jP                  j                  «       | _	        | jP                  jS                  tU        jV                  || jL                  z   d«      «       y# 1 sw Y   �Œ_xY w# t        $ r}t	        d	t        |«      z  «      ‚d}~ww xY w# |j                  |«       w xY w# 1 sw Y   �Œ�xY w# t        t        f$ r d
}Y �Œ§w xY w)$aÅ  Open a TIFF file for writing.

        An empty TIFF file is created if the file does not exist, else the
        file is overwritten with an empty TIFF file unless 'append'
        is true. Use bigtiff=True when creating files larger than 4 GB.

        Parameters
        ----------
        file : str, binary stream, or FileHandle
            File name or writable binary stream, such as an open file
            or BytesIO.
        bigtiff : bool
            If True, the BigTIFF format is used.
        byteorder : {'<', '>', '=', '|'}
            The endianness of the data in the file.
            By default, this is the system's native byte order.
        append : bool
            If True and 'file' is an existing standard TIFF file, image data
            and tags are appended to the file.
            Appending data may corrupt specifically formatted TIFF files
            such as LSM, STK, ImageJ, NIH, or FluoView.
        imagej : bool
            If True, write an ImageJ hyperstack compatible file.
            This format can handle data types uint8, uint16, or float32 and
            data shapes up to 6 dimensions in TZCYXS order.
            RGB images (S=3 or S=4) must be uint8.
            ImageJ's default byte order is big-endian but this implementation
            uses the system's native byte order by default.
            ImageJ does not support BigTIFF format or LZMA compression.
            The ImageJ file format is undocumented.

        Úrbr   )rW   rG   Úforcec              3   ó<   •K  — | ]  }t        ‰d |z   «      –— Œ y­w©Úis_N)re   )r   Úar3   s     €r    r!   z&TiffWriter.__init__.<locals>.<genexpr>½  s$   øè ø€ ò 
9à$%ô !(¨¨U°Q©Y× 7ñ
9ùs   ƒ)ÚlsmÚstkr9   ÚnihÚfluoviewÚmicromanagerzfile contains metadataNzcannot append to file: %sF)Nú=ú|Úlittleú<ú>©r„   r…   zinvalid byteorder %sz#writing incompatible BigTIFF ImageJTé   é   ÚQÚ8sé   é   ÚHÚIÚ4szr+bé   Úwbó   IIó   MMÚHHHé+   é*   ),r   Útellr	   r*   r,   r8   Ú
is_bigtiffrO   Únext_page_offsetÚ
_ifdoffsetr?   Ústrr%   ÚIOErrorÚFileNotFoundErrorÚsysÚwarningsÚwarnÚ
_byteorderÚboolÚ_imagejÚ	_truncateÚ	_metadataÚ	_colormapÚ_descriptionoffsetÚ_descriptionlenÚ_descriptionlenoffsetÚ_tagsÚ_shapeÚ
_datashapeÚ
_datadtypeÚ_dataoffsetÚ_databytecountsÚ_tagoffsetsÚ_bigtiffÚ_offsetsizeÚ_tagsizeÚ_tagnoformatÚ_offsetformatÚ_valueformatÚ_fhÚwriteÚstructÚpack)
r^   rB   r7   r8   r6   r9   ÚfhÚposrl   r3   s
            @r    r_   zTiffWriter.__init__•  s÷  ø€ ñB ðÜ ¨4°aÔ8ð %¸BØŸ'™'›)�Cð%Ü% b›\ð I¨SØ%¨Ò0´Só 
9ð*"ô
9ô 
6ô '1Ð1IÓ&JÐ JØ(+¯©˜IØ&)§n¡n˜GØ.1¯i©i×.HÑ.H˜DœO÷Ið& Ÿ™ �÷-%ð4 Ð(Ñ(Ü"Ÿ}™}°Ò8™¸c‰IØ˜jÑ(ÜÐ3°iÑ?Ó@Ð@Ù‘gÜ�M‰MÐ?Ô@à#ˆŒÜ˜F“|ˆŒØˆŒØˆŒØˆŒà"#ˆÔØ ˆÔØ%&ˆÔ"ØˆŒ
ØˆŒØˆŒØˆŒØˆÔØ#ˆÔØˆÔáØ ˆDŒMØ ˆDÔØˆDŒMØ #ˆDÔØ!$ˆDÔØ $ˆDÕà!ˆDŒMØ ˆDÔØˆDŒMØ #ˆDÔØ!$ˆDÔØ $ˆDÔáÜ! $¨U¸Ô;ˆDŒHØ�H‰H�M‰M˜!˜QÕä! $¨T¸Ô:ˆDŒHØ�H‰H�N‰N ¨UÑ3°IÑ>Ô?ÙØ—‘—‘œvŸ{™{¨9°uÑ+<¸bÀ!ÀQÓGÕHà—‘—‘œvŸ{™{¨9°s©?¸BÓ?Ô@à"Ÿh™hŸm™m›oˆDŒOØ�H‰H�N‰Nœ6Ÿ;™; y°4×3EÑ3EÑ'EÀqÓIÕJ÷UIñ Iûô  %ò OÜ(Ð)DÄsÈ1ÃvÑ)MÓNÐNûðOûð Ÿ™ �ú÷-%ñ %ûô. Ô.Ð/ò Ø“ðúso   …L= “L0¥K2°AK%ÂK2ÂL0Â"L= Ë%K/	Ë*K2Ë2	LË;LÌLÌLÌL-Ì-L0Ì0L:Ì5L= Ì=MÍMTé   r   ztifffile.pyr   c                 óÌ)  ‡T‡U‡V‡W‡X‡Y‡Z‡[— | j                   }| j                  ŠT|€@|rt        d«      ‚|}t        j                  |«      j                  ‰T«      }|j                  }nvt        j                  |‰T|j                  j                  z   d«      }|j                  dk(  rt        d«      ‚|j                  }|j                  }|j                  j                  }|xr |j                  }|dk(  }|r=|d   dkD  rdnd	}t        |d| «      }||   d
z  r|||   d
z  dz   z  }n$|||   d
z  z  }nt        |«      |j                  z  }t        |
«      | _        | j                  �r|rQ| j                  dd |k7  s?| j                   |k7  s0|r| j"                  s"|s t        j$                  || j&                  «      sZ| j)                  «        | j+                  «        d| _        d| _        d| _        d| _        d| _        | j0                  rdt        d«      ‚| j                  d   dz   f|z   | _        |s<|j3                  «       }|€|j5                  |«       n|j7                  |«       |r||fS y|}| j8                  }| j:                  Š[| j<                  ŠW| j>                  ŠX| j@                  } tB        jD                  jF                  }!tB        jD                  jH                  }"tB        jD                  jJ                  }#tB        jD                  jL                  }$tB        jN                  jP                  }%tB        jN                  jR                  }&|�tU        tB        jD                  |«      }|rtU        tB        jN                  |«      }|sd}d}'d}n€tW        |tX        tZ        f«      r|\  }}(n:tW        |t\        «      r(dt]        |«      }(}d|(cxk  rdk  sn t        d|z  «      ‚d}(|j_                  «       }tU        tB        j`                  |«      }'| j0                  rŽ|dv rt        d«      ‚|rtc        jd                  d«       d}d})|dvrt        d|z  «      ‚|r||"k(  nd}*|dvrd}*tg        ||*«      }+|+d   dv r|"}|dvrt        d|z  «      ‚|€|!}d}||&k(  rt        d«      ‚|*r|%nd}|rg(€tB        jh                  |'   \  ŠV}(n!tB        jh                  |'   \  ŠV},t]        |(«      }(|r$|jj                  dvrt        d|z  «      ‚|(fˆVfd„	}n|(fˆVfd„	}|�\|dvrt        d«      ‚t        j                  |‰Tdz   ¬ «      }|j                  d!d"|j                  d
z  z  fk7  rt        d#«      ‚|| _        |r^tY        d$„ |dd! D «       «      }tm        |«      d!k(  })tm        |«      d"k  s"|d   d%z  s|d	   d%z  sto        d&„ |D «       «      rt        d'«      ‚d(}d})tq        |||"k(  rd!nd"«      }|}tm        |«      }-d}.d}/|)r|-d!k  rd})|�|$}d}|€•|!}|rtB        jD                  jr                  }nv||%k(  r|-d"kD  rl|d   dv re|"}nb||&k(  r |)r|-d!kD  r
|d)   dv r|"}nL|-d"kD  rG|d*   dv r@|"}n=|-d"kD  r
|d   dv r|"}n.| j0                  r|!}n|)r|-d!kD  r
|d)   dv r|"}n|-d"kD  r	|d*   dv r|"}|rtm        |«      |)rd!nd"k  rd}|!}||"k(  r�tm        |«      d!k  rt        d+«      ‚tm        |«      d,k  rd})|€,|d   dv r|%}n"||)rd)nd*   dv r|&}n|d   ||)rd)nd*   kD  r|&}n|%}||%k(  rd-||)rd)nd*d z   }|d   }.nd.||)rd)nd*d z   d/z   }|d   }.|.d!kD  rá|.d!z
  }/nÛ||#k(  r>tm        |«      d"k7  rt        d0«      ‚d})d}d-|d	d z   d/z   }d1d2„ |D «       vr£t        d3«      ‚|rCtm        |«      |)rd!nd"kD  r1||%k(  rd-||)rd)nd*d z   }|d   }.nd.||)rd)nd*d z   d/z   }|d   }.|.dz
  }/nSd}tm        |«      d"kD  r$|d   dk(  r|dd }tm        |«      d"kD  r	|d   dk(  rŒtm        |«      d!k  rd})d-||)rd*nd	d z   d/z   }tm        |«      d4v sJ ‚tm        |«      d5k(  r|dd" d/z   |d"d z   }|d   dk(  r#t        |«      t        |dd «      z  }0|0f|dd z   }|}|�|ju                  |«      }|r|)sd|d	   |d   f}||$k(  r"|.dk7  s|/s|d   dk7  s|d   dk7  rt        d6«      ‚||"k(  r|.d"k(  rt        d7«      ‚|r­|rt        d8«      ‚|rt        d9«      ‚|d:vrt        d;tw        |«      z  «      ‚t[        |«      }|d	   d
z  r|d	   d
z  dz   |d	<   n|d	   d
z  |d	<   tY        |«      }|t        |«      k(  sJ ‚|�.t        jx                  |d	¬<«      }|d	   |j                  d	   k(  sJ ‚tz        j|                  d   d=k(  rt~        nd>„ ŠUg ŠZ|rd?nd@}1tB        j€                  |1dAz      }2tB        j€                  |1dBz      }3|3| _A        ˆTfdC„ŠYduˆUˆWˆXˆYˆZˆ[fdD„	}4dvdE„}5|r |4dFdGd|dH¬I«       |si n|j…                  «       | _C        | j0                  r*t‰        ||d   dv | j&                  dufi | j†                  ¤Ž}nH|s|i k(  r?| j                  r| j†                  j‹                  dH¬J«       t�        |fi | j†                  ¤Ž}nd}|r.t�        |dK«      }|dLz  }tm        |«      | _H         |4dFdGd|dH¬I«       |r |4dMdGd|dH¬I«       |€| j“                  «       } |4dNdGd |j”                  dO«      dH¬I«        |4dPdd|'«       |r |4dQddd"«        |4dRdSd|d	   «        |4dTdSd|d*   «       |r@ |4dUdSd|d   «        |4dVdSd|d	   «       |d   dkD  r |4dWdSd|d)   «        |4dXdSd|d   «        |4dYdSdd«       |s#dd"d!dZd[œ|jj                     }6 |4d\d|.|6f|.z  «        |4d]dd|j–                  «       |� |4d^d|j                  |«        |4d_dd|.«       |rnQ|r7|.dkD  r2 |4d`dd|j–                  «        |4dad|.|j                  d
z  f|.z  «       n |4dadd|j                  d
z  «       |/r$||"k(  r|/dk(  r |4dbddd«       n |4dbd|/dc|/z  «       |�w |4ddded |5|d   «      «        |4dfded |5|d   «      «       tm        |«      d"kD  r$|d"   }7|7€dntU        tB        j˜                  |7«      }7n| j0                  rd}7nd"}7 |4dgdd|7«       n-| j0                  s! |4dddeddh«        |4dfdeddh«        |4dgddd«       |rt›        |‰T«      D ]  }8 |4|8Ž  Œ	 | }|r¼|d"   |d   z   dz
  |d   z  |d!   |d   z   dz
  |d   z  |d,   |d"   z   dz
  |d"   z  f}9t        |9«      |d   z  }:t        |«      |d   z  |j                  z  g|:z  }; |4|2‰W|:|;«        |4|3‰W|:dg|:z  «       |xr t        |9«      dk(  }|�s	t        jœ                  ||d   fz   |¬ «      }<nê|rl|rt        |d"d «      g|d   z  };n"t        |d"d «      |j                  z  g|d   z  }; |4|2‰W|d   |;«        |4|3‰W|d   dg|d   z  «        |4didSd|d*   «       n|t        |d	d «      |j                  z  }=|€dj|=z  }|dk  rd}n||d*   kD  r|d*   } |4didSd|«       |d*   |z   dz
  |z  }>|>|d   z  }>dg|>z  }; |4|2‰W|>dg|>z  «        |4|3‰W|>dg|>z  «       |€|st        dk«      ‚|D ]  }8 |4|8Ž  Œ	 tŸ        ‰Zdl„ ¬m«      ŠZ| j                   s-| j0                  s!|j3                  «       |z   dnkD  rt        do«      ‚t£        |rdn|d   «      D �]k  }?|j3                  «       }@|@d"z  r|j¥                  dp«       @dz  }@|j§                  | j¨                  «       |j¥                   ‰Y‰W@«      «       |j§                  |@«       |j¥                   ‰Y|tm        ‰Z«      «      «       |j3                  «       }A|j¥                  dqj«                  dr„ ‰ZD «       «      «       |j3                  «       | _T        |j¥                   ‰Y‰Wd«      «       t­        ‰Z«      D ]Ù  \  }B}C|Cd"   sŒ|j3                  «       }@|@d"z  r|j¥                  dp«       @dz  }@|j§                  AB| z  z   ‰Xz   d,z   «       |j¥                   ‰Y‰W@«      «       |j§                  |@«       Cd   |3k(  r@}Dn>Cd   |2k(  r@}En3Cd   dsk(  r+Cd"   j¯                  dt«      r@| _        AB| z  z   d,z   | _        |j¥                  Cd"   «       ŒÛ |j3                  «       }F|	|F|	z  z
  }G|j§                  |Gd«       |F|Gz  }F|r(|€|j5                  |«       �nñ|j7                  |«       �nÞ|�r]|€|j5                  :|;d   z  «       �nÀd}H||?   D �]6  }It£        9d   «      D �]!  }Jt£        |9d   «      D �]  }Kt£        |9d"   «      D ]ø  }Lt±        |d   |d"   J|d   z  z
  «      }Mt±        |d   |d!   K|d   z  z
  «      }Nt±        |d"   |d,   |L|d"   z  z
  «      }Od<|Md…|Nd…|Od…f<   I|J|d   z  |J|d   z  |Mz   …|K|d   z  |K|d   z  |Nz   …|L|d"   z  |L|d"   z  |Oz   …f   |<d|M…d|N…d|O…f<   |r- ||<«      }8|j¥                  |8«       tm        |8«      |;H<   |Hdz  }HŒØ|j7                  |<«       |j³                  «        Œú �Œ �Œ$ �Œ9 n~|r||j                  d"   dk(  sJ ‚|d*   |z   dz
  |z  }>d}H||?   D ]P  }It£        |>«      D ]@  }PId|P|z  |Pdz   |z  …f   }Q ||Q«      }Q|j¥                  |Q«       tm        |Q«      |;H<   |Hdz  }HŒB ŒR |j3                  «       }@t­        ‰Z«      D ]ú  \  }B}C|Cd   |3k(  rsCd"   r8|j§                  D«       F}R|;D ]  }S|j¥                   ‰Y‰WR«      «       |R|Sz  }RŒ! ŒK|j§                  AB| z  z   ‰Xz   d,z   «       |j¥                   ‰Y‰WF«      «       Œ�Cd   |2k(  sŒŠ|rnCd"   r1|j§                  E«       |;D ]  }S|j¥                   ‰Y‰W|S«      «       Œ n8|j§                  AB| z  z   ‰Xz   d,z   «       |j¥                   ‰Y‰W|;d   «      «        n |j§                  @«       |j³                  «        |?dk(  s�ŒV‰ZD �Ccg c]
  }C|Cd   rŒ	C‘Œ c}CŠZ�Œn || _Z        d/|z   | _        || _        F| _[        |;| _\        |r‰Z| _        |rFt»        |;«      fS yyc c}Cw )waý  Write numpy array and tags to TIFF file.

        The data shape's last dimensions are assumed to be image depth,
        height (length), width, and samples.
        If a colormap is provided, the data's dtype must be uint8 or uint16
        and the data values are indices into the last dimension of the
        colormap.
        If 'shape' and 'dtype' are specified, an empty array is saved.
        This option cannot be used with compression or multiple tiles.
        Image data are written uncompressed in one strip per plane by default.
        Dimensions larger than 2 to 4 (depending on photometric mode, planar
        configuration, and SGI mode) are flattened and saved as separate pages.
        The SampleFormat and BitsPerSample tags are derived from the data type.

        Parameters
        ----------
        data : numpy.ndarray or None
            Input image array.
        shape : tuple or None
            Shape of the empty array to save. Used only if 'data' is None.
        dtype : numpy.dtype or None
            Data-type of the empty array to save. Used only if 'data' is None.
        returnoffset : bool
            If True and the image data in the file is memory-mappable, return
            the offset and number of bytes of the image data in the file.
        photometric : {'MINISBLACK', 'MINISWHITE', 'RGB', 'PALETTE', 'CFA'}
            The color space of the image data.
            By default, this setting is inferred from the data shape and the
            value of colormap.
            For CFA images, DNG tags must be specified in 'extratags'.
        planarconfig : {'CONTIG', 'SEPARATE'}
            Specifies if samples are stored contiguous or in separate planes.
            By default, this setting is inferred from the data shape.
            If this parameter is set, extra samples are used to store grayscale
            images.
            'CONTIG': last dimension contains samples.
            'SEPARATE': third last dimension contains samples.
        tile : tuple of int
            The shape (depth, length, width) of image tiles to write.
            If None (default), image data are written in strips.
            The tile length and width must be a multiple of 16.
            If the tile depth is provided, the SGI ImageDepth and TileDepth
            tags are used to save volume data.
            Unless a single tile is used, tiles cannot be used to write
            contiguous files.
            Few software can read the SGI format, e.g. MeVisLab.
        contiguous : bool
            If True (default) and the data and parameters are compatible with
            previous ones, if any, the image data are stored contiguously after
            the previous one. Parameters 'photometric' and 'planarconfig'
            are ignored. Parameters 'description', datetime', and 'extratags'
            are written to the first page of a contiguous series only.
        align : int
            Byte boundary on which to align the image data in the file.
            Default 16. Use mmap.ALLOCATIONGRANULARITY for memory-mapped data.
            Following contiguous writes are not aligned.
        truncate : bool
            If True, only write the first page including shape metadata if
            possible (uncompressed, contiguous, not tiled).
            Other TIFF readers will only be able to read part of the data.
        compress : int or 'LZMA', 'ZSTD'
            Values from 0 to 9 controlling the level of zlib compression.
            If 0 (default), data are written uncompressed.
            Compression cannot be used to write contiguous files.
            If 'LZMA' or 'ZSTD', LZMA or ZSTD compression is used, which is
            not available on all platforms.
        rowsperstrip : int
            The number of rows per strip used for compression.
            Uncompressed data are written in one strip per plane.
        predictor : bool
            If True, apply horizontal differencing to integer type images
            before compression.
        colormap : numpy.ndarray
            RGB color values for the corresponding data value.
            Must be of shape (3, 2**(data.itemsize*8)) and dtype uint16.
        description : str
            The subject of the image. Must be 7-bit ASCII. Cannot be used with
            the ImageJ format. Saved with the first page only.
        datetime : datetime
            Date and time of image creation in '%Y:%m:%d %H:%M:%S' format.
            If None (default), the current date and time is used.
            Saved with the first page only.
        resolution : (float, float[, str]) or ((int, int), (int, int)[, str])
            X and Y resolutions in pixels per resolution unit as float or
            rational numbers. A third, optional parameter specifies the
            resolution unit, which must be None (default for ImageJ),
            'INCH' (default), or 'CENTIMETER'.
        software : str
            Name of the software used to create the file. Must be 7-bit ASCII.
            Saved with the first page only.
        metadata : dict
            Additional meta data to be saved along with shape information
            in JSON or ImageJ formats in an ImageDescription tag.
            If None, do not write a second ImageDescription tag.
            Strings must be 7-bit ASCII. Saved with the first page only.
        ijmetadata : dict
            Additional meta data to be saved in application specific
            IJMetadata and IJMetadataByteCounts tags. Refer to the
            imagej_metadata_tags function for valid keys and values.
            Saved with the first page only.
        extratags : sequence of tuples
            Additional tags as [(code, dtype, count, value, writeonce)].

            code : int
                The TIFF tag Id.
            dtype : str
                Data type of items in 'value' in Python struct format.
                One of B, s, H, I, 2I, b, h, i, 2i, f, d, Q, or q.
            count : int
                Number of data values. Not used for string or byte string
                values.
            value : sequence
                'Count' values compatible with 'dtype'.
                Byte strings must contain count values of dtype packed as
                binary data.
            writeonce : bool
                If True, the tag is written to the first page only.

        Nz!cannot save compressed empty filerK   r   zcannot save empty arrayú?éÿÿÿÿr&   éþÿÿÿr‡   Fz+ImageJ does not support non-contiguous dataÚADOBE_DEFLATEé	   zinvalid compression level %s)ÚLZMAÚZSTDz-ImageJ cannot handle LZMA or ZSTD compressionz&not writing description to ImageJ fileÚBHhfz$ImageJ does not support data type %sÚB©é   r‹   z,ImageJ does not support data type %s for RGBz%ImageJ does not support planar imagesÚiuz!prediction not implemented for %sc           	      ó†   •— t        j                  | d¬«      }t        j                  |d| ddd d …f   d¬«      }  ‰| |«      S )NrÁ   ©Úaxisr   .)r;   ÚdiffÚinsert)rC   ÚlevelrÎ   Ú
compressors      €r    Úcompressz!TiffWriter.save.<locals>.compress#  s>   ø€ ä Ÿ:™: d°Ô4�DÜ Ÿ<™<¨¨a°°c¸1ºa°i±ÀrÔJ�DÙ% d¨EÓ2Ð2r`   c                 ó   •—  ‰| |«      S r   r   )rC   rÐ   rÑ   s     €r    rÒ   z!TiffWriter.save.<locals>.compress+  s   ø€ Ù% d¨EÓ2Ð2r`   ÚBHz#invalid data dtype for palette moder�   ©r<   rÉ   r�   zinvalid color map shapec              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   ©Úint©r   r   s     r    r!   z"TiffWriter.save.<locals>.<genexpr>9  s   è ø€ Ò2 Aœ˜QŸÑ2ùó   ‚r½   c              3   ó&   K  — | ]	  }|d k  –— Œ y­w©r&   Nr   rÙ   s     r    r!   z"TiffWriter.save.<locals>.<genexpr>?  s   è ø€ Ò+ �q˜1•uÑ+ùó   ‚zinvalid tile shaper   éüÿÿÿéýÿÿÿznot a RGB(A) imager‹   )rÀ   r&   ©rÀ   ©r&   zinvalid CFA imageéÆ  c              3   ó&   K  — | ]	  }|d    –— Œ y­w©r   Nr   )r   Úets     r    r!   z"TiffWriter.save.<locals>.<genexpr>†  s   è ø€ Ò7 r˜R �UÑ7ùrÝ   z#must specify DNG tags for CFA image)é   é   ræ   z#invalid data shape for palette modez#not a RGB image (samplesperpixel=2)z$cannot save compressed bilevel imagezcannot save tiled bilevel image©r   r&   zcannot save bilevel image as %srÌ   Ú2c                 ó>   — t        | t        «      rt        | d«      S | S )NÚascii)r(   r›   Úbytes©Úxs    r    ú<lambda>z!TiffWriter.save.<locals>.<lambda>Ã  s   € ´¸A¼sÔ1CœE ! WÓ-€ È€ r`   ÚTileÚStripÚ
ByteCountsÚOffsetsc                 ó6   •— t        j                  ‰| z   g|¢­Ž S r   ©r¹   rº   ©ÚfmtÚvalr8   s     €r    rº   zTiffWriter.save.<locals>.packÌ  ó   ø€ Ü—;‘;˜y¨3™Ð5°Ò5Ð5r`   c           
      óx  •— t        t        j                  j                  | | «      «      } 	 t        j                  |   }|}|dk(  r: ‰
|«      dz   }t        |«      x}}|j                  d«      }|dk  r|}n|dz  }|f}nLt        |t        «      r<t        j                  |«      }t        |«      |z  rt        d«      ‚t        |«      |z  }t        |«      dkD  r|t        |d d «      z  }|d   } ‰d	| |«       ‰‰|«      g}d }	t        j                  |«      |z  ‰k  r¥t        |t        «      r|j                   ‰‰|«      «       �n2|dk(  rJt        |t        t        t         j"                  f«      r|d   }|j                   ‰‰ ‰||«      «      «       nã|j                   ‰‰ ‰t%        |«      |z   g|¢­Ž «      «       n·|j                   ‰‰d«      «       t        |t        «      r|}	nŒt        |t         j"                  «      r=|j&                  |k(  sJ ‚|j(                  j*                  |k(  sJ ‚|j-                  «       }	n5t        |t        t        f«      r ‰t%        |«      |z   g|¢­Ž }	n	 ‰||«      }	‰j                  | d
j/                  |«      |	|f«       y # t
        $ r t        d|z  «      ‚w xY w)Nzunknown dtype %sÚsó    s     r   r&   zinvalid packed binary datarÀ   ÚHHr`   )rØ   rM   Ú	TAG_NAMESr@   ÚDATA_DTYPESÚKeyErrorr,   r.   Úfindr(   rì   r¹   Úcalcsizer6   ÚtupleÚlistr;   Úndarrayr›   rG   r<   rT   ÚtostringÚjoin)Úcoder<   Úcountrk   Ú	writeonceÚtifftypeÚrawcountÚdtsizeÚifdentryÚifdvalueÚbytestrÚoffsetformatÚ
offsetsizerº   ÚtagsÚvalueformats             €€€€€€r    ÚaddtagzTiffWriter.save.<locals>.addtagÏ  s‚  ø€ ô ”t—~‘~×)Ñ)¨$°Ó5Ó6ˆDð=Ü×+Ñ+¨EÑ2�ð ˆHà˜Š|á ›¨Ñ.�Ü#& u£:Ð-�˜Ø Ÿ:™: gÓ.�Ø˜a’<Ø$‘Hà ‘M�HØ˜‘Ü˜E¤5Ô)äŸ™¨Ó/�Ü�u“: Ò&Ü$Ð%AÓBÐBÜ˜E›
 fÑ,�Ü�5‹z˜AŠ~Øœ˜U 3 B˜Z›Ñ(�Ø˜b™	�Ù˜T 4¨Ó2±D¸ÀxÓ4PÐQˆHØˆHÜ�‰˜uÓ%¨Ñ-°Ò;ä˜e¤UÔ+Ø—O‘O¡D¨°eÓ$<Ö=Ø˜a’ZÜ! %¬%´´u·}±}Ð)EÔFØ % a¡˜Ø—O‘O¡D¨±d¸5À%Ó6HÓ$IÕJà—O‘O¡D¨±d¼3¸u»:ÈÑ;MÐ6VÐPUÒ6VÓ$WÕXð —‘¡ \°1Ó 5Ô6Ü˜e¤UÔ+Ø$‘HÜ ¤u§}¡}Ô5Ø Ÿ:™:¨Ò.Ð.Ð.Ø Ÿ;™;×+Ñ+¨uÒ4Ð4Ð4Ø$Ÿ~™~Ó/‘HÜ ¬¬t }Ô5Ù#¤C¨£J°Ñ$6Ð?¸Ò?‘Há# E¨5Ó1�HØ�K‰K˜˜sŸx™x¨Ó1°8¸YÐGÕHøôa ò =Ü Ð!3°eÑ!;Ó<Ð<ð=ús   ¬J! Ê!J9c                 óÀ   — ddl m} 	 |j                  | «      }|j	                  |«      }|j
                  |j                  fS # t        $ r  || d   | d   «      }Y ŒCw xY w)z> "Return nominator and denominator from float or two integers.r   ©ÚFractionr&   )Ú	fractionsr  Ú
from_floatÚ	TypeErrorÚlimit_denominatorÚ	numeratorÚdenominator)ÚargÚmax_denominatorr  Úfs       r    Úrationalz!TiffWriter.save.<locals>.rational  sd   € å*ð-Ø×'Ñ'¨Ó,�ð ×#Ñ# OÓ4ˆAØ—;‘; §¡Ð-Ð-øô ò -Ù˜S ™V S¨¡VÓ,’ð-ús   ˆA ÁAÁAÚImageDescriptionrû   T)r
  )Ú	truncatedrë   s@                                                                   ÚSoftwareÚDateTimez%Y:%m:%d %H:%M:%SÚCompressionÚ	PredictorÚ
ImageWidthrŽ   ÚImageLengthÚ	TileWidthÚ
TileLengthÚ
ImageDepthÚ	TileDepthÚNewSubfileTyperç   )Úur   r!  ÚcÚSampleFormatÚPhotometricInterpretationÚColorMapÚSamplesPerPixelÚPlanarConfigurationÚBitsPerSampleÚExtraSamples©r   ÚXResolutionÚ2IÚYResolutionÚResolutionUnit©r&   r&   ÚRowsPerStripi   z&cannot write non-contiguous empty filec                 ó   — | d   S ©Nr   r   rí   s    r    rï   z!TiffWriter.save.<locals>.<lambda>¥  s
   € ¨!¨A©$€ r`   ©Úkeyéÿÿÿz%data too large for standard TIFF filerü   r`   c              3   ó&   K  — | ]	  }|d    –— Œ y­wrÜ   r   ©r   Úts     r    r!   z"TiffWriter.save.<locals>.<genexpr>º  s   è ø€ Ò1 q˜a �dÑ1ùrÝ   é  s       ©F)i@B )^r·   r¡   r,   r;   r<   ÚnewbyteorderrT   r/   rG   rD   Úisnativer   r=   r¢   r¤   r¬   r­   rª   Úarray_equalr¦   Ú_write_remaining_pagesÚ_write_image_descriptionr§   r©   r£   r—   Úwrite_emptyÚwrite_arrayr´   r¶   rµ   r²   r³   rM   ÚPHOTOMETRICÚ
MINISBLACKÚRGBÚCFAÚPALETTEÚPLANARCONFIGÚCONTIGÚSEPARATEÚenumargr(   r  r  rØ   ÚupperÚCOMPRESSIONrŸ   r    Úimagej_shapeÚ
COMPESSORSÚkindr.   r*   Ú
reshape_ndÚ
MINISWHITEÚreshaper›   Úpackbitsrž   Úversionrì   rþ   r°   Úcopyr¥   Úimagej_descriptionrL   Újson_descriptionÚ	str2bytesr¨   Ú_nowÚstrftimerk   ÚRESUNITÚimagej_metadata_tagsÚemptyÚsortedr±   Úranger¸   r%   rš   r  Ú	enumerateÚendswithÚminÚflushr«   r®   r¯   Úsum)\r^   rC   rD   r<   rI   ÚphotometricÚplanarconfigÚtileÚ
contiguousrJ   r:   rÒ   ÚrowsperstripÚ	predictorÚcolormapÚdescriptionÚdatetimeÚ
resolutionÚsoftwareÚmetadataÚ
ijmetadataÚ	extratagsr»   Ú	datashapeÚ	datadtypeÚdatadtypecharÚbilevelÚindexÚdatasizerS   Úinput_shapeÚtagnoformatÚtagsizerR  rS  rT  rU  rW  rX  ÚcompresstagÚcompresslevelÚvolumeÚijrgbÚijshaperY   ÚndimÚsamplesperpixelÚextrasamplesÚs0Ústrip_or_tileÚtagbytecountsÚtag_offsetsr  r"  ÚsampleformatÚunitrG  ÚtilesÚnumtilesÚstripbytecountsÚchunkÚrowsizeÚ	numstripsÚ	pageindexr¼   Ú
tag_offsetÚtagindexÚtagÚstripoffsetsoffsetÚstrip_bytecounts_offsetÚdata_offsetÚskipÚ
stripindexÚplaneÚtzÚtyÚtxÚc0Úc1Úc2r   ÚstripÚstrip_offsetrG   r8   r  rÑ   r  r  rº   r  r  s\                                                                                       @@@@@@@@r    rA   zTiffWriter.save  s“  ÿ€ ð` �X‰XˆØ—O‘Oˆ	àˆ<ÙÜ Ð!DÓEÐEØˆIÜŸ™ EÓ*×7Ñ7¸	ÓBˆIØ%ŸN™N‰Mä—=‘=  y°4·:±:·?±?Ñ'BÀCÓHˆDØ�y‰y˜AŠ~Ü Ð!:Ó;Ð;ØŸ
™
ˆIØŸ
™
ˆIØ ŸJ™JŸO™OˆMà#Ò:¨	×(:Ñ(:ˆØ 3Ñ&ˆÙØ# B™-¨!Ò+‘B°ˆEÜ˜y¨¨%Ð0Ó1ˆHØ˜Ñ !Ò#Ø˜I eÑ,°Ñ1°AÑ5Ñ5‘à˜I eÑ,°Ñ1Ñ1‘ä˜yÓ)¨I×,>Ñ,>Ñ>ˆHô ˜h›ˆŒØ�?‹?áØ—?‘? 1 2Ð&¨)Ò3Ø—?‘? iÒ/Ù §¢ÙÜ×(Ñ(¨°4·>±>ÔBð ×+Ñ+Ô-Ø×-Ñ-Ô/Ø!&�”Ø*+�Ô'Ø-.�Ô*Ø"&�”Ø!%�”Ø—<’<Ü$Ð%RÓSÐSð $(§?¡?°1Ñ#5¸Ñ#9Ð";¸iÑ"G�”ÙàŸW™W›Y�FØ�|ØŸ™ xÕ0àŸ™ tÔ,Ù#Ø% xÐ/Ð/ØàˆØ×'Ñ'ˆØ×'Ñ'ˆØ×)Ñ)ˆØ×%Ñ%ˆ
Ø—-‘-ˆä×%Ñ%×0Ñ0ˆ
Ü×Ñ×"Ñ"ˆÜ×Ñ×"Ñ"ˆÜ×"Ñ"×*Ñ*ˆÜ×"Ñ"×)Ñ)ˆÜ×$Ñ$×-Ñ-ˆð Ð"Ü!¤$×"2Ñ"2°KÓ@ˆKÙÜ"¤4×#4Ñ#4°lÓCˆLÙØˆHØˆKØ‰Iä˜(¤U¬D MÔ2Ø*2Ñ'�™-Ü˜H¤cÔ*Ø*9¼3¸x»=˜-�Ø˜MÔ.¨QÔ.Ü$Ð%CÀhÑ%NÓOÐOà $�Ø—~‘~Ó'ˆHÜ!¤$×"2Ñ"2°HÓ=ˆKð �<Š<ØÐ+Ñ+Ü Ð!PÓQÐQÙÜ—‘ÐFÔGØ"�ØˆFØ FÑ*Ü Ð!GÈ-Ñ!WÓXÐXÙ*5�K 3Ò&¸4ˆEØ CÑ'Ø�Ü" 9¨eÓ4ˆGØ�r‰{˜fÑ$Ø!�Ø ¨Ñ+Ü$ð"Ø$1ñ2óð ð Ð$Ø(�Ø#�Ø˜xÒ'Ü Ð!HÓIÐIá).™v°D�ñ ØÐ$Ü,0¯O©O¸KÑ,HÑ)�
™Mä $§¡°Ñ <‘�
˜AÜ # MÓ 2�ÙØ—>‘>¨Ñ-Ü$Ð%HÈ9Ñ%TÓUÐUà)6ö 3ð *7õ 3ð ÐØ DÑ(Ü Ð!FÓGÐGÜ—}‘} X°YÀ±_ÔEˆHØ�~‰~ ! Q¨9×+=Ñ+=ÀÑ+AÑ%BÐ!CÒCÜ Ð!:Ó;Ð;Ø%ˆDŒNñ ÜÑ2¨¨b¨q¨Ô2Ó2ˆDÜ˜“Y !‘^ˆFä�D“	˜A’Ø˜‘8˜b’=Ø˜‘8˜b’=ÜÑ+ dÔ+Ô+ä Ð!5Ó6Ð6àˆDØˆFô ˜y¨{¸cÒ/A©!ÀqÓIˆ	ØˆÜ�9‹~ˆàˆØˆÙ�d˜Q’hØˆFØÐØ!ˆKØˆLØÐØ$ˆKÙÜ"×.Ñ.×9Ñ9‘Ø Ò'Ø˜!’8  b¡	¨VÑ 3Ø"%‘KØ Ò)Ù˜d Qšh¨5°©9¸Ñ+>Ø"%‘KØ˜A’X %¨¡)¨vÑ"5Ø"%‘KØ˜’˜e B™i¨6Ñ1Ø!‘Ø—’Ø(‘Ù˜D 1šH¨¨r©°fÑ)<Ø!‘Ø˜’˜e B™i¨6Ñ1Ø!�ÙœC ›J±©1¸AÒ>ØˆLØ$ˆKØ˜#ÒÜ�5‹z˜AŠ~Ü Ð!5Ó6Ð6Ü�5‹z˜AŠ~Ø�ØÐ#Ø˜‘9 Ñ&Ø#)‘LØ¡™2¨RÑ0°FÑ:Ø#+‘LØ˜2‘Y ©V¡r¸Ñ!<Ò<Ø#+‘Là#)�LØ˜vÒ%Ø# e±6©R¸rÐ,DÐ&EÑE�	Ø"+¨B¡-‘à! E±©2¸RÐ*BÐ$CÑCÀdÑJ�	Ø"+¨A¡,�Ø Ò"Ø.°Ñ2‘Ø˜CÒÜ�5‹z˜QŠÜ Ð!4Ó5Ð5ØˆFØˆLØ %¨¨ *Ñ,¨tÑ3ˆIØÑ7¨YÔ7Ñ7Ü Ð!FÓGÐGÙœc %›j±©A¸QÒ?Ø˜vÒ%Ø# e±6©R¸rÐ,DÐ&EÑE�	Ø"+¨B¡-‘à! E±©2¸RÐ*BÐ$CÑCÀdÑJ�	Ø"+¨A¡,�Ø*¨QÑ.‰LàˆLä�e“*˜q’. U¨2¡Y°!¢^Ø˜c˜r˜
�ô �e“*˜q’. U¨2¡Y°!£^ä�5‹z˜AŠ~Ø�Ø %©v©¸2Ð(@Ð"AÑAÀDÑHˆIô �9‹~ Ñ'Ð'Ð'Üˆy‹>˜QÒØ! " 1˜¨Ñ,¨y¸¸¨}Ñ<ˆIØ�Q‰<˜2ÒÜ˜Ó%¬°¸1¸2°Ó)?Ñ?ˆBØ˜ 	¨!¨" Ñ-ˆIØˆØÐØ—<‘< Ó&ˆDá™Ø�t˜B‘x  b¡Ð*ˆDà˜'Ò!Ø !Ò#¡|°u¸Q±xÀ1²}ÈÈbÉ	ÐUVÊÜ Ð!FÓGÐGà˜#Ò /°QÒ"6ÜÐBÓCÐCáÙÜ Ð!GÓHÐHÙÜ Ð!BÓCÐCØ &Ñ(Ü Ð!BÄSÈÓEUÑ!UÓVÐVÜ˜Y›ˆIØ˜‰}˜qÒ Ø )¨"¡°Ñ 2°QÑ 6�	˜"’à )¨"¡°Ñ 2�	˜"‘Ü˜iÓ(ˆIØœw yÓ1Ò1Ð1Ð1ØÐÜ—~‘~ d°Ô4�Ø  ‘}¨¯
©
°2©Ò6Ð6Ð6ô �{‰{˜1‰~ Ò$õ áJð 	ð
 ˆá"&™¨GˆÜŸ™ }°|Ñ'CÑDˆÜ—n‘n ]°YÑ%>Ñ?ˆØ&ˆÔô	6÷6	Iò 6	Ióp		.ñ áÐ% s¨A¨{ÀdÕKñ $,™°·±³ˆŒØ�<Š<Ü,ØØ�b‘	˜VÐ#Ø—‘ dÐ*ñð —.‘.ñ	‰Kñ ˜ RšØ�~Š~Ø—‘×%Ñ%°Ð%Ô5Ü*¨;ÑI¸$¿.¹.ÑI‰KàˆKÙô $ K°Ó9ˆKØ˜:Ñ%ˆKÜ#& {Ó#3ˆDÔ ÙÐ% s¨A¨{ÀdÕKáÙ�:˜s A x¸4Õ@ØÐØ—y‘y“{ˆHÙØ˜˜QÐ 1 × 1Ñ 1Ð2EÓ FÐRVõ	
ñ 	ˆ}˜c 1 kÔ2ÙÙ�;  Q¨Ô*Ùˆ|˜S ! U¨2¡YÔ/Ùˆ}˜c 1 e¨B¡iÔ0ÙÙ�;  Q¨¨R©Ô1Ù�<  a¨¨b©Ô2Ø�A‰w˜Š{Ù�| S¨!¨U°2©YÔ7Ù�{ C¨¨D°©GÔ4ÙÐ  a¨Ô+ÙØ!"¨°¸Ñ;¸I¿N¹NÑKˆLÙØ  _°|°oÈÑ6Wôñ 	Ð*¨C°°K×4EÑ4EÔFØÐÙ�:˜s H§M¡M°8Ô<ÙÐ  # q¨/Ô:ÙØÙ˜o°Ò1ÙÐ(¨#¨q°,×2DÑ2DÔEÙØØØØ×#Ñ# aÑ'Ð)¨OÑ;õ	ñ �? C¨¨I×,>Ñ,>ÀÑ,BÔCÙØ˜cÒ! l°aÒ&7Ù�~ s¨A¨qÕ1á�~ s¨L¸$ÀÑ:MÔNØÐ!Ù�= $¨©8°J¸q±MÓ+BÔCÙ�= $¨©8°J¸q±MÓ+BÔCÜ�:‹ Ò"Ø! !‘}�Ø ˜L‘q¬g´d·l±lÀDÓ.I‘Ø—’Ø‘à�ÙÐ# S¨!¨TÕ2Ø—’Ù�= $¨¨6Ô2Ù�= $¨¨6Ô2ÙÐ# S¨!¨QÔ/ÙÜ)¨*°iÓ@ò �Ù˜’
ðð "�\ˆ
Ùð �q‘˜D ™GÑ# aÑ'¨D°©GÑ3Ø�q‘˜D ™GÑ# aÑ'¨D°©GÑ3Ø�q‘˜D ™GÑ# aÑ'¨D°©GÑ3ðˆEô
 ˜u“~¨¨a©Ñ0ˆHä˜“  b¡	Ñ)¨I×,>Ñ,>Ñ>ðàñˆOñ �= ,°¸/ÔJÙ�; ¨h¸¸¸h¹ÔGØ#Ò;¬°«¸!Ñ(;ˆJÚäŸ™ D¨E°"©I¨<Ñ$7¸yÔI‘ÙáÜ#*¨9°Q°R¨=Ó#9Ð":¸UÀ1¹XÑ"E‘ä#*¨9°Q°R¨=Ó#9¸I×<NÑ<NÑ#NÐ"OÐRWØñSñ #�ñ �= ,°°a±¸/ÔJÙ�; ¨e°A©h¸¸¸eÀA¹h¹ÔGÙ�> 3¨¨5°©9Õ5ô ˜e B C˜jÓ)¨I×,>Ñ,>Ñ>ˆGØÐ#Ø$¨Ñ/�Ø˜aÒØ ‘Ø  b¡	Ò)Ø$ R™y�Ù�> 3¨¨<Ô8à˜r™ \Ñ1°AÑ5¸,ÑFˆIØ˜˜q™Ñ!ˆIØ ˜c I™oˆOÙ�= ,°	¸A¸3À¹?ÔKÙ�; ¨i¸!¸¸y¹ÔIàˆ<¡
ÜÐEÓFÐFð ò 	ˆAÙ�AŠJð	ô �d¡Ô/ˆà—’ §¢°B·G±G³IÀÑ4HÈ9Ò4TÜÐDÓEÐEô ¡J™q°E¸!±HÓ=ó t	<ˆIà—'‘'“)ˆCØ�QŠwà—‘˜”Ø�q‘�Ø�G‰G�D—O‘OÔ$Ø�H‰H‘T˜,¨Ó,Ô-Ø�G‰G�CŒLð �H‰H‘T˜+¤s¨4£yÓ1Ô2ØŸ™›ˆJØ�H‰H�S—X‘XÑ1¨DÔ1Ó1Ô2Ø Ÿg™g›iˆDŒOØ�H‰H‘T˜,¨Ó*Ô+ô "+¨4£ò %‘�˜#Ø�q“6ØŸ'™'›)�CØ˜Q’wàŸ™ œØ˜q™˜Ø—G‘G˜J¨°GÑ);Ñ;¸jÑHÈ1ÑLÔMØ—H‘H™T ,°Ó4Ô5Ø—G‘G˜C”LØ˜1‘v Ò,Ø-0Ñ*Ø˜Q™ =Ò0Ø25Ñ/Ø˜Q™ 3š¨3¨q©6¯?©?¸;Ô+Gà25˜Ô/Ø5?À(ÈWÑBTÑ5TÐWXÑ5X˜Ô2Ø—H‘H˜S ™VÕ$ð%%ð* Ÿ'™'›)ˆKØ˜;¨Ñ.Ñ.ˆDØ�G‰G�D˜!ÔØ˜4ÑˆKÙØ�<Ø—N‘N 8Ö,à—N‘N 4Ö(ÚØ�<Ø—N‘N 8¨o¸aÑ.@Ñ#@ÖAà!"�JØ!% i¡ó 3˜Ü"'¨¨a©£/ó 3˜BÜ&+¨E°!©H£oó 3 Ü*/°°a±«/ò !3 BÜ),¨T°!©W°e¸A±hÀÀdÈ1ÁgÁÑ6MÓ)N BÜ),¨T°!©W°e¸A±hÀÀdÈ1ÁgÁÑ6MÓ)N BÜ),¨T°!©W°e¸A±hÀÀdÈ1ÁgÁÑ6MÓ)N BØ;< E¨"©#¨r©s°B±C¨-Ñ$8Ø;@Ø(*¨T°!©W©°r¸DÀ¹G±|ÀbÑ7HÐ(HØ(*¨T°!©W©°r¸DÀ¹G±|ÀbÑ7HÐ(HØ(*¨T°!©W©°r¸DÀ¹G±|ÀbÑ7HÐ(Hð)Jñ<& E¨#¨2¨#¨s°¨s°C°R°C¨-Ñ$8ñ
 (0Ù,4°U«O¨Ø(*¯©°¬ÜFIÈ!Ãf¨¸
Ñ(CØ(2°a©©
à(*¯©°uÔ(=Ø(*¯©­
ò#!3ò3ò3ñ3ñ* à—z‘z !‘}¨Ò)Ð)Ð)Ø" 2™Y¨Ñ5¸Ñ9¸lÑJ�	Ø�
Ø! )™_ò (�EÜ" 9Ó-ò (˜Ø % a¨¨\Ñ)9¸QÀ¹UÀlÑ<RÐ)RÐ&RÑ S˜Ù (¨£˜ØŸ™ œÜ69¸%³j˜¨
Ñ3Ø" a™™
ñ(ð(ð —'‘'“)ˆCÜ!*¨4£ò ‘�˜#Ø�q‘6˜[Ò(Ø˜1’vØŸ™Ð 2Ô3Ø'2˜Ø$3ò 1˜DØŸH™H¡T¨,¸Ó%EÔFØ(¨DÑ0™Lñ1ð Ÿ™ 
¨X¸Ñ-?Ñ ?À*Ñ LÈqÑ PÔQØŸ™¡ l°KÓ!@ÕAØ˜‘V˜}Ó,ÙØ˜qš6ØŸG™GÐ$;Ô<Ø(7ò C Ø "§¡©¨l¸DÓ)AÕ BñCð ŸG™G J°¸GÑ1CÑ$CÀjÑ$PÐSTÑ$TÔUØŸH™H¡T¨,¸ÈÑ8JÓ%KÔLÙð)ð* �G‰G�CŒLØ�H‰HŒJð ˜AŒ~Ø'+Ö; °3°r³7šÒ;’ðit	<ðl ˆŒØ Ñ,ˆŒØ#ˆŒØ&ˆÔØ.ˆÔáàˆDŒJáØ"¤C¨Ó$8Ð8Ð8ð ð	 ùò <s   ÁR
AS!ÁRAS!c                 óè  ‡— | j                   r| j                  ry| j                  }|j                  «       }|dz  r|j	                  d«       |dz  }| j
                  Š| j                  }| j                  }| j                  }| j                  }| j                  }t        | j                  «      }| j                  d   | j                  d   z  dz
  }	ˆfd„}
t        j                   «       }|j	                   |
|t#        | j                   «      «      «       |j                  «       }|j	                  dj%                  d„ | j                   D «       «      «       |j                  «       }|j	                   |
|d«      «       t'        | j                   «      D ]Ä  \  }}|||z  z   |z   d	z   }|d   r•|j                  «       }|dz  r|j	                  d«       |dz  }|j)                  |«       	 |j	                   |
|||z   «      «       |j)                  |«       |j	                  |d   «       |d   | j4                  k(  sŒ©|}|}Œ®|d   | j4                  k(  sŒÁd}|}ŒÆ |j                  «       dz  r|j	                  d«       |j                  «       }| j6                  sM||j                  «       |	z  z   dkD  r4| j,                  rt/        j0                  d
«       d| _        yt3        d«      ‚t9        |	«      D �]  }|j                  «       }|j)                  | j:                  «       |j	                   |
||«      «       |j)                  |«       ||z   | _        ||z  }€*|j)                  «       |j	                   |
||«      «       nm|j)                  |«       |j	                   |
||z   «      «       |j)                  |«       |}| j                  D ]  }|j	                   |
||«      «       ||z  }Œ! |j	                  |j=                  «       «       �Œ! d| _         d| _        d| _
        d| _        y# t*        $ r7 | j,                  rt/        j0                  d
«       d| _        Y  yt3        d«      ‚w xY w)z(Write outstanding IFDs and tags to file.Nr�   rü   r&   r   c                 ó6   •— t        j                  ‰| z   g|¢­Ž S r   rõ   rö   s     €r    rº   z/TiffWriter._write_remaining_pages.<locals>.packB  rù   r`   r`   c              3   ó&   K  — | ]	  }|d    –— Œ y­wrÜ   r   rF  s     r    r!   z4TiffWriter._write_remaining_pages.<locals>.<genexpr>J  s   è ø€ Ò4 A˜1˜Q�4Ñ4ùrÝ   r‹   ztruncating ImageJ fileTz#data too large for non-BigTIFF filel    ÿ ) rª   r¤   r·   r—   r¸   r¡   rµ   r²   r´   r³   r®   rs  r¯   r«   r¬   ÚioÚBytesIOr.   r  ro  r%   r?   r£   rŸ   r    r,   r°   r±   rn  rš   Úgetvaluer­   )r^   r»   Úfhposr  r  r‰  rŠ  Ú
dataoffsetÚpagedatasizeÚpagenorº   ÚifdÚ	tagoffsetÚ	ifdoffsetr¡  r¢  Úoffset2valuer¼   Ústripoffset2offsetÚstripoffset2valuerY   ÚstripoffsetrG   r8   s                          @r    rM  z!TiffWriter._write_remaining_pages/  sß  ø€ à�zŠz˜TŸ^š^Øà�X‰XˆØ—‘“	ˆØ�1Š9Ø�H‰H�UŒOØ�Q‰JˆEØ—O‘Oˆ	Ø×)Ñ)ˆØ×%Ñ%ˆ
Ø×'Ñ'ˆØ—-‘-ˆØ×%Ñ%ˆ
Ü˜4×/Ñ/Ó0ˆØ—‘˜Q‘ $§/¡/°!Ñ"4Ñ4°qÑ8ˆô	6ô
 �j‰j‹lˆØ�	‰	‘$�{¤C¨¯
©
£OÓ4Ô5Ø—H‘H“Jˆ	Ø�	‰	�#—(‘(Ñ4¨¯©Ô4Ó4Ô5Ø—H‘H“Jˆ	Ø�	‰	‘$�| QÓ'Ô(ä& t§z¡zÓ2ò 	1‰MˆH�cØ$ x°'Ñ'9Ñ9¸JÑFÈÑJˆLØ�1ŠvØ—h‘h“j�Ø˜’7Ø—I‘I˜eÔ$Ø˜1‘H�CØ—‘˜Ô&ðLØ—I‘I™d <°°u±Ó=Ô>ð —‘˜”Ø—	‘	˜#˜a™&Ô!Ø�q‘6˜T×-Ñ-Ó-à)5Ð&Ø(+Ñ%Ø�Q‘˜4×+Ñ+Ó+à%)Ð"Ø$0Ñ!ð3	1ð6 �8‰8‹:˜Š>Ø�I‰I�eÔð �g‰g‹iˆØ�}Š}  s§x¡x£z°FÑ':Ñ!:¸[Ò!HØ�|Š|Ü—‘Ð6Ô7Ø!%�”ØÜÐBÓCÐCô �v“ó 	%ˆAà—'‘'“)ˆCØ�G‰G�D—O‘OÔ$Ø�H‰H‘T˜,¨Ó,Ô-Ø�G‰G�CŒLØ! I™oˆDŒOà˜,Ñ&ˆJØ!Ð)Ø—‘Ð*Ô+Ø—	‘	™$˜|¨ZÓ8Õ9à—‘Ð+Ô,Ø—	‘	™$˜|¨SÐ3DÑ-DÓEÔFØ—‘Ð*Ô+Ø(�Ø ×0Ñ0ò (�DØ—I‘I™d <°Ó=Ô>Ø 4Ñ'‘Kð(ð �H‰H�S—\‘\“^Ö$ð+	%ð. ˆŒ
ØˆŒØˆÔØ#ˆÕøôq !ò LØ—|’|Ü Ÿ™Ð&>Ô?Ø)-˜œÚÜ$Ð%JÓKÐKðLús   Ç)P1Ð11Q1Ñ%Q1c                 ó„  — | j                   r!| j                   d   dk(  s| j                  dk  ry| j                  du}| j                  r4| j                  d   dv }t        | j                   ||fi | j                  ¤Ž}n t        | j                   fi | j                  ¤Ž}|j                  d«      }|d| j                  dz
   }| j                  j                  «       }| j                  j                  | j                  «       | j                  j                  |«       | j                  j                  | j                  «       | j                  j                  t        j                   | j"                  | j$                  z   t'        |«      dz   «      «       | j                  j                  |«       d| _        d| _        d| _	        y)z(Write meta data to ImageDescription tag.r   r&   NrÀ   rÈ   úutf-8)r¬   r§   r¦   r£   r«   re  r¥   rf  Úencoder¨   r·   r—   r%   r¸   r©   r¹   rº   r¡   rµ   r.   )r^   ÚcolormappedÚisrgbr{  r¼   s        r    rN  z#TiffWriter._write_image_description“  se  € ð —’Ø�‰˜qÑ! QÒ&Ø×&Ñ&¨!Ò+àà—n‘n¨DÐ0ˆØ�<Š<Ø—K‘K ‘O vÐ-ˆEÜ,Ø—‘ ¨ñØ7;·~±~ñ‰Kô +¨4¯?©?ÑM¸d¿n¹nÑMˆKð "×(Ñ(¨Ó1ˆØ!Ð"< D×$8Ñ$8¸1Ñ$<Ð=ˆØ�h‰h�m‰m‹oˆØ�‰�‰�d×-Ñ-Ô.Ø�‰�‰�{Ô#Ø�‰�‰�d×0Ñ0Ô1Ø�‰�‰Ü�K‰K˜Ÿ™¨$×*<Ñ*<Ñ<¼cÀ+Ó>NÐQRÑ>RÓSô	
ð 	�‰�‰�cÔà"#ˆÔØ%&ˆÔ"Ø ˆÕr`   c                 ó>   — t         j                   j                  «       S )zReturn current date and time.)r|  Únow©r^   s    r    rh  zTiffWriter._nowµ  s   € ä× Ñ ×$Ñ$Ó&Ð&r`   c                 ó�   — | j                   s| j                  «        | j                  «        | j                  j	                  «        y)z,Write remaining pages and close file handle.N)r¤   rM  rN  r·   ÚcloserÉ  s    r    rË  zTiffWriter.close¹  s/   € à�~Š~Ø×'Ñ'Ô)Ø×%Ñ%Ô'Ø�‰�‰Õr`   c                 ó   — | S r   r   rÉ  s    r    Ú	__enter__zTiffWriter.__enter__À  ó   € Øˆr`   c                 ó$   — | j                  «        y r   ©rË  ©r^   Úexc_typeÚ	exc_valueÚ	tracebacks       r    Ú__exit__zTiffWriter.__exit__Ã  ó   € Ø�
‰
�r`   )FNFF)rg   ro   rp   rq   r_   rA   rM  rN  rh  rË  rÍ  rÕ  r   r`   r    r
   r
   �  sx   „ ñó&qKðj ØØØØØØØØØØØØØØØØØØØØó-e9òNa$òH !òD'òòór`   r
   c                   ó,  — e Zd ZdZ	 	 	 	 	 d/d„Zed„ «       Zed„ «       Zed„ «       Z	d„ Z
d0d„Zed	„ «       Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd1d„Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z ed„ «       Z!ed„ «       Z"ed „ «       Z#ed!„ «       Z$ed"„ «       Z%ed#„ «       Z&ed$„ «       Z'ed%„ «       Z(ed&„ «       Z)ed'„ «       Z*ed(„ «       Z+ed)„ «       Z,ed*„ «       Z-ed+„ «       Z.ed,„ «       Z/ed-„ «       Z0ed.„ «       Z1y)2r	   a»  Read image and metadata from TIFF file.

    TiffFile instances must be closed using the 'close' method, which is
    automatically called when using the 'with' context manager.

    Attributes
    ----------
    pages : TiffPages
        Sequence of TIFF pages in file.
    series : list of TiffPageSeries
        Sequences of closely related TIFF pages. These are computed
        from OME, LSM, ImageJ, etc. metadata or based on similarity
        of page properties such as shape, dtype, and compression.
    byteorder : '>', '<'
        The endianness of data in the file.
        '>': big-endian (Motorola).
        '>': little-endian (Intel).
    is_flag : bool
        If True, file is of a certain format.
        Flags are: bigtiff, movie, shaped, ome, imagej, stk, lsm, fluoview,
        nih, vista, 'micromanager, metaseries, mdgel, mediacy, tvips, fei,
        sem, scn, svs, scanimage, andor, epics, pilatus, qptiff.

    All attributes are read-only.

    Examples
    --------
    >>> # read image array from TIFF file
    >>> imsave('temp.tif', numpy.random.rand(5, 301, 219))
    >>> with TiffFile('temp.tif') as tif:
    ...     data = tif.asarray()
    >>> data.shape
    (5, 301, 219)

    Nc                 óè  — d|v r|d= t        d«      ‚|j                  «       D ]L  \  }}	|dd dk(  r2|dd t        j                  v r|	€Œ&|	rŒ)t	        | |t        |	«      «       Œ@t        d|z  «      ‚ t        |d|||¬«      }
|
| _        t        |«      | _	        |
j                  | i| _        	 |
j                  d	«       	 d
ddœ|
j                  d«         }dd
dœt         j"                     }||k(  | _        t'        j(                  |dz   |
j                  d«      «      d	   }|dk(  r‰d| _        t'        j(                  |dz   |
j                  d«      «      \  }}|s|dk7  rt        d«      ‚|| _        d| _        |dz   | _        d| _        |dz   | _        d| _        |dz   | _        |dz   | _        n\|dk(  rLd| _        || _        d| _        |dz   | _        d| _        |dz   | _        d| _        |dz   | _        |dz   | _        nt        d«      ‚t;        | «      | _        | j>                  r‚| j@                  jB                  d k\  s8| j<                  d	   jD                  d!k7  s| j<                  d!   jD                  d!k7  r1| jG                  «        | jI                  «        | jK                  «        y|rd| j<                  _&        yy# t        $ r t        d«      ‚w xY w# tN        $ r |
jQ                  «        ‚ w xY w)"a´  Initialize instance from file.

        Parameters
        ----------
        arg : str or open file
            Name of file or open file object.
            The file objects are closed in TiffFile.close().
        name : str
            Optional name of file in case 'arg' is a file handle.
        offset : int
            Optional start position of embedded file. By default, this is
            the current file position.
        size : int
            Optional size of embedded file. By default, this is the number
            of bytes from the 'offset' to the end of the file.
        multifile : bool
            If True (default), series may include pages from multiple files.
            Currently applies to OME-TIFF only.
        movie : bool
            If True, assume that later pages differ from first page only by
            data offsets and byte counts. Significantly increases speed and
            reduces memory usage when reading movies with thousands of pages.
            Enabling this for non-movie files will result in data corruption
            or crashes. Python 3 only.
        kwargs : bool
            'is_ome': If False, disable processing of OME-XML metadata.

        Úfastijz!the fastij option will be removedNrÉ   rz   zunexpected keyword argument: %srv   )rW   ÚnamerS   rG   r   r„   r…   ©r’   r“   r�   znot a TIFF file©Úbigrƒ   r�   r•   Trý   r‹   r‡   zinvalid BigTIFF filer‰   rˆ   ÚQ8sr–   FrŽ   rŒ   ÚI4szinvalid TIFF fileì        r&   ))ÚDeprecationWarningÚitemsrM   Ú
FILE_FLAGSrh   r¢   r  r   r·   Ú
_multifilerÚ  Ú_filesr%   Úreadr   r,   rž   r8   rK  r¹   Úunpackr˜   r  r  Ú	tagnosizer‰  rŠ  Ú
tagformat1Ú
tagformat2Ú	TiffPagesrO   Úis_lsmÚ
filehandlerG   ÚcompressionÚ_lsm_load_pagesÚ_lsm_fix_strip_offsetsÚ_lsm_fix_strip_bytecountsÚ	useframesr?   rË  )r^   r  rÚ  rS   rG   r   Úmovier0   rC  rk   r»   r8   Úsys_byteorderrc  r  Úzeros                   r    r_   zTiffFile.__init__ì  sã  € ðL �vÑØ�xÐ Ü$Ð%HÓIÐIØ Ÿ,™,›.ò 	I‰JˆC�Ø�2�Aˆw˜%Ò C¨¨ G¬t¯©Ñ$>ØÑ$ªUÜ˜D #¤t¨E£{Õ3äÐ AÀCÑ GÓHÐHð	Iô ˜ $¨T¸&ÀtÔLˆØˆŒÜ˜y›/ˆŒØ—w‘w �oˆŒð5	Ø�G‰G�AŒJð4Ø$'°Ñ4°R·W±W¸Q³ZÑ@�	ð %(°3Ñ7¼¿¹ÑFˆMØ%¨Ñ6ˆDŒMä—m‘m I°¡O°R·W±W¸Q³ZÓ@ÀÑCˆGØ˜"Š}à"&�”Ü#)§=¡=°¸TÑ1AÀ2Ç7Á7È1Ã:Ó#NÑ �
˜DÙ˜:¨š?Ü$Ð%;Ó<Ð<Ø!*�”Ø"#�”Ø$-°¡O�Ô!Ø!"�”Ø#,¨s¡?�Ô Ø!�”Ø"+¨dÑ"2�”Ø"+¨eÑ"3�•Ø˜B’Ø"'�”Ø!*�”Ø"#�”Ø$-°¡O�Ô!Ø!"�”Ø#,¨s¡?�Ô Ø!�”Ø"+¨dÑ"2�”Ø"+¨eÑ"3�•ä Ð!4Ó5Ð5ô # 4›ˆDŒJà�{Š{Ø—‘×$Ñ$¨Ò-Ø—:‘:˜a‘=×,Ñ,°Ò1Ø—:‘:˜a‘=×,Ñ,°Ò1à×$Ñ$Ô&Ø×+Ñ+Ô-Ø×.Ñ.Õ0ÙØ'+�—
‘
Õ$ð øôY ò 4Ü Ð!2Ó3Ð3ð4ûô^ ò 	Ø�H‰HŒJØð	ús+   Â-K Â?J> ÃGK Ê)K Ê>KËK ËK1c                 ó   — | j                   S )zReturn file handle.©r·   rÉ  s    r    rí  zTiffFile.filehandleW  s   € ð �x‰xˆr`   c                 ó.   — | j                   j                  S )zReturn name of file handle.)r·   rÚ  rÉ  s    r    rU   zTiffFile.filename\  s   € ð �x‰x�}‰}Ðr`   c                 ó|   — 	 t        j                  | j                  j                  «       «      S # t        $ r Y yw xY w)z3Return status of file handle as stat_result object.N)ÚosÚfstatr·   Úfilenor?   rÉ  s    r    rû  zTiffFile.fstata  s3   € ð	Ü—8‘8˜DŸH™HŸO™OÓ-Ó.Ð.øÜò 	Ùð	ús   ‚,/ ¯	;º;c                 ó„   — | j                   j                  «       D ]  }|j                  j                  «        Œ i | _         y)zClose open file handle(s).N)rå  Úvaluesrí  rË  )r^   r3   s     r    rË  zTiffFile.closei  s5   € à—;‘;×%Ñ%Ó'ò 	#ˆCØ�N‰N× Ñ Õ"ð	#àˆ�r`   c                 óð  — | j                   st        j                  g «      S |€|€d}|�	 | j                  |   }|j                  }n| j                   }|€net        |t        «      r||   g}nNt        |t        «      r||   }n8t        |t        j                  «      r|D �cg c]  }||   ‘Œ	 }}nt        d«      ‚|st        d«      ‚| j                  rt        |||d¬«      }�n'|€ò|rð|j                  rä| j                   |j"                  j$                  z   }	|dk(  rA|d   j&                  r2| j(                  j+                  |	|j,                  |j                  «      }n®|�!t/        ||j,                  |j"                  «      }| j(                  j1                  |j                  «       | j(                  j3                  |	t5        |j,                  «      |d¬	«      }n3t7        |«      d
k(  r|d   j9                  ||¬«      }nt        |||¬«      }|€y|€	 |j,                  |_        |S t7        |«      d
k(  r|d   j,                  |_        |S d|d   j,                  z   |_        |S # t        t
        f$ r Y �Œ:w xY wc c}w # t        $ ro 	 t;        j<                  d|j,                  ›d|j,                  ›�«       d|j,                  z   |_        n&# t        $ r d|d   j,                  z   |_        Y nw xY wY |S w xY w)aB  Return image data from multiple TIFF pages as numpy array.

        By default, the data from the first series is returned.

        Parameters
        ----------
        key : int, slice, or sequence of page indices
            Defines which pages to return as array.
        series : int or TiffPageSeries
            Defines which series of pages to return as array.
        out : numpy.ndarray, str, or file-like object; optional
            Buffer where image data will be saved.
            If None (default), a new array will be created.
            If numpy.ndarray, a writable array of compatible dtype and shape.
            If 'memmap', directly memory-map the image data in the TIFF file
            if possible; else create a memory-mapped array in a temporary file.
            If str or open file, the file name or file object used to
            create a memory-map to an array stored in a binary file on disk.
        validate : bool
            If True (default), validate various tags.
            Passed to TiffPage.asarray().
        maxworkers : int
            Maximum number of threads to concurrently get data from pages.
            Default is 1. If None, up to half the CPU cores are used.
            Reading data from file is limited to a single thread.
            Using multiple threads can significantly speed up this function
            if the bottleneck is decoding compressed data, e.g. in case of
            large LZW compressed LSM files.
            If the bottleneck is I/O or pure Python code, using multiple
            threads might be detrimental.

        Nr   z&key must be an int, slice, or sequencezno pages selectedF)ÚoutÚ
maxworkersÚsqueezer   T)r   Únativer&   )r   Úvalidate)r   r  zfailed to reshape ú to rà   )rO   r;   ÚarrayrR   r   r  Ú_pagesr(   ÚinttypesÚsliceÚcollectionsÚIterabler,   Úis_nihÚstack_pagesrS   r8   r<   rT   rP   rí  Úmemmap_arrayrD   r   r%   Ú
read_arrayr   r.   r/   rŸ   r    )
r^   rC  rR   r   r  r  rO   ÚkrX   Útypecodes
             r    r/   zTiffFile.asarrayo  s»  € ðB �zŠzÜ—;‘;˜r“?Ð"Øˆ;˜6˜>ØˆFØÐðØŸ™ VÑ,�ð —M‘M‰Eà—J‘JˆEàˆ;ØÜ˜œXÔ&Ø˜3‘Z�L‰EÜ˜œUÔ#Ø˜#‘J‰EÜ˜œ[×1Ñ1Ô2Ø'*Ö+ !�U˜1“XÐ+ˆEÑ+äÐDÓEÐEáÜÐ0Ó1Ð1à�;Š;Ü  ¨C¸JÐPUÔVŠFØˆ[™V¨¯ªØ—~‘~¨¯©×(9Ñ(9Ñ9ˆHØ�hŠ 5¨¡8×#:Ò#:ØŸ™×5Ñ5Ø˜fŸl™l¨F¯M©Mó‘ð �?Ü'¨¨V¯\©\¸6¿<¹<ÓH�CØ—‘×$Ñ$ V§]¡]Ô3ØŸ™×3Ñ3Øœg f§l¡lÓ3¸ÀTð 4ó ‘ô �‹Z˜1Š_Ø˜1‘X×%Ñ%¨#¸Ð%ÓA‰Fä  ¨C¸JÔGˆFàˆ>Øàˆ;ð:Ø%Ÿ|™|�”ð ˆô	 �‹Z˜1Š_Ø  ™8Ÿ>™>ˆFŒLð ˆð ! 5¨¡8§>¡>Ñ1ˆFŒLØˆøôy œiÐ(ò Úðüò ,øôB ò 	:ð:Ü—M’MØ8>¿»ÀfÇlÂlÐSôð $)¨6¯<©<Ñ#7�F•LøÜ!ò :à#(¨5°©8¯>©>Ñ#9�F–Lð:ûð ˆð	:úsN   «I" Â!I8ÈI= É"I5É4I5É=	K5ÊAKË
K5Ë K.Ë+K5Ë-K.Ë.K5Ë4K5c                 óê  — | j                   sg S | j                   j                  }| j                   j                  }g }dj                  «       D ](  }t	        | d|z   d«      sŒ t	        | d|z  «      «       } n || j                   _        || j                   _        |s| j                  «       }|D �cg c]  }t        |j                  «      dkD  sŒ|‘Œ }}t        |«      D ]  \  }}||_	        Œ |S c c}w )z«Return related pages as TiffPageSeries.

        Side effect: after calling this function, TiffFile.pages might contain
        TiffPage and TiffFrame instances.

        z(ome imagej lsm fluoview nih mdgel shapedrz   Fz
_%s_seriesr   )
rO   rò  ÚkeyframeÚsplitre   Ú_generic_seriesrs  rD   ro  r†  )r^   rò  r  rR   rÚ  rû   r   s          r    rR   zTiffFile.seriesÕ  sì   € ð �zŠzØˆIà—J‘J×(Ñ(ˆ	Ø—:‘:×&Ñ&ˆØˆØ>×DÑDÓFò 	ˆDÜ�t˜U T™\¨5Õ1Ø;œ  |°dÑ':Ó;Ó=�Ùð	ð  )ˆ�
‰
ÔØ&ˆ�
‰
ÔÙØ×)Ñ)Ó+ˆFð $Ö8˜¤s¨1¯7©7£|°aÓ'7’!Ð8ˆÐ8ä˜fÓ%ò 	‰DˆAˆqØˆA�Gð	àˆùò	 9s   Â0C0ÃC0c           
      ó¤  — | j                   j                  r…| j                   d   }|j                  }|j                  }t	        | j                   «      dkD  rt	        | j                   «      f|z   }d|z   }t        | j                   dd ||j                  |d¬«      gS | j                   j                  d«       | j                   j                  «        g }g }i }t        j                  }| j                   D ]f  }|j                  sŒ|j                  |j                  |j                  |v fz   }||v r||   j                  |«       ŒP|j                  |«       |g||<   Œh |D ]o  }||   }	|	d   }|j                  }|j                  }t	        |	«      dkD  rt	        |	«      f|z   }d|z   }|j                  t        |	||j                  |d¬«      «       Œq |S )	zReturn image series in file.r   r&   rŽ   Nró  ©ÚstypeFÚGeneric)rO   rò  rD   Úaxesr.   ÚTiffPageSeriesr<   ÚclearÚloadrM   ÚDECOMPESSORSrî  r6   )
r^   rV   rD   r  rX   ÚkeysrR   ÚcompressionsrC  rO   s
             r    r  zTiffFile._generic_seriesó  s­  € à�:‰:×Òà—:‘:˜a‘=ˆDØ—J‘JˆEØ—9‘9ˆDÜ�4—:‘:‹ Ò"Ü˜TŸZ™Z›Ð*¨UÑ2�Ø˜T‘z�ä˜tŸz™z©!˜}¨e°T·Z±ZÀÈWÔUðð ð 	�
‰
×Ñ˜ÔØ�
‰
�‰ÔØˆØˆØˆÜ×(Ñ(ˆØ—J‘Jò 	%ˆDØ—:’:ØØ—*‘* §	¡	¨4×+;Ñ+;¸|Ð+KÐLÑLˆCØ�f‰}Ø�s‘×"Ñ" 4Õ(à—‘˜CÔ Ø#˜f��s’ð	%ð ò 
	ˆCØ˜3‘KˆEØ˜‘8ˆDØ—J‘JˆEØ—9‘9ˆDÜ�5‹z˜AŠ~Ü˜U›˜¨Ñ-�Ø˜T‘z�Ø�M‰MÜ˜u e¨T¯Z©Z¸ÀYÔOõð
	ð ˆr`   c           	      ó¬  — | j                   }d|_        t        |«      }d„ }dx}x}x}x}}g }	d}
	 |
|k\  r	 |	S |
|_        ||
   }|j                  st        j                  d«       yd}d}t        |j                  «      }|j                  dd«      }|d   }|j                  d	d«      }d
|v r6|d
   }t        |«      t        |«      k(  r|}nd}t        j                  d«       |g}t        |«      }t        |t        |j                  «      «      \  }}|rt        j                  d«       yd|cxk  r||
z
  k  rˆn n…||j                  j                  z  }|rd}ng|j                  r%|j                  |z   ||
dz      j                  k  rd}n6d}t!        |
dz   |
|z   «      D ]  }||   }||_        |j#                  |«       Œ!  ||	||||||«       |
|z  }
�Œ¥)z%Return image series in "shaped" file.Tc                 óæ  — |d   }|s:|j                   }|j                  }t        |«      dkD  rt        |«      f|z   }d|z   }t        |«      }t        |«      }	|j                  r|	|kD  r|	|z  dk(  r|€d}d|z   }|	|z  f|z   }	 t        |||«      }|}| j                  t        |||j                  ||d|¬«      «       y # t        $ r(}
t        j                  t        |
«      «       Y d }
~
ŒXd }
~
ww xY w)Nr   r&   r‰   TÚShaped)rÚ  r  r$  )rD   r  r.   r   rQ   Úreshape_axesr,   rŸ   r    r›   r6   r  r<   )rR   rO   r  rD   ra  rÚ  r$  rV   rG   Úresizerl   s              r    Úappend_seriesz.TiffFile._shaped_series.<locals>.append_series$  s  € Ø˜‘8ˆDÙØŸ
™
�Ø—y‘y�Ü�u“: ’>Ü  ›Z˜M¨EÑ1�EØ ™:�DÜ˜5“>ˆDÜ˜WÓ%ˆFØ×!Ò! f¨t¢m¸À¹ÈÒ8JØÐ$Ø $�IØ˜T‘z�Ø 4™Ð)¨EÑ1�ð&Ü# D¨%°Ó9�Ø�ð �M‰MÜØØØ—J‘JØØØ"Ø'ôõ
øô ò &Ü—‘œc !›f×%Ñ%ûð&ús   ÂB? Â?	C0ÃC+Ã+C0Nr   z(invalid shape metadata or corrupted filerÚ  Ú rD   r$  r  úaxes do not match shapez&series shape does not match page shaper&   F)rO   rò  r.   r  Ú	is_shapedrŸ   r    Újson_description_metadatar@   r   ÚdivmodrD   Ú_dtyper=   Úis_finalrS   rn  r6   )r^   rO   Úlenpagesr&  r  r  rD   ra  rÚ  rR   r†  r  r$  ÚspagesrG   ÚnpagesÚmodÚjrV   s                      r    Ú_shaped_serieszTiffFile._shaped_series  s  € à—
‘
ˆØˆŒÜ�u“:ˆò	ð@ 48Ð7ˆÐ7�4Ð7˜%Ð7 '¨DØˆØˆØØ˜Ò Øð^ ˆð[ #ˆEŒNØ˜U‘|ˆHØ×%Ò%Ü—‘ÐHÔIØàˆDØˆEÜ0°×1CÑ1CÓDˆHØ—<‘< ¨Ó+ˆDØ˜wÑ'ˆGØ Ÿ™ [°$Ó7ˆIØ˜Ñ!Ø Ñ'�Ü�t“9¤ G£Ò,Ø#‘Eà�DÜ—M‘MÐ";Ô<à�ZˆFÜ˜7Ó#ˆDÜ  ¤w¨x¯~©~Ó'>Ó?‰KˆF�CÙÜ—‘ÐFÔGØØ�6Ô-˜X¨Ñ-Õ-Ø˜Ÿ™×0Ñ0Ñ0�ÙØ‘Fà×%Ò%Ø Ÿ™¨$Ñ.°°u¸q±yÑ1A×1HÑ1HÒHà %‘Ið !&�IÜ" 5¨1¡9¨e°f©nÓ=ò ,˜Ø$ Q™x˜Ø(0˜œØŸ™ dÕ+ð,ñ ˜& &¨$°°wÀÀiÔPØ�V‰OˆEñ_ r`   c                 óÌ  ‡ ‡‡‡	— d‰ j                   _        d‰ j                   _        ‰ j                  Š‰ j                   Š	‰	d   Šˆˆˆ	ˆ fd„}	  |«       }|r‰gŠ	n‰ j                   j                  «        g }g }d‰v r%|j                  ‰d   «       |j                  d«       d‰v r%|j                  ‰d   «       |j                  d	«       d
‰v rF‰j                  dk(  r‰j                  dd«      r%|j                  ‰d
   «       |j                  d«       ‰j                  dt        ‰	«      «      |rt        |«      ndz  }|dkD  r"|j                  |«       |j                  d«       ‰j                  d   dk(  r=|j                  ‰j                  dd «       |j                  ‰j                  dd «       n¨‰j                  dd dk(  r`‰j                  dd t!        |«      z   ‰j                  dd z   }t#        ‰j                  d   «      |z   t#        ‰j                  dd «      z   }n6|j                  ‰j                  «       |j                  ‰j                  «       |xrE t        ‰ j                   «      dk(  xr+ ‰j$                  d   t        |«      ‰j&                  z  dz  k7  }t)        ‰	|‰j*                  |d|¬«      gS # t        $ r t        j                  d«       Y yw xY w)z#Return image series in ImageJ file.Tr   c                  ó^  •— ‰j                   sy‰j                  dd«      } | dk  ry‰j                  \  }}|t        ‰j                  «      ‰j
                  z  dz  k7  s||| z  z   ‰j                  j                  kD  r
t        «       ‚t        ‰«      dkD  r||| z  z   ‰d   j                  kD  ryy)NFÚimagesr   r&   r‡   T)r-  r@   rQ   r   rD   Úbitspersamplerí  rG   r,   r.   rS   )r6  rS   r	  ÚijrV   rO   r^   s      €€€€r    Úis_hyperstackz.TiffFile._imagej_series.<locals>.is_hyperstack…  s¥   ø€ ð —=’=ØØ—V‘V˜H aÓ(ˆFØ˜Š{ØØ ×.Ñ.‰MˆF�Eàœ §¡Ó,¨t×/AÑ/AÑAÀQÑFÒFØ˜E F™NÑ*¨T¯_©_×-AÑ-AÒAä “lÐ"ä�5‹z˜AŠ~ &¨5°6©>Ñ"9¸EÀ!¹H¿O¹OÒ"KØØr`   z)invalid ImageJ metadata or corrupted fileNÚframesÚTÚslicesÚZÚchannelsr�   Ú
hyperstackFrK   r6  r&   rŽ   ÚSIr‡   ÚImageJ)r  r$  )rO   rò  r  Úimagej_metadatar,   rŸ   r    r  r6   rt  r@   r.   r   r  ÚextendrD   r  r  rQ   r7  r  r<   )
r^   r9  r?  rD   r  Úremainr$  r8  rV   rO   s
   `      @@@r    Ú_imagej_serieszTiffFile._imagej_seriesz  s‰  û€ ð  $ˆ�
‰
ÔØˆ�
‰
Ôà×!Ñ!ˆØ—
‘
ˆØ�Q‰xˆ÷	ð&	Ù&›ˆJñ à�F‰Eà�J‰J�O‰OÔàˆØˆØ�r‰>Ø�L‰L˜˜H™Ô&Ø�K‰K˜ÔØ�r‰>Ø�L‰L˜˜H™Ô&Ø�K‰K˜ÔØ˜ÑØ×Ñ Ò!¨"¯&©&°¸uÔ*Eà�L‰L˜˜J™Ô(Ø�K‰K˜ÔØ—‘˜¤# e£*Ó-ÁE´'¸%´.ÈqÑQˆØ�AŠ:Ø�L‰L˜Ô Ø�K‰K˜ÔØ�9‰9�Q‰<˜3Òà�L‰L˜Ÿ™ A B˜Ô(Ø�K‰K˜Ÿ	™	 ! "˜Õ&Ø�Y‰Y�r˜ˆ]˜dÒ"à—J‘J˜q �O¤e¨E£lÑ2°T·Z±ZÀÀ°^ÑCˆEÜ˜Ÿ	™	 !™Ó%¨Ñ,¬t°D·I±I¸a¸b°MÓ/BÑB‰Dà�L‰L˜Ÿ™Ô$Ø�K‰K˜Ÿ	™	Ô"ð ò RÜ�D—J‘J“ 1Ñ$òRà×"Ñ" 1Ñ%¬°«¸$×:LÑ:LÑ)LÐPQÑ)QÑQð 	ô Ø�u˜dŸj™j¨$°hÈ)ôð
ð 	
øôY ò 	Ü�M‰MÐEÔFÙð	ús   ÁK ËK#Ë"K#c                 ó€  — d| j                   _        d| j                   _        | j                   j                  «        | j                  }t        t        |d   «      «      }dj                  d„ |D «       «      }t        d„ |D «       «      }t        | j                   || j                   d   j                  ||d   d¬	«      gS )
z%Return image series in FluoView file.Tr   Ú
Dimensionsr'  c              3   ó�   K  — | ]>  }|d    d kD  sŒt         j                  j                  |d   j                  «       d«      –— Œ@ y­w)r&   r   r‰   N)rM   ÚMM_DIMENSIONSr@   rZ  rÙ   s     r    r!   z,TiffFile._fluoview_series.<locals>.<genexpr>Ó  s<   è ø€ ò 
Ø:;ÀqÈÁtÈaÃxŒD×Ñ×"Ñ" 1 Q¡4§:¡:£<°×5ñ
ùs
   ‚A�6Ac              3   óJ   K  — | ]  }|d    d kD  sŒt        |d    «      –— Œ y­wrÜ   r×   rÙ   s     r    r!   z,TiffFile._fluoview_series.<locals>.<genexpr>Ö  s"   è ø€ Ò: A°°1±¸³”c˜!˜A™$—iÑ:ùs   ‚#�#Ú	ImageNameÚFluoView©rÚ  r  )rO   rò  r  r  Úfluoview_metadatar  Úreversedr  r  r  r<   )r^   ÚmmÚmmhdr  rD   s        r    Ú_fluoview_serieszTiffFile._fluoview_seriesÌ  s®   € à#ˆ�
‰
ÔØˆ�
‰
ÔØ�
‰
�‰ÔØ×#Ñ#ˆÜ”H˜R Ñ-Ó.Ó/ˆØ�w‰wñ 
Ø?Cô
ó 
ˆô Ñ:¨Ô:Ó:ˆäØ—
‘
ØØ—
‘
˜1‘×#Ñ#ØØ˜‘_Ø ôð	
ð 		
r`   c                 ó„  ‡— d| j                   _        d| j                   _        | j                   j                  «        | j                  }|d   dv r9t        j                  d«      }|d   Š‰d   ‰d   z  Š|d   dk(  rˆfd	„}nˆfd
„}nd}| j                   d   }t        |g|j                  |j                  |d¬«      gS )z#Return image series in MD Gel file.Fr   ÚFileTag)r�   é€   Úfloat32Ú
ScalePixelr&   r�   c                 ó2   •— | j                  d«      dz  ‰z  S )NrV  r�   ©Úastype©r{   Úscales    €r    Ú	transformz)TiffFile._mdgel_series.<locals>.transformï  s   ø€ ØŸ8™8 IÓ.°!Ñ3°eÑ;Ð;r`   c                 ó,   •— | j                  d«      ‰z  S )NrV  rY  r[  s    €r    r]  z)TiffFile._mdgel_series.<locals>.transformô  s   ø€ ØŸ8™8 IÓ.°Ñ6Ð6r`   NÚMDGel)r]  r  )
rO   rò  r  r  Úmdgel_metadatar;   r<   r  rD   r  )r^   Úmdr<   r]  rV   r\  s        @r    Ú_mdgel_serieszTiffFile._mdgel_seriesâ  sÀ   ø€ ð  %ˆ�
‰
ÔØˆ�
‰
ÔØ�
‰
�‰ÔØ× Ñ ˆØˆi‰=˜HÑ$Ü—K‘K 	Ó*ˆEØ�|Ñ$ˆEØ˜!‘H˜u Q™xÑ'ˆEØ�)‰} Ò!õ<õ
7ð ˆIØ�z‰z˜!‰}ˆäØ�˜Ÿ
™
 E¨4¯9©9À	ÐQXôð
ð 	
r`   c                 ó¨  — d| j                   _        d| j                   _        | j                   j                  «        | j                   d   }t	        | j                   «      dk(  r|j
                  }|j                  }n2t	        | j                   «      f|j
                  z   }d|j                  z   }t        | j                   ||j                  |d¬«      gS )z Return image series in NIH file.Tr   r&   rŽ   ÚNIHr  )	rO   rò  r  r  r.   rD   r  r  r<   )r^   Úpage0rD   r  s       r    Ú_nih_serieszTiffFile._nih_series 	  sœ   € à#ˆ�
‰
ÔØˆ�
‰
ÔØ�
‰
�‰ÔØ—
‘
˜1‘ˆÜˆt�z‰z‹?˜aÒØ—K‘KˆEØ—:‘:‰Dä˜Ÿ™“_Ð&¨¯©Ñ4ˆEØ˜Ÿ™Ñ#ˆDÜ˜tŸz™z¨5°%·+±+¸tÈ5ÔQÐRÐRr`   c                 ó  ‡(— ddl m} | j                  d   j                  }	 |j	                  |«      }d| j                  _        d| j                  _        | j                  j                  «        |j                  j                  dd«      }|| i| _        | j"                  j$                  }i }g }|D �]  }	|	j&                  j)                  d	«      rt        j                  d
«        �nê|	j&                  j)                  d«      �rf|	D �]`  }
|
j                  j                  dd«      j)                  d«      sŒ0|
D �]+  }|D �]"  }|D �]  }|j&                  dd j)                  d«      sŒ#|j&                  d   }|j                  j                  dd«      }t*        j,                  |   }d|j                  v rpt/        |j                  j                  dd«      «      }t/        |j                  d   «      }t/        |j                  d   «      |z   }t1        j2                  |||«      }n4|D �cg c])  }|j&                  j)                  d«      r|j4                  ‘Œ+ }}||f||<   �Œ �Œ% �Œ. �Œc |	j&                  j)                  d«      s�ŒÖ|	j                  Š(‰(j                  dd«      }|	D �]$  }|j&                  j)                  d«      sŒ |j                  Š(‰(j                  dd«      }dj7                  t9        ‰(d   «      «      }t;        ˆ(fd„|D «       «      }t=        |dd «      }d}d}|D �]Ç  }|j&                  j)                  d«      r]|j                  Š(|€%t?        ‰(j                  d |«      «      }dg||z  z  }n)t?        ‰(j                  d d«      «      |k7  rtA        d!«      ‚Œ||€	dg||z  z  }|j&                  j)                  d"«      sŒ£|j                  Š(t?        ‰(j                  d#d«      «      }t?        ‰(j                  d$d#‰(v rdnd«      «      }t?        ‰(j                  d%|«      «      }|dd D � cg c]   } t?        ‰(j                  d&| z   d«      «      ‘Œ" }!} 	 t1        jB                  |!|dd «      }!|D �]<  }|j&                  j)                  d«      sŒ |j4                  | j                   vr´| jD                  s
g c c c c S |j                  d(   }"	 tG        tH        jJ                  j7                  ||"«      «      }#d|#j                  _        d|#j                  _        |#j                  j                  «        |#| j                   |j4                  <   |#jQ                  «        | j                   |j4                     j                  }$	 tS        |r|n
tU        |$«      «      D ]  }%|$||%z      ||!|%z   <   Œ 	  �Œ� | j                  }$	 tS        |r|n
tU        |$«      «      D ]  }%|$||%z      ||!|%z   <   Œ �ŒÊ tY        d+„ |D «       «      r�Œbd}&|D ]  }%|%sŒ|%|%j                  k(  sŒ|%}& n |&sdt[        |«      D ]V  \  }%}&|&sŒ	|&j\                  |&j^                  j                  _        |&j^                  j                  |&j\                     }&|&||%<    n |D ]  }%|%€Œ|&|%_        Œ |&j`                  }|jc                  te        ||||| |d,¬-«      «       �Œ' �Œ  |D ]Ú  }'t;        |'jf                  «      }|ji                  «       D ]   \  }\  }}|'jj                  j]                  |«      }%tU        |«      }||%   |k(  r#|'jj                  jm                  ||d«      |'_5        ŒZ||%xx   |z  cc<   |jo                  |%dz   |«       |'jj                  jm                  |||z   d«      |'_5        Œ¢ tq        |«      |'_3        ŒÜ |D ]/  }'ts        |'jf                  |'jj                  «      \  |'_3        |'_5        Œ1 |S # |j
                  $ rj}t        j                  d|z  «       	 |j                  dd«      j                  d«      }|j	                  |«      }n# t        $ r Y Y d}~yw xY wY d}~�Œ'd}~ww xY wc c}w c c} w # t@        $ r t        j                  d'«       Y �Œdw xY w# tL        tN        t@        f$ r t        j                  d)|"z  «       Y  �Œ˜w xY w# tV        $ r t        j                  d*«       Y �Œ1w xY w# tV        $ r t        j                  d*«       Y �Œâw xY w).z(Return image series in OME-TIFF file(s).r   ©ÚcElementTreezome-xml: %srÃ  ÚignoreNTÚUUIDÚ
BinaryOnlyz$ome-xml: not an ome-tiff master fileÚStructuredAnnotationsÚ	Namespacer'  ÚmodulorÀ   ÚAlongÚTypeÚotherÚStartÚStepr&   ÚEndÚLabelÚImageÚNameÚPixelsÚ	PixelTypeÚDimensionOrderc              3   ó@   •K  — | ]  }t        ‰d |z      «      –— Œ y­w)ÚSizeNr×   )r   ÚaxÚattrs     €r    r!   z'TiffFile._ome_series.<locals>.<genexpr>R	  s   øè ø€ ÒC¸œS  f¨r¡kÑ!2×3ÑCùs   ƒrÁ   ÚChannelr5  z'cannot handle differing SamplesPerPixelÚTiffDataÚIFDÚ	NumPlanesÚ
PlaneCountÚFirstzome-xml: invalid TiffData indexÚFileNamezome-xml: failed to read '%s'zome-xml: index out of rangec              3   ó$   K  — | ]  }|d u –— Œ
 y ­wr   r   rÙ   s     r    r!   z'TiffFile._ome_series.<locals>.<genexpr>”	  s   è ø€ Ò/ Q�q˜D”yÑ/ùó   ‚ÚOME)ÚparentrÚ  r  ):Ú	xml.etreeri  rO   r{  Ú
fromstringÚ
ParseErrorrŸ   r    ÚdecoderÄ  r?   rò  r  r  Úattribr@   rå  r·   Údirnamer¢  rp  rM   ÚAXES_LABELSÚfloatr;   ÚarangeÚtextr  rO  r  r   rØ   r,   Úravel_multi_indexrä  r	   rú  Úpathrœ   r�   rË  rn  r.   Ú
IndexErrorÚallro  r†  rŠ  r<   r6   r  rD   râ  r  ÚreplacerÏ   r  Úsqueeze_axes))r^   ÚetreeÚomexmlÚrootrl   Úuuidr�  ro  rR   ÚelementÚannotrk   ÚmodulÚalongrÍ   ÚnewaxisÚstepÚstartÚstopÚlabelsÚlabelrÚ  Úpixelsr<   r  rD   rG   ÚifdsÚspprC   r»  Únumr~  ÚidxÚfnamer3   rO   r   r  Úserier  s)                                           @r    Ú_ome_serieszTiffFile._ome_series	  si  ø€ å3à—‘˜A‘×*Ñ*ˆð
	Ø×#Ñ# FÓ+ˆDð  $ˆ�
‰
ÔØˆ�
‰
ÔØ�
‰
�‰Ôà�{‰{�‰˜v tÓ,ˆØ˜T�lˆŒØ—(‘(×"Ñ"ˆØˆØˆØó H	ˆGØ�{‰{×#Ñ# LÔ1ä—‘ÐDÔEÚØ�{‰{×#Ñ#Ð$;Õ<Ø$ó A�EØ Ÿ<™<×+Ñ+¨K¸Ó<×EÑEÀhÔOØ Ø!&ó A˜Ø%*ó A˜EØ).ó A Ø',§y¡y°°" ~×'>Ñ'>¸wÔ'GØ$,Ø',§y¡y°¡} Ø*/¯,©,×*:Ñ*:¸6À7Ó*K Ü*.×*:Ñ*:¸7Ñ*C Ø#*¨e¯l©lÑ#:Ü+0°·±×1AÑ1AÀ&È!Ó1LÓ+M DÜ,1°%·,±,¸wÑ2GÓ,H EÜ+0°·±¸eÑ1DÓ+EÈÑ+L DÜ-2¯\©\¸%ÀÀtÓ-L¡Fð 6;ö.&à,1Ø+0¯9©9×+=Ñ+=¸gÔ+Fð ).¯
«
ð.& Fð .&ð
 18¸Ð/@  t£ò#AòAòAðAð0 —;‘;×'Ñ'¨Ô0Ùà—>‘>ˆDØ—8‘8˜F DÓ)ˆDà!ó d�Ø—z‘z×*Ñ*¨8Ô4ØØ—}‘}�ØŸ™ ¨dÓ3�Ø—w‘wœx¨Ð-=Ñ(>Ó?Ó@�ÜÓC¸dÔCÓC�Ü˜u S b˜zÓ*�Ø�Ø�ð #ó 9I�DØ—x‘x×(Ñ(¨Ô3Ø#Ÿ{™{˜Ø˜<Ü"% d§h¡hÐ/@À#Ó&FÓ"G˜CØ$( 6¨T°S©[Ñ#9™DÜ  §¡Ð*;¸QÓ!?Ó@ÀCÒGÜ",Ð-VÓ"WÐWØ Ø�|Ø $˜v¨°©Ñ5˜ØŸ8™8×,Ñ,¨ZÔ8Ø ØŸ;™;�DÜ˜dŸh™h u¨aÓ0Ó1�CÜ˜dŸh™h {¸À$¹±AÈAÓNÓO�CÜ˜dŸh™h |°SÓ9Ó:�CØDHÈÈ"ÀIÖN¸bœ3˜tŸx™x¨°"©°aÓ8Õ9ÐN�CÐNð!Ü#×5Ñ5°c¸5ÀÀ"¸:ÓF˜ð
 !%ó !I˜Ø#Ÿx™x×0Ñ0°Ô8Ø$ØŸ9™9¨D¯K©KÑ7Ø#'§?¢?ð (*§	 	Ø$(§K¡K°
Ñ$;˜Eð&Ü&.¬r¯w©w¯|©|¸GÀUÓ/KÓ&L Ø6: §	¡	Ô 3Ø56 §	¡	Ô 2Ø #§	¡	§¡Ô 0ð 69˜DŸK™K¨¯	©	Ñ2ØŸI™IœKØ $§¡¨D¯I©IÑ 6× <Ñ <˜ðIÜ%*±#©3¼3¸u»:Ó%Fò ? Ø05°c¸A±g±  S¨1¡W¢ñ?ò
 ð5!Ið8 !%§
¡
˜ðIÜ%*±#©3¼3¸u»:Ó%Fò ? Ø05°c¸A±g±  S¨1¡W¢ò?ðm9Iôv Ñ/¨$Ô/Ô/áð  �Øò �Aâ˜Q !§*¡*›_Ø#$˜Ùð	ñ
  ä'0°£ò "™˜˜8Ú#Ø=E¿^¹^˜HŸO™O×1Ñ1Ô:Ø'/§¡×'<Ñ'<¸X¿^¹^Ñ'L˜HØ&.˜D ™GÙ!ð"ð ò .�AØ‘}Ø%-˜�
ð.ð !Ÿ™�Ø—‘Ü"Ø˜e U¨D¸ÀDÐPUôöòAdðIH	ðR ò 	'ˆEÜ˜Ÿ™Ó%ˆEØ+1¯<©<«>ò MÑ'�Ñ'�w Ø—J‘J×$Ñ$ TÓ*�Ü˜6“{�Ø˜‘8˜tÒ#Ø!&§¡×!3Ñ!3°D¸'À1Ó!E�E•Jà˜!“H Ñ%“HØ—L‘L  Q¡¨Ô-Ø!&§¡×!3Ñ!3°D¸$À¹.È!Ó!L�E•JðMô   ›,ˆE�Kð	'ð ò 	LˆEÜ&2°5·;±;ÀÇ
Á
Ó&KÑ#ˆEŒK˜�ð	LàˆøðW ×Ñò 	ä�M‰M˜-¨!Ñ+Ô,ðàŸ™ w°Ó9×@Ñ@ÀÓI�Ø×'Ñ'¨Ó/‘øÜò Ýðúõ ûð	üòT.&ùòV Oøô &ò !ä Ÿ™Ð&GÔHÚ ð!ûô$ %,Ô->Ä
Ð#Kò &Ü (§¡Ð.LÈuÑ.TÔ UÛ %ð&ûô  *ò IÜ$ŸM™MÐ*G×HðIûô  *ò IÜ$ŸM™MÐ*G×HðIús�   ¢_& È&.a"Ð6%a'
Ña,ÓA%bÖ	+c×+c*ß&aß5aà2aá aá	aá
aáaáaáaá,b	âb	â,cãcãc'ã&c'ã*d	äd	c           
      óÆ  ‡	— | j                   Š	t        j                  ‰	d      }| j                  d   j                  dk(  r"|j                  dd«      j                  dd«      }‰	j                  dd«      d	kD  r|d
z  }‰	j                  dd«      d	kD  r|dz  }|ddd…   }t        ˆ	fd„|D «       «      }‰	j                  dd«      }d| j                  _        | j                  ddd…   }|d   j                  }t        |||||d¬«      g}| j                  d	   j                  rÀd	| j                  _        | j                  d	dd…   }|d   j                  }d\  }}|t        |«      k  r>|t        |«      dz
  k  r-|||   z  }|d	z  }|t        |«      k  r|t        |«      dz
  k  rŒ-|d| |d   j                  z   }|d| dz   }|j                  t        |||||d¬«      «       |S )z6Return main image series in LSM file. Skip thumbnails.ÚScanTyper   r�   rK   r'  ÚXYÚXYCÚ
DimensionPr&   ÚPÚ
DimensionMÚMNrÀ   c              3   ó\   •K  — | ]#  }t        ‰t        j                  |      «      –— Œ% y ­wr   )rØ   rM   ÚCZ_LSMINFO_DIMENSIONS)r   r   Úlsmis     €r    r!   z'TiffFile._lsm_series.<locals>.<genexpr>Í	  s&   øè ø€ ÒMÀ1”c˜$œt×9Ñ9¸!Ñ<Ñ=×>ÑMùó   ƒ),rx  ÚLSMrM  )r&   r   ÚCYXÚ
LSMreduced)Úlsm_metadatarM   ÚCZ_LSMINFO_SCANTYPErO   rt  r™  r@   r  r  r<   r  Ú
is_reducedr.   rD   r6   )
r^   r  rD   rÚ  rO   r<   rR   Úcpr   r»  s
            @r    Ú_lsm_serieszTiffFile._lsm_seriesÂ	  sÞ  ø€ à× Ñ ˆÜ×'Ñ'¨¨ZÑ(8Ñ9ˆØ�:‰:�a‰=×$Ñ$¨Ò)Ø—<‘<  RÓ(×0Ñ0°°uÓ=ˆDØ�8‰8�L !Ó$ qÒ(Ø�C‰KˆDØ�8‰8�L !Ó$ qÒ(Ø�C‰KˆDØ‘D�b�D‰zˆÜÓMÈÔMÓMˆØ�x‰x˜ Ó#ˆØˆ�
‰
ÔØ—
‘
™3˜Q˜3‘ˆØ�a‘—‘ˆÜ  ¨¨u°dÀÈUÔSÐTˆà�:‰:�a‰=×#Ò#Ø"#ˆD�J‰JÔØ—J‘J˜q˜t !˜tÑ$ˆEØ˜!‘H—N‘NˆEØ‰EˆB�Ø”s˜5“z’/ a¬#¨e«*°q©.Ò&8Ø�e˜A‘h‘�Ø�Q‘�ð ”s˜5“z’/ a¬#¨e«*°q©.Ó&8ð ˜"˜1�I  a¡§¡Ñ.ˆEØ˜˜�8˜eÑ#ˆDØ�M‰MÜ˜u e¨U°D¸tÈ<ÔXôð ˆr`   c                 ó@  — d| j                   _        d| j                   _        d| j                   _        | j                   d   }| j                   ddd…   D ]	  }||_        Œ d| j                   _        | j                   d   }| j                   ddd…   D ]	  }||_        Œ y)zLoad all pages from LSM file.Tr&   Nr�   r   )rO   Úcacherò  r  )r^   r  rV   s      r    rï  zTiffFile._lsm_load_pagesä	  s•   € àˆ�
‰
ÔØ#ˆ�
‰
Ôàˆ�
‰
ÔØ—:‘:˜a‘=ˆØ—J‘J˜q˜t !˜tÑ$ò 	%ˆDØ$ˆD�Mð	%ð  ˆ�
‰
ÔØ—:‘:˜a‘=ˆØ—J‘J™s ˜s‘Oò 	%ˆDØ$ˆD�Mñ	%r`   c                 óx  — | j                   j                  dk  ry| j                  }t        |«      }| j                  d   }|j
                  }d}dD ]&  }|j
                  |   dv sŒ||j                  |   z  }Œ( |dkD  r‹d}dD ]  }||   dk(  sŒ|j                  |   } n |rŒt        |d	|z  |z  «      \  }}	|	dk(  sJ ‚|||d	f}
t        j                  t        |
«      «      j                  |
«      }t        j                  |dd«      }n%t        j                  |«      j                  d
d	«      }|d   j                  d   |d   j                  d   kD  r
dddd
…f   }d}d}j                  D ]J  }||   }g }|j                  D ]"  }||k  r|dz  }|j                  ||z   «       |}Œ$ t!        |«      |_        ŒL y)z�Unwrap strip offsets for LSM files greater than 4 GB.

        Each series and position require separate unwrapping (undocumented).

        rà  Nr   r&   rè   ÚPM©r&   r�   r;  r�   rÀ   .)rí  rG   rO   r.   rR   r  rD   r+  r;   r“  r   ra  ÚmoveaxisÚdataoffsetsÚflatr6   r  )r^   rO   r0  rR   r  Ú	positionsr   ÚntimesÚdivr1  rD   ÚindicesÚwrapÚpreviousoffsetrV   rË  Úcurrentoffsets                    r    rð  zTiffFile._lsm_fix_strip_offsetsó	  sæ  € ð �?‰?×Ñ %Ò'Øà—
‘
ˆÜ�U“ˆØ—‘˜Q‘ˆØ�{‰{ˆð ˆ	Øò 	-ˆAØ�{‰{˜1‰~ Ò%Ø˜VŸ\™\¨!™_Ñ,‘	ð	-ð
 �qŠ=ØˆFØò �Ø˜‘7˜c“>Ø#Ÿ\™\¨!™_�FÙðñ Ü! &¨!¨i©-¸&Ñ*@ÓA‘��SØ˜a’x��xØ" F¨C°Ð3�ÜŸ,™,¤w¨u£~Ó6×>Ñ>¸uÓE�ÜŸ.™.¨°!°QÓ7‘ä—l‘l 6Ó*×2Ñ2°2°qÓ9ˆGð �‰8×Ñ Ñ" U¨1¡X×%9Ñ%9¸!Ñ%<Ò<Ø˜c¡4 R 4˜iÑ(ˆGð ˆØˆØ—‘ò 	2ˆAØ˜‘8ˆDØˆKØ!%×!1Ñ!1ò /�Ø  >Ò1Ø˜E‘M�DØ×"Ñ" =°4Ñ#7Ô8Ø!.‘ð	/ô
  % [Ó1ˆDÕñ	2r`   c           	      óâ  ‡— | j                   }|d   j                  dk(  ryt        |d„ ¬«      }t        |«      dz
  }t	        |«      D ]¥  \  }}|j
                  dz  rŒ|j                  Š|j                  }||k  r||dz      j                  d   }n,t        ‰d   d|d   z  z   | j                  j                  «      }‰|fz   Št        ˆfd„t        t        |«      «      D «       «      |_        Œ§ y)	z¦Set databytecounts to size of compressed data.

        The StripByteCounts tag in LSM files contains the number of bytes
        for the uncompressed data.

        r   r&   Nc                 ó    — | j                   d   S rA  )rË  )Úps    r    rï   z4TiffFile._lsm_fix_strip_bytecounts.<locals>.<lambda>3
  s   € ¨A¯M©M¸!Ñ,<€ r`   rB  r�   rÀ   c              3   ó:   •K  — | ]  }‰|d z      ‰|   z
  –— Œ y­wrÜ   r   )r   r2  Úoffsetss     €r    r!   z5TiffFile._lsm_fix_strip_bytecounts.<locals>.<genexpr>@
  s'   øè ø€ ò (Ø01�˜˜A™‘ ¨¡Õ+ñ(ùs   ƒ)rO   rî  rm  r.   ro  r†  rË  Údatabytecountsrq  r·   rG   r  rn  )r^   rO   r0  r   rV   Ú
bytecountsÚ
lastoffsetrØ  s          @r    rñ  z"TiffFile._lsm_fix_strip_bytecounts(
  sï   ø€ ð —
‘
ˆØ�‰8×Ñ 1Ò$Øä�uÑ"<Ô=ˆÜ�U“˜a‘ˆÜ  Ó'ò 	‰GˆAˆtØ�z‰z˜AŠ~ØØ×&Ñ&ˆGØ×,Ñ,ˆJØ�6ŠzØ" 1 q¡5™\×5Ñ5°aÑ8‘
ô ! ¨¡¨q°:¸b±>Ñ/AÑ!AÀ4Ç8Á8Ç=Á=ÓQ�
Ø  Ñ-ˆGÜ"'ó (Ü5:¼3¸z»?Ó5Kô(ó #ˆDÕñ	r`   c                 óô   — |dd t         j                  v r>| j                  syt        t	        | j                  d   |«      «      }t        | ||«       |S t        d| j                  j                  ›d|›d�«      ‚)z,Return 'is_flag' attributes from first page.rÉ   NFr   ú'ú' object has no attribute ')	rM   rã  rO   r¢   re   rh   rb   rm   rg   )r^   rÚ  rk   s      r    Ú__getattr__zTiffFile.__getattr__D
  sg   € à��ˆ8”t—‘Ñ&Ø—:’:ØÜœ §¡¨A¡°Ó5Ó6ˆEÜ�D˜$ Ô&ØˆLÝØ37·>±>×3JÓ3JÊDÐQó
ð 	
r`   c                 ó   — | S r   r   rÉ  s    r    rÍ  zTiffFile.__enter__P
  rÎ  r`   c                 ó$   — | j                  «        y r   rÐ  rÑ  s       r    rÕ  zTiffFile.__exit__S
  rÖ  r`   c                 óž  ‡‡— dt        | j                  j                  «      dddœ| j                     g}| j                  r|j                  d«       |j                  dj                  d„ | j                  D «       «      «       t        | j                  «      dkD  r'|j                  d	t        | j                  «      z  «       t        | j                  «      dkD  r'|j                  d
t        | j                  «      z  «       t        | j                  «      dkD  r'|j                  dt        | j                  «      z  «       dj                  |«      }|j                  dd«      j                  dd«      }|t        | j                  j                  t        d‰dz   t        |«      z
  «      «      z  }‰dk  r|S |g}|j                  dj                  d„ | j                  D «       «      «       ‰dk\  r&|j!                  ˆˆfd„| j                  D «       «       n%|j!                  ˆˆfd„| j                  D «       «       ‰dk\  rot#        | j                  «      D ]W  }t%        | |dz   «      sŒt'        | |dz   «      }|sŒ%|j                  |j)                  «       ›dt+        |‰‰dz  ¬«      ›�«       ŒY dj                  |«      j                  dd«      S )a  Return string containing information about file.

        The detail parameter specifies the level of detail returned:

        0: file only.
        1: all series, first page of series and its tags.
        2: large tag values and file metadata.
        3: all pages.

        zTiffFile '%s'ÚLittleEndianÚ	BigEndianr†   ÚBigTiffr‚   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   ©rZ  ©r   r!  s     r    r!   z#TiffFile.__str__.<locals>.<genexpr>h
  s   è ø€ Ò;¨1˜QŸW™WŸYÑ;ùó   ‚r&   ú%i Pagesz	%i Seriesz%i Filesú  z    z   rŒ   r�   r   ú
c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   ©r›   ©r   rû   s     r    r!   z#TiffFile.__str__.<locals>.<genexpr>u
  s   è ø€ Ò:¨œc !ŸfÑ:ùrÚ   rÉ   c              3   óR   •K  — | ]  }|�t         j                  |‰‰¬«      –— Œ  y ­w)N©ÚdetailÚwidth)ÚTiffPageÚ__str__)r   rÖ  rò  ró  s     €€r    r!   z#TiffFile.__str__.<locals>.<genexpr>x
  s0   øè ø€ ò àØ�}ô ×$Ñ$ Q¨v¸UÐ$×Cñùs   ƒ$'c              3   ó†   •K  — | ]8  }|j                   d    �'t        j                  |j                   d    ‰‰¬«      –— Œ: y­w)r   Nrñ  )rO   rô  rõ  )r   rû   rò  ró  s     €€r    r!   z#TiffFile.__str__.<locals>.<genexpr>€
  sA   øè ø€ ò àØ—w‘w˜q‘zÐ-ô ×$Ñ$ Q§W¡W¨Q¡Z¸ÀeÐ$×Lñùs   ƒ>Ar¥   z
_METADATA
©ró  Úheightú

z


)r   r·   rG   r8   r˜   r6   r  Úflagsr.   rO   rR   rå  r™  ÚsnipstrrÚ  ÚmaxrC  rm  r-   re   rZ  Úpformat)r^   rò  ró  ÚinforÚ  Úms    ``   r    rõ  zTiffFile.__str__V
  s=  ù€ ð Ü˜Ÿ™Ÿ™Ó&Ø  {Ñ3°D·N±NÑCð
ˆð
 �?Š?Ø�K‰K˜	Ô"Ø�‰�C—H‘HÑ;°·
±
Ô;Ó;Ô<Üˆt�z‰z‹?˜QÒØ�K‰K˜
¤S¨¯©£_Ñ4Ô5Üˆt�{‰{Ó˜aÒØ�K‰K˜¤c¨$¯+©+Ó&6Ñ6Ô7Üˆt�{‰{Ó˜aÒØ�K‰K˜
¤c¨$¯+©+Ó&6Ñ7Ô8Ø�y‰y˜‹ˆØ�|‰|˜F DÓ)×1Ñ1°%¸Ó>ˆØ”g˜dŸh™hŸm™m¬S°°U¸Q±YÄÀTÃÑ5JÓ-KÓLÑLˆØ�QŠ;ØˆKØˆvˆØ�‰�D—I‘IÑ:¨d¯k©kÔ:Ó:Ô;Ø�QŠ;Ø�K‰Kôà!ŸZ™Zôõð �K‰Kôà!Ÿ[™[ôôð �QŠ;Ü˜tŸz™zÓ*ò 
�Ü˜4 ¨Ñ!3Õ4Ü  d¨[Ñ&8Ó9�AÚØŸ™ð !%§
¡
¥Ü '¨°¸vÈ¹{Õ Kðõð	
ð �{‰{˜4Ó ×(Ñ(¨°6Ó:Ð:r`   c                 óZ   ‡ — t        ˆ fd„t        t        j                  «      D «       «      S )zReturn set of file flags.c              3   ó\   •K  — | ]#  }t        ‰d |z   «      r|j                  «       –— Œ% y­wry   ©re   Úlower©r   rÚ  r^   s     €r    r!   z!TiffFile.flags.<locals>.<genexpr>—
  s-   øè ø€ ò 
àÜ�t˜U T™\Ô*ð �J‰J�Lñ
ùr¼  ©Úsetrm  rM   rã  rÉ  s   `r    rú  zTiffFile.flags”
  s(   ø€ ô ó 
äœtŸ™Ó/ô
ó 
ð 	
r`   c                 óŠ   — 	 | j                   d   j                  xs | j                   d   j                  S # t        $ r Y yw xY w)zFile has MD Gel format.r   r&   F)rO   Úis_mdgelr—  rÉ  s    r    r  zTiffFile.is_mdgel�
  s@   € ð	Ø—:‘:˜a‘=×)Ñ)ÒC¨T¯Z©Z¸©]×-CÑ-CÐCøÜò 	Ùð	ús   ‚36 ¶	AÁAc                 ó.   — | j                   j                  S )zReturn if file is a movie.)rO   rò  rÉ  s    r    Úis_moviezTiffFile.is_movie¥
  s   € ð �z‰z×#Ñ#Ð#r`   c                 óT   — | j                   syt        d„ | j                  D «       «      S )z9Return Tifffile metadata from JSON descriptions as dicts.Nc              3   óš   K  — | ]C  }|j                   j                  «       d k(  r$t        |j                  d   j                  «      –— ŒE y­w)Úshapedr   N)r  r  r*  rO   r)  rï  s     r    r!   z+TiffFile.shaped_metadata.<locals>.<genexpr>¯
  s=   è ø€ ò 
àØ�w‰w�}‰}‹ (Ò*ô & a§g¡g¨a¡j×&:Ñ&:×;ñ
ùs   ‚A	A)r)  r  rR   rÉ  s    r    Úshaped_metadatazTiffFile.shaped_metadataª
  s,   € ð �~Š~ØÜñ 
à—[‘[ô
ó 
ð 	
r`   c                 óf   — | j                   syt        | j                  d   j                  «      d   S )zReturn OME XML as dict.Nr   r‰  )r   r   rO   r{  rÉ  s    r    Úome_metadatazTiffFile.ome_metadataµ
  s,   € ð �{Š{ØÜ˜Ÿ
™
 1™×1Ñ1Ó2°5Ñ9Ð9r`   c                 óš   — | j                   syd}| j                  d   j                  j                  d|z   dz   |«      }t	        |«      |   S )z<Return PerkinElmer-QPI-ImageDescription XML element as dict.Nz PerkinElmer-QPI-ImageDescriptionr   ú )Ú	is_qptiffrO   r{  r™  r   )r^   r�  Úxmls      r    Úqptiff_metadatazTiffFile.qptiff_metadata½
  sK   € ð �~Š~ØØ1ˆØ�j‰j˜‰m×'Ñ'×/Ñ/°°d±
¸SÑ0@À$ÓGˆÜ˜‹}˜TÑ"Ð"r`   c                 óh   — | j                   sy| j                  d   j                  d   j                  S )z0Return LSM metadata from CZ_LSMINFO tag as dict.Nr   Ú
CZ_LSMINFO)rì  rO   r  rk   rÉ  s    r    rÀ  zTiffFile.lsm_metadataÆ
  s-   € ð �{Š{ØØ�z‰z˜!‰}×!Ñ! ,Ñ/×5Ñ5Ð5r`   c                 óX  — | j                   sy| j                  d   }|j                  }i }|d   j                  |d<   |j                  r|j                  j                  d«      |d<   d|v r|j                  |d   j                  «       d|v r|j                  |d   j                  «       d	|v r|j                  |d	   j                  «       |d   j                  }|d
   |d
<   |d   |d<   |d   |d<   	 t        j                  t        |d   |d   «      D �cg c]
  }t        |Ž ‘Œ c}d¬«      |d<   t        j                  t        |d   |d   «      D �cg c]
  }t        |Ž ‘Œ c}d¬«      |d<   |S c c}w c c}w # t        $ r#}t        j                  d|z  «       Y d}~|S d}~ww xY w)z*Return STK metadata from UIC tags as dict.Nr   ÚUIC2tagÚNumberPlanesú ÚPlaneDescriptionsÚUIC1tagÚUIC3tagÚUIC4tagÚ	ZDistanceÚTimeCreatedÚTimeModifiedÚDateCreatedzdatetime64[ns]rÕ   ÚDatetimeCreatedÚDateModifiedÚDatetimeModifiedzstk_metadata: %s)Úis_stkrO   r  r	  r{  r  rL   rk   r;   r  ÚzipÚjulian_datetimer,   rŸ   r    )r^   rV   r  rX   Úuic2tagÚdtrl   s          r    Ústk_metadatazTiffFile.stk_metadataÍ
  sÌ  € ð �{Š{ØØ�z‰z˜!‰}ˆØ�y‰yˆØˆØ!% i¡×!6Ñ!6ˆˆ~ÑØ×ÒØ*.×*:Ñ*:×*@Ñ*@ÀÓ*FˆFÐ&Ñ'ð ˜ÑØ�M‰M˜$˜y™/×/Ñ/Ô0Ø˜ÑØ�M‰M˜$˜y™/×/Ñ/Ô0Ø˜ÑØ�M‰M˜$˜y™/×/Ñ/Ô0Ø�y‘/×'Ñ'ˆØ% kÑ2ˆˆ{ÑØ '¨Ñ 6ˆˆ}ÑØ!(¨Ñ!8ˆˆ~Ñð	2Ü(-¯©ô " '¨-Ñ"8¸'À-Ñ:PÓQöàô $ RÒ(òð 'ô)ˆFÐ$Ñ%ô */¯©ô " '¨.Ñ"9¸7À>Ñ;RÓSöàô $ RÒ(òð 'ô*ˆFÐ%Ñ&ð ˆùòùòøô ò 	2Ü�M‰MÐ,¨qÑ0×1Ð1Øˆûð	2ús6   Ã5#E= ÄE3Ä'/E= ÅE8Å%E= Å3
E= Å=	F)ÆF$Æ$F)c                 óú   — | j                   sy| j                  d   }t        |j                   «      }d|j                  v r+	 |j	                  |j                  d   j
                  «       |S |S # t        $ r Y |S w xY w)z,Return consolidated ImageJ metadata as dict.Nr   Ú
IJMetadata)Ú	is_imagejrO   Úimagej_description_metadatar  rL   rk   r?   )r^   rV   rX   s      r    rB  zTiffFile.imagej_metadata÷
  sy   € ð �~Š~ØØ�z‰z˜!‰}ˆÜ,¨T¯^©^Ó<ˆØ˜4Ÿ9™9Ñ$ðØ—‘˜dŸi™i¨Ñ5×;Ñ;Ô<ð ˆˆvˆøô ò ØØˆðús   Á(A- Á-	A:Á9A:c                 óÊ   — | j                   syi }| j                  d   }|j                  |j                  d   j                  «       |j                  d   j                  |d<   |S )z.Return consolidated FluoView metadata as dict.Nr   Ú	MM_HeaderÚMM_StampÚStamp)Úis_fluoviewrO   rL   r  rk   )r^   rX   rV   s      r    rN  zTiffFile.fluoview_metadata  s\   € ð ×ÒØØˆØ�z‰z˜!‰}ˆØ�‰�d—i‘i Ñ,×2Ñ2Ô3àŸ)™) JÑ/×5Ñ5ˆˆw‰ð ˆr`   c                 óh   — | j                   sy| j                  d   j                  d   j                  S )z:Return NIH Image metadata from NIHImageHeader tag as dict.Nr   ÚNIHImageHeader)r  rO   r  rk   rÉ  s    r    Únih_metadatazTiffFile.nih_metadata  s.   € ð �{Š{ØØ�z‰z˜!‰}×!Ñ!Ð"2Ñ3×9Ñ9Ð9r`   c                 óœ   — | j                   sy| j                  d   j                  }d|v r|d   j                  S d|v r|d   j                  S y)z5Return FEI metadata from SFEG or HELIOS tags as dict.Nr   ÚFEI_SFEGÚ
FEI_HELIOS)Úis_feirO   r  rk   )r^   r  s     r    Úfei_metadatazTiffFile.fei_metadata   sX   € ð �{Š{ØØ�z‰z˜!‰}×!Ñ!ˆØ˜ÑØ˜
Ñ#×)Ñ)Ð)Ø˜4ÑØ˜Ñ%×+Ñ+Ð+ð  r`   c                 óh   — | j                   sy| j                  d   j                  d   j                  S )z,Return SEM metadata from CZ_SEM tag as dict.Nr   ÚCZ_SEM)Úis_semrO   r  rk   rÉ  s    r    Úsem_metadatazTiffFile.sem_metadata+  s-   € ð �{Š{ØØ�z‰z˜!‰}×!Ñ! (Ñ+×1Ñ1Ð1r`   c                 óè   — | j                   dd D ]  }d|j                  v sŒ|j                  } n yi }t        dd«      D ]/  }t        j                  |   }||vrŒ||   j
                  ||dd <   Œ1 |S )z6Return consolidated metadata from MD GEL tags as dict.Nr�   Ú	MDFileTagé¥‚  i­‚  )rO   r  rn  rM   ÚTAGSrk   )r^   rV   r  rX   r  rÚ  s         r    r`  zTiffFile.mdgel_metadata2  sŽ   € ð —J‘J˜r �Nò 	ˆDØ˜dŸi™iÒ'Ø—y‘y�Ùð	ð
 ØˆÜ˜% Ó'ò 	0ˆDÜ—9‘9˜T‘?ˆDØ˜4ÑØØ# D™z×/Ñ/ˆF�4˜˜�8Òð		0ð
 ˆr`   c                 ó4   — | j                   d   j                  S )zReturn Andor tags as dict.r   )rO   Ú
andor_tagsrÉ  s    r    Úandor_metadatazTiffFile.andor_metadataC  ó   € ð �z‰z˜!‰}×'Ñ'Ð'r`   c                 ó4   — | j                   d   j                  S )z'Return EPICS areaDetector tags as dict.r   )rO   Ú
epics_tagsrÉ  s    r    Úepics_metadatazTiffFile.epics_metadataH  rI  r`   c                 óh   — | j                   sy| j                  d   j                  d   j                  S )zReturn TVIPS tag as dict.Nr   ÚTVIPS)Úis_tvipsrO   r  rk   rÉ  s    r    Útvips_metadatazTiffFile.tvips_metadataM  s-   € ð �}Š}ØØ�z‰z˜!‰}×!Ñ! 'Ñ*×0Ñ0Ð0r`   c                 ó`   — | j                   syt        | j                  d   j                  «      S )z:Return MetaSeries metadata from image description as dict.Nr   )Úis_metaseriesÚmetaseries_description_metadatarO   r{  rÉ  s    r    Úmetaseries_metadatazTiffFile.metaseries_metadataT  s)   € ð ×!Ò!ØÜ.¨t¯z©z¸!©}×/HÑ/HÓIÐIr`   c                 ó`   — | j                   syt        | j                  d   j                  «      S )z7Return Pilatus metadata from image description as dict.Nr   )Ú
is_pilatusÚpilatus_description_metadatarO   r{  rÉ  s    r    Úpilatus_metadatazTiffFile.pilatus_metadata[  s'   € ð �ŠØÜ+¨D¯J©J°q©M×,EÑ,EÓFÐFr`   c                 ó´   — | j                   syt        | j                  «      }|j                  | j                  d   j
                  d   j                  «       |S )z2Return consolidated MicroManager metadata as dict.Nr   ÚMicroManagerMetadata)Úis_micromanagerÚread_micromanager_metadatar·   rL   rO   r  rk   )r^   rX   s     r    Úmicromanager_metadatazTiffFile.micromanager_metadatab  sI   € ð ×#Ò#Øä+¨D¯H©HÓ5ˆà�‰�d—j‘j ‘m×(Ñ(Ð)?Ñ@×FÑFÔGØˆr`   c                 óJ  — | j                   syi }	 t        | j                  «      \  }}||d<   |j                  |«       	 t        | j                  d   j                  «      |d<   |S # t        $ r Y Œ3w xY w# t        $ r#}t        j                  d|z  «       Y d}~|S d}~ww xY w)z<Return ScanImage non-varying frame and ROI metadata as dict.NÚ	FrameDatar   ÚDescriptionz)scanimage_description_metadata failed: %s)Úis_scanimageÚread_scanimage_metadatar·   rL   r,   Úscanimage_description_metadatarO   r{  r?   rŸ   r    )r^   rX   Ú	framedataÚroidatarl   s        r    Úscanimage_metadatazTiffFile.scanimage_metadatam  s±   € ð × Ò ØØˆð	Ü!8¸¿¹Ó!BÑˆI�wØ"+ˆF�;ÑØ�M‰M˜'Ô"ð	KÜ$BØ—
‘
˜1‘×)Ñ)ó%ˆF�=Ñ!ð
 ˆøô ò 	Ùð	ûô ò 	KÜ�M‰MÐEÈÑI×JÐJØˆûð	Kús)   ‘.A' Á %A6 Á'	A3Á2A3Á6	B"Á?BÂB"c                 óN   — | j                   sy| j                  d   j                  S )z0Return GeoTIFF metadata from first page as dict.Nr   )Ú
is_geotiffrO   Úgeotiff_tagsrÉ  s    r    Úgeotiff_metadatazTiffFile.geotiff_metadata‚  s"   € ð �ŠØØ�z‰z˜!‰}×)Ñ)Ð)r`   )NNNTN)NNNTr&   ©r   éO   )2rg   ro   rp   rq   r_   Úpropertyrí  rU   r   rû  rË  r/   rR   r  r3  rE  rR  rb  rf  r°  rÄ  rï  rð  rñ  rß  rÍ  rÕ  rõ  rú  r  r
  r  r  r  rÀ  r,  rB  rN  r8  r=  rA  r`  rH  rL  rP  rT  rX  r]  rf  rj  r   r`   r    r	   r	   Ç  s�  „ ñ"ðN ØØØØóiðV ñó ðð ñó ðð ñó ðòódðL ñó ðò:)òVZòxP
òd
ò,
ò<Sòròh òD%ò32òjò8

òòó<;ð| ñ
ó ð
ð ñó ðð ñ$ó ð$ð ñ
ó ð
ð ñ:ó ð:ð ñ#ó ð#ð ñ6ó ð6ð ñ'ó ð'ðR ñó ðð ñó ðð& ñ:ó ð:ð ñ,ó ð,ð ñ2ó ð2ð ñó ðð  ñ(ó ð(ð ñ(ó ð(ð ñ1ó ð1ð ñJó ðJð ñGó ðGð ñó ðð ñó ðð( ñ*ó ñ*r`   r	   c                   óð   — e Zd ZdZd„ Zed„ «       Zej                  d„ «       Zed„ «       Zej                  d„ «       Zed„ «       Z	e	j                  d„ «       Z	ed	„ «       Z
d
„ Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zy)rë  z(Sequence of TIFF image file directories.c                 ó  — || _         g | _        d| _        t        | _        d| _        d| _        |j                  }|j                  «       | _	        t        j                  |j                  |j                  |j                  «      «      d   }|dk(  rd| _        y||j                  k\  r t!        j"                  d|z  «       d| _        y|j%                  |«       t        |d¬«      }| j                  j'                  |«       || _        y)z“Initialize instance from file. Read first TiffPage from file.

        The file position must be at an offset to an offset to a TiffPage.

        FNTr   úinvalid page offset (%i))r†  )rŠ  rO   Úcompleterô  Ú	_tiffpageÚ	_keyframeÚ_cacherí  r—   Ú_nextpageoffsetr¹   rç  r  ræ  r  rG   rŸ   r    r%   r6   )r^   rŠ  r»   rS   rV   s        r    r_   zTiffPages.__init__�  sß   € ð ˆŒØˆŒ
ØˆŒÜ!ˆŒØˆŒØˆŒð ×ÑˆØ!Ÿw™w›yˆÔÜ—‘˜v×2Ñ2°B·G±G¸F×<MÑ<MÓ4NÓOÐPQÑRˆà�QŠ;à ˆDŒMØØ�R—W‘WÒÜ�M‰MÐ4°vÑ=Ô>Ø ˆDŒMØð 	�‰�ŒÜ˜ aÔ(ˆØ�
‰
×Ñ˜$ÔØˆ�r`   c                 ó   — | j                   S )z2Return if pages/frames are currently being cached.)rt  rÉ  s    r    rÆ  zTiffPages.cache®  s   € ð �{‰{Ðr`   c                 ód   — t        |«      }| j                  r|s| j                  «        || _        y)z@Enable or disable caching of pages/frames. Clear cache if False.N)r¢   rt  r  ©r^   rk   s     r    rÆ  zTiffPages.cache³  s&   € ô �U“ˆØ�;Š;™uØ�J‰JŒLØˆ�r`   c                 óD   — | j                   t        k(  xr t        t        uS )z?Return if currently using TiffFrame (True) or TiffPage (False).)rr  Ú	TiffFramerô  rÉ  s    r    rò  zTiffPages.useframes»  s   € ð �~‰~¤Ñ*ÒH¬yÄÐ/HÐHr`   c                 ó6   — |rt         | _        yt        | _        y)z0Set to use TiffFrame (True) or TiffPage (False).N)rz  rô  rr  rx  s     r    rò  zTiffPages.useframesÀ  s   € ñ ',œˆ�´ˆ�r`   c                 ó.   — | j                   j                  S )z!Return index of current keyframe.)rs  r†  rÉ  s    r    r  zTiffPages.keyframeÅ  s   € ð �~‰~×#Ñ#Ð#r`   c                 ó‚  — | j                   j                  |k(  ry| j                  s!d|cxk  rt        | j                  «      k  rSn nP| j                  |   }t        |t        «      r|| _         yt        |t        «      r|j                  | j                  |<   | j                  }t        | _
        | |   | _         || _	        y)z;Set current keyframe. Load TiffPage from file if necessary.Nr   )rs  r†  rq  r.   rO   r(   rô  rz  rS   rò  rr  )r^   r†  rV   rò  s       r    r  zTiffPages.keyframeÊ  s”   € ð �>‰>×Ñ 5Ò(ØØ�=Š=˜A Ô8¬¨T¯Z©Z«Õ8Ø—:‘:˜eÑ$ˆDÜ˜$¤Ô)Ø!%�”ØÜ˜D¤)Ô,à$(§K¡K�—
‘
˜5Ñ!à—N‘Nˆ	Ü!ˆŒØ˜e™ˆŒØ"ˆ�r`   c                 óT   — | j                   s| j                  d«       | j                  S )z7Return offset where offset to a new page can be stored.rÀ   )rq  Ú_seekru  rÉ  s    r    r™   zTiffPages.next_page_offsetÝ  s"   € ð �}Š}Ø�J‰J�rŒNØ×#Ñ#Ð#r`   c                 óJ  — | j                   j                  }| j                  }| j                  }| j                  s| j                  d«       t        |«      D ]J  \  }}t        |t        «      sŒ|j                  |«       | j                  | j                   ||¬«      }|||<   ŒL y)z#Read all remaining pages from file.rÀ   ©r†  r  N)rŠ  rí  rs  rO   rq  r  ro  r(   r  r%   rr  )r^   r»   r  rO   r   rV   s         r    r  zTiffPages.loadä  sƒ   € à�[‰[×#Ñ#ˆØ—>‘>ˆØ—
‘
ˆØ�}Š}Ø�J‰J�rŒNÜ  Ó'ò 	 ‰GˆAˆtÜ˜$¤Õ)Ø—‘˜”Ø—~‘~ d§k¡k¸ÀX�~ÓN�Ø��a’ñ		 r`   c                 ó^  — | j                   }| j                  rt        |«      dk  ry|d   | _        |r:t	        |dd «      D ](  \  }}t        |t        «      rŒ|j                  ||dz   <   Œ* yt        t        ur4t	        |«      D ]%  \  }}t        |t        «      sŒ|j                  ||<   Œ' yy)zADelete all but first page from cache. Set keyframe to first page.r&   Nr   )
rO   rt  r.   rs  ro  r(   r  rS   rz  rô  )r^   ÚfullyrO   r   rV   s        r    r  zTiffPages.clearñ  s¤   € à—
‘
ˆØ�{Š{œc %›j¨1šnØØ˜q™ˆŒÙä$ U¨1¨2 YÓ/ò /‘��4Ü! $¬Õ1Ø#'§;¡;�E˜!˜a™%’Lñ/ô œhÑ&ä$ UÓ+ò +‘��4Ü˜d¤IÕ.Ø#Ÿ{™{�E˜!’Hñ+ð 'r`   c                 ó|  — | j                   }|sy| j                  j                  }|j                  rt	        d«      ‚| j
                  sd|cxk  rt        |«      k  r8n n5||   }t        |t        «      r|n|j                  }|j                  |«       y| j                  j                  }| j                  j                  }| j                  j                  }	| j                  j                  }
| j                  j                  }t         j"                  }|d   }t        |t        «      r|n|j                  }t        |«      |k  rø|j                  |«       	  ||	|j%                  |
«      «      d   }|dkD  rt'        d«      ‚	 ||
z   ||z  z   | _        |j                  | j.                  «        |||j%                  |«      «      d   }|dk(  rd| _        ng||j0                  k\  r t+        j,                  d	|z  «       d| _        n8|j3                  |«       d|cxk  rt        |«      k  rn nnt        |«      |k  rŒø|t        |«      k\  rt5        d
«      ‚||   }|j                  t        |t        «      r|«       y|j                  «       y# t(        $ r% t+        j,                  d|z  «       |d= d| _        Y Œ~w xY w)z&Seek file to offset of specified page.NzFileHandle is closedr   rÀ   é   úsuspicious number of tagsúcorrupted tag list at offset %iTrp  úlist index out of range)rO   rŠ  rí  Úclosedrc   rq  r.   r(   r  rS   r%   r  r  r‰  rè  rŠ  r¹   rç  ræ  r,   r?   rŸ   r    ru  rG   r6   r—  )r^   r†  ÚmaxpagesrO   r»   rV   rS   r  r  r‰  rè  rŠ  rç  Útagnos                 r    r  zTiffPages._seek  sV  € à—
‘
ˆÙØà�[‰[×#Ñ#ˆØ�9Š9ÜÐ5Ó6Ð6à�=Š=˜A Ô3¬¨U«Õ3Ø˜‘<ˆDÜ'¨¬hÔ7‘T¸T¿[¹[ˆFØ�G‰G�FŒOØà—{‘{×/Ñ/ˆØ—[‘[×+Ñ+ˆ
Ø—k‘k×-Ñ-ˆØ—K‘K×)Ñ)ˆ	Ø—+‘+×%Ñ%ˆÜ—‘ˆà�R‰yˆÜ# D¬(Ô3‘¸¿¹ˆä�%‹j˜8Ò#à�G‰G�FŒOðÙ˜{¨B¯G©G°IÓ,>Ó?ÀÑB�Ø˜4’<Ü$Ð%@ÓAÐAð  ð $*¨IÑ#5¸À¹Ñ#GˆDÔ Ø�G‰G�D×(Ñ(Ô)ñ ˜L¨"¯'©'°*Ó*=Ó>¸qÑAˆFØ˜Š{Ø $�”ØØ˜Ÿ™Ò Ü—‘Ð8¸6ÑAÔBØ $�”Øà�L‰L˜Ô Ø�EÔ&œC ›JÕ&Øô9 �%‹j˜8Ó#ð< ”C˜“JÒÜÐ6Ó7Ð7à�U‰|ˆØ
�‰œ
 4¬Ô2�ÕD¸¿¹ÕDøô5 ò Ü—‘Ð?À&ÑHÔIØ˜"�IØ $�”Ùð	ús   Å+J Ê+J;Ê:J;c                 ó2   — t        | j                  «      dkD  S )z'Return True if file contains any pages.r   )r.   rO   rÉ  s    r    Ú__bool__zTiffPages.__bool__@  s   € ä�4—:‘:‹ Ñ"Ð"r`   c                 óf   — | j                   s| j                  d«       t        | j                  «      S )zReturn number of pages in file.rÀ   )rq  r  r.   rO   rÉ  s    r    Ú__len__zTiffPages.__len__D  s"   € à�}Š}Ø�J‰J�rŒNÜ�4—:‘:‹Ðr`   c                 óœ  — | j                   }|st        d«      ‚|dk(  r||   S t        |t        «      r{|j	                  d«      \  }}}| j
                  s)t        ||«      t        |«      kD  r| j                  d«       t        |j	                  t        |«      «      Ž D �cg c]  }| |   ‘Œ	 c}S | j
                  r|t        |«      k\  rt        d«      ‚	 ||   }t        |t        «      s|S | j                  |«       | j                  | j                  || j                  ¬«      }| j                  r|||<   |S c c}w # t        $ r d}Y Œpw xY w)z,Return specified page(s) from cache or file.rˆ  r   rD  rÀ   r�  )rO   r—  r(   r	  rÐ  rq  rü  r.   r  rn  r  rr  rŠ  rs  rt  )r^   rC  rO   r¥  r¦  rY   r   rV   s           r    Ú__getitem__zTiffPages.__getitem__J  s)  € à—
‘
ˆÙÜÐ6Ó7Ð7Ø�!Š8Ø˜‘:Ðä�cœ5Ô!Ø Ÿ[™[¨Ó3‰NˆE�4˜Ø—=’=¤S¨¨uÓ%5¼¸E»
Ò%BØ—
‘
˜2”Ü%*¨C¯K©K¼¸E»
Ó,CÐ%DÖE �D˜“GÒEÐEà�=Š=˜S¤C¨£JÒ.ÜÐ6Ó7Ð7ð	Ø˜‘:ˆDô ˜$¤Ô)ØˆKà�
‰
�3ŒØ�~‰~˜dŸk™k°¸t¿~¹~ˆ~ÓNˆØ�;Š;ØˆE�#‰JØˆùò! Føô ò 	ØŠDð	ús   Â D8ÃD= Ä=EÅ
Ec              #   óJ   K  — d}	 	 | |   –— |dz  }Œ# t         $ r Y yw xY w­w)zReturn iterator over all pages.r   r&   N)r—  )r^   r   s     r    Ú__iter__zTiffPages.__iter__h  s=   è ø€ àˆØðØ˜1‘g’Ø�Q‘�ð øô ò Ùðüs   ‚#‡ “#”	 �#Ÿ  #N©T)i  @ )rg   ro   rp   rq   r_   rm  rÆ  Úsetterrò  r  r™   r  r  r  r�  r�  r‘  r“  r   r`   r    rë  rë  Š  sÌ   „ Ù2òðB ñó ðð ‡\�\ñó ðð ñIó ðIð ×Ññ:ó ð:ð ñ$ó ð$ð ‡_�_ñ#ó ð#ð$ ñ$ó ð$ò ó+ó"<Eò|#òòó<r`   rë  c                   ó   — e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZd3d„Z	 	 	 	 	 	 d4d„Z	 	 	 	 	 d5d	„Zd
„ Zed„ «       Zej<                  d„ «       Zed„ «       Z ed„ «       Z!ed„ «       Z"ed„ «       Z#d6d„Z$ed„ «       Z%ed„ «       Z&ed„ «       Z'ed„ «       Z(ed„ «       Z)ed„ «       Z*ed„ «       Z+ed„ «       Z,ed„ «       Z-ed„ «       Z.ed„ «       Z/ed„ «       Z0ed„ «       Z1ed„ «       Z2ed „ «       Z3ed!„ «       Z4ed"„ «       Z5ed#„ «       Z6ed$„ «       Z7ed%„ «       Z8ed&„ «       Z9ed'„ «       Z:ed(„ «       Z;ed)„ «       Z<ed*„ «       Z=ed+„ «       Z>ed,„ «       Z?ed-„ «       Z@ed.„ «       ZAed/„ «       ZBed0„ «       ZCed1„ «       ZDed2„ «       ZEy)7rô  a  TIFF image file directory (IFD).

    Attributes
    ----------
    index : int
        Index of page in file.
    dtype : numpy.dtype or None
        Data type (native byte order) of the image in IFD.
    shape : tuple
        Dimensions of the image in IFD.
    axes : str
        Axes label codes:
        'X' width, 'Y' height, 'S' sample, 'I' image series|page|plane,
        'Z' depth, 'C' color|em-wavelength|channel, 'E' ex-wavelength|lambda,
        'T' time, 'R' region|tile, 'A' angle, 'P' phase, 'H' lifetime,
        'L' exposure, 'V' event, 'Q' unknown, '_' missing
    tags : dict
        Dictionary of tags in IFD. {tag.name: TiffTag}
    colormap : numpy.ndarray
        Color look up table, if exists.

    All attributes are read-only.

    Notes
    -----
    The internal, normalized '_shape' attribute is 6 dimensional:

    0 : number planes/images  (stk, ij).
    1 : planar samplesperpixel.
    2 : imagedepth Z  (sgi).
    3 : imagelength Y.
    4 : imagewidth X.
    5 : contig samplesperpixel.

    r   r&   ì   ÿÿ Nr'  c           	      ó¬  ‡— || _         || _        d| _        d| _        d| _        d| _        d| _        i | _        d| _        d| _	        |j                  }|j                  «       | _        	 t        j                  |j                  |j!                  |j"                  «      «      d   }|dkD  rt%        d«      ‚	 |j(                  }|j!                  ||z  «      }| j                  }| }t+        |«      D ]­  }	||z  }	 t-        | j                   ||||z    «      }
|
j6                  }||vr|}|
||<   nd}	 d	||fz  }||vr|
||<   nŒt8        j:                  j=                  |d«      }|sŒu|dd
 dv rt?        |
j@                  t4        «      sŒ—tC        | ||
j@                  «       Œ¯ |sy| jD                  r| jF                   n| jH                  r| jJ                   | jL                  s"| j                  r4| j                   jL                  r| j                  d   jO                  | «       | jP                  s"| j                  r| j                   jP                  rd| _)        | jT                  r€d|v r||d   j@                  sm|d   }|jW                  |jX                  «       t[        || j                   j\                  |j                  |j^                  d|d   j^                  «      |d   _         d|v rD	 ta        |d   j@                  |d   j@                  | j                   j\                  «      |d   _         d|v re|d   }
|
j^                  dk(  r|
j@                  | _1        n?|
j@                  d| jd                   Štg        ˆfd„‰D «       «      r‰| _1        n
‰d   | _1        d|v re|d   }
|
j^                  dk(  r|
j@                  | _4        n?|
j@                  d| jd                   Štg        ˆfd„‰D «       «      r‰| _4        n
‰d   | _4        d|v r'd|vs|d   j^                  dkD  r| jj                  | _6        | jh                  | jb                  f}t8        jn                  j=                  |d«      }|�tq        j                  |«      }|x| _        | _        | jj                  }| jr                  }| jR                  }| jd                  }| jT                  �rO| jR                  dk(  sJ ‚|d   j@                  }|d   j^                  }| jt                  dk(  r7|dd|||f| _        |dk(  r|||f| _        d| _        nI||||f| _        d| _        n6||d||df| _        |dk(  r|||f| _        d| _        n||||f| _        d| _        |dk(  r| j                  dd | _        �nNtq        jv                  |d   dk7  «      rd| j                  z   | _        �ntq        jv                  tq        jx                  |d   «      dk7  «      rd| j                  z   | _        nÚd| j                  z   | _        nÅ| jz                  dk(  s|dkD  r}| jt                  dk(  r7dd||||f| _        |dk(  r|||f| _        d| _        n~||||f| _        d| _        nkd||||df| _        |dk(  r|||f| _        d| _        nG||||f| _        d | _        n4dd|||df| _        |dk(  r||f| _        d| _        n|||f| _        d!| _        d"|v r|d"   j@                  | _        n d#|v r|d#   j@                  | _        nd$| _        d%|v r|d%   j@                  | _	        nhd&|v r|d&   j@                  | _	        nOt}        | j                  «      | jb                  d'z  z  f| _	        | j~                  dk7  rt1        j2                  d(«       t�        | j                  «      t�        | j                  «      k(  sJ ‚y# t&        $ r t%        d| j                  z  «      ‚w xY w# t,        j.                  $ r)}t1        j2                  t5        |«      «       Y d}~�Œ(d}~ww xY w# t&        $ r)}t1        j2                  t5        |«      «       Y d}~�Œ$d}~ww xY w))zlInitialize instance from file.

        The file handle position must be at offset to a valid IFD.

        r   Nr'  r   r…  r†  r‡  r&   z%s%irÉ   zsof desr7  r  r  r.  ÚIJMetadataByteCountsc              3   ó.   •K  — | ]  }|‰d    z
  –— Œ y­wrä   r   ©r   Úvrk   s     €r    r!   z$TiffPage.__init__.<locals>.<genexpr>  ó   øè ø€ Ò4¨˜˜E !™H�Ñ4ùó   ƒr2  c              3   ó.   •K  — | ]  }|‰d    z
  –— Œ y­wrä   r   r›  s     €r    r!   z$TiffPage.__init__.<locals>.<genexpr>$  r�  rž  r*  r?  ÚYXÚYXSÚSYXr   r=  r!  r;  rŽ   r�   ÚZYXSÚSZYXÚZYXÚTileOffsetsÚStripOffsetsr9  ÚTileByteCountsÚStripByteCountsr‡   z"required ByteCounts tag is missing)ArŠ  r†  rD   r«   r<   r,  r  r  rË  rÙ  rí  r—   rS   r¹   rç  r‰  ræ  rè  r,   r?   rŠ  rn  ÚTiffTagÚErrorrŸ   r    r›   rÚ  rM   ÚTAG_ATTRIBUTESr@   r(   rk   rh   Úis_andorrG  Úis_epicsrK  rì  Ú_fix_lsm_bitspersampleÚis_vistaÚ
imagedepthr'  r%   ÚvalueoffsetÚread_uic1tagr8   r	  rB  r7  r‘  r*   r—  Úimagelengthrx  ÚSAMPLE_DTYPESr;   Ú
imagewidthru  r˜  rÎ   rt  r   rî  r.   )r^   rŠ  r†  r  r»   r‹  rŠ  rC   r  rY   r¢  rl   ÚtagnamerÚ  r   Úuic1tagr<   r´  r¶  r±  r‘  ÚuictagÚplanesrk   s                          @r    r_   zTiffPage.__init__®  s  ø€ ð ˆŒØˆŒ
ØˆŒ
ØˆŒØˆŒ
ØˆŒØˆŒ	ØˆŒ	àˆÔØ ˆÔð ×ÑˆØ—g‘g“iˆŒð	NÜ—M‘M &×"4Ñ"4°b·g±g¸f×>NÑ>NÓ6OÓPÐQRÑSˆEØ�tŠ|Ü Ð!<Ó=Ð=ð ð
 —.‘.ˆØ�w‰w�w ‘Ó'ˆØ�y‰yˆØ�ˆÜ�u“ò 	3ˆAØ�WÑˆEðÜ˜dŸk™k¨4°¸À¹Ð+HÓI�ð —h‘hˆGØ˜dÑ"Ø�Ø ��T’
ð �ØØ! W¨a LÑ0�DØ 4Ñ'Ø%(˜˜T™
Øð	 ô
 ×&Ñ&×*Ñ*¨4°Ó4ˆDÚØ˜˜�8˜yÑ(´¸C¿I¹IÄsÔ1KØä˜D $¨¯	©	Õ2ð3	3ñ6 Øð �=Š=Ø�O‹OØ�]Š]Ø�OŠOà�;Š;˜4Ÿ:š:¨$¯+©+×*<Ò*<à�I‰I�oÑ&×=Ñ=¸dÔCà�=Š=˜TŸZšZ¨D¯K©K×,@Ò,@àˆDŒOà�;Š;˜9¨Ñ,°T¸)±_×5JÒ5Jà˜9‘oˆGØ�G‰G�G×'Ñ'Ô(Ü$0ØØ—‘×%Ñ%Ø—‘Ø—‘ØØ�Y‘×%Ñ%ó%ˆD�‰OÔ!ð ˜4Ñð&Ü+:Ø˜Ñ&×,Ñ,ØÐ/Ñ0×6Ñ6Ø—K‘K×)Ñ)ó,��\Ñ"Ô(ð ˜dÑ"Ø�Ñ'ˆCØ�y‰y˜AŠ~Ø%(§Y¡Y�Õ"ð Ÿ	™	Ð"8 D×$8Ñ$8Ð9�ÜÓ4¨eÔ4Ô5Ø).�DÕ&à).¨q©�DÔ&à˜TÑ!Ø�~Ñ&ˆCØ�y‰y˜AŠ~Ø$'§I¡I�Õ!àŸ	™	Ð"8 D×$8Ñ$8Ð9�ÜÓ4¨eÔ4Ô5Ø(-�DÕ%à(-¨a©�DÔ%à˜DÑ Ø TÑ)¨T°.Ñ-A×-GÑ-GÈ!Ò-KØ$(×$4Ñ$4�Ô!ð ×!Ñ! 4×#5Ñ#5Ð5ˆÜ×"Ñ"×&Ñ& u¨dÓ3ˆØÐÜ—K‘K Ó&ˆEØ#(Ð(ˆŒ
�T”[ð ×&Ñ&ˆØ—_‘_ˆ
Ø—_‘_ˆ
Ø×.Ñ.ˆà�;‹;Ø—?‘? aÒ'Ð'Ð'Ø˜)‘_×*Ñ*ˆFØ˜)‘_×*Ñ*ˆFØ× Ñ  AÒ%Ø% q¨!¨[¸*ÀoÐV�”Ø" aÒ'Ø"(¨+°zÐ!B�D”JØ $�D•Ià"(¨+°zÀ?Ð!S�D”JØ %�D•Ià% ¸¸;È
ÐTUÐV�”Ø" aÒ'Ø"(¨+°zÐ!B�D”JØ $�D•Ià"(¨/¸;È
Ð!S�D”JØ %�D”Ià˜Š{Ø!ŸZ™Z¨¨˜^�–
Ü—‘˜6 +Ñ.°!Ñ3Ô4Ø $§)¡)™O�–	Ü—‘œ5Ÿ:™: f¨]Ñ&;Ó<ÀÑAÔBØ $§)¡)™O�•	à $§)¡)™O�•	Ø×Ñ Ò" o¸Ò&9Ø× Ñ  AÒ%àØØØØØ#ð�”ð  ’?Ø"-¨z¸?Ð!K�D”JØ %�D•Ià",¨k¸:ÀÐ!W�D”JØ &�D•Ið Ø#ØØØØð�”ð  ’?Ø"1°;À
Ð!K�D”JØ %�D•Ià"1°:¸{ÈJÐ!W�D”JØ &�D•Ià˜a ¨[¸*ÀaÐHˆDŒKØ˜QŠØ)¨:Ð6�”
Ø �•	à(¨+°zÐB�”
Ø!�”	ð ˜DÑ Ø# MÑ2×8Ñ8ˆDÕØ˜tÑ#Ø# NÑ3×9Ñ9ˆDÕà#ˆDÔà˜tÑ#Ø"&Ð'7Ñ"8×">Ñ">ˆDÕØ $Ñ&Ø"&Ð'8Ñ"9×"?Ñ"?ˆDÕä#*¨4¯:©:Ó#6¸$×:LÑ:LÐPQÑ:QÑ#RÐ"TˆDÔØ×Ñ 1Ò$Ü—‘ÐBÔCä�4—:‘:‹¤# d§i¡i£.Ò0Ð0Ñ0øôY ò 	NÜÐ>ÀÇÁÑLÓMÐMð	Nûô —=‘=ò Ü—‘œc !›fÔ%Ýûðûôz ò &Ü—‘œc !›f×%Ò%ûð&ús>   Á*A^= Ã:_"Ë'A`! Þ="_ß"`ß5`à`à!	aà*aáac           
      óŽ  ‡ ‡*‡+‡,— ‰ }‰ j                   Š ‰ j                  rt        ‰ j                  «      dk(  ry‰ j                  }|s|�€/|r9t        ‰ j                  «      |kD  r!t	        dt        ‰ j                  «      z  «      ‚‰ j                  €$t	        d‰ j                  ‰ j                  fz  «      ‚‰ j                  t        j                  vr"t	        d‰ j                  j                  z  «      ‚d|v rJ|d   Š,‰,j                  dk7  r6t        ˆ,fd„‰,j                  D «       «      rt	        d	‰,j                  z  «      ‚‰ j                   r)‰ j                  d
k7  s‰ j"                  dk(  rt%        d«      ‚|€y|j&                  j(                  }	|€|	j*                  n|}|5  |	j,                  }
|
r|r|	j/                  «        nt1        d«      ‚ddd«       ‰ j2                  Š+‰ j                  }‰ j4                  }‰ j6                  }‰ j8                  }‰ j                  Š*‰ j&                  j:                  ‰+j<                  z   }‰ j>                  dk(  }|j@                  \  }}‰ jB                  }|rk‰ jD                  }‰ jF                  }‰ jH                  }||z   dz
  |z  }||z   dz
  |z  }||z   dz
  |z  }|d   |d   ||z  ||z  ||z  |d   f}||||d   f}|}n|}‰ j"                  dk(  r|‰ jJ                  z  }|dk(  r0‰ jL                  r$|5  |	jO                  |||d   ¬«      }ddd«       �nb‰ jP                  r­|�tS        ||‰+«      }|5  |	jU                  |d   «       |	jW                  |t        |«      |¬«      }ddd«       |€Pj                  jX                  s:|j[                  d«       |j]                  |j                  j_                  «       «      }|�r¶ta        «       �n©tS        ||‰+«      }t        j                  ‰ j                     }‰ j                  d
k(  r`‰*dvrt	        d‰*z  «      ‚d|v r|d   j                  }nd}tb        }t        je                  ‰ jf                  «      j                  } ||‰*| fd„}n?‰*dv r‰*|z  dz  rt	        d«      ‚|fˆ*ˆ+ˆ fd„	}nti        ‰*tj        «      r|‰*fd„}n|‰*|fd„}|�rd}!d\  }}}}"tm        |	|||«      D ]ç  }#|rta        |#«      }# ||#«      }# ||#«      }#	 |#_7        ‰ j~                  dk(  rF|!€|#j€                  d    }!|!rtu        j‚                  |#d!‰+|#¬"«       n2tu        j‚                  |#d!‰+¬#«      }#n‰ j~                  d$k(  r
t%        «       ‚|#|d|"||z   …||z   …||z   …dd…f<   ~#||z  }||d%   k\  sŒÁd||z   }}||d$   k\  sŒÑd||z   }}||d   k\  sŒád|"dz   }"}Œé |d&d|…d|…d|…dd…f   }nº‰ j„                  ‰ j4                  z  }&‰ j"                  dk(  r|&‰ jJ                  z  }&|jy                  d«      }d}'tm        |	|||«      D ]_  }(|rta        |(«      }( ||(«      }( ||(«      }(t{        |j|                  |(j|                  |&|j|                  |'z
  «      })|(d|) ||'|'|)z    ~(|'|)z  }'Œa ‰ j                  _7        ‰ j~                  dk7  rw|r‰ jP                  ri‰ j&                  j†                  r‰ j                  dk(  rnC‰ j~                  dk(  rtu        j‚                  |d!‰+|¬"«       n‰ j~                  d$k(  rt‰        |«      }|r	 ‰ jn                  |_7        
r|	j‹                  «        |S # 1 sw Y   �Œ‚xY w# 1 sw Y   ŒÕxY w# 1 sw Y   �ŒíxY w# t        $ rw tq        jr                  d«       tu        jv                  ‰+«      jy                  d«      }$t{        |#j|                  |$j|                  «      }%|#d|% |$d|% |$jy                  |«      }#Y �Œów xY w# t        $ rE tq        jr                  d't        |jn                  «      ›d(t        ‰ jn                  «      ›�«       Y �Œ
w xY w))a5  Read image data from file and return as numpy array.

        Raise ValueError if format is unsupported.

        Parameters
        ----------
        out : numpy.ndarray, str, or file-like object; optional
            Buffer where image data will be saved.
            If None (default), a new array will be created.
            If numpy.ndarray, a writable array of compatible dtype and shape.
            If 'memmap', directly memory-map the image data in the TIFF file
            if possible; else create a memory-mapped array in a temporary file.
            If str or open file, the file name or file object used to
            create a memory-map to an array stored in a binary file on disk.
        squeeze : bool
            If True, all length-1 dimensions (except X and Y) are
            squeezed out from the array.
            If False, the shape of the returned array might be different from
            the page.shape.
        lock : {RLock, NullContext}
            A reentrant lock used to synchronize reads from file.
            If None (default), the lock of the parent's filehandle is used.
        reopen : bool
            If True (default) and the parent file handle is closed, the file
            is temporarily re-opened and closed if no exception occurs.
        maxsize: int or None
            Maximum size of data before a ValueError is raised.
            Can be used to catch DOS. Default: 16 TB.
        validate : bool
            If True (default), validate various parameters.
            If None, only validate parameters and return None.

        r   Nzdata are too large %szdata type not supported: %s%izcannot decompress %sr2  r&   c              3   óB   •K  — | ]  }|‰j                   d    z
  –— Œ y­wrä   ©rk   )r   r   r¢  s     €r    r!   z#TiffPage.asarray.<locals>.<genexpr>Ó  s   øè ø€ Ò*OÀ¨1¨s¯y©y¸©|Õ+;Ñ*Oùó   ƒzsample formats do not match %sé   r�   z chroma subsampling not supportedzfile handle is closedrÀ   r   ©rS   ©r   T)r‡   rŒ   zunsupported JPEG precision %iÚ
JPEGTablesr`   c                 ó6   —  || |||«      j                  d«      S ©NrÀ   )ra  )rî   r\   Útabler7  Ú
colorspaces        r    Ú
decompressz$TiffPage.asarray.<locals>.decompress&  s    € ñ    5¨-¸ÓD×LÑLÈRÓPÐPr`   )r‡   r½   é    é@   rU  r‡   zdata and sample size mismatchc                 óæ   •— ‰j                   dk(  r‰j                  }	 t        j                  | |«      S # t        $ r3 t        | «      ‰dz  z  ‰dz  z  }t        j                  | d | |«      cY S w xY w)NrÉ   r‡   )ry  rT   r;   Ú
frombufferr,   r.   )rî   r  Úxlenr7  r<   r^   s      €€€r    rç  z TiffPage.asarray.<locals>.unpack3  s}   ø€ Ø—~‘~¨Ò*ð $)§:¡:˜ðDä$×/Ñ/°°8Ó<Ð<øÜ%ò Dô !$ A£¨=¸AÑ+=Ñ >À=ÐTUÑCUÑV˜Ü$×/Ñ/°°%°4°¸(ÓCÒCð	Dús   ž4 ´9A0Á/A0c                 ó   — t        | ||«      S r   )Ú
unpack_rgb)rî   r  r7  s      r    rç  z TiffPage.asarray.<locals>.unpackC  s   € Ü% a¨°=ÓAÐAr`   c                 ó   — t        | |||«      S r   )Úunpack_ints)rî   r  r7  Úrunlens       r    rç  z TiffPage.asarray.<locals>.unpackH  s   € ô ' q¨(°MÀ6ÓJÐJr`   )r   r   r   r   zinvalid tile dataÚ	WRITEABLErÁ   ©rÍ   r<   r   )rÍ   r<   rÉ   r‹   .zfailed to reshape from r  )Fr  r«   r   r  r,   r›   r<   r—  r7  rî  rM   r  rÚ  r	  r*   rk   Úis_chroma_subsampledru  ÚNotImplementedErrorrŠ  rí  Úlockr‰  Úopenrœ   r,  r¶  r´  r±  r8   rT   Ú	fillorderÚoffsets_bytecountsÚis_tiledÚ	tilewidthÚ
tilelengthÚ	tiledepthr‘  rP   r  rQ   r   r%   r  rK  ÚbyteswapÚviewrJ  Úreverse_bitorderÚidentityfuncrQ  rt  r(   r  Úbuffered_readrD   rŸ   r    r;   Úzerosra  rq  rG   ry  rú  Úcumsumrx  rì  Údecode_floatsrË  )-r^   r   r  rÖ  ÚreopenÚmaxsizer  Úself_r  r»   r‰  rD   r¶  r´  r±  r  Úlsb2msbrØ  rÚ  ÚistiledrÛ  rÜ  rÝ  ÚtwÚtlÚtdÚ	tileshaperÑ  rX   rÇ  rÅ  rç  rÆ  ÚwritableÚplrv  rG  rû   Ú
strip_sizer†  r¯  rG   r7  r<   r¢  s-   `                                         @@@r    r/   zTiffPage.asarray•  sH  û€ ðT ˆØ�}‰}ˆà�{Š{œg d§k¡kÓ2°aÒ7Øà�y‰yˆá�xÑ'Ùœ7 4§;¡;Ó/°'Ò9Ü Ð!8¼3¸t¿{¹{Ó;KÑ!KÓLÐLØ�z‰zÐ!Ü Ø3Ø×(Ñ(¨$×*<Ñ*<Ð=ñ>óð ð ×Ñ¤t×'8Ñ'8Ñ8Ü Ð!7¸$×:JÑ:J×:OÑ:OÑ!OÓPÐPØ Ñ%Ø˜>Ñ*�Ø—9‘9 ’>¤cÓ*OÀSÇYÁYÔ*OÔ&PÜ$Ð%EÈÏ	É	Ñ%QÓRÐRØ×(Ò(Ø× Ñ  AÒ%¨×):Ñ):¸aÒ)?ä)Ð*LÓMÐMØÐØà�\‰\×$Ñ$ˆØ˜,ˆr�wŠw¨DˆØñ 	;Ø—Y‘YˆFÙÙØ—G‘G•Iä!Ð"9Ó:Ð:÷	;ð —‘ˆØ—‘ˆØ—_‘_ˆ
Ø×&Ñ&ˆØ—_‘_ˆ
Ø×*Ñ*ˆØ—;‘;×(Ñ(¨5¯:©:Ñ5ˆØ—.‘. AÑ%ˆØ#×6Ñ6Ñˆ�Ø—-‘-ˆáØŸ™ˆIØŸ™ˆJØŸ™ˆIØ˜yÑ(¨1Ñ,°Ñ:ˆBØ 
Ñ*¨QÑ.°:Ñ=ˆBØ˜yÑ(¨1Ñ,°Ñ:ˆBà�a‘Ø�a‘Ø�Y‘Ø�Z‘Ø�Y‘Ø�b‘	ðˆEð # J°	¸5À¹9ÐEˆIØ‰FàˆFà×Ñ Ò!Ø�d×*Ñ*Ñ*ˆFà�(Š?˜t×2Ò2Øñ MØŸ™¨°5ÀÈÁ˜ÓL�÷Mñ Mà×ÒØˆÜ# C¨°Ó6�Øñ JØ—‘˜ ™
Ô#ØŸ™ x´¸³ÀS˜ÓI�÷Jð ˆ{ 6§<¡<×#8Ò#8à—‘ Ô%ØŸ™ V§\¡\×%>Ñ%>Ó%@ÓA�ÚÜ  Ö(ä" 3¨¨uÓ5ˆFä×*Ñ*¨4×+;Ñ+;Ñ<ˆJà×Ñ 1Ò$Ø ¨Ñ/Ü$Ð%DÀ}Ñ%TÓUÐUØ 4Ñ'Ø  Ñ.×4Ñ4‘Eà�EÜ%�Ü!×-Ñ-¨d×.>Ñ.>Ó?×DÑD�
ð $ØØ"/Ø)ôQð Ð"6Ñ6Ø! FÑ*¨aÒ/Ü$Ð%DÓEÐEà'/÷ Dð Dô ˜M¬5Ô1à'/¸}ô Bð !)¸ÈfóKò
 Ø�Ø!+‘��B˜˜BÜ)¨"¨d°G¸ZÓHò &3�DÙÜ/°Ó5˜Ù% dÓ+�DÙ! $›<�Dð4Ø%.˜œ
ð —~‘~¨Ò*Ø#Ð+Ø'+§z¡z°+Ñ'>˜HÙ#Ü!ŸL™L¨°B¸eÈÖNä#(§<¡<°¸2ÀUÔ#K™DØŸ™¨1Ò,Ü1Ó3Ð3ð ð ØØØ˜R )™^Ð+Ø˜R *™_Ð,Ø˜R )™^Ð+Úðñð Ø˜)‘O�BØ˜U 1™X“~Ø!" B¨¡O˜B˜Ø  q¡›>Ø%&¨¨Y© ˜BØ! U¨1¡X›~Ø)*¨B°©F B¡ðM&3ðN    [ j [°,°;°,ÀÀÀÊQÐ NÑO‘à!×.Ñ.°·±Ñ@�
Ø×$Ñ$¨Ò)Ø $×"6Ñ"6Ñ6�JØŸ™¨Ó+�Ø�Ü*¨2¨t°W¸jÓIò "�EÙÜ 0°Ó 7˜Ù& uÓ-�EÙ" 5›M�EÜ˜vŸ{™{¨E¯J©J¸
ÀFÇKÁKÐRWÑDWÓX�DØ38¸¸$°<�F˜5 5¨4¡<Ð0ØØ˜T‘M‘Eð"ð —{‘{ˆŒà�>‰>˜QÒ©¸×8JÒ8JØ�{‰{×!Ò! d×&6Ñ&6¸!Ò&;ØØ—‘ 1Ò$Ü—‘˜V¨"°E¸vÖFØ—‘ 1Ò$Ü& vÓ.�áðØ#Ÿz™z�”ñ à�H‰HŒJØˆ÷A	;ñ 	;ú÷VMð Mú÷
Jñ JûôR &ò 4ä Ÿ™Ð&9Ô:Ü!ŸK™K¨	°5Ó9×AÑAÀ"ÓE˜Ü §	¡	¨1¯6©6Ó2˜Ø $ R a ˜˜"˜1˜Ø Ÿy™y¨Ó3›ð4ûô| ò Ü—’ä˜6Ÿ<™<Õ(¬#¨d¯j©j¬/ð;÷ðúsJ   Æ -]Ì
]Í	2]&Ó8]3Ü(_6 Ý]Ý]#Ý&]0Ý3A<_3ß2_3ß6A
aáac                 ó0  —  | j                   |i |¤Ž}| j                  } | j                  }	t        j                  }
|	|
j
                  k(  r®| j                  }|j                  d   d| j                  z  k  s| j                  j                  dvrt        d«      ‚|r)|j                  «       dkD  r|dz  }|j                  d«      }d| j                  v r| j                  dk(  r|d	   n|d
   }t!        ||«      }|S |	|
j"                  k(  r¼d| j$                  v r‡|€t        j&                  }| j(                  }| j$                  d   j*                  dk(  r|f}t-        |«      D ]:  \  }}||v sŒ| j                  dk(  r|dd
ddd|z   gf   }n|dd…d
ddd|z   gf   } |S  |S | j                  dk(  r|ddd…f   }|S |dd…dd…f   }|S |	|
j.                  k(  r
t1        «       ‚|	|
j2                  k(  r
t1        «       ‚|	|
j4                  k(  r
t1        «       ‚t1        «       ‚)zAReturn image data as RGB(A).

        Work in progress.

        r&   r�   rÔ   zcannot apply colormapéÿ   r‡   Úuint8ÚS©.r   r   r8  N.rÉ   )r/   r  rt  rM   rQ  rU  rz  rD   r7  r<   rT   r,   rü  rZ  r  ru  Úapply_colormaprS  r  ÚEXTRASAMPLEr’  r	  ro  rR  rÕ  r`  Ú	SEPARATED)r^   rô  Úalpharz  ÚdminÚdmaxÚargsr0   rC   rt  rQ  r’  r   Úexss                 r    ÚasrgbzTiffPage.asrgb   sE  € ð ˆt�|‰|˜TÐ, VÑ,ˆØ�}‰}ˆØ×&Ñ&ˆÜ×&Ñ&ˆà˜+×-Ñ-Ò-Ø—}‘}ˆHØ�~‰~˜aÑ  1 d×&8Ñ&8Ñ#8Ò8¸D¿J¹J¿O¹OÐSWÑ<WÜ Ð!8Ó9Ð9ÙØ—<‘<“> CÒ'Ø ‘N�HØ#Ÿ?™?¨7Ó3�Ø�d—i‘iÑØ'+×'8Ñ'8¸AÒ'=�t˜F’|À4ÈÁ7�Ü! $¨Ó1ˆDð> ˆð; ˜KŸO™OÒ+Ø §¡Ñ*Ø�=Ü ×,Ñ,�EØ#×0Ñ0�Ø—9‘9˜^Ñ,×2Ñ2°aÒ7Ø$0 ?�LÜ'¨Ó5ò ‘F�A�sØ˜e’|Ø×,Ñ,°Ò1Ø#'¨¨a°°A°q¸1±uÐ-=Ð(=Ñ#>™Dà#'ª¨A¨q°!°Q¸±UÐ+;Ð(;Ñ#<˜DØð  ˆð-ð, ˆð ×$Ñ$¨Ò)Ø  R a R ™=�Dð ˆð  ¢ 2 A 2 ™;�Dð ˆð ˜K×2Ñ2Ò2Ü%Ó'Ð'Ø˜K×2Ñ2Ò2Ü%Ó'Ð'Ø˜K×1Ñ1Ò1Ü%Ó'Ð'ä%Ó'Ð'r`   c                 ó   — | S r   r   rÉ  s    r    ÚaspagezTiffPage.aspageß  rÎ  r`   c                 ó   — | S r   r   rÉ  s    r    r  zTiffPage.keyframeâ  s   € àˆr`   c                  ó   — y r   r   )r^   r†  s     r    r  zTiffPage.keyframeæ  s   € àr`   c                 ó„   — | j                   r| j                   \  }}|g|gfS t        | j                  | j                  «      S )ú)Return simplified offsets and bytecounts.)rQ   Úclean_offsets_countsrË  rÙ  )r^   rS   Ú
byte_counts      r    rÙ  zTiffPage.offsets_bytecountsê  sE   € ð ×ÒØ!%×!3Ñ!3ÑˆF�JØ�8˜j˜\Ð)Ð)Ü# D×$4Ñ$4°d×6IÑ6IÓJÐJr`   c                 óŒ  ‡‡— | j                   dk7  s| j                  dvryd| j                  v r | j                  | j                  k7  s7| j
                  | j                  z  s| j                  dz  s| j                  dz  ryd| j                  v rAd| j                  v r3| j
                  | j                  k7  s| j                  | j                  z  ry| j                  Š| j                  Št        ‰«      dk(  r
‰d   ‰d   fS | j                  s*t        ˆˆfd	„t        t        ‰«      dz
  «      D «       «      r‰d   t        ‰«      fS y)
zlReturn offset and size of contiguous data, else None.

        Excludes prediction and fill_order.

        r&   ©r‡   r½   rÈ  rÉ  Nr+  r½   r-  r.  r   c              3   ó`   •K  — | ]%  }‰|   ‰|   z   ‰|d z      k(  xs ‰|d z      dk(  –— Œ' y­w)r&   r   Nr   )r   r   rÚ  rØ  s     €€r    r!   z)TiffPage.is_contiguous.<locals>.<genexpr>  sL   øè ø€ ò 
ð ð ˜‘
˜Z¨™]Ñ*¨g°a¸!±e©nÑ<ÒVÀ
È1ÈqÉ5Ñ@QÐUVÑ@VÓVñ
ùs   ƒ+.)rî  r7  r  r¶  rÛ  r´  rÜ  r±  rÝ  rË  rÙ  r.   r'  r˜  rn  rs  )r^   rÚ  rØ  s    @@r    rQ   zTiffPage.is_contiguousò  s%  ù€ ð ×Ñ˜qÒ  D×$6Ñ$6¸oÑ$MØØ˜$Ÿ)™)Ñ#à—‘ 4§>¡>Ò1Ø×#Ñ# d§o¡oÒ5Ø—>‘> BÒ&Ø—?‘? RÒ'àà §	¡	Ñ)Ø 4§9¡9Ñ,à×$Ñ$¨¯©Ò7Ø—‘¨¯©Ò7ð à×"Ñ"ˆØ×(Ñ(ˆ
Üˆw‹<˜1ÒØ˜1‘:˜z¨!™}Ð,Ð,Ø�;Š;œ#ô 
ô œ3˜w›<¨!Ñ+Ó,ô	
ô 
ð ˜1‘:œs :›Ð.Ð.ð
r`   c                 ó|   — | j                   xr/ | j                  dk(  xr | j                  dk(  xr | j                   S )z`Return if page's image data are stored in final form.

        Excludes byte-swapping.

        r&   )rQ   rØ  ry  rÔ  rÉ  s    r    r-  zTiffPage.is_final  sG   € ð ×Ñò .Ø—‘ !Ñ#ò.à—‘ !Ñ#ò.ð ×-Ñ-Ð-ð		
r`   c                 ó´   — | j                   j                  j                  xr7 | j                  xr) | j                  d   | j
                  j                  z  dk(  S )ú9Return if page's image data in file can be memory-mapped.r   )rŠ  rí  Úis_filer-  rQ   r<   r=   rÉ  s    r    rP   zTiffPage.is_memmappable'  sQ   € ð �K‰K×"Ñ"×*Ñ*ò =Ø—‘ò=ð ×Ñ˜qÑ! D§J¡J×$7Ñ$7Ñ7¸1Ñ<ð	
r`   c                 ó  — | j                   | k7  rt        j                  | |«      S d}dD ]%  }t        | d|z   «      }|sŒ|j	                  «       } n dj                  d„ dj                  d„ | j                  D «       «      t        j                  | j                  «      j                  ›| j                  ›�dj                  d	„ t        j                  | j                  «      j                  | j                  rd
nd| j                  dk7  r| j                  j                  nd| j                   dk7  r| j                   j                  nd| j"                  dk7  r| j"                  j                  nd| j$                  dk7  r| j$                  j                  ndfD «       «      |dj                  d„ | j&                  D «       «      fD «       «      }d| j(                  | j*                  |fz  }|dk  r|S |g}| j,                  }g }g }t/        |j1                  «       d„ ¬«      D ]Ì  }	|	j                  |dz   ¬«      }
|j3                  |
d| j5                  «       «       |dkD  sŒ@t7        |
«      |kD  sŒO|	j                  j	                  «       }|dk  r$d|v sd|v rt9        |	j:                  ||dz  ¬«      }
nt9        |	j:                  ||dz  ¬«      }
|j3                  |	j                  ›d|
›�«       ŒÎ |j3                  dj                  |«      «       |dkD  r |j3                  dj                  |«      «       |dkD  r2	 |j3                  dt9        | j=                  «       ||dz  ¬«      z  «       dj                  |«      S # t>        $ r Y Œw xY w)z0Return string containing information about page.r'  )ÚmemmappableÚfinalrw  rz   rë  c              3   ó$   K  — | ]  }|r|–— Œ
 y ­wr   r   rï  s     r    r!   z#TiffPage.__str__.<locals>.<genexpr><  s   è ø€ ò 
àñ& ô) ñ
ùrˆ  rî   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rî  rÙ   s     r    r!   z#TiffPage.__str__.<locals>.<genexpr>?  ó   è ø€ Ò4 Aœ˜QŸÑ4ùrÚ   r‚   c              3   ó$   K  — | ]  }|r|–— Œ
 y ­wr   r   rÙ   s     r    r!   z#TiffPage.__str__.<locals>.<genexpr>B  s   è ø€ ò àñ ô ñùrˆ  ÚTILEDr&   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   rç  rè  s     r    r!   z#TiffPage.__str__.<locals>.<genexpr>O  s   è ø€ Ò8¨˜!Ÿ'™'Ÿ)Ñ8ùré  zTiffPage %i @%i  %sr   c                 ó   — | j                   S r   )r  rí   s    r    rï   z"TiffPage.__str__.<locals>.<lambda>Z  s
   € °q·v±v€ r`   rB  )ró  Nr�   ÚCOUNTSÚOFFSETSr‹   r÷  rŒ   rì  rù  rÉ   zDATA
%sr‡   ) r  rz  rõ  re   rZ  r  rD   rM   ÚSAMPLEFORMATr—  rÚ  r7  rQ  rt  rÚ  rî  ru  ry  rØ  rú  r†  rS   r  rm  rþ  r6   r¯  r.   rý  rk   r/   r?   )r^   rò  ró  r  rÚ  rþ  r  ÚtlinesÚvlinesr¢  rk   s              r    rõ  zTiffPage.__str__2  s  € à�=‰=˜DÒ Ü×$Ñ$ T¨6Ó2Ð2ØˆØ:ò 	ˆDÜ˜4 ¨¡Ó.ˆDÚØ—z‘z“|�Ùð		ð
 �y‰yñ 
ð —‘Ñ4¨¯©Ô4Ó4ä×$Ñ$ T×%6Ñ%6Ó7×<Ò<¸d×>PÒ>PðRà—‘ñ ô ×(Ñ(¨×)9Ñ)9Ó:×?Ñ?Ø#'§=¢=™°bØ15×1AÑ1AÀQÒ1F˜×(Ñ(×-Ò-ÈBØ26×2CÑ2CÀqÒ2H˜×)Ñ)×.Ò.ÈbØ/3¯~©~ÀÒ/B˜Ÿ™×+Ò+ÈØ/3¯~©~ÀÒ/B˜Ÿ™×+Ò+Èðôó ð Ø—‘Ñ8¨T¯Z©ZÔ8Ó9ð#ô
ó 
ˆð. %¨¯
©
°D·K±KÀÐ'FÑFˆØ�QŠ;ØˆKØˆvˆØ�y‰yˆØˆØˆÜ˜$Ÿ+™+›-Ñ-=Ô>ò 		<ˆCØ—K‘K e¨a¡i�KÓ0ˆEØ�M‰M˜%  ˜-×-Ñ-Ó/Ô0Ø˜‹zœc %›j¨5Ó0Ø—x‘x—~‘~Ó'�Ø˜Q’; H°Ñ$4¸	ÀTÑ8IÜ# C§I¡I°UÀ6ÈAÁ:ÔN‘Eä# C§I¡I°UÀ6ÈBÁ;ÔO�EØ—‘¨#¯(«(±EÐ:Õ;ð		<ð 	�‰�D—I‘I˜fÓ%Ô&Ø�AŠ:Ø�K‰K˜Ÿ™ FÓ+Ô,Ø�AŠ:ðØ—‘Ø¤¨¯©«¸uÈVÐVWÉZÔ!XÑXôð
 �{‰{˜4Ó Ð øô ò Ùðús   Ì51M7 Í7	NÎNc                 óZ   ‡ — t        ˆ fd„t        t        j                  «      D «       «      S )zReturn set of flags.c              3   ó\   •K  — | ]#  }t        ‰d |z   «      r|j                  «       –— Œ% y­wry   r  r  s     €r    r!   z!TiffPage.flags.<locals>.<genexpr>t  s-   øè ø€ ò àÜ˜4 ¨¡Ô.ð —
‘
—ñùr¼  r  rÉ  s   `r    rú  zTiffPage.flagsp  s(   ø€ ô óä"¤4§?¡?Ó3ôó
ð 	
r`   c                 ó,   — t        | j                  «      S ©z"Return number of array dimensions.©r.   rD   rÉ  s    r    r�  zTiffPage.ndim{  ó   € ô �4—:‘:‹Ðr`   c                 ó,   — t        | j                  «      S ©z#Return number of elements in array.)r   rD   rÉ  s    r    rG   zTiffPage.size€  s   € ô �t—z‘zÓ"Ð"r`   c                 ó€  — | j                   sy| j                  }d|d   j                  i}t        | j                  j	                  «       «      D ]m  }|j
                  }d|cxk  rdk  sn Œ|j                  }t        |j                  «      dkD  r|j                  dd n|j                  }|||<   ||j                  = Œo |S )zjReturn consolidated metadata from Andor tags as dict.

        Remove Andor tags from self.tags.

        NÚIdÚAndorIdé   i§  ræ   )r­  r  rk   r  rþ  r  r.   rÚ  )r^   r  rX   r¢  r  rk   rÚ  s          r    rG  zTiffPage.andor_tags…  s­   € ð �}Š}ØØ�y‰yˆØ˜˜Y™×-Ñ-Ð.ˆÜ˜Ÿ	™	×(Ñ(Ó*Ó+ò 	ˆCØ—8‘8ˆDØ˜$Ô% Ô%ØØ—I‘IˆEÜ#& s§x¡x£=°1Ò#4�3—8‘8˜A˜B‘<¸#¿(¹(ˆDØ ˆF�4‰LØ�S—X‘X‘ð	ð ˆr`   c                 ó  — | j                   syi }| j                  }t        | j                  j                  «       «      D ]Å  }|j                  }d|cxk  rdk  sn Œ|j
                  }|dk(  r,t        j                  j                  t        |«      «      |d<   n_|dk(  rt        |«      |d<   nK|dk(  rt        |«      |d<   n7|d	k(  rt        |«      |d
<   n#|j                  dd«      \  }}t        |«      ||<   ||j                  = ŒÇ |S )z~Return consolidated metadata from EPICS areaDetector tags as dict.

        Remove areaDetector tags from self.tags.

        Néèý  iÜÿ  Ú	timeStampééý  ÚuniqueIDéêý  Ú
epicsTSSeciëý  ÚepicsTSNsecú:r&   )r®  r  r  rþ  r  rk   r|  Úfromtimestampr’  rØ   r  rZ  rÚ  )r^   rX   r  r¢  r  rk   rC  s          r    rK  zTiffPage.epics_tagsš  s÷   € ð �}Š}ØØˆØ�y‰yˆÜ˜Ÿ	™	×(Ñ(Ó*Ó+ò 	ˆCØ—8‘8ˆDØ˜DÔ( 5Ô(ØØ—I‘IˆEØ�uŠ}Ü&.×&7Ñ&7×&EÑ&EÄeÈEÃlÓ&S��{Ò#Ø˜’Ü%(¨£Z��zÒ"Ø˜’Ü'*¨5£z��|Ò$Ø˜’Ü(+¨E«
��}Ò%à"Ÿ[™[¨¨aÓ0‘
��UÜ$ U›m��s‘Ø�S—X‘X‘ð!	ð" ˆr`   c                 ó¶  — | j                   sy| j                  }|d   j                  }|d   dk7  rt        j                  d«       i S |d   |d   |d   dœ}t
        j                  }t
        j                  }t        |d   «      D ]’  }|d	|d	z  z   |d	z  d
z    \  }}}	}
|j                  ||«      }|dk(  r|
}nKt
        j                  |   }||   j                  |
|
|	z    }|dk(  r|	dkD  r|d   dk(  r|dd }|	dkD  r|n|d   }||v r	  ||   |«      }|||<   Œ” d|v rV|d   j                  }t        j                  |«      }t        |«      dk(  r|j                  d«      j!                  «       }||d<   d|v r5t        j                  |d   j                  «      j!                  «       }||d<   d|v rT|d   j                  }t        j                  |«      j                  d«      j#                  «       j!                  «       }||d<   d|v rG|d   j                  }t        j                  |«      j                  d«      j!                  «       }||d<   n	 d|v rt|d   j                  }i d|d   “d|d   “d|d   “d|d   “d|d	   “d |d!   “d"|d   “d#|d$   “d%|d
   “d&|d'   “d(|d)   “d*|d+   “d,|d-d. “d/|d.d0 “d1|d0d2 “d3|d2d “|d4<   |S # t        $ r Y �ŒÄw xY w)5z7Return consolidated metadata from GeoTIFF tags as dict.NÚGeoKeyDirectoryTagr   r&   zinvalid GeoKeyDirectoryTagr�   )ÚKeyDirectoryVersionÚKeyRevisionÚKeyRevisionMinorrÉ   r‹   r‡   é±‡  rÀ   r‚   ÚIntergraphMatrixTagr½   )r‹   r‹   ÚIntergraphMatrixÚModelPixelScaleTagÚModelPixelScaleÚModelTiepointTag)rÀ   rç   ÚModelTiepointÚModelTransformationTagÚModelTransformationrç   ÚRPCCoefficientTagÚERR_BIASÚERR_RANDÚLINE_OFFÚSAMP_OFFÚLAT_OFFÚLONG_OFFræ   Ú
HEIGHT_OFFÚ
LINE_SCALEr¿  Ú
SAMP_SCALEÚ	LAT_SCALErÃ   Ú
LONG_SCALEé
   ÚHEIGHT_SCALEé   ÚLINE_NUM_COEFFrŒ   é!   zLINE_DEN_COEFF é5   ÚSAMP_NUM_COEFFéI   ÚSAMP_DEN_COEFFÚRPCCoefficient)rh  r  rk   rŸ   r    rM   ÚGEO_KEYSÚ	GEO_CODESrn  r@   rE  r?   r;   r  r.   ra  Útolistr  r6   )r^   r  ÚgkdrX   ÚgeokeysÚgeocodesr†  ÚkeyidÚtagidr	  rS   rk   r·  ÚsxÚsyÚszÚ	tiepointsÚ
transformsÚtpr   r2  r  rî   ÚyÚzÚrpccs                             r    ri  zTiffPage.geotiff_tags¸  s¿  € ð �ŠØØ�y‰yˆàÐ'Ñ(×.Ñ.ˆØˆq‰6�QŠ;Ü�M‰MÐ6Ô7ØˆIð $' q¡6Ø˜q™6Ø # A¡ñ
ˆô —-‘-ˆÜ—>‘>ˆÜ˜3˜q™6“]ò 	"ˆEØ*-¨a°%¸!±)©m¸eÀa¹iÈ!¹mÐ*LÑ'ˆE�5˜% Ø—K‘K  uÓ-ˆEØ˜ŠzØ‘äŸ)™) EÑ*�à˜W™×+Ñ+¨F°V¸e±^ÐD�Ø˜E’> e¨a¢i°E¸"±IÀÒ4DØ! # 2˜J�EØ!&¨¢™°°a±�Ø˜Ñ ðØ+˜H U™O¨EÓ2�Eð "ˆF�5ŠMð#	"ð& ! DÑ(ØÐ.Ñ/×5Ñ5ˆEÜ—K‘K Ó&ˆEÜ�5‹z˜RÒØŸ™ fÓ-×4Ñ4Ó6�Ø).ˆFÐ%Ñ&Ø 4Ñ'Ü—K‘K Ð%9Ñ :× @Ñ @ÓA×HÑHÓJˆEØ(-ˆFÐ$Ñ%Ø Ñ%ØÐ+Ñ,×2Ñ2ˆEÜ—K‘K Ó&×.Ñ.¨wÓ7×?Ñ?ÓA×HÑHÓJˆEØ&+ˆF�?Ñ#Ø# tÑ+ØÐ1Ñ2×8Ñ8ˆEÜ—K‘K Ó&×.Ñ.¨vÓ6×=Ñ=Ó?ˆEØ,1ˆFÐ(Ò)Øð&  $Ñ&ØÐ+Ñ,×2Ñ2ˆDð(Ø˜D ™Gð(à˜D ™Gð(ð ˜D ™Gð(ð ˜D ™Gð	(ð
 ˜4 ™7ð(ð ˜D ™Gð(ð ˜d 1™gð(ð ˜d 1™gð(ð ˜d 1™gð(ð ˜T !™Wð(ð ˜d 2™hð(ð   R¡ð(ð ! $ r¨" +ð(ð " 4¨¨2 ;ð(ð ! $ r¨" +ð(ð  ! $ r s )ð!(ˆFÐ#Ñ$ð& ˆøô{ !ò Úðús   ÄKË	KËKc                 ó   — d| j                   v S )zPage contains tiled image.r+  ©r  rÉ  s    r    rÚ  zTiffPage.is_tiled  ó   € ð ˜dŸi™iÐ'Ð'r`   c                 óZ   — d| j                   v xr | j                   d   j                  dz  S )z'Page is reduced image of another image.r/  r&   ©r  rk   rÉ  s    r    rÂ  zTiffPage.is_reduced   s.   € ð   4§9¡9Ð,ÒV°·±Ð;KÑ1L×1RÑ1RÐUVÑ1VÐVr`   c                 óZ   — d| j                   v xr | j                   d   j                  dk7  S )z&Page contains chroma subsampled image.ÚYCbCrSubSamplingr>  rm  rÉ  s    r    rÔ  zTiffPage.is_chroma_subsampled%  s4   € ð " T§Y¡YÐ.ò °4·9±9Øñ4
ç
‰%�6ñ4ð 	r`   c                 ó^   — | j                   | j                  fD ]  }|s y|dd dk(  sŒ|c S  y)z/Return ImageJ description if exists, else None.Nr¿  zImageJ=©r{  Údescription1©r^   r{  s     r    r/  zTiffPage.is_imagej,  s>   € ð !×,Ñ,¨d×.?Ñ.?Ð@ò 	#ˆKÙÙØ˜2˜Aˆ )Ó+Ø"Ò"ñ		#r`   c                 ó~   — | j                   | j                  fD ]"  }|s y|dd dk(  rd|v r|c S |dd dk(  sŒ |c S  y)z?Return description containing array shape if exists, else None.Nr&   ú{z"shape":rç   úshape=rq  rs  s     r    r)  zTiffPage.is_shaped5  sY   € ð !×,Ñ,¨d×.?Ñ.?Ð@ò 	#ˆKÙÙØ˜2˜Aˆ #Ò%¨*¸Ñ*CØ"Ò"Ø˜2˜Aˆ (Ó*Ø"Ò"ñ	#r`   c                 ó   — d| j                   v S )zPage contains MDFileTag tag.rC  rj  rÉ  s    r    r  zTiffPage.is_mdgel@  rk  r`   c                 ó`   — d| j                   v xr | j                   d   j                  dd dk(  S )z'Page contains Media Cybernetics Id tag.ÚMC_IdNr¿  s   MC TIFFrm  rÉ  s    r    Ú
is_mediacyzTiffPage.is_mediacyE  s3   € ð ˜$Ÿ)™)Ð#ÒR¨¯	©	°'Ñ(:×(@Ñ(@ÀÀ!Ð(DÈ
Ñ(RÐRr`   c                 ó   — d| j                   v S )zPage contains UIC2Tag tag.r  rj  rÉ  s    r    r'  zTiffPage.is_stkJ  ó   € ð ˜DŸI™IÐ%Ð%r`   c                 ó   — d| j                   v S )zPage contains CZ_LSMINFO tag.r  rj  rÉ  s    r    rì  zTiffPage.is_lsmO  s   € ð ˜tŸy™yÐ(Ð(r`   c                 ó   — d| j                   v S )z$Page contains FluoView MM_STAMP tag.r3  rj  rÉ  s    r    r5  zTiffPage.is_fluoviewT  s   € ð ˜TŸY™YÐ&Ð&r`   c                 ó   — d| j                   v S )zPage contains NIH image header.r7  rj  rÉ  s    r    r  zTiffPage.is_nihY  s   € ð   4§9¡9Ð,Ð,r`   c                 ó>   — d| j                   v xr d| j                   v S )z,Page contains SGI image and tile depth tags.r-  r.  rj  rÉ  s    r    Úis_sgizTiffPage.is_sgi^  s!   € ð ˜tŸy™yÐ(ÒE¨[¸D¿I¹IÐ-EÐEr`   c                 ó    — | j                   dk(  S )zSoftware tag is 'ISS Vista'.z	ISS Vista©r~  rÉ  s    r    r°  zTiffPage.is_vistac  s   € ð �}‰} Ñ+Ð+r`   c                 ó    — | j                   dkD  s| j                  dk7  ry| j                  }|j                  d«      xr |j	                  d«      S )z>Page contains MDS MetaSeries metadata in ImageDescription tag.r&   Ú
MetaSeriesFú
<MetaData>z</MetaData>)r†  r~  r{  Ú
startswithrp  ©r^   Úds     r    rR  zTiffPage.is_metaseriesh  sE   € ð �:‰:˜Š>˜TŸ]™]¨lÒ:ØØ×ÑˆØ�|‰|˜LÓ)ÒG¨a¯j©j¸Ó.GÐGr`   c                 óv   — | j                   dkD  s| j                  sy| j                  }|dd dk(  xr |dd dk(  S )z.Page contains OME-XML in ImageDescription tag.r&   FNé   ú<?xml version=éúÿÿÿz</OME>©r†  r{  rˆ  s     r    r   zTiffPage.is_omep  óG   € ð �:‰:˜Š> ×!1Ò!1ØØ×ÑˆØ��"ˆvÐ)Ñ)Ò@¨a°°¨f¸Ñ.@Ð@r`   c                 óv   — | j                   dkD  s| j                  sy| j                  }|dd dk(  xr |dd dk(  S )z4Page contains Leica SCN XML in ImageDescription tag.r&   FNr‹  rŒ  r�  z</scn>rŽ  rˆ  s     r    Úis_scnzTiffPage.is_scnx  r�  r`   c                 ó   — d| j                   v S )z%Page contains Micro-Manager metadata.rZ  rj  rÉ  s    r    r[  zTiffPage.is_micromanager€  s   € ð &¨¯©Ð2Ð2r`   c                 ó   — d| j                   v S )z$Page contains Andor Technology tags.r(  rj  rÉ  s    r    r­  zTiffPage.is_andor…  r|  r`   c                 óN   — | j                   dd dk(  xr | j                  dd dk(  S )zPage contains Pilatus tags.Nr‡   zTVX TIFFr�   ú# )r~  r{  rÉ  s    r    rV  zTiffPage.is_pilatusŠ  s1   € ð �}‰}˜R˜aÐ  JÑ.ÒO°4×3CÑ3CÀBÀQÐ3GÈ4Ñ3OÐOr`   c                 óB   — | j                   dk(  xs | j                  dk(  S )z&Page contains EPICS areaDetector tags.zEPICS areaDetector©r{  r~  rÉ  s    r    r®  zTiffPage.is_epics�  s*   € ð ×ÑÐ 4Ñ4ò 5Ø�}‰}Ð 4Ñ4ð	
r`   c                 ó   — d| j                   v S )zPage contains TVIPS metadata.rN  rj  rÉ  s    r    rO  zTiffPage.is_tvips—  s   € ð ˜$Ÿ)™)Ð#Ð#r`   c                 ó>   — d| j                   v xs d| j                   v S )z&Page contains SFEG or HELIOS metadata.r:  r;  rj  rÉ  s    r    r<  zTiffPage.is_feiœ  s!   € ð ˜TŸY™YÐ&ÒC¨,¸$¿)¹)Ð*CÐCr`   c                 ó   — d| j                   v S )z!Page contains Zeiss SEM metadata.r?  rj  rÉ  s    r    r@  zTiffPage.is_sem¡  s   € ð ˜4Ÿ9™9Ð$Ð$r`   c                 ó&   — | j                   dd dk(  S )zPage contains Aperio metadata.Nrˆ   zAperio Image Library©r{  rÉ  s    r    Úis_svszTiffPage.is_svs¦  s   € ð ×Ñ  Ð$Ð(>Ñ>Ð>r`   c                 ót   — | j                   dd dk(  xs% | j                  dd dk(  xs d| j                   dd v S )z!Page contains ScanImage metadata.NrŒ   zstate.configé   zSI.LINE_FORMAT_VERSIONzscanimage.SI.i ÿÿÿr—  rÉ  s    r    ra  zTiffPage.is_scanimage«  sQ   € ð ×Ñ˜S˜bÐ! ^Ñ3ò :Ø�}‰}˜S˜bÐ!Ð%=Ñ=ò:à $×"2Ñ"2°4°5Ð"9Ð9ð	
r`   c                 ó&   — | j                   dd dk(  S )z1Page contains PerkinElmer tissue images metadata.Né   zPerkinElmer-QPIrƒ  rÉ  s    r    r  zTiffPage.is_qptiff´  s   € ð
 �}‰}˜S˜bÐ!Ð%6Ñ6Ð6r`   c                 ó   — d| j                   v S )zPage contains GeoTIFF metadata.r5  rj  rÉ  s    r    rh  zTiffPage.is_geotiff»  s   € ð $ t§y¡yÐ0Ð0r`   r   )NTNTl        @T)FNNNNrk  )Frg   ro   rp   rq   r¶  r´  r±  rÛ  rÜ  rÝ  r7  r‘  r—  rx  rî  ru  rØ  rt  ry  r’  rz  r~  r{  rr  r_   r/   rÿ  r  rm  r  r•  r   rÙ  rQ   r-  rP   rõ  rú  r�  rG   rG  rK  ri  rÚ  rÂ  rÔ  r/  r)  r  rz  r'  rì  r5  r  r�  r°  rR  r   r‘  r[  r­  rV  r®  rO  r<  r@  r�  ra  r  rh  r   r`   r    rô  rô  s  sØ  „ ñ"ðJ €JØ€KØ€JØ€IØ€JØ€IØ€MØ€OØ€LØ€LØ€KØ€LØ€IØ€KØ€IØ€LØ€HØ€HØ€KØ€Lóe1ðR ØØØØØóIðZ ØØØØó=ò~ð ñó ðð ‡_�_ñó ðð ñKó ðKð ñ$/ó ð$/ðL ñ
ó ð
ð ñ
ó ð
ó<!ð| ñ
ó ð
ð ñó ðð ñ#ó ð#ð ñó ðð( ñó ðð: ñ`ó ð`ðD ñ(ó ð(ð ñWó ðWð ñó ðð ñ#ó ð#ð ñ#ó ð#ð ñ(ó ð(ð ñSó ðSð ñ&ó ð&ð ñ)ó ð)ð ñ'ó ð'ð ñ-ó ð-ð ñFó ðFð ñ,ó ð,ð ñHó ðHð ñAó ðAð ñAó ðAð ñ3ó ð3ð ñ&ó ð&ð ñPó ðPð ñ
ó ð
ð ñ$ó ð$ð ñDó ðDð ñ%ó ð%ð ñ?ó ð?ð ñ
ó ð
ð ñ7ó ð7ð ñ1ó ñ1r`   rô  c                   ór   — e Zd ZdZdZdZi Zd„ Zd„ Zd„ Z	d„ Z
ed„ «       Zed	„ «       Zed
„ «       Zd„ Zdd„Zy)rz  a¡  Lightweight TIFF image file directory (IFD).

    Only a limited number of tag values are read from file, e.g. StripOffsets,
    and StripByteCounts. Other tag values are assumed to be identical with a
    specified TiffPage instance, the keyframe.

    TiffFrame is intended to reduce resource usage and speed up reading data
    from file, not for introspection of metadata.

    Not compatible with Python 2.

    )r  rŠ  r†  rS   rË  rÙ  Fc                 óf  — || _         || _        || _        d| _        d| _        t
        j                  }|j                  }|j                  «       | _	        	  ||j                  |j                  |j                  «      «      d   }|dkD  rt        d«      ‚	 h d£}|j                  }|j                   dd }	|j                  ||z  «      }
| }t#        |«      D ]u  }||z  } ||	|
||dz    «      d   }||vrŒ	 t%        ||
|||z    «      }|dk(  s|d	k(  rt/        | d
|j0                  «       ŒT|dk(  s|dk(  sŒ_t/        | d|j0                  «       Œw y# t        $ r t        d| j                  z  «      ‚w xY w# t$        j&                  $ r(}t)        j*                  t-        |«      «       Y d}~ŒÔd}~ww xY w)zpRead specified tags from file.

        The file handle position must be at the offset to a valid IFD.

        Nr   r…  r†  z corrupted page list at offset %i>   é  é  éD  éE  r�   r¥  r§  rË  r¦  r¨  rÙ  )r  rŠ  r†  rË  rÙ  r¹   rç  rí  r—   rS   r‰  ræ  rè  r,   r?   rŠ  ré  rn  rª  r«  rŸ   r    r›   rh   rk   )r^   rŠ  r†  r  rç  r»   r‹  ÚtagcodesrŠ  Ú
codeformatrC   rY   r  r¢  rl   s                  r    r_   zTiffFrame.__init__Û  s¶  € ð !ˆŒØˆŒØˆŒ
ØˆÔØ"ˆÔä—‘ˆØ×ÑˆØ—g‘g“iˆŒð	OÙ˜6×-Ñ-¨r¯w©w°v×7GÑ7GÓ/HÓIÈ!ÑLˆEØ�tŠ|Ü Ð!<Ó=Ð=ð ò (ˆØ—.‘.ˆØ×&Ñ& r¨Ð*ˆ
à�w‰w�w ‘Ó'ˆØ�ˆÜ�u“ò 	;ˆAØ�WÑˆEÙ˜* d¨5°5¸1±9Ð&=Ó>¸qÑAˆDØ˜8Ñ#ØðÜ˜f d¨5°5¸7±?Ð&CÓD�ð �sŠ{˜d cškÜ˜˜m¨S¯Y©YÕ7Ø˜’ ¨£Ü˜Ð.°·	±	Õ:ñ	;øô ò 	OÜÐ?À$Ç+Á+ÑMÓNÐNð	Oûô" —=‘=ò Ü—‘œc !›fÔ%Üûðús$   Á?E Ã7E5Å"E2Å5F0ÆF+Æ+F0c                 ó¤   — | j                   j                  j                  | j                  «       t	        | j                   | j
                  d¬«      S )zReturn TiffPage from file.Nr�  )rŠ  rí  r%   rS   rô  r†  rÉ  s    r    r  zTiffFrame.aspage  s5   € à�‰×Ñ×#Ñ# D§K¡KÔ0Ü˜Ÿ™¨4¯:©:ÀÔEÐEr`   c                 ó>   — d|d<   t        j                  | g|¢­i |¤ŽS )z4Read image data from file and return as numpy array.Fr  )rô  r/   ©r^   rý  r0   s      r    r/   zTiffFrame.asarray  s)   € ð
 #ˆˆzÑÜ×Ñ Ð6 tÒ6¨vÑ6Ð6r`   c                 ó>   — d|d<   t        j                  | g|¢­i |¤ŽS )z>Read image data from file and return RGB image as numpy array.Fr  )rô  rÿ  r­  s      r    rÿ  zTiffFrame.asrgb  s%   € à"ˆˆzÑÜ�~‰~˜dÐ4 TÒ4¨VÑ4Ð4r`   c                 ó¾   — | j                   j                  r(| j                  dd | j                   j                  dd fS t        | j                  | j                  «      S )r  Nr&   )r  rQ   rË  r  rÙ  rÉ  s    r    rÙ  zTiffFrame.offsets_bytecounts!  sS   € ð �=‰=×&Ò&Ø×#Ñ# B QÐ'¨¯©×)DÑ)DÀQÀRÐ)HÐHÐHÜ# D×$4Ñ$4°d×6IÑ6IÓJÐJr`   c                 ó€   — | j                   j                  r(| j                  d   | j                   j                  d   fS y)z5Return offset and size of contiguous data, else None.r   r&   N)r  rQ   rË  rÉ  s    r    rQ   zTiffFrame.is_contiguous(  s;   € ð �=‰=×&Ò&Ø×#Ñ# AÑ&¨¯©×(CÑ(CÀAÑ(FÐFÐFð 'r`   c                 ó.   — | j                   j                  S )r  )r  rP   rÉ  s    r    rP   zTiffFrame.is_memmappable.  s   € ð �}‰}×+Ñ+Ð+r`   c                 óž   — |t         j                  v rt        | j                  |«      S t	        d| j
                  j                  ›d|›d�«      ‚)zReturn attribute from keyframe.rÝ  rÞ  )rM   ÚFRAME_ATTRSre   r  rb   rm   rg   ©r^   rÚ  s     r    rß  zTiffFrame.__getattr__3  sB   € à”4×#Ñ#Ñ#Ü˜4Ÿ=™=¨$Ó/Ð/õ Ø37·>±>×3JÓ3JÊDÐQó
ð 	
r`   c                 óÔ   — dj                  d„ dj                  d„ | j                  D «       «      t        | j                  «      fD «       «      }d| j                  | j
                  |fz  S )z1Return string containing information about frame.rë  c              3   ó    K  — | ]  }|–— Œ y ­wr   r   rï  s     r    r!   z$TiffFrame.__str__.<locals>.<genexpr>?  s   è ø€ ò 
ØŒAñ
ùs   ‚rî   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rî  rÙ   s     r    r!   z$TiffFrame.__str__.<locals>.<genexpr>@  s   è ø€ Ò <¨A¤ Q§Ñ <ùrÚ   zTiffFrame %i @%i  %s)r  rD   r›   r<   r†  rS   )r^   rò  rþ  s      r    rõ  zTiffFrame.__str__=  sY   € à�y‰yñ 
ØŸ™Ñ <°·±Ô <Ó<¼cÀ$Ç*Á*»oÐNô
ó 
ˆð &¨¯©°T·[±[À$Ð(GÑGÐGr`   Nr9  )rg   ro   rp   rq   rr   r  r  r_   r  r/   rÿ  rm  rÙ  rQ   rP   rß  rõ  r   r`   r    rz  rz  Á  s{   „ ñð€Ið €HØ€Dò*;òhFò
7ò5ð
 ñKó ðKð ñGó ðGð
 ñ,ó ð,ò
ôHr`   rz  c                   óN   — e Zd ZdZdZ G d„ de«      Zd„ Zed„ «       Z	d„ Z
d
d„Zy	)rª  aš  TIFF tag structure.

    Attributes
    ----------
    name : string
        Name of tag.
    code : int
        Decimal code of tag.
    dtype : str
        Datatype of tag data. One of TIFF DATA_FORMATS.
    count : int
        Number of values.
    value : various types
        Tag data as Python object.
    ImageSourceData : int
        Location of value in file.

    All attributes are read-only.

    )r  r	  r<   rk   r²  c                   ó   — e Zd Zy)úTiffTag.ErrorN©rg   ro   rp   r   r`   r    r«  rº  ]  ó   „ Ør`   r«  c                 óœ  ‡— |j                   }|j                  }t        j                  }|j                  }|j                  «       |z   dz   | _         ||j                  |dd «      \  }}	 ||j                  |dd «      \  }
}	 t        j                  |	   }d||
t        |d   «      z  |d   fz  }t        j                  |«      }||kD  s|t        j                   v rñ ||j"                  |«      d   x| _        }|dk  s||j$                  |z
  kD  rt        j                  d«      ‚|j'                  |«       |t        j                   v r t        j                   |   } |||||
|«      }n„|	d	k(  s|
dkD  r|d
   dk(  rt)        ||||
|«      }nb|t        j*                  v s|d
   dk(  r |||j-                  |«      «      }n/t/        ||||
|«      }n|d
   dk(  s|	d	k(  r|d| }n |||d| «      }|t        j                   vxr |t        j0                  vxr |	d	k7  }|rD|d
   dk(  r<t3        |d   t4        «      r)|d   }	 t7        t9        |«      j;                  «       «      }nO|t        jB                  v r(t        jB                  |   Š	 tE        ˆfd„|D «       «      }|rtK        |«      dk(  r|d   }|| _&        || _'        |
| _(        || _)        y# t        $ r t        j                  d|	z  «      ‚w xY w# t<        $ r t?        j@                  d|z  «       d}Y Œgw xY w# tF        $ r(}t?        j@                  tI        |«      «       Y d}~Œ¬d}~ww xY w)z$Initialize instance from tag header.r‹   Núunknown tag data type %iú%s%i%sr   r&   r‡   zinvalid tag value offsetr¿  rÀ   rÇ   rû   ú'tag %i: coercing invalid ASCII to bytesÚ1Bc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r   )r   rœ  rG  s     €r    r!   z#TiffTag.__init__.<locals>.<genexpr>—  s   øè ø€ Ò!6¨1¡! A§$Ñ!6ùrž  )*rí  r8   r¹   rç  r  r—   r²  ré  rê  rM   ÚDATA_FORMATSr   rª  r«  rØ   r  ÚTAG_READERSr  rG   r%   Ú
read_bytesrE  ræ  Ú
read_numpyÚ	TAG_TUPLEr(   rì   Ú	bytes2strÚ
stripasciir¯  ÚUnicodeDecodeErrorrŸ   r    ÚTAG_ENUMr  r,   r›   r.   r  r<   r	  rk   )r^   rŠ  Ú	tagheaderr0   r»   r8   rç  r  r  Útype_r	  rk   r<   r÷   rG   rS   ÚreadfuncÚprocessrl   rG  s                      @r    r_   zTiffTag.__init__`  s?  ø€ à×ÑˆØ×$Ñ$ˆ	Ü—‘ˆØ×&Ñ&ˆ
àŸ7™7›9 zÑ1°AÑ5ˆÔÙ˜V×.Ñ.°	¸"¸1°Ó>‰ˆˆeÙ˜f×/Ñ/°¸1¸2°Ó?‰ˆˆuð	DÜ×%Ñ% eÑ,ˆEð ˜) U¬S°°q±«]Ñ%:¸EÀ!¹HÐEÑEˆÜ�‰˜sÓ#ˆØ�*Ò ¬×(8Ñ(8Ñ 8Ù(.¨v×/BÑ/BÀEÓ(JÈ1Ñ(MÐMˆDÔ˜vØ˜Šz˜V b§g¡g°¡nÒ4Ü—m‘mÐ$>Ó?Ð?ð �G‰G�FŒOØ”t×'Ñ'Ñ'Ü×+Ñ+¨DÑ1�Ù   Y°°u¸jÓI‘Ø˜!’ ¨¢	¨e°B©i¸3Ò.>Ü" 2 y°%¸À
ÓK‘ØœŸ™Ñ" e¨B¡i°3Ò&6Ù˜s B§G¡G¨D£MÓ2‘ä" 2 y°%¸À
ÓK‘Ø�2‰Y˜#Ò ¨!¢Ø˜%˜4�L‰Eá˜3  e t Ó-ˆEð œ×(Ñ(Ð(ÒV¨T¼¿¹Ð-GÒVÈEÐUVÉJð 	ñ �u˜R‘y CÒ'¬J°u¸Q±xÄÔ,Gð ˜!‘HˆEðÜ!¤*¨UÓ"3×"9Ñ"9Ó";Ó<‘ð
 ”t—}‘}Ñ$Ü—M‘M $Ñ'�ð*Ü!Ó!6°Ô!6Ó6�Eñ Ü�u“: ’?Ø! !™H�EàˆŒ	ØˆŒ
ØˆŒ
Øˆ�
øôi ò 	DÜ—-‘-Ð :¸UÑ BÓCÐCð	DûôF &ò Ü—‘ÐGÈ$ÑNÔOØ’ðûô "ò *Ü—M‘M¤# a£&×)Ñ)ûð*ús6   ÂK È="K1 ÊL Ë"K.Ë1#LÌLÌ	MÌ#MÍMc                 ó|   — t         j                  j                  | j                  t	        | j                  «      «      S r   )rM   rE  r@   r  r›   rÉ  s    r    rÚ  zTiffTag.name£  s#   € ä�y‰y�}‰}˜TŸY™Y¬¨D¯I©I«Ó7Ð7r`   c                 ó¢  — | j                   dk(  rÀ| j                  dk(  r°t        j                  d«       |j                  |j
                     }t        j                  || j                  «      d   | _	        |j                  j                  | j                  «       t        j                  d|j                  j                  d«      «      | _        yyy)z³Correct LSM bitspersample tag.

        Old LSM writers may use a separate region for two 16-bit values,
        although they fit into the tag value element of the tag.

        é  r�   z correcting LSM bitspersample tagr   z<HHr‹   N)r  r	  rŸ   r    r  r  r¹   rç  Ú_valuer²  rí  r%   ræ  rk   )r^   rŠ  Útofs      r    r¯  zTiffTag._fix_lsm_bitspersample§  sž   € ð �9‰9˜Ò §
¡
¨a¢ä�M‰MÐ<Ô=Ø×%Ñ% f×&7Ñ&7Ñ8ˆCÜ%Ÿ}™}¨S°$·+±+Ó>¸qÑAˆDÔØ×Ñ×"Ñ" 4×#3Ñ#3Ô4ÜŸ™ u¨f×.?Ñ.?×.DÑ.DÀQÓ.GÓHˆD�Jð !0Ðr`   c                 óR  — |dk  rdnd|z  }d| j                   t        | j                  d   «      z  | j                  d   fz  }d| j                  | j                  || j
                  fd| z  }| j                  t        j                  v rl| j                   dk(  r7t        j                  | j                     | j                  «      j                  }n>t        t        d„ | j                  D «       «      «      }nt        | j                  ||¬«      }|dk  r||z  }|d| }|S |d	|z   z  }|S )
z/Return string containing information about tag.r   r&   r‡   z%i%szTiffTag %i %s  %s @%i  Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   )rÚ  )r   rœ  s     r    r!   z"TiffTag.__str__.<locals>.<genexpr>Ã  s   è ø€ Ò%A° a§f¥fÑ%Aùs   ‚r÷  rì  )r	  rØ   r<   r  rÚ  r²  rM   rË  rk   rý  r  )r^   rò  ró  rø  ÚtcodeÚlinerk   s          r    rõ  zTiffTag.__str__¶  s  € à ’k‘ q¨6¡zˆØ˜$Ÿ*™*¤s¨4¯:©:°a©=Ó'9Ñ9¸4¿:¹:Àa¹=ÐIÑIˆà%Ø�y‰y˜$Ÿ)™) U¨D×,<Ñ,<Ð=¸f¸uÐEñFð 	ð
 �9‰9œŸ™Ñ%Ø�z‰z˜QŠÜŸ™ d§i¡iÑ0°·±Ó<×AÑA‘ä¤Ñ%A°d·j±jÔ%AÓ AÓB‘ä˜DŸJ™J¨e¸FÔCˆEà�QŠ;Ø�E‰MˆDØ˜˜�<ˆDð ˆð �D˜5‘LÑ ˆDØˆr`   Nrk  )rg   ro   rp   rq   rr   r?   r«  r_   rm  rÚ  r¯  rõ  r   r`   r    rª  rª  E  sA   „ ñð* C€Iô�	ô òAðF ñ8ó ð8òIôr`   rª  c                   ó   — e Zd Zy)ÚTiffFileErrorNr»  r   r`   r    rÚ  rÚ  Ò  s   „ Ør`   rÚ  c                   ó‚   — e Zd ZdZ	 	 	 	 	 dd„Zdd„Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zd	„ Zd
„ Zd„ Zd„ Zy)r  aå  Series of TIFF pages with compatible shape and data type.

    Attributes
    ----------
    pages : list of TiffPage
        Sequence of TiffPages in series.
    dtype : numpy.dtype
        Data type (native byte order) of the image array in series.
    shape : tuple
        Dimensions of the image array in series.
    axes : str
        Labels of axes in shape. See TiffPage.axes.
    offset : int or None
        Position of image data in file if memory-mappable, else None.

    Nc
                 óä  — d| _         || _        t        |«      | _        dj	                  |«      | _        t        j                  |«      | _        |r|nd| _        |r|nd| _	        || _
        |r|| _        n|r|d   j                  | _        nd| _        t        |«      dk(  r?|	s=t        t        | j                  «      t        |d   j                  «      z  «      | _        yt        |«      | _        y)zInitialize instance.r   r'  Nr&   )r†  r  r  rD   r  r  r;   r<   r  rÚ  r]  rŠ  r.   rØ   r   Ú_len)
r^   rO   rD   r<   r  rŠ  rÚ  r]  r  r$  s
             r    r_   zTiffPageSeries.__init__è  s»   € ð ˆŒ
ØˆŒÜ˜5“\ˆŒ
Ø—G‘G˜D“MˆŒ	Ü—[‘[ Ó'ˆŒ
Ù#‘U¨ˆŒ
Ù ‘D bˆŒ	Ø"ˆŒÙØ ˆD�KÙØ ™(Ÿ/™/ˆD�KàˆDŒKÜˆu‹:˜Š?¡9ÜœG D§J¡JÓ/´7¸5À¹8¿>¹>Ó3JÑJÓKˆD�Iä˜E›
ˆD�Ir`   c                 ó”   — | j                   r<| j                   j                  | |¬«      }| j                  �| j                  |«      }|S y)z;Return image data from series of TIFF pages as numpy array.)rR   r   N)rŠ  r/   r]  )r^   r   rX   s      r    r/   zTiffPageSeries.asarray  sD   € à�;Š;Ø—[‘[×(Ñ(°¸#Ð(Ó>ˆFØ�~‰~Ð)ØŸ™¨Ó/�ØˆMð	 r`   c                 ó   — | j                   syd}| j                   D ]\  }|€ y|j                  s y|s |j                  d   |j                  d   z   }Œ7||j                  d   k7  r y||j                  d   z  }Œ^ | j                   d   }|j                  d   }|j                  s|j                  rt        | j                   «      dk(  r|S ||t        | j                  «      | j                  j                  z  z   k(  r|S y)z-Return offset to series data in file, if any.Nr   r&   )
r  r-  rQ   r/  r)  r.   r   rD   r<   r=   )r^   r¼   rV   rS   s       r    rS   zTiffPageSeries.offset  sú   € ð �{Š{ØàˆØ—K‘Kò 
	)ˆDØˆ|ÙØ—=’=ÙÙØ×(Ñ(¨Ñ+¨d×.@Ñ.@ÀÑ.CÑC�ØØ�d×(Ñ(¨Ñ+Ò+ÙØ�4×%Ñ% aÑ(Ñ(‰Cð
	)ð �{‰{˜1‰~ˆØ×#Ñ# AÑ&ˆØ�NŠN˜dŸnšn´#°d·k±kÓ2BÀaÒ2GàˆMØ�&œ7 4§:¡:Ó.°·±×1DÑ1DÑDÑDÒDØˆMð Er`   c                 ó,   — t        | j                  «      S r!  r"  rÉ  s    r    r�  zTiffPageSeries.ndim+  r#  r`   c                 ó>   — t        t        | j                  «      «      S r%  )rØ   r   rD   rÉ  s    r    rG   zTiffPageSeries.size0  s   € ô ”7˜4Ÿ:™:Ó&Ó'Ð'r`   c                 ó   — | S )z'Return sequence of all pages in series.r   rÉ  s    r    rO   zTiffPageSeries.pages5  s	   € ð ˆr`   c                 ó   — | j                   S )z%Return number of TiffPages in series.)rÝ  rÉ  s    r    r�  zTiffPageSeries.__len__;  ó   € à�y‰yÐr`   c                 óê   — t        | j                  «      dk(  rMd|cxk  r| j                  k  r8n n5| j                  d   j                  }| j                  j
                  ||z      S | j                  |   S )zReturn specified TiffPage.r&   r   )r.   r  rÝ  r†  rŠ  rO   )r^   rC  r†  s      r    r‘  zTiffPageSeries.__getitem__?  s^   € äˆt�{‰{Ó˜qÒ  Q¨Ô%8¨t¯y©yÕ%8Ø—K‘K ‘N×(Ñ(ˆEØ—;‘;×$Ñ$ U¨S¡[Ñ1Ð1Ø�{‰{˜3ÑÐr`   c              #   ó"  K  — t        | j                  «      | j                  k(  r| j                  D ]  }|–— Œ y| j                  j                  }| j                  d   j
                  }t        | j                  «      D ]  }|||z      –— Œ y­w)z)Return iterator over TiffPages in series.r   N)r.   r  rÝ  rŠ  rO   r†  rn  )r^   rV   rO   r†  r   s        r    r“  zTiffPageSeries.__iter__F  s~   è ø€ äˆt�{‰{Ó˜tŸy™yÒ(ØŸ™ò �Ø“
ñð —K‘K×%Ñ%ˆEØ—K‘K ‘N×(Ñ(ˆEÜ˜4Ÿ9™9Ó%ò '�Ø˜E A™IÑ&Ó&ñ'ùs   ‚BBc                 óœ  — dj                  d„ | j                  rt        d| j                  z  d«      nddj                  d„ | j                  D «       «      t	        | j
                  «      | j                  | j                  dt        | j                  «      z  | j                  rd	| j                  z  ndfD «       «      }d
| j                  |fz  S )z,Return string with information about series.rë  c              3   ó$   K  — | ]  }|r|–— Œ
 y ­wr   r   rï  s     r    r!   z)TiffPageSeries.__str__.<locals>.<genexpr>S  s   è ø€ ò 
àñ ô ñ
ùrˆ  z'%s'rˆ   r'  rî   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rî  rÙ   s     r    r!   z)TiffPageSeries.__str__.<locals>.<genexpr>W  r  rÚ   rê  z	Offset=%izTiffPageSeries %i  %s)r  rÚ  rû  rD   r›   r<   r  r  r.   rO   rS   r†  )r^   rû   s     r    rõ  zTiffPageSeries.__str__Q  s¤   € à�I‰Iñ 
ð 48·9²9”˜ §¡Ñ*¨BÔ/À"Ø—‘Ñ4¨¯©Ô4Ó4Ü�D—J‘J“Ø—	‘	Ø—
‘
ØœS §¡›_Ñ,Ø/3¯{ª{�˜tŸ{™{Ò*Àðô
ó 
ˆð '¨$¯*©*°a¨Ñ8Ð8r`   )NNNNFr   )rg   ro   rp   rq   r_   r/   r   rS   rm  r�  rG   rO   r�  r‘  r“  rõ  r   r`   r    r  r  Ö  s‡   „ ñð. ØØØØó#ó@ð ñó ðð4 ñó ðð ñ(ó ð(ð ñó ðò
ò ò	'ó9r`   r  c                   óf   — e Zd ZdZddiZ G d„ de«      Zedfd„Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zdd„Zd„ Zy)r   a¥  Sequence of TIFF files.

    The image data in all files must match shape, dtype, etc.

    Attributes
    ----------
    files : list
        List of file names.
    shape : tuple
        Shape of image sequence. Excludes shape of image array.
    axes : str
        Labels of axes in shape.

    Examples
    --------
    >>> # read image stack from sequence of TIFF files
    >>> imsave('temp_C001T001.tif', numpy.random.rand(64, 64))
    >>> imsave('temp_C001T002.tif', numpy.random.rand(64, 64))
    >>> tifs = TiffSequence('temp_C001*.tif')
    >>> tifs.shape
    (1, 2)
    >>> tifs.axes
    'CT'
    >>> data = tifs.asarray()
    >>> data.shape
    (1, 2, 64, 64)

    r  a¾  
            # matches Olympus OIF and Leica TIFF series
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            c                   ó   — e Zd Zy)úTiffSequence.ParseErrorNr»  r   r`   r    r�  rì  Œ  r¼  r`   r�  c           	      ó<  ‡— t        |t        j                  «      rt        |«      }t        |t        «      rt        t        j                  |«      «      }t        |«      }|st        d«      ‚t        |d   t        j                  «      r,|D �cg c]   }t        t        j                  |«      «      ‘Œ" }}nt        |d   t        «      st        d«      ‚|| _	        t        |d«      r|Šˆfd„}|| _        | j                  j                  ||«      | _        	 | j                  «        | j                   sd| _        y	y	c c}w # | j"                  $ rK d| _        t%        |«      f| _        d| _        t+        d„ t-        t%        |«      «      D «       «      | _        Y y	w xY w)
a\  Initialize instance from multiple files.

        Parameters
        ----------
        files : str, pathlib.Path, or sequence thereof
            Glob pattern or sequence of file names.
            Binary streams are not supported.
        imread : function or class
            Image read function or class with asarray function returning numpy
            array from single file.
        pattern : str
            Regular expression pattern that matches axes names and sequence
            indices in file names.
            By default, the pattern matches Olympus OIF and Leica TIFF series.

        r$   r   znot a file namer/   c                 ód   •—  ‰| «      5 } |j                   |i |¤Žcd d d «       S # 1 sw Y   y xY wr   )r/   )r®  rý  r0   ÚimÚ_imreads       €r    r   z%TiffSequence.__init__.<locals>.imread±  s4   ø€ Ù˜U“^ð 7 rØ%˜2Ÿ:™: tÐ6¨vÑ6÷7÷ 7ò 7ús   Š&¦/rŽ   r9  c              3   ó"   K  — | ]  }|f–— Œ	 y ­wr   r   rÙ   s     r    r!   z(TiffSequence.__init__.<locals>.<genexpr>À  s   è ø€ Ò!B¨1 1¤$Ñ!Bùs   ‚N)r(   ÚpathlibÚPathr›   r)   r   r+   r  r,   r   r-   r   Ú	_patternsr@   r   Ú_parser  r�  r.   rD   Ú_startindexr  rn  Ú_indices)r^   r   r   r   rý  r0   r!  rð  s          @r    r_   zTiffSequence.__init__�  sN  ø€ ô" �eœWŸ\™\Ô*Ü˜“JˆEÜ�eœZÔ(Ü"¤4§9¡9¨UÓ#3Ó4ˆEÜ�U“ˆÙÜÐ-Ó.Ð.Ü�e˜A‘h¤§¡Ô-Ø38Ö9¨a”SœŸ™ a›Õ)Ð9ˆEÑ9Ü˜E !™H¤jÔ1ÜÐ.Ó/Ð/ØˆŒ
ä�6˜9Ô%àˆGô7ð ˆŒà—~‘~×)Ñ)¨'°7Ó;ˆŒð	CØ�K‰KŒMØ—9’9Ø�•	ð ùò% :øð( �‰ò 	CØˆDŒIÜ˜e›*˜ˆDŒJØ#ˆDÔÜ!Ñ!B´´c¸%³jÓ0AÔ!BÓBˆDŽMð		Cús   Â%D<Ä#E ÅAFÆFc           	      ó¸   — dj                  | j                  d   dt        | j                  «      z  d| j                  z  dt	        | j
                  «      z  g«      S )z4Return string with information about image sequence.rì  r   z	 size: %iz	 axes: %sz
 shape: %s)r  r   r.   r  r›   rD   rÉ  s    r    rõ  zTiffSequence.__str__Â  sO   € à�y‰yà—
‘
˜1‘Øœc $§*¡*›oÑ-Ø˜dŸi™iÑ'Øœs 4§:¡:›Ñ.ð	ó
ð 	
r`   c                 ó,   — t        | j                  «      S r   )r.   r   rÉ  s    r    r�  zTiffSequence.__len__Í  s   € Ü�4—:‘:‹Ðr`   c                 ó   — | S r   r   rÉ  s    r    rÍ  zTiffSequence.__enter__Ð  rÎ  r`   c                 ó$   — | j                  «        y r   rÐ  rÑ  s       r    rÕ  zTiffSequence.__exit__Ó  rÖ  r`   c                  ó   — y r   r   rÉ  s    r    rË  zTiffSequence.closeÖ  ó   € Ør`   Nc                 ó  —  | j                   | j                  d   g|¢­i |¤Ž}| j                  |j                  z   }t        |||j                  ¬«      } |j
                  dg|j                  ¢­Ž }t        | j                  | j                  «      D ]k  \  }}t        || j                  «      D �	�
cg c]
  \  }	}
|	|
z
  ‘Œ }}	}
t        j                  || j                  «      } | j                   |g|¢­i |¤Ž}|||<   Œm ||_        |S c c}
}	w )zÔRead image data from all files and return as numpy array.

        The args and kwargs parameters are passed to the imread function.

        Raise IndexError or ValueError if image shapes do not match.

        r   rÕ   rÀ   )r   r   rD   r   r<   ra  r(  r÷  rö  r;   r•  )r^   r   rý  r0   rï  rD   rX   r†  r®  r   r2  s              r    r/   zTiffSequence.asarrayÙ  sú   € ð ˆT�[‰[˜Ÿ™ A™Ð8¨Ò8°Ñ8ˆØ—
‘
˜RŸX™XÑ%ˆÜ˜s E°·±Ô:ˆØ�—‘ Ð. R§X¡XÒ.ˆÜ §¡¨t¯z©zÓ:ò 	‰LˆE�5Ü'*¨5°$×2BÑ2BÓ'C×D™t˜q !�Q˜“UÐDˆEÑDÜ×+Ñ+¨E°4·:±:Ó>ˆEØ�—‘˜UÐ4 TÒ4¨VÑ4ˆBØˆF�5ŠMð		ð
 ˆŒØˆùó Es   Â1D	c           	      óR  — | j                   s| j                  d«      ‚t        j                  | j                   t        j                  t        j
                  z  «      }|j                  | j                  d   «      }|s| j                  d«      ‚|d   }t        |«      dz  r| j                  d«      ‚dj                  d„ |d	d	d…   D «       «      }|s| j                  d«      ‚g }| j                  D ]s  }|j                  |«      d   }|dj                  d
„ |d	d	d…   D «       «      k7  rt        d«      ‚|j                  |dd	d…   D �cg c]  }|sŒt        |«      ‘Œ c}«       Œu t        t        j                  |d¬«      «      }t        t        j                   |d¬«      «      }t        d„ t#        ||«      D «       «      }t%        |«      t        | j                  «      k7  rt'        j(                  d«       |j+                  «       | _        || _        || _        || _        y	c c}w )z#Get axes and shape from file names.zinvalid patternr   z!pattern does not match file namesrÀ   r�   z*pattern does not match axis name and indexr'  c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wr   r   ©r   rÿ  s     r    r!   z&TiffSequence._parse.<locals>.<genexpr>ø  s   è ø€ Ò4˜Q²!”qÑ4ùó   ‚ŠNc              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wr   r   r  s     r    r!   z&TiffSequence._parse.<locals>.<genexpr>ÿ  s   è ø€ Ò< Qº!œqÑ<ùr  z+axes do not match within the image sequencer&   rÌ   c              3   ó2   K  — | ]  \  }}||z
  d z   –— Œ y­wrÜ   r   )r   r   r2  s      r    r!   z&TiffSequence._parse.<locals>.<genexpr>  s   è ø€ ÒC¡D A q�a˜!‘e˜a•iÑCùrÚ   z*files are missing. Missing data are zeroed)r   r�  ÚreÚcompileÚ
IGNORECASEÚVERBOSEÚfindallr   r.   r  r,   r6   rØ   r  r;   rü  rq  r(  r   rŸ   r    rZ  r  rD   r÷  rö  )	r^   r   Úmatchesr  rÐ  r®  rÿ  rD   Ú
startindexs	            r    rõ  zTiffSequence._parseí  sÃ  € à�|Š|Ø—/‘/Ð"3Ó4Ð4Ü—*‘*˜TŸ\™\¬2¯=©=¼2¿:¹:Ñ+EÓFˆØ—/‘/ $§*¡*¨Q¡-Ó0ˆÙØ—/‘/Ð"EÓFÐFØ˜"‘+ˆÜˆw‹<˜!ÒØ—/‘/Ð"NÓOÐOØ�w‰wÑ4 '©#¨A¨#¡,Ô4Ó4ˆÙØ—/‘/Ð"EÓFÐFàˆØ—Z‘Zò 	AˆEØ—o‘o eÓ,¨RÑ0ˆGØ�r—w‘wÑ<¨'±#°A°#©,Ô<Ó<Ò<Ü Ð!NÓOÐOØ�N‰N¨G°A°D°q°D©MÖ? qºQœC �FÒ?Õ@ð		Aô
 ”e—i‘i ¨aÔ0Ó1ˆÜœ5Ÿ9™9 W°1Ô5Ó6ˆ
ÜÑC¬C°°zÓ,BÔCÓCˆÜ�5‹>œS §¡›_Ò,Ü�M‰MÐFÔGà—J‘J“LˆŒ	ØˆŒ
ØˆŒØ%ˆÕùò @s   Å	H$
ÅH$
r   )rg   ro   rp   rq   rô  r?   r�  r	   r_   rõ  r�  rÍ  rÕ  rË  r/   rõ  r   r`   r    r   r   c  sU   „ ñð: ð 	ð 	€Iô�Yô ð &.°vó 1Còf	
òòòòóó(&r`   r   c                   ó  — e Zd ZdZdZdd„Zd„ Zdd„Zd„ Zd„ Z	dd	„Z
	 dd
„Zdd„Zd„ Zd„ Zd„ Zd d„Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zej8                  d„ «       Zy)!r   aÿ  Binary file handle.

    A limited, special purpose file handler that can:

    * handle embedded files (for CZI within CZI files)
    * re-open closed files (for multi-file formats, such as OME-TIFF)
    * read and write numpy arrays and records from file like objects

    Only 'rb' and 'wb' modes are supported. Concurrently reading and writing
    of the same stream is untested.

    When initialized from another file handle, do not use it unless this
    FileHandle is closed.

    Attributes
    ----------
    name : str
        Name of the file.
    path : str
        Absolute path to file.
    size : int
        Size of file in bytes.
    is_file : bool
        If True, file has a filno and can be memory-mapped.

    All attributes are read-only.

    )
r·   Ú_fileÚ_modeÚ_nameÚ_dirÚ_lockÚ_offsetÚ_sizeÚ_closer  Nc                 óÀ   — || _         d| _        || _        || _        d| _        || _        || _        d| _        d| _        t        «       | _
        | j                  «        y)aé  Initialize file handle from file name or another file handle.

        Parameters
        ----------
        file : str, pathlib.Path, binary stream, or FileHandle
            File name or seekable binary stream, such as an open file
            or BytesIO.
        mode : str
            File open mode in case 'file' is a file name. Must be 'rb' or 'wb'.
        name : str
            Optional name of file in case 'file' is a binary stream.
        offset : int
            Optional start position of embedded file. By default, this is
            the current file position.
        size : int
            Optional size of embedded file. By default, this is the number
            of bytes from the 'offset' to the end of the file.

        Nr'  TF)r  r·   r  r  r  r  r  r  r  ÚNullContextr  r×  )r^   rB   rW   rÚ  rS   rG   s         r    r_   zFileHandle.__init__9  sU   € ð( ˆŒ
ØˆŒØˆŒ
ØˆŒ
ØˆŒ	ØˆŒØˆŒ
ØˆŒØˆŒÜ “]ˆŒ
Ø�	‰	�r`   c                 ó	  — | j                   ryt        | j                  t        j                  «      rt        | j                  «      | _        t        | j                  t        «      r¦t        j                  j                  | j                  «      | _        t        j                  j                  | j                  «      \  | _        | _        t        | j                  | j                  «      | _         d| _        | j                   �€]d| _        �nTt        | j                  t"        «      �rP| j                  j                   | _         | j                   €d| _        | xj                   | j                  j                   z  c_        d| _        | j                  su| j                   rNt        j                  j%                  | j                  j                  «      \  }}d|| j                   |fz  | _        n| j                  j                  | _        | j                  r.| j                  | j                  j                  k7  rt'        d«      ‚| j                  j                  | _        | j                  j                  | _        nét)        | j                  d«      rÈ	 | j                  j+                  «        | j                  | _         | j                   €| j                  j+                  «       | _        d| _        | j                  sA	 t        j                  j                  | j                   j.                  «      \  | _        | _        	 | j                   j2                  | _        nt'        d
«      ‚| j                   r%| j                   j5                  | j                   «       | j6                  €z| j                   j+                  «       }| j                   j5                  | j                   d«       | j                   j+                  «       | _        | j                   j5                  |«       	 | j                   j9                  «        d| _        y# t,        $ r t'        d«      ‚w xY w# t0        $ r d	| _        Y �Œ-w xY w# t0        $ r Y �Œw xY w# t,        $ r
 d| _        Y yw xY w)zOpen or re-open file.NTr   Fz%s@%i%szFileHandle has wrong moder%   zbinary stream is not seekablezUnnamed binary streamzNThe first parameter must be a file name, seekable binary stream, or FileHandler�   )r·   r(   r  rò  ró  r›   r)   rú  r–  Úrealpathr  r  r  r×  r  r  r  r   Úsplitextr,   r-   r—   r?   rÚ  rb   rW   r%   r  rü  r  )r^   rÚ  Úextr¼   s       r    r×  zFileHandle.openY  s   € à�8Š8Øä�d—j‘j¤'§,¡,Ô/Ü˜TŸZ™Z›ˆDŒJÜ�d—j‘j¤*Ô-äŸ™×)Ñ)¨$¯*©*Ó5ˆDŒJÜ$&§G¡G§M¡M°$·*±*Ó$=Ñ!ˆDŒI�t”zÜ˜DŸJ™J¨¯
©
Ó3ˆDŒHØˆDŒKØ�|‰|Ñ#Ø �–Ü˜Ÿ
™
¤JÕ/à—z‘z—~‘~ˆDŒHØ�|‰|Ð#Ø �”Ø�LŠL˜DŸJ™J×.Ñ.Ñ.�LØˆDŒKØ—:’:Ø—<’<Ü "§¡× 0Ñ 0°·±×1AÑ1AÓ B‘I�D˜#Ø!*¨d°D·L±LÀ#Ð-FÑ!F�D•Jà!%§¡×!1Ñ!1�D”JØ�zŠz˜dŸj™j¨D¯J©J×,<Ñ,<Ò<Ü Ð!<Ó=Ð=ØŸ™×)Ñ)ˆDŒJØŸ
™
Ÿ™ˆD�IÜ�T—Z‘Z Ô(ðBØ—
‘
—‘Ô!ð —z‘zˆDŒHØ�|‰|Ð#Ø#Ÿz™zŸ™Ó0�”ØˆDŒKØ—:’:ð9Ü,.¯G©G¯M©M¸$¿(¹(¿-¹-Ó,HÑ)�D”I˜tœzðØ!ŸX™XŸ]™]�•
ô ð8óð ð
 �<Š<Ø�H‰H�M‰M˜$Ÿ,™,Ô'à�:‰:ÐØ—(‘(—-‘-“/ˆCØ�H‰H�M‰M˜$Ÿ,™,¨Ô*ØŸ™Ÿ™›ˆDŒJØ�H‰H�M‰M˜#Ôð	!Ø�H‰H�O‰OÔØˆD�LøôA ò BÜ Ð!@ÓAÐAðBûô &ò 9Ø!8�D—Jð9ûô "ò Úðûô( ò 	!Ø ˆDŽLð	!úsC   ÊP: Ë8A Q Ì9Q) Ð!Q9 Ð:QÑQ&Ñ%Q&Ñ)	Q6Ñ5Q6Ñ9RÒRc                 ór   — |dk  r| j                   r| j                  }| j                  j                  |«      S )z5Read 'size' bytes from file, or until EOF is reached.r   )r  r  r·   ræ  ©r^   rG   s     r    ræ  zFileHandle.read¡  s+   € à�!Š8˜ŸšØ—:‘:ˆDØ�x‰x�}‰}˜TÓ"Ð"r`   c                 ó8   — | j                   j                  |«      S )zWrite bytestring to file.)r·   r¸   )r^   Ú
bytestrings     r    r¸   zFileHandle.write§  s   € à�x‰x�~‰~˜jÓ)Ð)r`   c                 ó6   — | j                   j                  «       S )z"Flush write buffers if applicable.)r·   rr  rÉ  s    r    rr  zFileHandle.flush«  s   € à�x‰x�~‰~ÓÐr`   c                 ó”   — | j                   st        d«      ‚t        j                  | j                  ||| j
                  |z   ||¬«      S )z+Return numpy.memmap of data stored in file.z%Cannot memory-map file without fileno)r<   rW   rS   rD   Úorder)r  r,   r;   r   r·   r  )r^   r<   rD   rS   rW   r!  s         r    r  zFileHandle.memmap_array¯  sE   € à�|Š|ÜÐDÓEÐEÜ�|‰|Ø�H‰HØØØ—<‘< &Ñ(ØØô
ð 	
r`   c                 ó˜  — | j                   }t        j                  |«      }|dk  r| j                  n||j                  z  }|€m	 t        j
                  ||||«      }	|rP|	j                  j                  s:|	j                  d«       |	j                  |	j                  j                  «       «      }	|	S |j                  }t        |j                   |«      }|j#                  d«      }d}|dkD  rn|j                  t        ||«      «      }
t%        |
«      }|dk(  rnB||z  }t        j                  |
|«      }
|
||||
j&                  z    ||
j&                  z  }|dkD  rŒnt)        |d«      r|j+                  «        |j#                  |«      S # t        $ r: |j                  |«      }
t        j                  |
||«      j                  «       }	Y �Œkw xY w)z´Return numpy array from file.

        Work around numpy issue #2230, "numpy.fromfile does not accept
        StringIO object" https://github.com/numpy/numpy/issues/2230.

        r   TrÀ   rr  )r·   r;   r<   r  r=   Úfromfilerœ   ræ  rË  rd  rK  rÞ  rß  rJ  rD   rq  r>   ra  r.   rG   r-   rr  )r^   r<   r	  ÚsepÚ	chunksizer   r  r»   rG   rX   rC   rD   r†  r‡  s                 r    r  zFileHandle.read_array¼  s–  € ð �X‰XˆÜ—‘˜EÓ"ˆØ" QšYˆt�zŠz¨E°E·N±NÑ,Bˆàˆ;ðEÜŸ™¨¨E°5¸#Ó>�ñ
 ˜fŸl™l×3Ò3à—‘ Ô%ØŸ™ V§\¡\×%>Ñ%>Ó%@ÓA�ØˆMð —	‘	ˆÜ�3—:‘:˜tÓ$ˆØ�k‰k˜"‹oˆØˆØ�QŠhØ—7‘7œ3˜y¨$Ó/Ó0ˆDÜ˜4“yˆHØ˜1Š}ØØ�HÑˆDÜ×#Ñ# D¨%Ó0ˆDØ-1ˆC�˜ §	¡	Ñ)Ð*Ø�T—Y‘YÑˆEð �Q‹hô �3˜Ô Ø�I‰IŒKØ�{‰{˜5Ó!Ð!øô7 ò Eà—w‘w˜t“}�Ü×)Ñ)¨$°°uÓ=×BÑBÓD“ðEús   ÁF Æ?G	ÇG	c                 óš  — t         j                  }	 |j                  | j                  |||¬«      }|dk(  r|d   S |S # t        $ r„ t        j
                  |«      }|€| j                  |j                  z  }t        t        |«      «      |j                  z  }| j                  j                  |«      }|j                  ||||¬«      }Y Œ˜w xY w)zReturn numpy record from file.©r8   r&   r   )r;   Úrecr#  r·   r?   r<   r  r=   r   Úsequenceræ  rŒ  )r^   r<   rD   r8   r(  ÚrecordrG   rC   s           r    Úread_recordzFileHandle.read_recordé  s¹   € ä�i‰iˆð	MØ—\‘\ $§(¡(¨E°5ÀI�\ÓNˆFð " QšJˆv�a‰yÐ2¨FÐ2øô ò 	MÜ—K‘K Ó&ˆEØˆ}ØŸ
™
 e§n¡nÑ4�Üœ8 E›?Ó+¨e¯n©nÑ<ˆDØ—8‘8—=‘= Ó&ˆDØ—^‘^ D¨%°À)�^ÓLŠFð	Mús   ’= ½B
C
Ã	C
c                 ó„   — |dk  ry| j                   j                  |dz
  d«       | j                   j                  d«       y)z;Append size bytes to file. Position must be at end of file.r&   Nrü   )r·   r%   r¸   r  s     r    rO  zFileHandle.write_empty÷  s2   € à�!Š8ØØ�‰�‰�d˜Q‘h Ô"Ø�‰�‰�wÕr`   c                 ó¬   — 	 |j                  | j                  «       y# t        $ r, | j                  j                  |j	                  «       «       Y yw xY w)z!Write numpy array to binary file.N)Útofiler·   r?   r¸   r  )r^   rC   s     r    rP  zFileHandle.write_arrayþ  s<   € ð	,Ø�K‰K˜Ÿ™Õ!øÜò 	,à�H‰H�N‰N˜4Ÿ=™=›?Ö+ð	,ús   ‚ ž2AÁAc                 óP   — | j                   j                  «       | j                  z
  S )zReturn file's current position.)r·   r—   r  rÉ  s    r    r—   zFileHandle.tell  s   € à�x‰x�}‰}‹ §¡Ñ-Ð-r`   c                 óH  — | j                   rz|dk(  r*| j                  j                  | j                   |z   |«       y|dk(  rF| j                  dkD  r7| j                  j                  | j                   | j                  z   |z   d«       y| j                  j                  ||«       y)zSet file's current position.r   Nr�   )r  r·   r%   r  )r^   rS   Úwhences      r    r%   zFileHandle.seek
  sx   € à�<Š<Ø˜Š{Ø—‘—‘˜dŸl™l¨VÑ3°VÔ<ØØ˜1’ §¡¨a¢Ø—‘—‘˜dŸl™l¨T¯Z©ZÑ7¸&Ñ@À!ÔDØØ�‰�‰�f˜fÕ%r`   c                 óz   — | j                   r/| j                  r"| j                  j                  «        d| _        yyy)zClose file.N)r  r·   rË  rÉ  s    r    rË  zFileHandle.close  s+   € à�;Š;˜4Ÿ8š8Ø�H‰H�N‰NÔØˆD�Hð $ˆ;r`   c                 ó   — | S r   r   rÉ  s    r    rÍ  zFileHandle.__enter__  rÎ  r`   c                 ó$   — | j                  «        y r   rÐ  rÑ  s       r    rÕ  zFileHandle.__exit__  rÖ  r`   c                 óv   — | j                   rt        j                  d|z  «       t        | j                  |«      S )z-Return attribute from underlying file object.z3FileHandle: '%s' not implemented for embedded files)r  rŸ   r    re   r·   r´  s     r    rß  zFileHandle.__getattr__!  s-   € à�<Š<Ü�M‰MÐOÐRVÑVÔWÜ�t—x‘x Ó&Ð&r`   c                 ó   — | j                   S r   )r  rÉ  s    r    rÚ  zFileHandle.name'  ó   € à�z‰zÐr`   c                 ó   — | j                   S r   )r  rÉ  s    r    r�  zFileHandle.dirname+  rä  r`   c                 ój   — t         j                  j                  | j                  | j                  «      S r   )rú  r–  r  r  r  rÉ  s    r    r–  zFileHandle.path/  s   € ä�w‰w�|‰|˜DŸI™I t§z¡zÓ2Ð2r`   c                 ó   — | j                   S r   )r  rÉ  s    r    rG   zFileHandle.size3  r7  r`   c                 ó   — | j                   d u S r   r÷  rÉ  s    r    r‰  zFileHandle.closed7  s   € à�x‰x˜4ÐÐr`   c                 ó   — | j                   S r   )r  rÉ  s    r    rÖ  zFileHandle.lock;  r7  r`   c                 óZ   — |rt        j                  «       | _        y t        «       | _        y r   )Ú	threadingÚRLockr  r  rx  s     r    rÖ  zFileHandle.lock?  s   € á*/”Y—_‘_Ó&ˆ�
´[³]ˆ�
r`   )rv   NNNrà   )r   ÚrrK   )rÀ   r'  i   NFrÜ   r9  )rg   ro   rp   rq   rr   r_   r×  ræ  r¸   rr  r  r  r+  rO  rP  r—   r%   rË  rÍ  rÕ  rß  rm  rÚ  r�  r–  rG   r‰  rÖ  r•  r   r`   r    r   r     sû   „ ñð:€Ióò@F!óP#ò*ò ó
ð JOó+"óZ3ò ò,ò.ó	&òòòò'ð ñó ðð ñó ðð ñ3ó ð3ð ñó ðð ñ ó ð ð ñó ðð 
‡[�[ñCó ñCr`   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)r  zINull context manager.

    >>> with NullContext():
    ...     pass

    c                 ó   — | S r   r   rÉ  s    r    rÍ  zNullContext.__enter__L  rÎ  r`   c                  ó   — y r   r   rÑ  s       r    rÕ  zNullContext.__exit__O  rý  r`   N)rg   ro   rp   rq   rÍ  rÕ  r   r`   r    r  r  D  s   „ ñòór`   r  c                   ó.   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zy)	ÚOpenFileCachezKeep files open.)r   ÚpastrÖ  rG   Nc                 óf   — g | _         i | _        |€
t        «       n|| _        t	        |«      | _        y)zInitialize open file cache.N)rF  r   r  rÖ  rØ   rG   )r^   rG   rÖ  s      r    r_   zOpenFileCache.__init__X  s*   € àˆŒ	ØˆŒ
Ø%) \”K”M°tˆŒ	Ü˜“Iˆ�	r`   c                 ó  — | j                   5  || j                  v r| j                  |xx   dz  cc<   nF|j                  r:|j                  «        d| j                  |<   | j                  j                  |«       ddd«       y# 1 sw Y   yxY w)zRe-open file if necessary.r&   N)rÖ  r   r‰  r×  rF  r6   )r^   rí  s     r    r×  zOpenFileCache.open_  sq   € à�Y‰Yñ 	-Ø˜TŸZ™ZÑ'Ø—
‘
˜:Ó&¨!Ñ+Ô&Ø×"Ò"Ø—‘Ô!Ø)*�—
‘
˜:Ñ&Ø—	‘	× Ñ  Ô,÷	-÷ 	-ñ 	-ús   �A-BÂBc                 ó¼  — | j                   5  || j                  v r­| j                  |xx   dz  cc<   d}t        | j                  «      }|| j                  kD  rp||k  rk| j                  |   }| j                  |   dk(  r0|j                  «        | j                  |= | j                  |= |dz  }n|dz  }|| j                  kD  r||k  rŒkddd«       y# 1 sw Y   yxY w)z$Close opened file if no longer used.r&   r   N)rÖ  r   r.   rF  rG   rË  )r^   rí  r†  rG   s       r    rË  zOpenFileCache.closei  sË   € à�Y‰Yñ 	#Ø˜TŸZ™ZÑ'Ø—
‘
˜:Ó&¨!Ñ+Ó&à�Ü˜4Ÿ9™9“~�Ø˜TŸY™YÒ&¨5°4ª<Ø!%§¡¨5Ñ!1�JØ—z‘z *Ñ-°Ò2Ø"×(Ñ(Ô*Ø ŸJ™J zÐ2Ø ŸI™I eÐ,Ø ™	™à ™
˜ð ˜TŸY™YÒ&¨5°4«<÷	#÷ 	#ñ 	#ús   �B;CÃCc                 ó0  — | j                   5  t        | j                  j                  «       «      D ]N  \  }}|dk(  sŒ|j	                  «        | j                  |= | j
                  | j
                  j                  |«      = ŒP 	 ddd«       y# 1 sw Y   yxY w)z%Close all opened files if not in use.r   N)rÖ  r  r   râ  rË  rF  r†  )r^   rí  Úrefcounts      r    r  zOpenFileCache.clear{  s|   € à�Y‰Yñ 	?Ü(,¨T¯Z©Z×-=Ñ-=Ó-?Ó(@ò ?Ñ$�
˜HØ˜q“=Ø×$Ñ$Ô&ØŸ
™
 :Ð.ØŸ	™	 $§)¡)§/¡/°*Ó"=Ñ>ñ	?÷	?÷ 	?ñ 	?ús   �/B½ABÂBr   )	rg   ro   rp   rq   rr   r_   r×  rË  r  r   r`   r    rE  rE  S  s   „ Ùà1€Ióò-ò#ó$?r`   rE  c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú	LazyConstzEClass whose attributes are computed on first access from its methods.c                 ó4   — || _         t        |d«      | _        y )Nrq   )Ú_clsre   rq   )r^   Úclss     r    r_   zLazyConst.__init__ˆ  s   € ØˆŒ	Ü˜s IÓ.ˆ�r`   c                 ó´   — t        | j                  |«      }t        |«      s|S 	  |«       }t        | ||«       |S # t        $ r |j	                  «       }Y Œ*w xY wr   )re   rO  Úcallabler  Ú__func__rh   )r^   rÚ  r\   rk   s       r    rß  zLazyConst.__getattr__Œ  sY   € Ü�t—y‘y $Ó'ˆÜ˜Œ~ØˆKð	$Ù“FˆEô 	��d˜EÔ"Øˆøô	 ò 	$à—M‘M“OŠEð	$ús   ¥; »AÁAN)rg   ro   rp   rq   r_   rß  r   r`   r    rM  rM  …  s   „ ÙOò/ó
r`   rM  c                   ó„  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZAy@)ArM   zNamespace for module constants.c                  ó<  — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥i dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“d_d`“dadb“dcdd“dedf“¥i dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“d{d|“d}d~“dd€“d�d‚“dƒd„“d…d†“d‡dˆ“¥i d‰dŠ“d‹dŒ“d�dŽ“d�d�“d‘d’“d“d”“d•d–“d—d˜“d™dš“d›dœ“d�dž“dŸd “d¡d¢“d£d¤“d¥d¦“d§d¨“d©dª“¥i d«d¬“d­d®“d¯d°“d±d²“d³d´“dµd¶“d·d¸“d¹dº“d»d¼“d½d¾“d¿dÀ“dÁdÂ“dÃdÄ“dÅdÆ“dÇdÈ“dÉdÊ“dËdÌ“¥i dÍdÎ“dÏdÐ“dÑdÒ“dÓdÔ“dÕdÖ“d×dØ“dÙdÚ“dÛdÜ“dÝdÞ“dßdà“dádâ“dãdä“dådæ“dçdè“dédê“dëdì“dídî“¥i dïdð“dñdò“dódô“dõdö“d÷dø“dùdú“dûdü“dýdþ“dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“�d�d“¥i �d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“�d1�d2“¥i �d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“�dA�dB“�dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“¥i �dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“�dc�dd“�de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“�du�dv“¥i �dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“�d…�d†“�d‡�dˆ“�d‰�dŠ“�d‹�dŒ“�d��dŽ“�d��d�“�d‘�d’“�d“�d”“�d•�d–“�d—�d˜“¥i �d™�dš“�d›�dœ“�d��dž“�dŸ�d “�d¡�d¢“�d£�d¤“�d¥�d¦“�d§�d¨“�d©�dª“�d«�d¬“�d­�d®“�d¯�d°“�d±�d²“�d³�d´“�dµ�d¶“�d·�d¸“�d¹�dº“¥i �d»�d¼“�d½�d¾“�d¿�dÀ“�dÁ�dÂ“�dÃ�dÄ“�dÅ�dÆ“�dÇ�dÈ“�dÉ�dÊ“�dË�dÌ“�dÍ�dÎ“�dÏ�dÐ“�dÑ�dÒ“�dÓ�dÔ“�dÕ�dÖ“�d×�dØ“�dÙ�dÚ“�dÛ�dÜ“¥i �dÝ�dÞ“�dß�dà“�dá�dâ“�dã�dä“�då�dæ“�dç�dè“�dé�dê“�dë�dì“�dí�dî“�dï�dð“�dñ�dò“�dó�dô“�dõ�dö“�d÷�dø“�dù�dú“�dû�dü“�dý�dþ“¥i �dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d “¥i �d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“�d1�d2“�d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“�dA�dB“¥i �dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“�dc�dd“¥i �de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“�du�dv“�dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“�d…�d†“¥i �d‡�dˆ“�d‰�dŠ“�d‹�dŒ“�d��dŽ“�d��d�“�d‘�d’“�d“�d”“�d•�d–“�d—�d˜“�d™�dš“�d›�dœ“�d��dž“�dŸ�d “�d¡�d¢“�d£�d¤“�d¥�d¦“�d§�d¨“¥i �d©�dª“�d«�d¬“�d­�d®“�d¯�d°“�d±�d²“�d³�d´“�dµ�d¶“�d·�d¸“�d¹�dº“�d»�d¼“�d½�d¾“�d¿�dÀ“�dÁ�dÂ“�dÃ�dÄ“�dÅ�dÆ“�dÇ�dÈ“�dÉ�dÊ“¥i �dË�dÌ“�dÍ�dÎ“�dÏ�dÐ“�dÑ�dÒ“�dÓ�dÔ“�dÕ�dÖ“�d×�dØ“�dÙ�dÚ“�dÛ�dÜ“�dÝ�dÞ“�dß�dà“�dá�dâ“�dã�dä“�då�dæ“�dç�dè“�dé�dê“�dë�dì“¥i �dí�dî“�dï�dð“�dñ�dò“�dó�dô“�dõ�dö“�d÷�dø“�dù�dú“�dû�dü“�dý�dþ“�dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“¥i �d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“¥i �d1�d2“�d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“�dA�dB“�dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“¥i �dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“�dc�dd“�de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“¥i �du�dv“�dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“�d…�d†“�d‡�dˆ“�d‰�dŠ“�d‹�dŒ“�d��dŽ“�d��d�“�d‘�d’“�d“�d”“�d•�d–“¥i �d—�d˜“�d™�dš“�d›�dœ“�d��dž“�dŸ�d “�d¡�d¢“�d£�d¤“�d¥�d¦“�d§�d¨“�d©�dª“�d«�d¬“�d­�d®“�d¯�d°“�d±�d²“�d³�d´“�dµ�d¶“�d·�d¸“¥i �d¹�dº“�d»�d¼“�d½�d¾“�d¿�dÀ“�dÁ�dÂ“�dÃ�dÄ“�dÅ�dÆ“�dÇ�dÈ“�dÉ�dÊ“�dË�dÌ“�dÍ�dÎ“�dÏ�dÐ“�dÑ�dÒ“�dÓ�dÔ“�dÕ�dÖ“�d×�dØ“�dÙ�dÚ“¥i �dÛ�dÜ“�dÝ�dÞ“�dß�dà“�dá�dâ“�dã�dä“�då�dæ“�dç�dè“�dé�dê“�dë�dì“�dí�dî“�dï�dð“�dñ�dò“�dó�dô“�dõ�dö“�d÷�dø“�dù�dú“�dû�dü“¥i �dý�dþ“�dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“¥i �d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“�d1�d2“�d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“¥i �dA�dB“�dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“¥i �dc�dd“�de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“�du�dv“�dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“¥�d…�d†�d‡�dˆ�d‰�dŠœ¥S (‹  NrP  ÚProcessingSoftwareéþ   r/  ró  ÚSubfileTypeé   r)  é  r*  rÒ  r7  é  r'  é  r3  é  ÚThresholdingi  Ú	CellWidthi	  Ú
CellLengthé
  Ú	FillOrderi  ÚDocumentNamerH  r#  i  ÚMakei  ÚModelr¥  r§  é  ÚOrientationi  r5  i  r?  r¦  r©  i  ÚMinSampleValuei  ÚMaxSampleValuei  r:  i  r<  é  r6  i  ÚPageNamei  Ú	XPositioni  Ú	YPositioni   ÚFreeOffsetsi!  ÚFreeByteCountsé"  ÚGrayResponseUniti#  ÚGrayResponseCurvei$  Ú	T4Optionsi%  Ú	T6Optionsé(  r=  i)  Ú
PageNumberé,  ÚColorResponseUniti-  ÚTransferFunctioni1  r%  i2  r&  i;  ÚArtisti<  ÚHostComputeré=  r(  i>  Ú
WhitePointi?  ÚPrimaryChromaticitiesé@  r4  iA  ÚHalftoneHintsiB  r+  iC  r,  r§  r¦  r¨  r¨  iF  ÚBadFaxLinesiG  ÚCleanFaxDataiH  ÚConsecutiveBadFaxLinesiJ  ÚSubIFDsiL  ÚInkSetiM  ÚInkNamesiN  ÚNumberOfInksiP  ÚDotRangeiQ  ÚTargetPrinteréR  r8  éS  r2  iT  ÚSMinSampleValueiU  ÚSMaxSampleValueiV  ÚTransferRangeiW  ÚClipPathiX  ÚXClipPathUnitsiY  ÚYClipPathUnitsiZ  ÚIndexedi[  rÂ  i_  ÚOPIProxyi�  ÚGlobalParametersIFDi‘  ÚProfileTypei’  Ú
FaxProfilei“  ÚCodingMethodsi”  ÚVersionYeari•  Ú
ModeNumberi±  ÚDecodei²  ÚDefaultImageColori³  Ú
T82Optionsiµ  ÚJPEGTables_i   ÚJPEGProci  ÚJPEGInterchangeFormati  ÚJPEGInterchangeFormatLengthi  ÚJPEGRestartIntervali  ÚJPEGLosslessPredictorsi  ÚJPEGPointTransformsi  ÚJPEGQTablesi  ÚJPEGDCTablesi	  ÚJPEGACTablesi  ÚYCbCrCoefficientsé  ro  é  ÚYCbCrPositioningi  ÚReferenceBlackWhitei/  ÚStripRowCountsi¼  ÚXMPi  ÚGDIGammai  ÚICCProfileDescriptori  ÚSRGBRenderingIntenti   Ú
ImageTitleiç  ÚUSPTO_Miscellaneousr)  r(  i  ÚAndorTemperaturei  ÚAndorExposureTimei  ÚAndorKineticCycleTimei  ÚAndorAccumulationsi  ÚAndorAcquisitionCycleTimei  ÚAndorReadoutTimei  ÚAndorPhotonCountingi  ÚAndorEmDacLeveli  ÚAndorFramesi   ÚAndorHorizontalFlipi!  ÚAndorVerticalFlipi"  ÚAndorClockwisei#  ÚAndorCounterClockwisei(  ÚAndorVerticalClockVoltagei)  ÚAndorVerticalShiftSpeedi+  ÚAndorPreAmpSettingi,  ÚAndorCameraSeriali/  ÚAndorActualTemperaturei0  ÚAndorBaselineClampi1  ÚAndorPrescansi2  Ú
AndorModeli3  ÚAndorChipSizeXi4  ÚAndorChipSizeYiP  ÚAndorBaselineOffsetif  ÚAndorSoftwareVersioniFG  ÚRatingiGG  Ú
XP_DIP_XMLiHG  Ú
StitchInfoiIG  ÚRatingPercentiP  ÚResolutionXUnitiP  ÚResolutionYUnitiP  ÚResolutionXLengthUnitiP  ÚResolutionYLengthUnitiP  Ú
PrintFlagsiP  ÚPrintFlagsVersioniP  ÚPrintFlagsCropiP  ÚPrintFlagsBleedWidthi	P  ÚPrintFlagsBleedWidthScalei
P  ÚHalftoneLPIiP  ÚHalftoneLPIUnitiP  ÚHalftoneDegreeiP  ÚHalftoneShapeiP  ÚHalftoneMisciP  ÚHalftoneScreeniP  ÚJPEGQualityiP  ÚGridSizeiP  ÚThumbnailFormatiP  ÚThumbnailWidthiP  ÚThumbnailHeightiP  ÚThumbnailColorDepthiP  ÚThumbnailPlanesiP  ÚThumbnailRawBytesiP  ÚThumbnailSizeiP  ÚThumbnailCompressedSizeiP  ÚColorTransferFunctioniP  ÚThumbnailDatai P  ÚThumbnailImageWidthi!P  ÚThumbnailImageHeighti"P  ÚThumbnailBitsPerSamplei#P  ÚThumbnailCompressioni$P  ÚThumbnailPhotometricInterpi%P  ÚThumbnailImageDescriptioni&P  ÚThumbnailEquipMakei'P  ÚThumbnailEquipModeli(P  ÚThumbnailStripOffsetsi)P  ÚThumbnailOrientationi*P  ÚThumbnailSamplesPerPixeli+P  ÚThumbnailRowsPerStripi,P  ÚThumbnailStripBytesCounti-P  ÚThumbnailResolutionXi.P  ÚThumbnailResolutionYi/P  ÚThumbnailPlanarConfigi0P  ÚThumbnailResolutionUniti1P  ÚThumbnailTransferFunctioni2P  ÚThumbnailSoftwareUsedi3P  ÚThumbnailDateTimei4P  ÚThumbnailArtisti5P  ÚThumbnailWhitePointi6P  ÚThumbnailPrimaryChromaticitiesi7P  ÚThumbnailYCbCrCoefficientsi8P  ÚThumbnailYCbCrSubsamplingi9P  ÚThumbnailYCbCrPositioningi:P  ÚThumbnailRefBlackWhitei;P  ÚThumbnailCopyRightiAP  ÚInteroperabilityIndexiBP  ÚInteroperabilityVersioni�P  ÚLuminanceTablei‘P  ÚChrominanceTablei Q  Ú
FrameDelayiQ  Ú	LoopCountiQ  ÚGlobalPaletteiQ  ÚIndexBackgroundiQ  ÚIndexTransparentiQ  Ú	PixelUnitiQ  ÚPixelPerUnitXiQ  ÚPixelPerUnitYiQ  ÚPaletteHistogrami p  ÚSonyRawFileTypei2p  ÚVignettingCorrParamsi5p  ÚChromaticAberrationCorrParamsi7p  ÚDistortionCorrParamsi€  ÚImageIDi£€  ÚWangTag1i¤€  ÚWangAnnotationi¥€  ÚWangTag3i¦€  ÚWangTag4i¹€  ÚImageReferencePointsiº€  ÚRegionXformTackPointi»€  ÚWarpQuadrilaterali¼€  ÚAffineTransformMatiã€  ÚMatteingiä€  ÚDataTypeiå€  r-  iæ€  r.  i‚  ÚImageFullWidthi‚  ÚImageFullLengthi‚  ÚTextureFormati‚  ÚTextureWrapModesi‚  ÚFieldOfViewCotangenti‚  ÚMatrixWorldToScreeni‚  ÚMatrixWorldToCamerai}‚  ÚModel2i�‚  ÚCFARepeatPatternDimiŽ‚  Ú
CFAPatterni�‚  ÚBatteryLeveli�‚  ÚKodakIFDiš‚  ÚExposureTimei�‚  ÚFNumberi˜‚  Ú	CopyrightrD  rC  i¦‚  ÚMDScalePixeli§‚  ÚMDColorTablei¨‚  Ú	MDLabNamei©‚  ÚMDSampleInfoiª‚  Ú
MDPrepDatei«‚  Ú
MDPrepTimei¬‚  ÚMDFileUnitsiƒ  r<  i5ƒ  ÚAdventScalei6ƒ  ÚAdventRevisioné\ƒ  r  é]ƒ  r  é^ƒ  r  é_ƒ  r  é»ƒ  ÚIPTCNAAiB„  ÚExtendedTagsOffseti~„  ÚIntergraphPacketDatai„  ÚIntergraphFlagRegistersi€„  r:  i�„  ÚINGRReservedi‚„  r>  éƒ„  Ú
LeicaMagicià„  ÚSiteiá„  ÚColorSequenceiâ„  Ú	IT8Headeriã„  ÚRasterPaddingiä„  ÚBitsPerRunLengthiå„  ÚBitsPerExtendedRunLengthiæ„  Ú
ColorTableiç„  ÚImageColorIndicatoriè„  ÚBackgroundColorIndicatorié„  ÚImageColorValueiê„  ÚBackgroundColorValueië„  ÚPixelIntensityRangeiì„  ÚTransparencyIndicatorií„  ÚColorCharacterizationiî„  ÚHCUsageiï„  ÚTrapIndicatorið„  ÚCMYKEquivalentéF…  r?  ih…  Ú	AFCP_IPTCi¸…  ÚPixelMagicJBIGOptionsi×…  ÚJPLCartoIFDiJ…  ÚIPLABiØ…  r@  i†  ÚWB_GRGBLevelsi†  ÚLeafDataé9†  r2  é:†  r3  é;†  Ú
MM_UnknowniI†  ÚImageResourceséR†  ÚMM_UserBlockél†  r  éi‡  ÚExifTagis‡  ÚInterColorProfileéx‡  r:  éz‡  r;  i{‡  Ú	FEI_TITANi‡  ÚFXExtensionsi€‡  ÚMultiProfilesi�‡  Ú
SharedDatai‚‡  Ú
T88Optionsi–‡  ÚMarCCDi¬‡  Ú
ImageLayeri¯‡  r5  é°‡  ÚGeoDoubleParamsTagr9  ÚGeoAsciiParamsTagi¾‡  ÚJBIGOptionsiˆ  ÚPIXTIFFi"ˆ  ÚExposureProgrami$ˆ  ÚSpectralSensitivityé%ˆ  ÚGPSTagi'ˆ  ÚISOSpeedRatingsi(ˆ  ÚOECFi)ˆ  Ú	Interlacei*ˆ  ÚTimeZoneOffseti+ˆ  ÚSelfTimerModei0ˆ  ÚSensitivityTypei1ˆ  ÚStandardOutputSensitivityi2ˆ  ÚRecommendedExposureIndexi3ˆ  ÚISOSpeedi4ˆ  ÚISOSpeedLatitudeyyyi5ˆ  ÚISOSpeedLatitudezzzi\ˆ  ÚHylaFAXFaxRecvParamsi]ˆ  ÚHylaFAXFaxSubAddressi^ˆ  ÚHylaFAXFaxRecvTimei_ˆ  ÚFaxDcsiqˆ  ÚFedexEDRiŠˆ  Ú
LeafSubIFDi�ˆ  Ú	Aphelion1i�ˆ  Ú	Aphelion2i‘ˆ  ÚAphelionInternali �  ÚExifVersioni�  ÚDateTimeOriginali�  ÚDateTimeDigitizedi	�  ÚGooglePlusUploadCodei�  Ú
OffsetTimei�  ÚOffsetTimeOriginali�  ÚOffsetTimeDigitizedi‘  ÚComponentsConfigurationi‘  ÚCompressedBitsPerPixeli’  ÚShutterSpeedValuei’  ÚApertureValuei’  ÚBrightnessValuei’  ÚExposureBiasValuei’  ÚMaxApertureValuei’  ÚSubjectDistancei’  ÚMeteringModei’  ÚLightSourcei	’  ÚFlashi
’  ÚFocalLengthi’  ÚFlashEnergy_i’  ÚSpatialFrequencyResponse_i’  ÚNoisei’  ÚFocalPlaneXResolutioni’  ÚFocalPlaneYResolutioni’  ÚFocalPlaneResolutionUniti’  ÚImageNumberi’  ÚSecurityClassificationi’  ÚImageHistoryi’  ÚSubjectLocationi’  ÚExposureIndexi’  ÚTIFFEPStandardIDi’  ÚSensingMethodi:’  ÚCIP3DataFilei;’  Ú	CIP3Sheeti<’  ÚCIP3Sidei?’  ÚStoNitsi|’  Ú	MakerNotei†’  ÚUserCommenti�’  Ú
SubsecTimei‘’  ÚSubsecTimeOriginali’’  ÚSubsecTimeDigitizedi/“  ÚMODITexti0“  ÚMODIOLEPropertySetStoragei1“  ÚMODIPositioningéJ“  rN  iK“  ÚTVIPS1iL“  ÚTVIPS2é\“  ÚImageSourceDatai ”  ÚTemperaturei”  ÚHumidityi”  ÚPressurei”  Ú
WaterDepthi”  ÚAccelerationi”  ÚCameraElevationAngleiAœ  ÚMC_IpWinScalé¤œ  ÚMC_IdOldé   ÚInteroperabilityTagi›œ  ÚXPTitleiœœ  Ú	XPCommenti�œ  ÚXPAuthorižœ  Ú
XPKeywordsiŸœ  Ú	XPSubjecti    ÚFlashpixVersioni   Ú
ColorSpacei   ÚPixelXDimensioni   ÚPixelYDimensioni   ÚRelatedSoundFilei   ÚSamsungRawPointersOffseti   ÚSamsungRawPointersLengthi¡  ÚSamsungRawByteOrderi¡  ÚSamsungRawUnknowni¢  ÚFlashEnergyi¢  ÚSpatialFrequencyResponsei¢  ÚNoise_i¢  ÚFocalPlaneXResolution_i¢  ÚFocalPlaneYResolution_i¢  ÚFocalPlaneResolutionUnit_i¢  ÚImageNumber_i¢  ÚSecurityClassification_i¢  ÚImageHistory_i¢  ÚSubjectLocation_i¢  zExposureIndex_ i¢  zTIFF-EPStandardIDi¢  ÚSensingMethod_i £  Ú
FileSourcei£  Ú	SceneTypei£  ÚCFAPattern_i¤  ÚCustomRenderedi¤  ÚExposureModei¤  ÚWhiteBalancei¤  ÚDigitalZoomRatioi¤  ÚFocalLengthIn35mmFilmi¤  ÚSceneCaptureTypei¤  ÚGainControli¤  ÚContrasti	¤  Ú
Saturationi
¤  Ú	Sharpnessi¤  ÚDeviceSettingDescriptioni¤  ÚSubjectDistanceRangei ¤  ÚImageUniqueIDi0¤  ÚCameraOwnerNamei1¤  ÚBodySerialNumberi2¤  ÚLensSpecificationi3¤  ÚLensMakei4¤  Ú	LensModeli5¤  ÚLensSerialNumberi€¤  ÚGDAL_METADATAi�¤  ÚGDAL_NODATAi ¥  ÚGammaé2©  r7  iÀ¯  ÚExpandSoftwareiÁ¯  Ú
ExpandLensiÂ¯  Ú
ExpandFilmiÃ¯  ÚExpandFilterLensiÄ¯  ÚExpandScanneriÅ¯  ÚExpandFlashLampi¼  ÚPixelFormati¼  ÚTransformationi¼  ÚUncompressedi¼  Ú	ImageTypei€¼  ÚImageWidth_i�¼  ÚImageHeight_i‚¼  ÚWidthResolutioniƒ¼  ÚHeightResolutioniÀ¼  ÚImageOffsetiÁ¼  ÚImageByteCountiÂ¼  ÚAlphaOffsetiÃ¼  ÚAlphaByteCountiÄ¼  ÚImageDataDiscardiÅ¼  ÚAlphaDataDiscardi'Ä  ÚOceScanjobDescriptioni(Ä  ÚOceApplicationSelectori)Ä  ÚOceIdentificationNumberi*Ä  ÚOceImageLogicCharacteristicsiOÄ  ÚAnnotationsépÄ  ry  iqÄ  ÚMC_XYPositionirÄ  ÚMC_ZPositionisÄ  ÚMC_XYCalibrationitÄ  ÚMC_LensCharacteristicsiuÄ  ÚMC_ChannelNameivÄ  ÚMC_ExcitationWavelengthiwÄ  ÚMC_TimeStampéxÄ  ÚMC_FramePropertiesi¥Ä  ÚPrintImageMatchingi?Å  ÚPCO_RAWisÅ  ÚOriginalFileNamei€Å  ÚUSPTO_OriginalContentTypei�Å  ÚUSPTO_RotationCodeiàÅ  ÚCR2CFAPatternrâ   Ú
DNGVersioniÆ  ÚDNGBackwardVersioniÆ  ÚUniqueCameraModeliÆ  ÚLocalizedCameraModeliÆ  ÚCFAPlaneColoriÆ  Ú	CFALayoutiÆ  ÚLinearizationTableiÆ  ÚBlackLevelRepeatDimiÆ  Ú
BlackLeveliÆ  ÚBlackLevelDeltaHiÆ  ÚBlackLevelDeltaViÆ  Ú
WhiteLeveliÆ  ÚDefaultScaleiÆ  ÚDefaultCropOrigini Æ  ÚDefaultCropSizei!Æ  ÚColorMatrix1i"Æ  ÚColorMatrix2i#Æ  ÚCameraCalibration1i$Æ  ÚCameraCalibration2i%Æ  ÚReductionMatrix1i&Æ  ÚReductionMatrix2i'Æ  ÚAnalogBalancei(Æ  ÚAsShotNeutrali)Æ  ÚAsShotWhiteXYi*Æ  ÚBaselineExposurei+Æ  ÚBaselineNoisei,Æ  ÚBaselineSharpnessi-Æ  ÚBayerGreenSpliti.Æ  ÚLinearResponseLimiti/Æ  ÚCameraSerialNumberi0Æ  ÚLensInfoi1Æ  ÚChromaBlurRadiusi2Æ  ÚAntiAliasStrengthi3Æ  ÚShadowScalei4Æ  ÚDNGPrivateDatai5Æ  ÚMakerNoteSafetyi@Æ  ÚRawImageSegmentationiZÆ  ÚCalibrationIlluminant1i[Æ  ÚCalibrationIlluminant2i\Æ  ÚBestQualityScalei]Æ  ÚRawDataUniqueIDi`Æ  ÚAliasLayerMetadatai‹Æ  ÚOriginalRawFileNameiŒÆ  ÚOriginalRawFileDatai�Æ  Ú
ActiveAreaiŽÆ  ÚMaskedAreasi�Æ  ÚAsShotICCProfilei�Æ  ÚAsShotPreProfileMatrixi‘Æ  ÚCurrentICCProfilei’Æ  ÚCurrentPreProfileMatrixé–Æ  r™  é—Æ  r.  iœÆ  rB  i¿Æ  ÚColorimetricReferenceiÅÆ  ÚSRawTypeiÒÆ  ÚPanasonicTitleiÓÆ  ÚPanasonicTitle2ióÆ  ÚCameraCalibrationSignatureiôÆ  ÚProfileCalibrationSignatureiõÆ  Ú
ProfileIFDiöÆ  ÚAsShotProfileNamei÷Æ  ÚNoiseReductionAppliediøÆ  ÚProfileNameiùÆ  ÚProfileHueSatMapDimsiúÆ  ÚProfileHueSatMapData1iûÆ  ÚProfileHueSatMapData2iüÆ  ÚProfileToneCurveiýÆ  ÚProfileEmbedPolicyiþÆ  ÚProfileCopyrightiÇ  ÚForwardMatrix1iÇ  ÚForwardMatrix2iÇ  ÚPreviewApplicationNameiÇ  ÚPreviewApplicationVersioniÇ  ÚPreviewSettingsNameiÇ  ÚPreviewSettingsDigestiÇ  ÚPreviewColorSpaceiÇ  ÚPreviewDateTimeiÇ  ÚRawImageDigestiÇ  ÚOriginalRawFileDigestiÇ  ÚSubTileBlockSizeiÇ  ÚRowInterleaveFactori%Ç  ÚProfileLookTableDimsi&Ç  ÚProfileLookTableDatai@Ç  ÚOpcodeList1iAÇ  ÚOpcodeList2iNÇ  ÚOpcodeList3iOÇ  Ú	FibicsXMLiaÇ  ÚNoiseProfileicÇ  Ú	TimeCodesidÇ  Ú	FrameRateirÇ  ÚTStopi‰Ç  ÚReelNamei‘Ç  ÚOriginalDefaultFinalSizei’Ç  ÚOriginalBestQualitySizei“Ç  ÚOriginalDefaultCropSizei¡Ç  ÚCameraLabeli£Ç  ÚProfileHueSatMapEncodingi¤Ç  ÚProfileLookTableEncodingi¥Ç  ÚBaselineExposureOffseti¦Ç  ÚDefaultBlackRenderi§Ç  ÚNewRawImageDigesti¨Ç  ÚRawToPreviewGainiµÇ  ÚDefaultUserCroprZ  ÚPaddingÚOffsetSchemaÚFlexXMLÚ	PerSample)é³Ç  iê  iê  i°þ  i  r   r   r`   r    rE  z	TIFF.TAGS�  s#  € ðk	
ØÐ$ðk	
àÐ!ðk	
ð �ðk	
ð �ð	k	
ð
 �ðk	
ð �ðk	
ð �ðk	
ð Ð,ðk	
ð �ðk	
ð �ðk	
ð �ðk	
ð �ðk	
ð �ðk	
ð Ð#ðk	
ð �ðk	
ð  �ð!k	
ð" �ñ#k	
ð$ �ð%k	
ð& Ð"ð'k	
ð( �ð)k	
ð* Ð"ð+k	
ð, Ð!ð-k	
ð. Ð!ð/k	
ð0 �ð1k	
ð2 �ð3k	
ð4 Ð&ð5k	
ð6 �ð7k	
ð8 �ð9k	
ð: �ð;k	
ð< �ð=k	
ð> Ð!ð?k	
ð@ Ð#ðAk	
ðB Ð$ðCk	
ðD �òEk	
ðF �ðGk	
ðH Ð!ðIk	
ðJ �ðKk	
ðL Ð$ðMk	
ðN Ð#ðOk	
ðP �ðQk	
ðR �ðSk	
ðT �ðUk	
ðV �ðWk	
ðX �ðYk	
ðZ �ð[k	
ð\ Ð(ð]k	
ð^ �ð_k	
ð` �ðak	
ðb �ðck	
ðd �ðek	
ðf �ògk	
ðh Ð!ðik	
ðj �ðkk	
ðl �ðmk	
ðn Ð)ðok	
ðp �ðqk	
ðr �ðsk	
ðt �ðuk	
ðv �ðwk	
ðx �ðyk	
ðz �ð{k	
ð| �ð}k	
ð~ �ðk	
ð@ Ð"ðAk	
ðB Ð"ðCk	
ðD �ðEk	
ðF �ðGk	
ðH Ð!òIk	
ðJ Ð!ðKk	
ðL �ðMk	
ðN �ðOk	
ðP �ðQk	
ðR Ð&ðSk	
ðT �ðUk	
ðV �ðWk	
ðX �ðYk	
ðZ �ð[k	
ð\ �ð]k	
ð^ �ð_k	
ð` Ð$ðak	
ðb �ðck	
ðd �ðek	
ðf �ðgk	
ðh Ð(ðik	
ðj Ð.òkk	
ðl Ð&ðmk	
ðn Ð)ðok	
ðp Ð&ðqk	
ðr �ðsk	
ðt �ðuk	
ðv �ðwk	
ðx Ð$ðyk	
ðz Ð#ð{k	
ð| Ð#ð}k	
ð~ Ð&ðk	
ð@ Ð!ðAk	
ðB �ðCk	
ðD �ðEk	
ðF Ð'ðGk	
ðH Ð&ðIk	
ðJ �ðKk	
ðL Ð&òMk	
ðN �)ðOk	
ðP Ð$ðQk	
ðR Ð%ðSk	
ðT Ð)ðUk	
ðV Ð&ðWk	
ðX Ð-ðYk	
ðZ Ð$ð[k	
ð\ Ð'ð]k	
ð^ Ð#ð_k	
ð` �-ðak	
ðb Ð'ðck	
ðd Ð%ðek	
ðf Ð"ðgk	
ðh Ð)ðik	
ðj Ð-ðkk	
ðl Ð+ðmk	
ðn Ð&òok	
ðp Ð%ðqk	
ðr Ð*ðsk	
ðt Ð&ðuk	
ðv �/ðwk	
ðx �,ðyk	
ðz Ð"ð{k	
ð| Ð"ð}k	
ð~ Ð'ðk	
ð@ Ñ(ðAk	
ñB ‘8ðCk	
ñD ‘<ðEk	
ñF ‘<ðGk	
ñH ‘?ðIk	
ñJ Ñ$ðKk	
ñL Ñ$ðMk	
ñN Ñ*ðOk	
ñP Ñ*òQk	
ñR ‘<ðSk	
ñT Ñ&ðUk	
ñV Ñ#ðWk	
ñX Ñ)ðYk	
ñZ Ñ.ð[k	
ñ\ ‘=ð]k	
ñ^ Ñ$ð_k	
ñ` Ñ#ðak	
ñb ‘?ðck	
ñd ‘>ðek	
ñf Ñ#ðgk	
ñh ‘=ðik	
ñj ‘:ðkk	
ñl Ñ$ðmk	
ñn Ñ#ðok	
ñp Ñ$ðqk	
ñr Ñ(òsk	
ñt Ñ$ðuk	
ñv Ñ&ðwk	
ñx ‘?ðyk	
ñz Ñ,ð{k	
ñ| Ñ*ð}k	
ñ~ ‘?ðk	
ñ@ Ñ(ðAk	
ñB Ñ)ðCk	
ñD Ñ+ðEk	
ñF Ñ)ðGk	
ñH Ñ/ðIk	
ñJ Ñ.ðKk	
ñL Ñ'ðMk	
ñN Ñ(ðOk	
ñP Ñ*ðQk	
ñR Ñ)ðSk	
ñT Ñ-òUk	
ñV Ñ*ðWk	
ñX Ñ-ðYk	
ñZ Ñ)ð[k	
ñ\ Ñ)ð]k	
ñ^ Ñ*ð_k	
ñ` Ñ,ðak	
ñb Ñ.ðck	
ñd Ñ*ðek	
ñf Ñ&ðgk	
ñh Ñ$ðik	
ñj Ñ(ðkk	
ñl Ñ3ðmk	
ñn Ñ/ðok	
ñp Ñ.ðqk	
ñr Ñ.ðsk	
ñt Ñ+ðuk	
ñv Ñ'òwk	
ñx Ñ*ðyk	
ñz Ñ,ð{k	
ñ| Ñ#ð}k	
ñ~ Ñ%ðk	
ñ@ ‘<ðAk	
ñB ‘;ðCk	
ñD ‘?ðEk	
ñF Ñ$ðGk	
ñH Ñ%ðIk	
ñJ ‘;ðKk	
ñL ‘?ðMk	
ñN ‘?ðOk	
ñP Ñ%ðQk	
ñR Ñ$ðSk	
ñT Ñ)ðUk	
ñV Ñ2ðWk	
ñX Ñ)òYk	
ñ\ ‘9ð]k	
ñ^ ‘:ð_k	
ñ` Ñ#ðak	
ñb ‘:ðck	
ñd ‘:ðek	
ñf Ñ)ðgk	
ñh Ñ)ðik	
ñj Ñ&ðkk	
ñl Ñ'ðmk	
ñn ‘:ðok	
ñp ‘:ðqk	
ñr ‘<ðsk	
ñt ‘;ðuk	
ñv Ñ#ðwk	
ñx Ñ$ðyk	
ñz ‘?ð{k	
ñ| Ñ%ò}k	
ñ~ Ñ)ðk	
ñ@ Ñ(ðAk	
ñB Ñ(ðCk	
ñD ‘8ðEk	
ñF Ñ(ðGk	
ñH ‘<ðIk	
ñJ ‘>ðKk	
ñL ‘:ðMk	
ñN ‘>ðOk	
ñP ‘9ðQk	
ñR ‘;ðSk	
ñT ‘;ðUk	
ñV ‘>ðWk	
ñX ‘>ðYk	
ñZ ‘;ð[k	
ñ\ ‘>ð]k	
ñ^ ‘<ò_k	
ñ` ‘<ðak	
ñb ‘=ðck	
ñd Ñ'ðek	
ñf ‘=ðgk	
ñh Ñ#ðik	
ñj ‘9ðkk	
ñl ‘9ðmk	
ñn ‘9ðok	
ñp ‘9ðqk	
ñr ‘9ðsk	
ñt Ñ'ðuk	
ñv Ñ)ðwk	
ñx Ñ,ðyk	
ñz Ñ(ð{k	
ñ| ‘>ð}k	
ñ~ Ñ%ðk	
ñ@ ‘<òAk	
ñB ‘6ðCk	
ñD ‘?ðEk	
ñF ‘;ðGk	
ñH ‘?ðIk	
ñJ Ñ%ðKk	
ñL Ñ-ðMk	
ñN ‘<ðOk	
ñP Ñ(ðQk	
ñR Ñ-ðSk	
ñT Ñ$ðUk	
ñV Ñ)ðWk	
ñX Ñ(ðYk	
ñZ Ñ*ð[k	
ñ\ Ñ*ð]k	
ñ^ ‘9ð_k	
ñ` ‘?ðak	
ñb Ñ#òck	
ñd ‘8ðek	
ñf ‘;ðgk	
ñh Ñ*ðik	
ñj ‘=ðkk	
ñl ‘7ðmk	
ñn Ñ+ðok	
ñp ‘?ðqk	
ñr ‘:ðsk	
ñt ‘;ðuk	
ñv ‘:ðwk	
ñx ‘<ðyk	
ñz Ñ#ð{k	
ñ| ‘>ð}k	
ñ~ ‘<ðk	
ñ@	 ‘9ðA	k	
ñB	 Ñ&ðC	k	
ñD	 ‘:òE	k	
ñF	 ‘<ðG	k	
ñH	 ‘;ðI	k	
ñJ	 ‘>ðK	k	
ñL	 ‘?ðM	k	
ñN	 ‘<ðO	k	
ñP	 ‘<ðQ	k	
ñR	 ‘8ðS	k	
ñT	 ‘<ðU	k	
ñV	 Ñ'ðW	k	
ñX	 Ñ'ðY	k	
ñZ	 Ñ&ð[	k	
ñ\	 ‘=ð]	k	
ñ^	 ‘9ð_	k	
ñ`	 Ñ$ða	k	
ñb	 Ñ(ðc	k	
ñd	 ‘8ðe	k	
ñf	 Ñ$òg	k	
ñh	 ‘6ði	k	
ñj	 ‘;ðk	k	
ñl	 Ñ#ðm	k	
ñn	 ‘?ðo	k	
ñp	 Ñ$ðq	k	
ñr	 Ñ.ðs	k	
ñt	 Ñ-ðu	k	
ñv	 ‘:ðw	k	
ñx	 Ñ(ðy	k	
ñz	 Ñ(ð{	k	
ñ|	 Ñ)ð}	k	
ñ~	 Ñ)ð	k	
ñ@
 Ñ'ðA
k	
ñB
 ‘8ðC
k	
ñD
 ‘:ðE
k	
ñF
 ‘<ðG
k	
ñH
 ‘;òI
k	
ñJ
 ‘;ðK
k	
ñL
 Ñ%ðM
k	
ñN
 ‘=ðO
k	
ñP
 Ñ%ðQ
k	
ñR
 Ñ&ðS
k	
ñT
 Ñ)ðU
k	
ñV
 ‘<ðW
k	
ñX
 Ñ'ðY
k	
ñZ
 Ñ(ð[
k	
ñ|
 Ñ,ð}
k	
ñ~
 Ñ+ð
k	
ñ@ Ñ&ðAk	
ñB ‘?ðCk	
ñD Ñ$ðEk	
ñF Ñ&ðGk	
ñH Ñ%ðIk	
ñJ Ñ$òKk	
ñL ‘>ðMk	
ñN ‘=ðOk	
ñP ‘7ðQk	
ñR ‘=ðSk	
ñT ‘>ðUk	
ñV Ñ.ðWk	
ñX ‘7ðYk	
ñZ Ñ*ð[k	
ñ\ Ñ*ð]k	
ñ^ Ñ-ð_k	
ñ` ‘=ðak	
ñb Ñ+ðck	
ñd ‘>ðek	
ñf Ñ$ðgk	
ñh ‘?ðik	
ñj Ñ%ðkk	
ñl ‘?òmk	
ñn ‘>ðok	
ñp ‘;ðqk	
ñr ‘:ðsk	
ñt ‘9ðuk	
ñv ‘;ðwk	
ñx ‘=ðyk	
ñz ‘<ð{k	
ñ| Ñ'ð}k	
ñ~ Ñ(ðk	
ñ@ ‘:ðAk	
ñB Ñ.ðCk	
ñD Ñ$ðEk	
ñF ‘7ðGk	
ñH ‘8ðIk	
ñJ ‘8ðKk	
ñL Ñ$ðMk	
ñN ‘=òOk	
ñP ‘:ðQk	
ñR ‘:ðSk	
ñT ‘<ðUk	
ñV ‘>ðWk	
ñX Ñ)ðYk	
ñZ ‘>ð[k	
ñ\ ‘:ð]k	
ñ^ Ñ(ð_k	
ñ` ‘9ðak	
ñb ‘;ðck	
ñd ‘:ðek	
ñf ‘<ðgk	
ñh ‘;ðik	
ñj Ñ$ðkk	
ñl ‘<ðmk	
ñn Ñ$ðok	
ñp Ñ$òqk	
ñr Ñ%ðsk	
ñt Ñ-ðuk	
ñv Ñ-ðwk	
ñx Ñ(ðyk	
ñz Ñ&ð{k	
ñ| ‘=ð}k	
ñ~ Ñ-ðk	
ñ@ ‘8ðAk	
ñB Ñ+ðCk	
ñD Ñ+ðEk	
ñF Ñ.ðGk	
ñH ‘>ðIk	
ñJ Ñ,ðKk	
ñL ‘?ðMk	
ñN Ñ%ðOk	
ñP Ñ$ðQk	
ñR Ñ&òSk	
ñT Ñ#ðUk	
ñV ‘<ðWk	
ñX ‘;ðYk	
ñZ ‘=ð[k	
ñ\ Ñ#ð]k	
ñ^ ‘>ð_k	
ñ` ‘>ðak	
ñb Ñ%ðck	
ñd Ñ*ðek	
ñf Ñ%ðgk	
ñh ‘=ðik	
ñj ‘:ðkk	
ñl ‘<ðmk	
ñn ‘;ðok	
ñp Ñ-ðqk	
ñr Ñ)ðsk	
ñt ‘?òuk	
ñv Ñ$ðwk	
ñx Ñ%ðyk	
ñz Ñ&ð{k	
ñ| ‘:ð}k	
ñ~ ‘;ðk	
ñ@ Ñ%ðAk	
ñB ‘?ðCk	
ñD ‘=ðEk	
ñF ‘7ðGk	
ñH Ñ#ðIk	
ñJ Ñ#ðKk	
ñL ‘<ðMk	
ñN ‘<ðOk	
ñP Ñ%ðQk	
ñR ‘?ðSk	
ñT Ñ$ðUk	
ñV ‘=òWk	
ñX Ñ#ðYk	
ñZ ‘>ð[k	
ñ\ ‘;ð]k	
ñ^ ‘=ð_k	
ñ` ‘>ðak	
ñb Ñ$ðck	
ñd Ñ%ðek	
ñf ‘=ðgk	
ñh Ñ#ðik	
ñj ‘=ðkk	
ñl Ñ#ðmk	
ñn Ñ%ðok	
ñp Ñ%ðqk	
ñr Ñ*ðsk	
ñt Ñ+ðuk	
ñv Ñ,ðwk	
ñx Ñ1òyk	
ñz ‘=ð{k	
ñ| ‘7ð}k	
ñ~ ‘?ðk	
ñ@ ‘>ðAk	
ñB Ñ%ðCk	
ñD Ñ+ðEk	
ñF Ñ#ðGk	
ñH Ñ,ðIk	
ñJ ‘>ðKk	
ñL Ñ'ðMk	
ñN Ñ'ðOk	
ñP ‘9ðQk	
ñR Ñ%ðSk	
ñT Ñ.ðUk	
ñV Ñ'ðWk	
ñX ‘?ðYk	
ñZ ‘<ò[k	
ñ\ Ñ'ð]k	
ñ^ Ñ&ð_k	
ñ` Ñ)ðak	
ñb ‘?ðck	
ñd ‘;ðek	
ñf Ñ'ðgk	
ñh Ñ(ðik	
ñj ‘<ðkk	
ñl Ñ%ðmk	
ñn Ñ%ðok	
ñp ‘<ðqk	
ñr ‘>ðsk	
ñt Ñ&ðuk	
ñv Ñ$ðwk	
ñx ‘>ðyk	
ñz ‘>ð{k	
ñ| Ñ'ò}k	
ñ~ Ñ'ðk	
ñ@ Ñ%ðAk	
ñB Ñ%ðCk	
ñD ‘?ðEk	
ñF ‘?ðGk	
ñH ‘?ðIk	
ñJ Ñ%ðKk	
ñL ‘?ðMk	
ñN Ñ&ðOk	
ñP Ñ$ðQk	
ñR Ñ(ðSk	
ñT Ñ'ðUk	
ñV ‘:ðWk	
ñX Ñ%ðYk	
ñZ Ñ&ð[k	
ñ\ ‘=ð]k	
ñ^ Ñ#ò_k	
ñ` Ñ$ðak	
ñb Ñ)ðck	
ñd Ñ+ðek	
ñf Ñ+ðgk	
ñh Ñ%ðik	
ñj Ñ$ðkk	
ñl Ñ'ðmk	
ñn Ñ(ðok	
ñp Ñ(ðqk	
ñr ‘<ðsk	
ñt ‘=ðuk	
ñv Ñ%ðwk	
ñx Ñ+ðyk	
ñz Ñ&ð{k	
ñ| Ñ,ð}k	
ñ~ Ñ)ðk	
ñ@ ‘<òAk	
ñB Ñ&ðCk	
ñD Ñ*ðEk	
ñF ‘:ðGk	
ñH Ñ#ðIk	
ñJ Ñ$ðKk	
ñL Ñ/ðMk	
ñN Ñ0ðOk	
ñP ‘<ðQk	
ñR Ñ&ðSk	
ñT Ñ*ðUk	
ñV ‘=ðWk	
ñX Ñ)ðYk	
ñZ Ñ*ð[k	
ñ\ Ñ*ð]k	
ñ^ Ñ%ð_k	
ñ` Ñ'ðak	
ñb Ñ%òck	
ñd Ñ#ðek	
ñf Ñ#ðgk	
ñh Ñ+ðik	
ñj Ñ.ðkk	
ñl Ñ(ðmk	
ñn Ñ*ðok	
ñp Ñ&ðqk	
ñr Ñ$ðsk	
ñt Ñ#ðuk	
ñv Ñ*ðwk	
ñx Ñ%ðyk	
ñz Ñ(ð{k	
ñ| Ñ)ð}k	
ñ~ Ñ)ðk	
ñ@ ‘=ðAk	
ñB ‘=ðCk	
ñD ‘=òEk	
ñF ‘;ðGk	
ñH ‘>ðIk	
ñJ ‘;ðKk	
ñL ‘;ðMk	
ñN ‘7ðOk	
ñP ‘:ðQk	
ñR Ñ-ðSk	
ñT Ñ,ðUk	
ñV Ñ,ðWk	
ñX ‘=ðYk	
ñZ Ñ-ð[k	
ñ\ Ñ-ð]k	
ñ^ Ñ+ð_k	
ñ` Ñ'ðak	
ñb Ñ&ðck	
ñd Ñ%ðek	
ñf Ñ$ñgk	
ñh *ÙÙ!ñ& ÙóUk	
ð k		
r`   c                  ór   — t         j                  j                  «       D � �ci c]  \  } }|| “Œ
 c}} S c c}} w r   )rM   rE  râ  )r1  rœ  s     r    rþ   zTIFF.TAG_NAMES  s)   € Ü!%§¡§¡Ó!2×3™˜˜A��1‘Ó3Ð3ùÓ3s   ¢3c                  óT  — i dt         “dt        “dt        “dt        “dt        “dt
        “dt        “dt        “d	t        “d
t        “dt        “dt        “dt        “dt        “dt        “dt        “dt        “t        t        t        t        t        t        t        t         t"        dœ	¥S )Nr  r?  r;  r<  r=  r>  rX  r_  r`  ra  rd  rf  rj  rk  r¼  r¿  rE  )	rþ  rÈ  r  r   r[  r’  rg  rz  rÊ  )Úread_colormaprÅ  r³  Úread_uic2tagÚread_uic3tagÚread_uic4tagÚread_cz_semÚread_mm_headerÚread_mm_stamprÆ  Úread_cz_lsminfoÚread_fei_metadataÚread_tvips_headerÚread_nih_image_headerÚ	read_jsonÚread_exif_ifdÚread_gps_ifdÚread_interoperability_ifdr   r`   r    rÄ  zTIFF.TAG_READERS  sû   € ð
Ø”ð
ð ”:ð	
ð ”<ð
ð ”<ð
ð ”<ð
ð ”<ð
ð ”;ð
ð ”>ð
ð ”=ð
ð ”:ð
ð ”:ð
ð ”?ð
ð  Ô$ð!
ð" Ô$ð#
ð$ Ô$ð%
ð& ”:ð'
ð( ”:ð)
ô* )äÜÜÜÜÜ ÜÜ,ò=
ð 	
r`   c                  ó   — t        d«      S )N)r¥  r¦  r§  r¨  r¨  r©  rs  )Ú	frozensetr   r`   r    rÇ  zTIFF.TAG_TUPLE2  s   € äÐ>Ó?Ð?r`   c                  óx   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&œ¥S )'Nr)  r¶  r*  r´  r7  r7  r'  rî  r6  ru  rb  rØ  r3  rt  r4  rz  r#  r{  ÚImageDescription1rr  r5  r‘  r?  rx  r%  r~  r(  ry  r+  rÛ  r,  rÜ  r8  r’  r—  r±  rÝ  )r2  r-  r.  r   r   r`   r    r¬  zTIFF.TAG_ATTRIBUTES6  så   € ð
Ø˜,ð
à˜=ð
ð ˜_ð
ð ˜=ð	
ð
 " >ð
ð ˜ð
ð (¨ð
ð ˜
ð
ð  ð
ð   ð
ð Ð0ð
ð ˜Nð
ð ˜
ð
ð ˜ð
ð ˜ð
ð  ˜,ð!
ð" ˜Nð#
ð$ +Ø&Ø$ò)
ð 	
r`   c                  óŽ  — t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  dœS )N)ró  r[  r\  r]  ra  rf  rj  rp  ru  rw  r|  rŠ  r‹  )rM   Ú	OFILETYPEr[  rQ  Ú
THRESHHOLDÚ	FILLORDERÚORIENTATIONrV  ÚGRAYRESPONSEUNITrj  ÚCOLORRESPONSEUNITÚ	PREDICTORrø  r  r   r`   r    rË  zTIFF.TAG_ENUMO  s{   € ô —‘Ü×!Ñ!Ü×!Ñ!Ü—‘Ü—‘Ü×!Ñ!Ü×"Ñ"Ü×&Ñ&ô —‘Ü×'Ñ'Ü—‘Ü×!Ñ!Ü×"Ñ"ñ!
ð 	
r`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZdZdZy)úTIFF.FILETYPE.<locals>.FILETYPEr   r&   r�   r‹   N)rg   ro   rp   Ú	UNDEFINEDÚREDUCEDIMAGEÚPAGEÚMASKr   r`   r    ÚFILETYPEr²  f  s   „ àˆIØˆLØˆDØ‰Dr`   r·  )ÚenumÚIntFlag)r·  s    r    r·  zTIFF.FILETYPEe  s   € ô	”t—|‘|ô 	ð ˆr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZdZdZy)ú!TIFF.OFILETYPE.<locals>.OFILETYPEr   r&   r�   rÉ   N)rg   ro   rp   r³  ÚIMAGEr´  rµ  r   r`   r    r©  r¼  p  s   „ ØˆIØˆEØˆLØ‰Dr`   r©  ©r¸  ÚIntEnum)r©  s    r    r©  zTIFF.OFILETYPEo  s   € ô	œŸ™ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   óÈ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1y0)1ú%TIFF.COMPRESSION.<locals>.COMPRESSIONr&   r�   rÉ   r‹   ræ   rç   r¿  r‡   rÃ   rN  éc   r\  iþ  iÿ  i€  i€  i€  i€  é€  i)€  i€  i€€  i�€  i‚€  iŒ€  i�€  é²€  i³€  ië€  ií€  ie‡  it‡  iu‡  i˜‡  i™‡  i›‡  iž‡  iŸ‡  i ‡  éLˆ  émˆ  énˆ  iuˆ  ivˆ  i]Ã  r+  iÿÿ  N)2rg   ro   rp   ÚNONEÚCCITTRLEÚCCITT_T4ÚCCITT_T6ÚLZWÚOJPEGÚJPEGrÂ   ÚJBIG_BWÚ
JBIG_COLORÚJPEG_99Ú	KODAK_262ÚNEXTÚSONY_ARWÚ
PACKED_RAWÚSAMSUNG_SRWÚCCIRLEWÚSAMSUNG_SRW2ÚPACKBITSÚTHUNDERSCANÚIT8CTPADÚIT8LWÚIT8MPÚIT8BLÚ	PIXARFILMÚPIXARLOGÚDEFLATEÚDCSÚAPERIO_JP2000_YCBCÚAPERIO_JP2000_RGBÚJBIGÚSGILOGÚSGILOG24ÚJPEG2000Ú	NIKON_NEFÚJBIG2Ú
MDI_BINARYÚMDI_PROGRESSIVEÚ
MDI_VECTORÚ
JPEG_LOSSYrÄ   rÅ   ÚOPS_PNGÚ
OPS_JPEGXRrw  Ú	KODAK_DCRÚ
PENTAX_PEFr   r`   r    r[  rÂ  y  sï   „ ØˆDØˆHØˆHØˆHØˆCØˆEØˆDØˆMØˆGØˆJØˆGØˆIØˆDØˆHØˆJØˆKØˆGØ ˆLØˆHØˆKØˆHØˆEØˆEØˆEØˆIØˆHØˆGØˆCØ!&ÐØ %ÐØˆDØˆFØˆHØˆHØˆIØˆEØˆJØ#ˆOØˆJØˆJØˆDØˆDØˆGØˆJØˆGØˆIØ‰Jr`   r[  r¾  )r[  s    r    r[  zTIFF.COMPRESSIONx  s   € ô/	œ$Ÿ,™,ô /	ðd Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   óD   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZy)ú%TIFF.PHOTOMETRIC.<locals>.PHOTOMETRICr   r&   r�   rÉ   r‹   ræ   rç   r‡   rÃ   rN  i#€  iL€  iM€  rÆ  N)rg   ro   rp   r`  rR  rS  rU  r¶  rù  ÚYCBCRÚCIELABÚICCLABÚITULABrT  ÚLOGLÚLOGLUVÚ
LINEAR_RAWr   r`   r    rQ  rö  ®  sH   „ ØˆJØˆJØˆCØˆGØˆDØˆIØˆEØˆFØˆFØˆFØˆCØˆDØˆFØ‰Jr`   rQ  r¾  )rQ  s    r    rQ  zTIFF.PHOTOMETRIC­  s   € ô	œ$Ÿ,™,ô 	ð  Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZdZy)ú#TIFF.THRESHHOLD.<locals>.THRESHHOLDr&   r�   rÉ   N)rg   ro   rp   ÚBILEVELÚHALFTONEÚERRORDIFFUSEr   r`   r    rª  r   Á  s   „ ØˆGØˆHØ‰Lr`   rª  r¾  )rª  s    r    rª  zTIFF.THRESHHOLDÀ  s   € ô	œŸ™ô 	ð
 Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZy)ú!TIFF.FILLORDER.<locals>.FILLORDERr&   r�   N)rg   ro   rp   ÚMSB2LSBÚLSB2MSBr   r`   r    r«  r  É  s   „ ØˆGØ‰Gr`   r«  r¾  )r«  s    r    r«  zTIFF.FILLORDERÈ  s   € ô	œŸ™ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó,   — e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
ú%TIFF.ORIENTATION.<locals>.ORIENTATIONr&   r�   rÉ   r‹   ræ   rç   r¿  r‡   N)rg   ro   rp   ÚTOPLEFTÚTOPRIGHTÚBOTRIGHTÚBOTLEFTÚLEFTTOPÚRIGHTTOPÚRIGHTBOTÚLEFTBOTr   r`   r    r¬  r  Ð  s*   „ ØˆGØˆHØˆHØˆGØˆGØˆHØˆHØ‰Gr`   r¬  r¾  )r¬  s    r    r¬  zTIFF.ORIENTATIONÏ  s   € ô	œ$Ÿ,™,ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZy)ú'TIFF.PLANARCONFIG.<locals>.PLANARCONFIGr&   r�   N)rg   ro   rp   rW  rX  r   r`   r    rV  r  Ý  s   „ ØˆFØ‰Hr`   rV  r¾  )rV  s    r    rV  zTIFF.PLANARCONFIGÜ  s   € ô	œ4Ÿ<™<ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó    — e Zd ZdZdZdZdZdZy)ú/TIFF.GRAYRESPONSEUNIT.<locals>.GRAYRESPONSEUNITr&   r�   rÉ   r‹   ræ   N©rg   ro   rp   Ú_10SÚ_100SÚ_1000SÚ_10000SÚ_100000Sr   r`   r    r­  r  ä  ó   „ ØˆDØˆEØˆFØˆGØ‰Hr`   r­  r¾  )r­  s    r    r­  zTIFF.GRAYRESPONSEUNITã  s   € ô	œtŸ|™|ô 	ð  Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZy)ú!TIFF.GROUP4OPT.<locals>.GROUP4OPTr�   N)rg   ro   rp   ÚUNCOMPRESSEDr   r`   r    Ú	GROUP4OPTr#  î  s   „ Ø‰Lr`   r%  r¾  )r%  s    r    r%  zTIFF.GROUP4OPTí  s   € ô	œŸ™ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZdZy)úTIFF.RESUNIT.<locals>.RESUNITr&   r�   rÉ   N)rg   ro   rp   rÉ  ÚINCHÚ
CENTIMETERr   r`   r    rj  r(  ô  s   „ ØˆDØˆDØ‰Jr`   rj  r¾  )rj  s    r    rj  zTIFF.RESUNITó  s   € ô	”d—l‘lô 	ð ˆr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó    — e Zd ZdZdZdZdZdZy)ú1TIFF.COLORRESPONSEUNIT.<locals>.COLORRESPONSEUNITr&   r�   rÉ   r‹   ræ   Nr  r   r`   r    r®  r-  ý  r   r`   r®  r¾  )r®  s    r    r®  zTIFF.COLORRESPONSEUNITü  s   € ô	¤§¡ô 	ð !Ð r`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZdZy)ú!TIFF.PREDICTOR.<locals>.PREDICTORr&   r�   rÉ   N)rg   ro   rp   rÉ  Ú
HORIZONTALÚFLOATINGPOINTr   r`   r    r¯  r0    s   „ ØˆDØˆJØ‰Mr`   r¯  r¾  )r¯  s    r    r¯  zTIFF.PREDICTOR  s   € ô	œŸ™ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó   — e Zd ZdZdZdZy)ú%TIFF.EXTRASAMPLE.<locals>.EXTRASAMPLEr   r&   r�   N)rg   ro   rp   ÚUNSPECIFIEDÚ
ASSOCALPHAÚ
UNASSALPHAr   r`   r    rø  r5    s   „ ØˆKØˆJØ‰Jr`   rø  r¾  )rø  s    r    rø  zTIFF.EXTRASAMPLE  s   € ô	œ$Ÿ,™,ô 	ð
 Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   ó$   — e Zd ZdZdZdZdZdZdZy)ú'TIFF.SAMPLEFORMAT.<locals>.SAMPLEFORMATr&   r�   rÉ   r‹   ræ   rç   N)	rg   ro   rp   ÚUINTÚINTÚIEEEFPÚVOIDÚ
COMPLEXINTÚCOMPLEXIEEEFPr   r`   r    r  r;    s    „ ØˆDØˆCØˆFØˆDØˆJØ‰Mr`   r  r¾  )r  s    r    r  zTIFF.SAMPLEFORMAT  s   € ô	œ4Ÿ<™<ô 	ð Ðr`   c                  ó8   —  G d„ dt         j                  «      } | S )Nc                   óX   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZy)ú!TIFF.DATATYPES.<locals>.DATATYPESr   r&   r�   rÉ   r‹   ræ   rç   r¿  r‡   rÃ   rN  rP  rŒ   é   r‹  r¡  r½   é   é   N)rg   ro   rp   ÚNOTYPEÚBYTEÚASCIIÚSHORTÚLONGÚRATIONALÚSBYTEr³  ÚSSHORTÚSLONGÚ	SRATIONALÚFLOATÚDOUBLEr‚  ÚUNICODEÚCOMPLEXÚLONG8ÚSLONG8ÚIFD8r   r`   r    Ú	DATATYPESrD  #  sa   „ ØˆFØˆDØˆEØˆEØˆDØˆHØˆEØˆIØˆFØˆEØˆIØˆEØˆFØˆCØˆGØˆGØˆEØˆFØ‰Dr`   rY  r¾  )rY  s    r    rY  zTIFF.DATATYPES"  s   € ô	œŸ™ô 	ð* Ðr`   c                  óf   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“S )Nr&   rÁ  r�   Ú1srÉ   Ú1Hr‹   Ú1Iræ   r;  rç   Ú1br¿  r‡   Ú1hrÃ   Ú1irN  Ú2irP  Ú1frŒ   Ú1drE  r½   Ú1QrF  Ú1qrG  r   r   r`   r    rÃ  zTIFF.DATA_FORMATS:  sÈ   € ð
Øˆtð
àˆtð
ð ˆtð	
ð
 ˆtð
ð ˆtð
ð ˆtð
ð ˆtð
ð ˆtð
ð ˆtð
ð �ð
ð" �ð#
ð$ �ð%
ð& �ð'
ð, �ð-
ð. �ð/
ð0 �ð1
ð 	
r`   c                  ó"   — ddddddddd	d
ddddœS )Nr&   r�   rÉ   r‹   ræ   rç   r‡   rÃ   rN  rP  rŒ   r½   rF  )rÇ   rû   r�   rŽ   r;  ÚbÚhr   ra  r!  r‰  r‰   Úqr   r   r`   r    rÿ   zTIFF.DATA_DTYPESW  s5   € ð ØØØØØØØØØØØØñ
ð 	
r`   c                  óî   — i dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“i dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d“d"d“d#d“d$d“d%d&“d'd(“¥d)d*d+d,d-d.d/d0dd1œ	¥S )2Nr>  r¿   rÉ  rÇ   )r&   rÉ   )r&   r‹   )r&   ræ   )r&   rç   )r&   r¿  )r&   r‡   )r&   rÃ   r�   )r&   rN  )r&   rP  )r&   rŒ   )r&   rE  )r&   r‹  )r&   r¡  )r&   r½   )r&   rF  rŽ   )r&   rG  )r&   é   )r&   rˆ   )r&   é   )r&   rŸ  )r&   é   )r&   é   )r&   é   )r&   é   )r&   é   )r&   é   )r&   é   )r&   é   )r&   é   )r&   rÈ  )r&   rÉ  r‰   )r�   r‡   rg  rh  r   ri  rl   r!  r‰  ÚFÚD)	)r�   r½   )r�   rÈ  )r�   rÉ  )rÉ   r½   ©rÉ   rÈ  )rÉ   rÉ  )rç   rÉ  )rç   rU  )r&   ©ræ   rç   ræ   r   r   r`   r    rµ  zTIFF.SAMPLE_DTYPESi  sÊ  € ð,
Ø�Cð,
à�Cð,
ð �Cð,
ð �Cð	,
ð
 �Cð,
ð �Cð,
ð �Cð,
ð �Cð,
ð �Cð,
ð �Sð,
ð �Sð,
ð �Sð,
ð �Sð,
ð �Sð,
ð �Sð,
ð  �Sð!,
ð" �Sñ#,
ð$ �Sð%,
ð& �Sð',
ð( �Sð),
ð* �Sð+,
ð, �Sð-,
ð. �Sð/,
ð0 �Sð1,
ð2 �Sð3,
ð4 �Sð5,
ð6 �Sð7,
ð8 �Sð9,
ð: �Sð;,
ð< �Sð=,
ð> �Sð?,
ð@ �SðA,
ðB �SðC,
ðD �CñE,
ðF ØØØØØØØØòW,
ð ,	
r`   c                  ó.   —  G d„ dt         «      }  | «       S )Nc                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ú$TIFF.COMPESSORS.<locals>.Compressorsz"Delay import compressor functions.c                 óX   — t         j                  dft         j                  dfdœ| _        y )Nrç   )r‡   rÅ  )ÚzlibrÒ   Ú_compressorsrÉ  s    r    r_   z-TIFF.COMPESSORS.<locals>.Compressors.__init__Ÿ  s"   € Ü)-¯©¸Ð(:ÄDÇMÁMÐSTÐCUÑ$V�Õ!r`   c                 ór  ‡— || j                   v r| j                   |   S |dk(  r	 dd lŠˆfd„}|df| j                   |<   |dfS |dk(  r.	 dd l}|j                  df| j                   |<   |j                  dfS t        ‚# t        $ r 	 dd lmŠ n# t        $ r t        ‚w xY wY Œyw xY w# t        $ r t        ‚w xY w)NrÇ  r   c                 ó&   •— ‰j                  | «      S r   )rÒ   )rî   rÐ   Úlzmas     €r    Úlzma_compresszGTIFF.COMPESSORS.<locals>.Compressors.__getitem__.<locals>.lzma_compress¯  s   ø€ Ø#Ÿ}™}¨QÓ/Ð/r`   rÈ  rÃ   )r  r‚  ÚImportErrorÚbackports.lzmar   ÚzstdrÒ   )r^   rC  rƒ  r†  r‚  s       @r    r‘  z0TIFF.COMPESSORS.<locals>.Compressors.__getitem__¢  sÝ   ø€ Ø˜$×+Ñ+Ñ+Ø×,Ñ,¨SÑ1Ð1à˜%’<ð+Û#ô0ð .;¸AÐ-=�D×%Ñ% cÑ*Ø(¨!Ð+Ð+à˜%’<ð'Û#ð .2¯]©]¸AÐ-=�D×%Ñ% cÑ*ØŸ=™=¨!Ð+Ð+ä�øô) 'ò +ð+Þ9øÜ*ò +Ü"*˜Nð+úñ :ð+ûô 'ò 'Ü&˜ð'ús5   ¥A< Á	B& Á<	B#ÂBÂB#ÂBÂB#Â"B#Â&B6c                 ó.   — 	 | |    y# t         $ r Y yw xY w©NTF©r   )r^   rC  s     r    Ú__contains__z1TIFF.COMPESSORS.<locals>.Compressors.__contains__¿  s#   € ð!Ø˜’IØøÜò !Ù ð!úó   ‚ ˆ	“N©rg   ro   rp   rq   r_   r‘  rŠ  r   r`   r    ÚCompressorsr|  œ  s   „ Ù4òWòó:!r`   r�  ©Úobject)r�  s    r    r]  zTIFF.COMPESSORS™  s   € ô(	!œ&ô (	!ñT ‹}Ðr`   c                  ó.   —  G d„ dt         «      }  | «       S )Nc                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ú(TIFF.DECOMPESSORS.<locals>.Decompressorsz$Delay import decompressor functions.c                 óx   — t         t         t        t        j                  t        t        j                  dœ| _        y )N)Nr&   ræ   r‡   rÄ  rÅ  )rá  r   r~  rÇ  Údecode_packbitsÚ_decompressorsrÉ  s    r    r_   z1TIFF.DECOMPESSORS.<locals>.Decompressors.__init__Î  s&   € ä&Ü#Ü!Ü—‘Ü*ÜŸ?™?ñ'�Õ#r`   c                 óô  ‡‡— || j                   v r| j                   |   S |dk(  r!	 ddlmŠmŠ dˆˆfd„	}|| j                   |<   |S |dk(  r*	 dd l}|j                  | j                   |<   |j                  S |dk(  r*	 dd l	}|j                  | j                   |<   |j                  S t
        ‚# t        $ r t
        ‚w xY w# t        $ r 	 dd lm} n# t        $ r t
        ‚w xY wY Œ“w xY w# t        $ r t
        ‚w xY w)Nr¿  r   )ÚjpegÚjpeg_12c                 óz   •— |dk(  r‰j                  | ||«      S |dk(  r‰j                  | ||«      S t        d«      ‚)Nr‡   rŒ   zbitspersample not supported)Údecode_jpegÚdecode_jpeg_12r,   )rî   rÅ  ÚbpsrÆ  r—  r˜  s       €€r    rš  zITIFF.DECOMPESSORS.<locals>.Decompressors.__getitem__.<locals>.decode_jpegâ  sG   ø€ Ø !š8Ø#'×#3Ñ#3°A°u¸jÓ#IÐIØ  BšYØ#*×#9Ñ#9¸!¸UÀJÓ#OÐOä",Ð-JÓ"KÐKr`   rÇ  rÈ  r   )
r•  Úimagecodecsr—  r˜  r„  r   r‚  r…  rÇ  r†  )r^   rC  rš  r‚  r†  r—  r˜  s        @@r    r‘  z4TIFF.DECOMPESSORS.<locals>.Decompressors.__getitem__Ø  s  ù€ Ø˜$×-Ñ-Ñ-Ø×.Ñ.¨sÑ3Ð3à˜!’8ð'ß=öLð 0;�D×'Ñ'¨Ñ,Ø&Ð&à˜%’<ð+Û#ð 04¯©�D×'Ñ'¨Ñ,ØŸ?™?Ð*à˜%’<ð'Û#ð 04¯©�D×'Ñ'¨Ñ,ØŸ?™?Ð*Ü�øôA 'ò 'Ü&˜ð'ûô" 'ò +ð+Þ9øÜ*ò +Ü"*˜Nð+úñ :ð+ûô 'ò 'Ü&˜ð'úsA   ¦B* ÁB= Á;C' Â*B:Â=	C$ÃCÃC$ÃCÃC$Ã#C$Ã'C7c                 ó.   — 	 | |    y# t         $ r Y yw xY wrˆ  r‰  )r^   Úitems     r    rŠ  z5TIFF.DECOMPESSORS.<locals>.Decompressors.__contains__  s#   € ð!Ø˜’JØøÜò !Ù ð!úr‹  NrŒ  r   r`   r    ÚDecompressorsr’  Ë  s   „ Ù6òò'óR!r`   r   rŽ  )r   s    r    r  zTIFF.DECOMPESSORSÈ  s   € ô;	!œFô ;	!ñz ‹Ðr`   c                  ó4   — t        dj                  «       «      S )Nz#shape ndim size dtype axes is_final)r  r  r   r`   r    r³  zTIFF.FRAME_ATTRS
  s   € äÐ8×>Ñ>Ó@ÓAÐAr`   c                  óx   ‡ — t        dj                  «       «      Š t        ˆ fd„t        t        «      D «       «      S )Nz<reduced final memmappable contiguous tiled chroma_subsampledc              3   óJ   •K  — | ]  }|d d dk(  sŒ|dd  ‰vsŒ|dd  –— Œ y ­w)NrÉ   rz   r   )r   r{   Úexcludes     €r    r!   z"TIFF.FILE_FLAGS.<locals>.<genexpr>  s5   øè ø€ ò 
Ø¨A¨b¨q¨E°U«N¸qÀÀ¸uÈGÒ?SˆAˆaˆbŒEñ
ùs   ƒ#‘#™
#)r  r  Údirrô  )r¤  s   @r    rã  zTIFF.FILE_FLAGS  s9   ø€ äØM×SÑSÓUó
ˆô ó 
Üœx›=ô
ó 
ð 	
r`   c                  ó4   — t        dj                  «       «      S )NzBtif tiff ome.tif lsm stk qptiff pcoraw gel seq svs bif tf8 tf2 btf)r  r  r   r`   r    ÚFILE_EXTENSIONSzTIFF.FILE_EXTENSIONS  s   € äð*ß*/©%«'ó
ð 	
r`   c                  ó|   — t         j                  D � cg c]  } d| j                  «       z  d| z  f‘Œ c} dgz   S c c} w )Nz%s filesz*.%s)ÚallfilesÚ*)rM   r§  rZ  )r  s    r    ÚFILEOPEN_FILTERzTIFF.FILEOPEN_FILTER  sH   € ô AE×@TÑ@Tö
Ø9<ˆZ˜#Ÿ)™)›+Ñ% v°¡|Ò4ò
àÐñ ð 	 ùò 
s   “9c                  óÈ   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “} | j                  t        d!„ | j                  «       D «       «      «       | S )"NÚXró  ÚYrø  r=  Údepthrõ  ÚsamplerŽ   rR   r;  ÚtimerK   ÚchannelÚAÚangler¶  ÚphaseÚRrv  r�   ÚlifetimeÚEÚlambdaÚLÚexposureÚVÚeventr‰   rr  r¸  Úmosaicc              3   ó*   K  — | ]  \  }}||f–— Œ y ­wr   r   ©r   r  rœ  s      r    r!   z#TIFF.AXES_LABELS.<locals>.<genexpr>8  s   è ø€ Ò9¡D A q˜!˜QœÑ9ùs   ‚)rL   Údictrâ  )r  s    r    r‘  zTIFF.AXES_LABELS$  sé   € ð
Ø�ð
à�ð
ð �ð
ð �ð	
ð
 �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð  �ð!
ˆð$ 	�‰”DÑ9¨D¯J©J«LÔ9Ó9Ô:Øˆr`   c                  ó,   — t        t        dd«      «      S )Nr)  i¦  )r  rn  r   r`   r    Ú
ANDOR_TAGSzTIFF.ANDOR_TAGS;  s   € ä”5˜˜tÓ$Ó%Ð%r`   c                  óf   — ddddddddd	d
dddddœ} | j                  t        j                  «       | S )NÚ	OwnerNameÚSerialNumberÚLensÚRawFileÚ	Converterrê  ÚExposureÚShadowsÚ
Brightnessrï  rð  rñ  Ú
SmoothnessÚMoireFilter)r+  r-  r/  iLþ  iMþ  iNþ  iQþ  iRþ  iSþ  iTþ  iUþ  iVþ  iWþ  iXþ  )rL   rM   rE  rj  s    r    Ú	EXIF_TAGSzTIFF.EXIF_TAGS?  sL   € ð Ø!ØØØØ!ØØØØØØØØ ñ
ˆð" 	�‰”D—I‘IÔØˆr`   c                  ó�   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2œ¥S )3Nr   ÚGPSVersionIDr&   ÚGPSLatitudeRefr�   ÚGPSLatituderÉ   ÚGPSLongitudeRefr‹   ÚGPSLongituderæ   ÚGPSAltitudeRefrç   ÚGPSAltituder¿  ÚGPSTimeStampr‡   ÚGPSSatellitesrÃ   Ú	GPSStatusrN  ÚGPSMeasureModerP  ÚGPSDOPrŒ   ÚGPSSpeedRefrE  ÚGPSSpeedr‹  ÚGPSTrackRefr¡  ÚGPSTrackr½   ÚGPSImgDirectionRefÚGPSImgDirectionÚGPSMapDatumÚGPSDestLatitudeRefÚGPSDestLatitudeÚGPSDestLongitudeRefÚGPSDestLongitudeÚGPSDestBearingRefÚGPSDestBearingÚGPSDestDistanceRefÚGPSDestDistanceÚGPSProcessingMethodÚGPSAreaInformationÚGPSDateStampÚGPSDifferentialÚGPSHPositioningError)rF  rG  rk  rˆ   rl  rŸ  rm  rn  ro  rp  rq  rr  rs  rt  ru  r   r   r`   r    ÚGPS_TAGSzTIFF.GPS_TAGST  s  € ð!
Øˆ~ð!
àÐð!
ð ˆ}ð!
ð Ð ð	!
ð
 ˆ~ð!
ð Ðð!
ð ˆ}ð!
ð ˆ~ð!
ð ˆð!
ð ˆ{ð!
ð Ð ð!
ð �ð!
ð �ð!
ð �
ð!
ð �ð!
ð  �
ð!!
ð" Ð$ð#!
ð$ "ØØ$Ø!Ø%Ø"Ø#Ø Ø$Ø!Ø%Ø$ØØ!Ø&òA!
ð !	
r`   c                  ó   — ddddddœS )Nr  r  ÚRelatedImageFileFormatÚRelatedImageWidthÚRelatedImageLength)r&   r�   r…  é  é  r   r   r`   r    ÚIOP_TAGSzTIFF.IOP_TAGSx  s   € à&Ø(Ø*Ø%Ø&ñ
ð 	
r`   c                  óø   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFdGdHdEdIdJdKdLdMdNdOdPdQdRœ¥S )SNé   ÚGTModelTypeGeoKeyi  ÚGTRasterTypeGeoKeyi  ÚGTCitationGeoKeyi   ÚGeographicTypeGeoKeyi  ÚGeogCitationGeoKeyi  ÚGeogGeodeticDatumGeoKeyi  ÚGeogPrimeMeridianGeoKeyi  ÚGeogLinearUnitsGeoKeyi  ÚGeogLinearUnitSizeGeoKeyi  ÚGeogAngularUnitsGeoKeyi  ÚGeogAngularUnitsSizeGeoKeyi  ÚGeogEllipsoidGeoKeyi	  ÚGeogSemiMajorAxisGeoKeyi
  ÚGeogSemiMinorAxisGeoKeyi  ÚGeogInvFlatteningGeoKeyi  ÚGeogAzimuthUnitsGeoKeyi  ÚGeogPrimeMeridianLongGeoKeyi  ÚGeogTOWGS84GeoKeyió  Ú"ProjLinearUnitsInterpCorrectGeoKeyi   ÚProjectedCSTypeGeoKeyi  ÚPCSCitationGeoKeyi  ÚProjectionGeoKeyi  ÚProjCoordTransGeoKeyi  ÚProjLinearUnitsGeoKeyi  ÚProjLinearUnitSizeGeoKeyi  ÚProjStdParallel1GeoKeyi  ÚProjStdParallel2GeoKeyi  ÚProjNatOriginLongGeoKeyi	  ÚProjNatOriginLatGeoKeyi
  ÚProjFalseEastingGeoKeyi  ÚProjFalseNorthingGeoKeyi  ÚProjFalseOriginLongGeoKeyi  ÚProjFalseOriginLatGeoKeyi  ÚProjFalseOriginEastingGeoKeyÚProjFalseOriginNorthingGeoKeyÚProjCenterLongGeoKeyÚProjCenterLatGeoKeyÚProjCenterEastingGeoKeyÚProjScaleAtNatOriginGeoKeyÚProjScaleAtCenterGeoKeyÚProjAzimuthAngleGeoKeyÚProjStraightVertPoleLongGeoKeyÚProjRectifiedGridAngleGeoKeyÚVerticalCSTypeGeoKeyÚVerticalCitationGeoKeyÚVerticalDatumGeoKeyÚVerticalUnitsGeoKey)i  i  i  i  i  i  i  i  i  i  r…  rö  r÷  i  r   r   r`   r    rX  zTIFF.GEO_KEYS�  sû  € ð1
ØÐ%ð1
àÐ&ð1
ð Ð$ð1
ð Ð(ð	1
ð
 Ð&ð1
ð Ð+ð1
ð Ð+ð1
ð Ð)ð1
ð Ð,ð1
ð Ð*ð1
ð Ð.ð1
ð Ð'ð1
ð Ð+ð1
ð Ð+ð1
ð Ð+ð1
ð  Ð*ð!1
ð" Ð/ñ#1
ð$ Ð%ð%1
ð& Ð6ð'1
ð( Ð)ð)1
ð* Ð%ð+1
ð, Ð$ð-1
ð. Ð(ð/1
ð0 Ð)ð11
ð2 Ð,ð31
ð4 Ð*ð51
ð6 Ð*ð71
ð8 Ð+ð91
ð: Ð*ð;1
ð< Ð*ð=1
ð> Ð+ð?1
ð@ Ð-ðA1
ðB Ð,ðC1
ðD Ð0ñE1
ðF 2Ø(Ø'Ø+Ø1Ø.Ø+Ø*Ø2Ø0Ø(Ø*Ø'Ø'òa1
ð 1	
r`   c                  ó€   — 	 ddl m}  | S # t        t        f$ r$ 	 ddl m}  Y | S # t        t        f$ r i } Y Y | S w xY ww xY w)Nr&   ©rY  r   )Útifffile_geodbrY  r„  r,   r+	  s    r    rY  zTIFF.GEO_CODESµ  sY   € ð	Ý1ð Ðøô œZÐ(ò 	ðÞ4ð Ðøô  ¤Ð,ò Ø’	ØÐðúð	ús   ‚
 Š=š#£9´=¸9¹=c                  ó
   — g d¢S )N):)ÚMagicNumberÚu4)ÚStructureSizeÚi4)Ú
DimensionXr1	  )Ú
DimensionYr1	  )Ú
DimensionZr1	  )ÚDimensionChannelsr1	  )ÚDimensionTimer1	  )r"  r1	  )Ú
ThumbnailXr1	  )Ú
ThumbnailYr1	  )Ú
VoxelSizeXÚf8)Ú
VoxelSizeYr:	  )Ú
VoxelSizeZr:	  )ÚOriginXr:	  )ÚOriginYr:	  )ÚOriginZr:	  )r²  Úu2)ÚSpectralScanr@	  )Ú
TypeOfDatar/	  )ÚOffsetVectorOverlayr/	  )ÚOffsetInputLutr/	  )ÚOffsetOutputLutr/	  )ÚOffsetChannelColorsr/	  )ÚTimeIntervallr:	  )ÚOffsetChannelDataTypesr/	  )ÚOffsetScanInformationr/	  )ÚOffsetKsDatar/	  )ÚOffsetTimeStampsr/	  )ÚOffsetEventListr/	  )Ú	OffsetRoir/	  )ÚOffsetBleachRoir/	  )ÚOffsetNextRecordingr/	  )ÚDisplayAspectXr:	  )ÚDisplayAspectYr:	  )ÚDisplayAspectZr:	  )ÚDisplayAspectTimer:	  )ÚOffsetMeanOfRoisOverlayr/	  )ÚOffsetTopoIsolineOverlayr/	  )ÚOffsetTopoProfileOverlayr/	  )ÚOffsetLinescanOverlayr/	  )ÚToolbarFlagsr/	  )ÚOffsetChannelWavelengthr/	  )ÚOffsetChannelFactorsr/	  )ÚObjectiveSphereCorrectionr:	  )ÚOffsetUnmixParametersr/	  )ÚOffsetAcquisitionParametersr/	  )ÚOffsetCharacteristicsr/	  )ÚOffsetPaletter/	  )ÚTimeDifferenceXr:	  )ÚTimeDifferenceYr:	  )ÚTimeDifferenceZr:	  )ÚInternalUse1r/	  )rµ  r1	  )r·  r1	  )ÚDimensionsReservedÚ16i4)ÚOffsetTilePositionsr/	  )r'  Ú9u4)ÚOffsetPositionsr/	  r   r   r`   r    r  zTIFF.CZ_LSMINFO¿  s   € ò>
ð >	
r`   c            	      ó°   — i dt         “dt        “dt        “dt        “dt        “dt        “dd “dd “d	d “d
d “dd “dd “dd “dd “dd “dd “dd “d d d d d d d dœ¥S )NÚScanInformationÚ
TimeStampsÚ	EventListÚChannelColorsÚ	PositionsÚTilePositionsÚVectorOverlayÚInputLutÚ	OutputLutrG	  ÚChannelDataTypesÚKsDataÚRoiÚ	BleachRoiÚNextRecordingÚMeanOfRoisOverlayÚTopoIsolineOverlay)ÚTopoProfileOverlayÚChannelWavelengthÚSphereCorrectionÚChannelFactorsÚUnmixParametersÚAcquisitionParametersÚCharacteristics)Úread_lsm_scaninfoÚread_lsm_timestampsÚread_lsm_eventlistÚread_lsm_channelcolorsÚread_lsm_floatpairsr   r`   r    ÚCZ_LSMINFO_READERSzTIFF.CZ_LSMINFO_READERS   sö   € ð
ØÔ0ð
àÔ-ð
ð Ô+ð
ð Ô3ð	
ð
 Ô,ð
ð Ô0ð
ð ˜Tð
ð ˜ð
ð ˜ð
ð ˜Tð
ð  ð
ð �dð
ð �4ð
ð ˜ð
ð ˜Tð
ð    ð!
ð" ! $ð#
ð$ #'Ø!%Ø $Ø"Ø#Ø%)Ø#ò1
ð 	
r`   c                  ó   — ddddddddddddœS )NÚXYZCTÚXYTCZÚXYZTCÚXYCTZÚXYCZT)r   r&   r�   rÉ   r‹   ræ   rç   r¿  r‡   rÃ   rN  r   r   r`   r    rÁ  zTIFF.CZ_LSMINFO_SCANTYPE  s/   € ð ØØØØØØØØØØñ
ð 	
r`   c                  ó   — ddddddddœS )	Nr2	  r3	  r4	  r5	  r6	  rµ  r·  )r­  r®  r=  rK   r;  r¶  r¸  r   r   r`   r    rº  zTIFF.CZ_LSMINFO_DIMENSIONS.  s#   € ð ØØØ$Ø ØØñ
ð 	
r`   c                  ó   — dddddœS )Nzvarying data typesz8 bit unsigned integerz12 bit unsigned integerz32 bit float)r   r&   r�   ræ   r   r   r`   r    ÚCZ_LSMINFO_DATATYPESzTIFF.CZ_LSMINFO_DATATYPES:  s   € ð $Ø'Ø(Øñ	
ð 	
r`   c                  ó   — dddddœS )NzOriginal scan datazCalculated dataz3D reconstructionzTopography height map)r   r&   r�   rÉ   r   r   r`   r    ÚCZ_LSMINFO_TYPEOFDATAzTIFF.CZ_LSMINFO_TYPEOFDATAC  s   € ð $Ø Ø"Ø&ñ	
ð 	
r`   c            	      ó   — ddddddddd	œS )
NÚTracksÚLasersÚDetectionChannelsÚIlluminationChannelsÚBeamSplittersÚDataChannelsÚTimersÚMarkers)i    i   0i   `l        l      @ l        i   i   r   r   r`   r    ÚCZ_LSMINFO_SCANINFO_ARRAYSzTIFF.CZ_LSMINFO_SCANINFO_ARRAYSL  s$   € à Ø Ø+Ø.Ø'Ø&Ø Ø!ñ	
ð 		
r`   c            	      ó   — ddddddddd	œS )
NÚTrackÚLaserÚDetectionChannelÚIlluminationChannelÚBeamSplitterÚDataChannelÚTimerÚMarker)i   @i   Pi   pl        l      ` l        i   i   r   r   r`   r    ÚCZ_LSMINFO_SCANINFO_STRUCTSz TIFF.CZ_LSMINFO_SCANINFO_STRUCTSX  s&   € ð  ØØ*Ø-Ø&Ø%ØØ ñ

ð 
	
r`   c                  óZ  — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥i dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“d_d`“dadb“dcdd“dedf“¥i dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“d{d|“d}d~“dd€“d�d‚“dƒd„“d…d†“d‡dˆ“¥i d‰dŠ“d‹dŒ“d�dŽ“d�d�“d‘d’“d“d”“d•d–“d—d˜“d™dš“d›d“dœd�“dždŸ“d d¡“d¢d£“d¤d¥“d¦d§“d¨d©“¥i dªd«“d¬d­“d®d¯“d°d±“d²d³“d´dµ“d¶d·“d¸d¹“dºd»“d¼d½“d¾d¿“dÀdÁ“dÂdÃ“dÄdÅ“dÆdÇ“dÈdÉ“dÊdË“¥i dÌdÍ“dÎdÏ“dÐdÑ“dÒdÓ“dÔdÕ“dÖd×“dØdÙ“dÚdÛ“dÜdÝ“dÞdß“dàd“dád–“dâdã“dädå“dædç“dèdé“dêdë“¥i dìdí“dîdï“dðdñ“dòdó“dôdõ“död÷“død–“dùdú“dûdü“dýdþ“dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“¥i �d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�dd“�ddã“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“¥i �d-d“�d.d“�d/d–“�d0�d1“�d2�d3“�d4�d5“�d6�d7“�d8�d9“�d:�d;“�d<�d=“�d>�d?“�d@�dA“�dB�dC“�dD�dE“�dF�dG“�dH�dI“�dJ�dK“¥i �dL�dM“�dN�dO“�dP�d“�dQ�d“�dR�dS“�dTd–“�dUd“�dVd“�dW�dX“�dYd«“�dZd­“�d[�d\“�d]�d^“�d_d“�d`d“�dad«“�dbd­“¥S (c  Ni  rx  i  r`  i  ÚNotesi  Ú	Objectivei  ÚProcessingSummaryi  ÚSpecialScanModei  r²  i  ÚScanModei	  ÚNumberOfStacksi
  ÚLinesPerPlanei  ÚSamplesPerLinei  ÚPlanesPerVolumei  ÚImagesWidthi  ÚImagesHeighti  ÚImagesNumberPlanesi  ÚImagesNumberStacksi  ÚImagesNumberChannelsi  ÚLinscanXySizei  ÚScanDirectioni  Ú
TimeSeriesi  ÚOriginalScanDatai  ÚZoomXi  ÚZoomYi  ÚZoomZi  ÚSample0Xi  ÚSample0Yi  ÚSample0Zi  ÚSampleSpacingi  ÚLineSpacingi  ÚPlaneSpacingi  Ú
PlaneWidthi   ÚPlaneHeighti!  ÚVolumeDepthi#  ÚNutationi4  ÚRotationi5  Ú
Precessioni6  ÚSample0timei7  ÚStartScanTriggerIni8  ÚStartScanTriggerOuti9  ÚStartScanEventi@  ÚStartScanTimeiA  ÚStopScanTriggerIniB  ÚStopScanTriggerOutiC  ÚStopScanEventiD  ÚStopScanTimeiE  ÚUseRoisiF  ÚUseReducedMemoryRoisiG  ÚUseriH  ÚUseBcCorrectioniI  ÚPositionBcCorrection1iP  ÚPositionBcCorrection2iQ  ÚInterpolationYiR  ÚCameraBinningiS  ÚCameraSupersamplingiT  ÚCameraFrameWidthiU  ÚCameraFrameHeightiV  ÚCameraOffsetXiW  ÚCameraOffsetYiY  Ú	RtBinningiZ  ÚRtFrameWidthi[  ÚRtFrameHeighti\  ÚRtRegionWidthi]  ÚRtRegionHeighti^  Ú	RtOffsetXi_  Ú	RtOffsetYi`  ÚRtZoomia  ÚRtLinePeriodib  ÚPrescanic  ÚScanDirectionZi  @ÚMultiplexTypei  @ÚMultiplexOrderi  @ÚSamplingModei  @ÚSamplingMethodi  @ÚSamplingNumberi  @ÚAcquirei  @ÚSampleObservationTimei  @ÚTimeBetweenStacksi  @i  @ÚCollimator1Namei  @ÚCollimator1Positioni  @ÚCollimator2Namei  @ÚCollimator2Positioni  @ÚIsBleachTracki  @ÚIsBleachAfterScanNumberi  @ÚBleachScanNumberi  @Ú	TriggerIni  @Ú
TriggerOuti  @ÚIsRatioTracki  @ÚBleachCounti  @ÚSpiCenterWavelengthi  @Ú	PixelTimei!  @ÚCondensorFrontlensi#  @ÚFieldStopValuei$  @ÚIdCondensorAperturei%  @ÚCondensorAperturei&  @ÚIdCondensorRevolveri'  @ÚCondensorFilteri(  @ÚIdTransmissionFilter1i)  @ÚIdTransmission1i0  @ÚIdTransmissionFilter2i1  @ÚIdTransmission2i2  @ÚRepeatBleachi3  @ÚEnableSpotBleachPosi4  @ÚSpotBleachPosxi5  @ÚSpotBleachPosyi6  @ÚSpotBleachPoszi7  @Ú
IdTubelensi8  @ÚIdTubelensPositioni9  @ÚTransmittedLighti:  @ÚReflectedLighti;  @ÚSimultanGrabAndBleachi<  @ÚBleachPixelTimei  Pi  Pi  PÚPoweri  pÚIntegrationModei  pÚSpecialModei  pÚDetectorGainFirsti  pÚDetectorGainLasti  pÚAmplifierGainFirsti  pÚAmplifierGainLasti  pÚAmplifierOffsFirsti  pÚAmplifierOffsLasti	  pÚPinholeDiameteri
  pÚCountingTriggeri  pi  pÚPointDetectorNamei  pÚAmplifierNamei  pÚPinholeNamei  pÚFilterSetNamei  pÚ
FilterNamei  pÚIntegratorNamei  pÚChannelNamei  pÚDetectorGainBc1i  pÚDetectorGainBc2i  pÚAmplifierGainBc1i  pÚAmplifierGainBc2i  pÚAmplifierOffsetBc1i   pÚAmplifierOffsetBc2i!  pÚSpectralScanChannelsi"  pÚSpiWavelengthStarti#  pÚSpiWavelengthStopi&  pÚDyeNamei'  pÚ	DyeFolderl       l       l       Ú
Wavelengthl       ÚAquirel       ÚDetchannelNamel       ÚPowerBc1l       ÚPowerBc2l     ` Ú	FilterSetl     ` ÚFilterl     ` l       l       l       ÚColorl       Ú
SampleTypel       r7  l       Ú	RatioTypel       ÚRatioTrack1l   	    ÚRatioTrack2l   
    ÚRatioChannel1l       ÚRatioChannel2l       ÚRatioConst1l       ÚRatioConst2l       ÚRatioConst3l       ÚRatioConst4l       ÚRatioConst5l       ÚRatioConst6l       ÚRatioFirstImages1l       ÚRatioFirstImages2l       l       l       ÚSpectruml       i  i  i  ÚIntervali  i  i  ÚActivationTimei  ÚActivationNumberi  i  i  i  r   r   r`   r    ÚCZ_LSMINFO_SCANINFO_ATTRIBUTESz#TIFF.CZ_LSMINFO_SCANINFO_ATTRIBUTESe  s  € ðE
à˜ðE
ð ˜ðE
ð ˜ð	E
ð
 ˜ðE
ð Ð+ðE
ð Ð)ðE
ð ˜
ðE
ð ˜
ðE
ð Ð(ðE
ð ˜ðE
ð Ð(ðE
ð Ð)ðE
ð ˜ðE
ð ˜ðE
ð  Ð,ð!E
ð" Ð,ð#E
ð$ Ð.ñ%E
ð& ˜ð'E
ð( ˜ð)E
ð* ˜ð+E
ð, Ð*ð-E
ð. ˜ð/E
ð0 ˜ð1E
ð2 ˜ð3E
ð4 ˜
ð5E
ð6 ˜
ð7E
ð8 ˜
ð9E
ð: ˜ð;E
ð< ˜ð=E
ð> ˜ð?E
ð@ ˜ðAE
ðB ˜ðCE
ðD ˜ðEE
ðF ˜
òGE
ðH ˜
ðIE
ðJ ˜ðKE
ðL ˜ðME
ðN Ð,ðOE
ðP Ð-ðQE
ðR Ð(ðSE
ðT ˜ðUE
ðV Ð+ðWE
ðX Ð,ðYE
ðZ ˜ð[E
ð\ ˜ð]E
ð^ ˜	ð_E
ð` Ð.ðaE
ðb ˜ðcE
ðd Ð)ðeE
ðf Ð/ðgE
ðh Ð/òiE
ðj Ð(ðkE
ðl ˜ðmE
ðn Ð-ðoE
ðp Ð*ðqE
ðr Ð+ðsE
ðt ˜ðuE
ðv ˜ðwE
ðx ˜ðyE
ðz ˜ð{E
ð| ˜ð}E
ð~ ˜ðE
ð@ Ð(ðAE
ðB ˜ðCE
ðD ˜ðEE
ðF ˜ðGE
ðH ˜ðIE
ðJ ˜	òKE
ðL Ð(ðME
ðP ˜ðQE
ðR Ð(ðSE
ðT ˜ðUE
ðV Ð(ðWE
ðX Ð(ðYE
ðZ ˜	ð[E
ð\ Ð/ð]E
ð^ Ð+ð_E
ð` ˜ðaE
ðb Ð)ðcE
ðd Ð-ðeE
ðf Ð)ðgE
ðh Ð-ðiE
ðj ˜ðkE
ðl Ð1ðmE
ðn Ð*òoE
ðp ˜ðqE
ðr ˜ðsE
ðt ˜ðuE
ðv ˜ðwE
ðx Ð-ðyE
ðz ˜ð{E
ð| Ð,ð}E
ð~ Ð(ðE
ð@ Ð-ðAE
ðB Ð+ðCE
ðD Ð-ðEE
ðF Ð)ðGE
ðH Ð/ðIE
ðJ Ð)ðKE
ðL Ð/ðME
ðN Ð)ðOE
ðP ˜òQE
ðR Ð-ðSE
ðT Ð(ðUE
ðV Ð(ðWE
ðX Ð(ðYE
ðZ ˜ð[E
ð\ Ð,ð]E
ð^ Ð*ð_E
ð` Ð(ðaE
ðb Ð/ðcE
ðd Ð)ðeE
ðh ˜ðiE
ðj ˜	ðkE
ðl ˜ðmE
ðp Ð)ðqE
ðr ˜ðsE
ðt Ð+ðuE
ðv Ð*òwE
ðx Ð,ðyE
ðz Ð+ð{E
ð| Ð,ð}E
ð~ Ð+ðE
ð@ Ð)ðAE
ðB Ð)ðCE
ðD ˜	ðEE
ðF Ð+ðGE
ðH ˜ðIE
ðJ ˜ðKE
ðL ™ðME
ñN ™ðOE
ñP Ñ(ðQE
ñR ™ðSE
ñT Ñ)ðUE
ñV Ñ)ðWE
ñX Ñ*òYE
ñZ Ñ*ð[E
ñ\ Ñ,ð]E
ñ^ Ñ,ð_E
ñ` Ñ.ðaE
ñb Ñ,ðcE
ñd Ñ+ðeE
ñf ™	ðgE
ñh ™ðiE
ñl ˜ðmE
ñn ˜ðoE
ñp ™ðqE
ñr ™ðsE
ñt Ñ(ðuE
ñv ™
ðwE
ñx ™
ðyE
ñ| ™ð}E
ñ~ ™òE
ñ@ ˜ðAE
ñD ˜ðEE
ñF ˜	ðGE
ñH ™ðIE
ñJ ™ðKE
ñL ™ðME
ñN ™ðOE
ñP ™ðQE
ñR ™ðSE
ñT ™ðUE
ñV ™ðWE
ñX ™ðYE
ñZ ™ð[E
ñ\ ™ð]E
ñ^ ™ð_E
ñ` ™ðaE
ñb ™òcE
ñd Ñ+ðeE
ñf Ñ+ðgE
ñh ™	ðiE
ñj ™ðkE
ñl ™
ðmE
ñn ˜	ðoE
ñr ˜ðsE
ñt ˜ðuE
ñv ™
ðwE
ñx ˜ðyE
ñz ˜ð{E
ñ| Ñ(ð}E
ñ~ Ñ*ðE
ñB ˜ðCE
ñD ˜ðEE
ñF ˜ðGE
ñH ˜ñIE
ð E	
r`   c                  óÎ   — g d‘d‘d‘d‘d‘d‘d‘d‘d	‘d
‘d‘d‘d‘d‘d‘d‘d‘dddgf‘dddgf‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d ‘d!‘d"‘d#‘d$‘d%‘d&‘d'‘d(‘d)‘d*‘d+‘d,‘d-‘d.‘d/‘d0‘S )1N)ÚFileIDÚa8)ÚnLinesÚi2)ÚPixelsPerLinerO
  )ÚVersionrO
  )Ú
OldLutModerO
  )Ú
OldnColorsrO
  )ÚColorsÚu1rx  )ÚOldColorStartrO
  )Ú
ColorWidthrO
  )ÚExtraColorsr@	  )rç   rÉ   )ÚnExtraColorsrO
  )ÚForegroundIndexrO
  )ÚBackgroundIndexrO
  )ÚXScaler:	  )ÚUnused2rO
  )ÚUnused3rO
  )ÚUnitsIDrO
  Úp1)rî   rO
  )rf  rO
  Úp2)ÚCurveFitTyperO
  )ÚnCoefficientsrO
  )ÚCoeffr:	  rç   )ÚUMsizerU
  )ÚUMÚa15)ÚUnusedBooleanrU
  )Ú	BinaryPicÚb1)Ú
SliceStartrO
  )ÚSliceEndrO
  )ÚScaleMagnificationÚf4)ÚnSlicesrO
  )ÚSliceSpacingrn
  )ÚCurrentSlicerO
  )ÚFrameIntervalrn
  )ÚPixelAspectRatiorn
  )Ú
ColorStartrO
  )ÚColorEndrO
  )ÚnColorsrO
  )ÚFill1Ú3u2)ÚFill2rx
  )ÚTablerU
  )ÚLutModerU
  )ÚInvertedTablerj
  )ÚZeroCliprj
  )Ú	XUnitSizerU
  )ÚXUnitÚa11)Ú	StackTyperO
  r   r   r`   r    ÚNIH_IMAGE_HEADERzTIFF.NIH_IMAGE_HEADER-  s  € ð0
Øð0
àð0
ð $ð0
ð ð	0
ð
 !ð0
ð !ð0
ð &ð0
ð $ð0
ð !ð0
ð *ð0
ð #ð0
ð &ð0
ð &ð0
ð ð0
ð ð0
ð  ð!0
ð" ð#0
ð$ �K Ð-Ð.ð%0
ð& �K Ð-Ð.ð'0
ð( #ð)0
ð* $ð+0
ð, ð-0
ð. ð/0
ð0 ð10
ð2 $ð30
ð4  ð50
ð6 !ð70
ð8 ð90
ð: )ð;0
ð< ð=0
ð> #ð?0
ð@ #ðA0
ðB $ðC0
ðD 'ðE0
ðF !ðG0
ðH ðI0
ðJ ðK0
ðL ðM0
ðN ðO0
ðP ðQ0
ðR ðS0
ðT $ðU0
ðV ðW0
ðX  ðY0
ðZ ð[0
ð\  ð]0
ð 0	
r`   c                   ó   — y)N)
ÚCustomTableÚAppleDefaultÚPseudo20ÚPseudo32ÚRainbowÚFire1ÚFire2ÚIceÚGraysrF
  r   r   r`   r    ÚNIH_COLORTABLE_TYPEzTIFF.NIH_COLORTABLE_TYPE`  s   € ð
r`   c                   ó   — y)N)ÚPseudoColorÚOldAppleDefaultÚOldSpectrumÚ	GrayScaleÚColorLutÚCustomGrayscaler   r   r`   r    ÚNIH_LUTMODE_TYPEzTIFF.NIH_LUTMODE_TYPEn  s   € ð
r`   c                   ó   — y)N)ÚStraightLineÚPoly2ÚPoly3ÚPoly4ÚPoly5ÚExpoFitÚPowerFitÚLogFitÚ
RodbardFitÚ	SpareFit1ÚUncalibratedÚUncalibratedODr   r   r`   r    ÚNIH_CURVEFIT_TYPEzTIFF.NIH_CURVEFIT_TYPEx  s   € ð
r`   c                   ó   — y)N)Ú
NanometersÚMicrometersÚMillimetersÚCentimetersÚMetersÚ
KilometersÚInchesÚFeetÚMilesry  Ú
OtherUnitsr   r   r`   r    ÚNIH_UNITS_TYPEzTIFF.NIH_UNITS_TYPEˆ  s   € ð
r`   c                   ó   — y)N)ÚVolumeStackÚRGBStackÚ
MovieStackÚHSVStackr   r   r`   r    ÚNIH_STACKTYPE_TYPEzTIFF.NIH_STACKTYPE_TYPE—  s   € ØDr`   c                  ó
   — g d¢S )N)*)rQ
  r1	  )Ú	CommentV1Úa80)ÚHighTensionr1	  )ÚSphericalAberrationr1	  )ÚIlluminationAperturer1	  )ÚMagnificationr1	  )ÚPostMagnificationr1	  )r¢  r1	  )ÚDefocusr1	  )ÚAstigmatismr1	  )ÚAstigmatismDirectionr1	  )ÚBiprismVoltager1	  )ÚSpecimenTiltAngler1	  )ÚSpecimenTiltDirectionr1	  )ÚIlluminationTiltDirectionr1	  )ÚIlluminationTiltAngler1	  )Ú	ImageModer1	  )ÚEnergySpreadr1	  )ÚChromaticAberrationr1	  )ÚShutterTyper1	  )ÚDefocusSpreadr1	  )Ú	CcdNumberr1	  )ÚCcdSizer1	  )Ú	OffsetXV1r1	  )Ú	OffsetYV1r1	  )ÚPhysicalPixelSizer1	  )ÚBinningr1	  )ÚReadoutSpeedr1	  )ÚGainV1r1	  )ÚSensitivityV1r1	  )ÚExposureTimeV1r1	  )ÚFlatCorrectedr1	  )ÚDeadPxCorrectedr1	  )Ú	ImageMeanr1	  )ÚImageStdr1	  )ÚDisplacementXr1	  )ÚDisplacementYr1	  )ÚDateV1r1	  )ÚTimeV1r1	  )ÚImageMinr1	  )ÚImageMaxr1	  )ÚImageStatisticsQualityr1	  r   r   r`   r    ÚTVIPS_HEADER_V1zTIFF.TVIPS_HEADER_V1š  s   € ò+
ð +	
r`   c                  ó
   — g d¢S )N)6)rK  ÚV160)ÚImageFolderrâ
  )Ú
ImageSizeXr1	  )Ú
ImageSizeYr1	  )Ú
ImageSizeZr1	  )Ú
ImageSizeEr1	  )ÚImageDataTyper1	  )ÚDater1	  )ÚTimer1	  )ÚCommentÚV1024)r«  rì
  )ÚScalingÚ16f4)ÚImageStatisticsÚ16c16)r  r1	  )ÚImageDisplaTyper1	  )Ú
PixelSizeXrn
  )Ú
PixelSizeYrn
  )ÚImageDistanceZrn
  )ÚImageDistanceErn
  )Ú	ImageMiscÚ32f4)ÚTemTyperâ
  )ÚTemHighTensionrn
  )ÚTemAberrationsr÷
  )Ú	TemEnergyr÷
  )ÚTemModer1	  )ÚTemMagnificationrn
  )ÚTemMagnificationCorrectionrn
  )r½
  rn
  )ÚTemStageTyper1	  )ÚTemStagePositionÚ5f4)ÚTemImageShiftÚ2f4)ÚTemBeamShiftr  )ÚTemBeamTiltr  )ÚTilingParametersÚ7f4)ÚTemIlluminationÚ3f4)Ú
TemShutterr1	  )ÚTemMiscr÷
  )Ú
CameraTyperâ
  )ÚPhysicalPixelSizeXrn
  )ÚPhysicalPixelSizeYrn
  )ÚOffsetXr1	  )ÚOffsetYr1	  )ÚBinningXr1	  )ÚBinningYr1	  )r/  rn
  )ÚGainrn
  )ÚReadoutRatern
  )ÚFlatfieldDescriptionrâ
  )ÚSensitivityrn
  )ÚDosern
  )ÚCamMiscr÷
  )ÚFeiMicroscopeInformationrì
  )ÚFeiSpecimenInformationrì
  )ÚMagicr/	  r   r   r`   r    ÚTVIPS_HEADER_V2zTIFF.TVIPS_HEADER_V2É  s   € ò8
ð 8	
r`   c                  óF   — g d¢} dddddddd	d
d| dfdddddddddd| fdddgS )N))rx  Úa16)r}  r1	  )ÚOriginr:	  )Ú
Resolutionr:	  )ÚUnitÚa64)Ú
HeaderFlagrO
  )r  rU
  )rK  Úa257)Ú
OffsetDatar/	  )ÚPaletteSizer1	  )ÚOffsetPalette0r/	  )ÚOffsetPalette1r/	  )ÚCommentSizer1	  )ÚOffsetCommentr/	  rG  rN  )ÚOffsetPositionr/	  )ÚMapTyperO
  )ÚMapMinr:	  )ÚMapMaxr:	  )ÚMinValuer:	  )ÚMaxValuer:	  )Ú	OffsetMapr/	  )rý  r:	  )ÚOffsetr:	  ÚGrayChannel)ÚOffsetThumbnailr/	  )Ú
VoiceFieldr1	  )ÚOffsetVoiceFieldr/	  r   )ÚMM_DIMENSIONs    r    Ú	MM_HEADERzTIFF.MM_HEADER  sf   € ò
ˆð !ØØ!Ø Ø!Ø$Ø$Ø!Ø#Ø˜<¨Ð,Ø$ØØØØØØØØØ˜LÐ)Ø%Ø Ø&ð/
ð 	
r`   c                  ó   — ddddddddddd	œ
S )
Nr­  r®  r=  r;  rK   r¶  r¼  rº  )
r­  r®  r=  r;  ÚCHÚ
WAVELENGTHÚTIMEr³  ÚEVENTÚEXPOSUREr   r   r`   r    rI  zTIFF.MM_DIMENSIONS'  s,   € ð ØØØØØØØØØñ
ð 	
r`   c                  óÆ  — ddl m}  g dt        f‘dt        f‘dt        f‘dt        f‘d| f‘d| f‘d	t        f‘d
t        f‘dt        f‘dt        f‘d‘dt        f‘dt        f‘dt        f‘dt        f‘dt        f‘dt        f‘dt        f‘dt        f‘d‘d‘d| f‘d| f‘d| f‘d| f‘dt        f‘dt        f‘dt        f‘d‘d ‘d!‘d"‘d#‘d$‘d%‘d&‘d't
        f‘d(‘d)| f‘d*| f‘d+‘d,‘d-‘d.‘d/‘d0‘d1‘d2t        f‘d3‘d4t        f‘d5‘d6t        f‘d7| f‘d8| f‘d9t        f‘d:t        f‘d;t        f‘d<| f‘d=| f‘d>t        f‘d?t        f‘d@t        f‘dA| f‘dB| f‘dCt        f‘dDt        f‘S )ENr   r  Ú	AutoScaleÚMinScaleÚMaxScaleÚSpatialCalibrationÚXCalibrationÚYCalibrationÚCalibrationUnitsrx  ÚThreshStateÚThreshStateRed)Útagid_10NÚThreshStateGreenÚThreshStateBlueÚThreshStateLoÚThreshStateHiÚZoomÚ
CreateTimeÚLastSavedTimeÚcurrentBuffer)ÚgrayFitN)ÚgrayPointCountNÚgrayXÚgrayYÚgrayMinÚgrayMaxÚgrayUnitNameÚStandardLUTÚ
wavelength)ÚStagePositionú
(%i,2,2)u4)ÚCameraChipOffsetr\  )ÚOverlayMaskN)ÚOverlayCompressN)ÚOverlayN)ÚSpecialOverlayMaskN)ÚSpecialOverlayCompressN)ÚSpecialOverlayNÚImageProperty)Ú
StageLabelú%ipÚAutoScaleLoInfoÚAutoScaleHiInfo)Ú	AbsoluteZz(%i,2)u4)ÚAbsoluteZValidz(%i,)u4)rý  rŽ   )ÚGammaRedrŽ   )Ú
GammaGreenrŽ   )Ú	GammaBluerŽ   )Ú	CameraBinr;  ÚNewLUT)ÚImagePropertyExNÚPlaneProperty)ÚUserLutTablez	(256,3)u1ÚRedAutoScaleInfoÚRedAutoScaleLoInfoÚRedAutoScaleHiInfoÚRedMinScaleInfoÚRedMaxScaleInfoÚGreenAutoScaleInfoÚGreenAutoScaleLoInfoÚGreenAutoScaleHiInfoÚGreenMinScaleInfoÚGreenMaxScaleInfoÚBlueAutoScaleInfoÚBlueAutoScaleLoInfoÚBlueAutoScaleHiInfoÚBlueMinScaleInfoÚBlueMaxScaleInfo)r  r  rØ   r›   r)  Úread_uic_image_propertyr  s    r    ÚUIC_TAGSzTIFF.UIC_TAGS6  s
  € õ 	'ðD
Øœ#ÐðD
àœÐðD
ð œÐðD
ð "¤3Ð'ð	D
ð
 ˜XÐ&ðD
ð ˜XÐ&ðD
ð  ¤Ð%ðD
ð ”SˆMðD
ð œCÐ ðD
ð œsÐ#ðD
ð ðD
ð  ¤Ð%ðD
ð ¤Ð$ðD
ð œcÐ"ðD
ð œcÐ"ðD
ð  ”SˆMð!D
ð" œ?Ð+ð#D
ð$ œoÐ.ð%D
ð& œcÐ"ð'D
ð( ð)D
ð* %ð+D
ð, �hÐð-D
ð. �hÐð/D
ð0 ˜Ð!ð1D
ð2 ˜Ð!ð3D
ð4 œSÐ!ð5D
ð6 œCÐ ð7D
ð8 œ3Ðð9D
ð: ,ð;D
ð< /ð=D
ð> "ð?D
ð@ &ðAD
ðB ðCD
ðD )ðED
ðF -ðGD
ðH %ðID
ðJ Ô5Ð6ðKD
ðL "ðMD
ðN  Ð)ðOD
ðP  Ð)ðQD
ðR &ðSD
ðT *ðUD
ðV ðWD
ðX ðYD
ðZ  ð[D
ð\ ð]D
ð^  ð_D
ð` ”sˆOðaD
ðb &ðcD
ðd œcÐ"ðeD
ðf *ðgD
ðh  ¤Ð%ðiD
ðj " 8Ð,ðkD
ðl " 8Ð,ðmD
ðn ¤Ð$ðoD
ðp ¤Ð$ðqD
ðr "¤3Ð'ðsD
ðt $ XÐ.ðuD
ðv $ XÐ.ðwD
ðx !¤#Ð&ðyD
ðz !¤#Ð&ð{D
ð| !¤#Ð&ð}D
ð~ # HÐ-ðD
ð@ # HÐ-ðAD
ðB  ¤Ð%ðCD
ðD  ¤Ð%ðED
ð D	
r`   c                  ó(  — i dt        dd «      gt        f“dddgt        f“ddgt        f“ddgt        f“ddgt        f“d	dgt        f“d
dgt        f“ddgt        f“dddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“dddgt        f“ddgt        f“i ddgt        f“dddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“ddgt        f“d dgt        f“d!dgt        f“d"dgt        f“d#dgt        f“d$t        dd «      gt        f“d%dgt        f“d&dgt        f“¥dgt        fdgt        fdgt        fdgt        fd'œ¥S )(NÚDetectorr&   Ú
Pixel_sizer‹   ÚSiliconrÉ   ÚExposure_timeÚExposure_periodÚTauÚCount_cutoffÚThreshold_settingÚGain_settingr�   ÚN_excluded_pixelsÚExcluded_pixelsÚ
Flat_fieldÚ	Trim_fileÚ
Image_pathr0
  ÚEnergy_rangeÚDetector_distanceÚDetector_VoffsetÚBeam_xyÚFluxÚFilter_transmissionÚStart_angleÚAngle_incrementÚDetector_2thetaÚPolarizationÚAlphaÚKappaÚPhiÚPhi_incrementÚChiÚChi_incrementÚOscillation_axisÚN_oscillationsÚStart_position)ÚPosition_incrementÚShutter_timeÚOmegaÚOmega_increment)r	  r›   r’  rØ   r   r`   r    ÚPILATUS_HEADERzTIFF.PILATUS_HEADER�  s¹  € ð(
Øœ%  4›.Ð)¬3Ð/ð(
à˜A˜q˜6¤5˜/ð(
ð ˜˜œU�|ð(
ð ˜q˜c¤5˜\ð	(
ð
   ¤U˜|ð(
ð �Q�Cœ�<ð(
ð ˜a˜S¤#˜Jð(
ð   1 #¤u ð(
ð ˜a ˜V¤S˜Mð(
ð   1 #¤s ð(
ð   ¤S˜zð(
ð ˜A˜3¤˜*ð(
ð ˜1˜#œs˜ð(
ð ˜A˜3¤˜*ð(
ð  ˜A˜3¤˜,ð!(
ð" ˜a ˜V¤U˜Oð#(
ð$   1 #¤u ñ%(
ð&  ! ¤e ð'(
ð( ˜˜A˜¤�ð)(
ð* �a�Sœ#�Jð+(
ð, " Q C¬ <ð-(
ð. ˜Q˜C¤˜<ð/(
ð0   ¤U˜|ð1(
ð2   ¤U˜|ð3(
ð4 ˜a˜S¤%˜Lð5(
ð6 �q�cœ5�\ð7(
ð8 �q�cœ5�\ð9(
ð: �Q�Cœ�<ð;(
ð< ˜q˜c¤5˜\ð=(
ð> �Q�Cœ�<ð?(
ð@ ˜q˜c¤5˜\ðA(
ðB ¤%¨¨4£.Ð!1´3Ð 7ðC(
ðD  ˜s¤C˜jðE(
ðF  ˜s¤E˜lñG(
ðH %& 3¬ ,Ø˜S¤%˜LØ�cœ5�\Ø!" ¤U˜|òO(
ð (	
r`   c                   ó   — 	 y)Ns    €@À  `à�PÐ0°pðˆHÈ(¨hè˜XØ8¸xø„DÄ$¤dä”TÔ4´tôŒLÌ,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò
ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–VÖ6¶vöŽNÎ.®nîž^Þ>¾~þ�AÁ!¡aá‘QÑ1±qñ	‰IÉ)©ié™YÙ9¹yù…EÅ%¥eå•UÕ5µuõ�MÍ-­mí�]Ý=½}ýƒCÃ#£cã“SÓ3³só‹KË+«kë›[Û;»{û‡GÇ'§gç—W×7·w÷�OÏ/¯oïŸ_ß?¿ÿr   r   r`   r    ÚREVERSE_BITORDER_BYTESzTIFF.REVERSE_BITORDER_BYTES®  s   € ð!ð	
r`   c                  óL   — t        j                  t        j                  d¬«      S )Nrô  rÕ   )r;   rË  rM   r¬  r   r`   r    ÚREVERSE_BITORDER_ARRAYzTIFF.REVERSE_BITORDER_ARRAYÀ  s   € ä×Ñ¤× ;Ñ ;À7ÔKÐKr`   c                  ó"   — dd l } | j                  S rA  )ÚmmaprN   )r°  s    r    rN   zTIFF.ALLOCATIONGRANULARITYÄ  s   € ãà×)Ñ)Ð)r`   N)Brg   ro   rp   rq   rE  rþ   rÄ  rÇ  r¬  rË  r·  r©  r[  rQ  rª  r«  r¬  rV  r­  r%  rj  r®  r¯  rø  r  rY  rÃ  rÿ   rµ  r]  r  r³  rã  r§  r«  r‘  rÃ  rÏ  rñ  rø  rX  rY  r  r†	  rÁ  rº  r�	  r‘	  r›	  r¥	  rJ
  r‚
  r�
  r•
  r£
  r¯
  rµ
  rà
  r  r8  rI  rƒ  rª  r¬  r®  rN   r   r`   r    rM   rM   ™  sS  „ á)òm	
ò^4ò!
òF@ò
ò2
ò,òò3òjò&òòòò òòò!òòò	òò0
ò:
ò$.
ò`-ò^@òDBò
ò
ò òò.&òò*"
òH
ò2
òhò?
òB
ò<
ò 

ò
ò
ò

ò
òF
òP1
òf
ò
ò
ò 
òEò-
ò^9
òv!
òF
òI
òV+
òZ
ò$Ló*r`   rM   c                 ó¤  — |dk(  r|dz   }d}|dz   }d}	|dz   }
|dz   }n)|dk(  r|d	z   }d}|d	z   }d
}	|dz   }
|dz   }nt        d«      ‚|€i }|€d}g }t        j                  }| j                  «       }t	        |«      |k  �rÏ	  ||| j                  |«      «      d   }|dkD  rt        d«      ‚	 i }| j                  |	|z  «      }| j                  «       }d}t        |«      D �]ß  } ||
|||dz    «      \  }} ||||dz   ||	z    «      \  }}||	z  }|j                  |t        |«      «      }	 t        j                  |   }d||t#        |d   «      z  |d   fz  }t        j$                  |«      }||kD  s||v r¼ |||«      d   }|dk  s|| j&                  |z
  kD  rt        j!                  d|z  «      ‚| j)                  |«       ||v r||   d   } || ||||«      }nv|dk(  s|dkD  r|d   dk(  rt+        | ||||«      }nT||v s|d   dk(  r ||| j                  |«      «      }n/t-        | ||||«      }n|d   dk(  s|dk(  r|d| }n |||d| «      }||vr%|t        j.                  vrt	        |«      dk(  r|d   }|dk7  r;|d   dk(  r3t1        |t2        «      r#	 t5        t7        |«      j9                  «       «      }|||<   �Œâ |j=                  |«       | j)                  |«        ||| j                  |«      «      d   }|dk(  rnI|| j&                  k\  rt        j                  d|z  «       n!| j)                  |«       t	        |«      |k  r�ŒÏ|r
|dk(  r|d   }|S # t        $ r t        j                  d|z  «       Y Œ1w xY w# t        $ r t        j!                  d|z  «      ‚w xY w# t:        $ r t        j                  d|z  «       Y �Œw xY w)z|Read tags from chain of IFDs and return as list of dicts.

    The file handle position must be at a valid IFD header.

    r‹   rŽ   r�   r�   rŒ   rý   rß  r‡   r‰   rˆ   rÞ  zinvalid offset sizeNrà  r   r…  r†  r‡  r¾  r¿  r&   zinvalid tag value offset %ir¿  rÀ   rÇ   rû   rÀ  zinvalid page offset %i)r,   r¹   rç  r—   r.   ræ  r?   rŸ   r    rn  r@   r›   rM   rÃ  r   rª  r«  rØ   r  rG   r%   rÅ  rÆ  rÇ  r(   rì   rÈ  rÉ  r¯  rÊ  r6   )r»   r8   r  ÚtagnamesÚ
customtagsÚmaxifdsr  rè  r‰  rŠ  ré  rê  rX   rç  rS   r‹  r  rC   r¼   r†  rY   r  rÍ  r	  rk   rÚ  r<   r÷   rG   rÎ  s                                 r    Ú	read_tagsrµ  Ë  sN  € ð �Q‚Ø  3‘ˆØˆ	Ø #‘oˆØˆØ Ñ%ˆ
Ø Ñ&‰
Ø	�qŠØ  3‘ˆØˆ	Ø #‘oˆØˆØ Ñ%ˆ
Ø Ñ&‰
äÐ.Ó/Ð/àÐØˆ
Ø€Øˆà€FÜ�]‰]€FØ�W‰W‹Y€FÜ
ˆf‹+˜Ó
ð	Ù˜;¨¯©°	Ó(:Ó;¸AÑ>ˆEØ�tŠ|Ü Ð!<Ó=Ð=ð ð ˆØ�w‰w�w ‘Ó'ˆØ�g‰g‹iˆØˆÜ�u“ó *	ˆAÙ  ¨T°%¸%À!¹)Ð-DÓE‰KˆD�%Ù! *¨d°5¸1±9¸uÀw¹Ð.OÓP‰LˆE�5Ø�WÑˆEØ—<‘< ¤c¨$£iÓ0ˆDðHÜ×)Ñ)¨%Ñ0�ð ˜i¨´°U¸1±X³Ñ)>ÀÀaÁÐIÑIˆCÜ—?‘? 3Ó'ˆDØ�jÒ  D¨JÑ$6Ù ¨eÓ4°QÑ7�Ø˜A’: ¨"¯'©'°D©.Ò!8Ü!Ÿ-™-Ð(EÈÑ(NÓOÐOØ—‘˜”Ø˜:Ñ%Ø)¨$Ñ/°Ñ2�HÙ$ R¨°E¸5À*ÓM‘EØ˜a’Z E¨A¢I°%¸±)¸sÒ2BÜ& r¨9°e¸UÀJÓO‘EØ˜XÑ%¨¨r©°cÒ)9Ù" 3¨¯©°«Ó6‘Eä& r¨9°e¸UÀJÓO‘EØ�r‘˜cÒ! U¨a¢ZØ˜e˜t˜‘á˜s E¨%¨4 LÓ1�à˜:Ñ%¨$´d·n±nÑ*DÜ�u“: ’?Ø! !™H�EØ˜Šz˜e B™i¨3Ò.´:¸eÄUÔ3KðTÜ%¤j°Ó&7×&=Ñ&=Ó&?Ó@�Eð ˆD�‹JðU*	ðX 	�‰�dÔà
�‰�ŒÙ˜ b§g¡g¨jÓ&9Ó:¸1Ñ=ˆØ�QŠ;ØØ�R—W‘WÒÜ�M‰MÐ2°VÑ;Ô<ØØ
�‰�ŒôG ˆf‹+˜Ô
ñJ �'˜Q’,Ø˜‘ˆØ€MøôC ò 	Ü�M‰MÐ;¸fÑDÔEÙð	ûô ò HÜ—m‘mÐ$>ÀÑ$FÓGÐGðHûô@ *ò TÜ—M‘MÐ"KÈdÑ"R×SðTús0   Â+M Ä-NÊ"N*Í!NÎNÎ"N'Î*!OÏOc                 óD  — t        | ||t        j                  d¬«      }dD ]  }	 t        ||   «      ||<   Œ d|v rE|d   dd }	 |dk(  rt        |d   dd «      |d<   |S |dk(  r|d   dd j                  d	«      |d<   |S |S # t        $ r Y Œmw xY w# t        $ r Y |S w xY w)
z,Read EXIF tags from file and return as dict.r&   ©r´  )r�  rÑ  rµ  Nr‡   s   ASCII   s   UNICODE úutf-16)rµ  rM   rÏ  rÈ  r?   rŽ  )r»   r8   r<   r	  r  ÚexifrÚ  Úidcodes           r    r¡  r¡  4  së   € ä�R˜ J´·±ÈÔJ€DØ2ò ˆð	Ü" 4¨¡:Ó.ˆD�ŠJðð
 ˜ÑØ�mÑ$ R aÐ(ˆð	ØÐ-Ò-Ü&/°°]Ñ0CÀAÀBÐ0GÓ&H��]Ñ#ð
 €Kð	 ˜>Ò)Ø&*¨=Ñ&9¸!¸"Ð&=×&DÑ&DÀXÓ&N��]Ñ#ð €Kˆ4€Køô ò 	Ùð	ûô ò 	ØØ€Kð	ús)   ¥BÁB Á B Â	BÂBÂ	BÂBc                 ó>   — t        | ||t        j                  d¬«      S )z+Read GPS tags from file and return as dict.r&   r·  )rµ  rM   rñ  ©r»   r8   r<   r	  r  s        r    r¢  r¢  H  s   € ä�R˜ J´·±ÀqÔIÐIr`   c                 ó*   — ddi}t        | |||d¬«      S )z8Read Interoperability tags from file and return as dict.r&   r  r·  )rµ  )r»   r8   r<   r	  r  Ú	tag_namess         r    r£  r£  M  s    € àÐ+Ð,€IÜ�R˜ J°	À1ÔEÐEr`   c                 óò   — |d   dk(  rdn||d   z   }|t        j                  |«      j                  z  }| j                  |«      }t	        |«      |k7  r#t        j                  dt	        |«      |fz  «       |S )z2Read tag data from file and return as byte string.rÀ   rû   rÇ   z failed to read all bytes: %i, %i)r;   r<   r=   ræ  r.   rŸ   r    ©r»   r8   r<   r	  r  rC   s         r    rÅ  rÅ  S  so   € à˜‘9 Ò#‰C¨°U¸2±YÑ)>€EØ	ŒU�[‰[˜Ó×(Ñ(Ñ(€EØ�7‰7�5‹>€DÜ
ˆ4ƒy�EÒÜ�‰Ð8¼CÀ»IÀuÐ;MÑMÔNØ€Kr`   c                 óB   — | j                  |«      j                  d«      S )z5Read tag data from file and return as unicode string.rÃ  )ræ  rŽ  r¼  s        r    Ú	read_utf8rÂ  ]  s   € à�7‰7�5‹>× Ñ  Ó)Ð)r`   c                 óJ   — |d   dk(  rdn||d   z   }| j                  ||«      S )z2Read tag data from file and return as numpy array.rÀ   rû   rg  ©r  r¼  s        r    rÆ  rÆ  b  s.   € à˜‘9 Ò#‰C¨°U¸2±YÑ)>€EØ�=‰=˜ Ó&Ð&r`   c                 óD   — | j                  ||d   z   |«      }d|_        |S )z7Read ColorMap data from file and return as numpy array.rÀ   )rÉ   rÀ   )r  rD   )r»   r8   r<   r	  r  Úcmaps         r    r•  r•  h  s'   € à�=‰=˜ U¨2¡YÑ.°Ó6€DØ€D„JØ€Kr`   c                 óÄ   — | j                  |«      }	 t        j                  t        t	        |«      d«      «      S # t
        $ r t        j                  d|z  «       Y yw xY w)z2Read JSON tag data from file and return as object.rÃ  úinvalid JSON '%s'N)ræ  ÚjsonÚloadsÚunicoder   r,   rŸ   r    rÀ  s         r    r   r   o  sO   € à�7‰7�5‹>€Dð2Ü�z‰zœ'¤)¨D£/°7Ó;Ó<Ð<øÜò 2Ü�‰Ð)¨DÑ0Ö1ð2ús   “'; »!AÁAc                 ó°  — | j                  t        j                  |¬«      }t        |«      }|d   D �cg c]F  }t	        |d   «      j                  «       |d   |d   |d   t	        |d   «      j                  «       f‘ŒH c}|d<   |d   }t	        |d   «      j                  «       |d   |d   |d   t	        |d   «      j                  «       f|d<   |S c c}w )	z9Read FluoView mm_header tag from file and return as dict.r'  rG  r   r&   r�   rÉ   r‹   r3  )r+  rM   r8  Úrecarray2dictrÈ  r¯  )r»   r8   r<   r	  r  Úmmhr‰  s          r    rš  rš  x  sà   € à
�.‰.œŸ™°9ˆ.Ó
=€CÜ
˜Ó
€Cð �\Ñ"öàô 
�1�Q‘4‹×	Ñ	Ó	  ! A¡$¨¨!©¨a°©d´I¸aÀ¹d³O×4IÑ4IÓ4KÒLò€CˆÑð 	ˆMÑ€Aä�!�A‘$‹×ÑÓØ	ˆ!‰Ø	ˆ!‰Ø	ˆ!‰Ü�!�A‘$‹×ÑÓð€CˆÑð €Jùòs   ´ACc                 ó,   — | j                  |dz   d«      S )zARead FluoView mm_stamp tag from file and return as numpy.ndarray.r:	  r‡   rÄ  r¼  s        r    r›  r›  ‹  s   € à�=‰=˜ TÑ)¨1Ó-Ð-r`   c                 óp  — |dv r|dk(  sJ ‚i }|dk(  r<| j                  dd|z  «      j                  |d«      }d|dd…df   |dd…d	f   z  i}|S |ret        |«      D ]W  }t        j                  d
| j                  d«      «      d   }	|	dv r| j                  d«       ŒAt        | |	|d¬«      \  }
}|||
<   ŒY |S )zuRead MetaMorph STK UIC1Tag from file and return as dict.

    Return empty dictionary if planecount is unknown.

    )r;  r]  r„   r;  ú<u4r�   r   Nr   r&   ú<Ir‹   )rr  rs  é%   é(   é)   TrÀ  )r  ra  rn  r¹   rç  ræ  Úread_uic_tag)r»   r8   r<   r	  r  Ú
planecountrX   rþ  rY   r_  rÚ  rk   s               r    r³  r³  �  sÜ   € ð �LÑ  Y°#Ò%5Ð5Ð5Ø€FØ�‚}à—‘˜u a¨%¡iÓ0×8Ñ8¸ÀÓBˆØ˜v¢a¨ d™|¨f²Q¸°T©lÑ:Ð;ˆð €Mñ 
Ü�u“ò 	!ˆAÜ—M‘M $¨¯©°«
Ó3°AÑ6ˆEØÐ,Ñ,à—‘˜”
ØÜ& r¨5°*ÀTÔJ‰KˆD�%Ø ˆF�4ŠLð	!ð €Mr`   c                 óÎ   — |dk(  r|dk(  sJ ‚| j                  dd|z  «      j                  |d«      }|dd…df   |dd…df   z  |dd…df   |dd…d	f   |dd…d
f   |dd…df   dœS )z8Read MetaMorph STK UIC2Tag from file and return as dict.r;  r„   rÑ  rç   Nr   r&   r�   rÉ   r‹   ræ   )r   r#  r!  r%  r"  ©r  ra  ©r»   r8   r<   r×  r  rþ  s         r    r–  r–  ¨  s…   € à�DŠ=˜Y¨#Ò-Ð-Ð-Ø�]‰]˜5 ! j¡.Ó1×9Ñ9¸*ÀaÓH€FàšA˜q˜D‘\ Fª1¨a¨4¡LÑ0Øša ˜d‘|Øša ˜d‘|Øšq !˜t™Øšq !˜t™ñð r`   c                 óŽ   — |dk(  r|dk(  sJ ‚| j                  dd|z  «      j                  |d«      }d|dd…df   |dd…df   z  iS )	z8Read MetaMorph STK UIC3Tag from file and return as dict.r;  r„   rÑ  r�   ÚWavelengthsNr   r&   rÙ  rÚ  s         r    r—  r—  µ  sW   € à�DŠ=˜Y¨#Ò-Ð-Ð-Ø�]‰]˜5 ! j¡.Ó1×9Ñ9¸*ÀaÓH€FØ˜6¢! Q $™<¨&²°A°©,Ñ6Ð7Ð7r`   c                 ó°   — |dk(  r|dk(  sJ ‚i }	 t        j                  d| j                  d«      «      d   }|dk(  r	 |S t        | ||d¬«      \  }}|||<   ŒH)z8Read MetaMorph STK UIC4Tag from file and return as dict.r]  r„   z<Hr�   r   FrÀ  )r¹   rç  ræ  rÖ  )	r»   r8   r<   r×  r  rX   r_  rÚ  rk   s	            r    r˜  r˜  ¼  sp   € à�DŠ=˜Y¨#Ò-Ð-Ð-Ø€FØ
Ü—‘˜d B§G¡G¨A£JÓ/°Ñ2ˆØ�AŠ:Øð €Mô # 2 u¨jÀÔG‰ˆˆeØˆˆt‰ð r`   c                 óô  ‡ — dˆ fd„	}	 t         j                  |   \  }}t         j                  d   d   }|ra‰ j                  «       }|t        dfvrG |«       }	|	dk  r*|t
        u r|dfS t        j                  d||	fz  «       ||	fS ‰ j                  |	«       |€d	|z   } |«       }
�n|t        u r	 |«       }
�n||u r |d
«      }
|
d   |
d   z  }
�nó|t        u rt         |d
«      Ž }
�nÛ|t        u rt        ‰ «      }
�nÆ|t
        u r… |«       }d|cxk  rdk  rGn nDt        j                  d|z  ‰ j                  |«      «      d   dd }
t        t        |
«      «      }
�ne|rd}
t        j                  d|z  «       �nGt!        d|z  «      ‚|dk(  r¤g }
t#        |«      D ]“  } |«       }d|cxk  rdk  rWn nTt        j                  d|z  ‰ j                  |«      «      d   dd }t        t        |«      «      }|
j%                  |«       Œl|rt        j                  d|z  «       Œ‡t!        d|z  «      ‚ n�d|z   }d|v r||z  }d|v r3‰ j'                  |d«      d   }
|
j(                  d   d
k(  rW|
d   |
d   z  }
nKt        j                  |‰ j                  t        j*                  |«      «      «      }
t-        |
«      dk(  r|
d   }
|r‰ j                  dz   «       ||
fS # t        $ r d|z   |«       fcY S w xY w)zgRead a single UIC tag value from file and return tag name and value.

    UIC1Tags use an offset.

    r&   c                 ór   •— t        j                  d| z  ‰j                  d| z  «      «      }| dk(  r|d   S |S )Nz<%iIr‹   r&   r   )r¹   rç  ræ  )r	  rk   r»   s     €r    Úread_intzread_uic_tag.<locals>.read_intÐ  s9   ø€ Ü—‘˜f u™n¨b¯g©g°a¸%±iÓ.@ÓAˆØ  Aš:ˆu�Q‰xÐ0¨5Ð0r`   z_TagId%ir‹   Nr‡   r'  z#invalid offset for uic tag '%s': %irY   r�   r   rú  ú%isrÀ   zcorrupt string in uic tag '%s'zinvalid string size: %irf  r„   z%iú(rö  ).r&   rá   )rM   rƒ  r—  r—   rØ   r›   rŸ   r    r%   r)  r‚  r¹   rç  ræ  rÈ  r   r,   rn  r6   r  rD   r  r.   )r»   r_  r×  rS   rà  rÚ  r<   r  r¼   Úoffrk   rG   rY   Ústrings   `             r    rÖ  rÖ  É  sõ  ø€ õ1ð.Ü—m‘m EÑ*‰ˆˆeô
 �}‰}˜QÑ Ñ"€HáØ�g‰g‹iˆØœ˜d˜Ñ#Ù“*ˆCØ�QŠwØœC‘<Ø ˜8�OÜ—‘ÐCÀtÈSÀkÑQÔRØ˜S�yÐ Ø�G‰G�CŒLà€}à�T‰zˆÙ“
ŠØ	”#‰á“
ŠØ	�(Ñ	á˜“ˆØ�a‘˜5 ™8Ñ#ŠØ	”/Ñ	!ä¡¨!£Ð-ŠØ	Ô)Ñ	)ä'¨Ó+ŠØ	”#‰á‹zˆØ�Ô�uÕÜ—M‘M %¨$¡,°·±¸³Ó>¸qÑAÀ#À2ÐFˆEÜœi¨Ó.Ó/ŠEÙØˆEÜ�M‰MÐ:¸TÑAÖBäÐ6¸Ñ=Ó>Ð>Ø	�%ŠàˆÜ�zÓ"ò 		CˆAÙ“:ˆDØ�DÔ ˜5Õ ÜŸ™ u¨t¡|°R·W±W¸T³]ÓCÀAÑFÀsÈÐK�Ü"¤9¨VÓ#4Ó5�Ø—‘˜VÕ$ÙÜ—‘Ð>ÀÑEÕFä Ð!:¸TÑ!AÓBÐBñ		Cð �e‘ˆØ�5‰=Ø˜JÑ&ˆEØ�%‰<à—M‘M %¨Ó+¨AÑ.ˆEØ�{‰{˜2‰ !Ò#à˜f™¨¨f©Ñ5‘ô —M‘M %¨¯©´·±ÀÓ1GÓ)HÓIˆEÜ�5‹z˜QŠØ˜a™�áØ
�‰��a‘Ôà�ˆ;Ðøô] ò .à˜EÑ!¡8£:Ð-Ò-ð.ús   ‰K ËK7Ë6K7c                 ó,  — t        j                  d| j                  d«      «      d   }t        j                  d|z  | j                  |«      «      d   dd }t        j                  d| j                  d«      «      \  }}|dk(  r1t        j                  d	| j                  d
«      «      }|d   |d   z  }nSt        j                  d| j                  d«      «      d   }t        j                  d|z  | j                  |«      «      d   }t        |||¬«      S )z:Read UIC ImagePropertyEx tag from file and return as dict.rÇ   r&   r   rá  NrÀ   z<IBræ   ÚIIr‡   )rÚ  rú  rk   )r¹   rç  ræ  rÁ  )r»   rG   rÚ  rú  Úproprk   s         r    r‚  r‚  '  sã   € ô �=‰=˜˜bŸg™g a›jÓ)¨!Ñ,€DÜ�=‰=˜ ™ r§w¡w¨t£}Ó5°aÑ8¸¸"Ð=€DÜ—-‘-  r§w¡w¨q£zÓ2�K€Eˆ4Øˆq‚yÜ—‘˜d B§G¡G¨A£JÓ/ˆØ�a‘˜5 ™8Ñ#‰ä�}‰}˜S "§'¡'¨!£*Ó-¨aÑ0ˆÜ—‘˜e d™l¨B¯G©G°D«MÓ:¸1Ñ=ˆÜ�T ¨eÔ4Ð4r`   c                 óô  — |dk(  sJ ‚t        j                  d| j                  d«      «      \  }}|dvrt        d«      ‚| j	                  dd«       |t        j                  t        j                  «      j                  k  rYg }d}t        j                  D ]A  \  }	}|t        j                  |«      j                  z  }||kD  r n&|j                  |	|f«       ŒC nt        j                  }| j                  ||¬	«      }t        |«      }t        j                  j                  «       D ]@  \  }	}
|
€Œ	|j                  d
|	z   d«      }|dk  rŒ$| j	                  |«       	  |
| «      ||	<   ŒB |S # t        $ r Y ŒPw xY w)z1Read CZ_LSMINFO tag from file and return as dict.r„   ú<IIr‡   )iLI iLI zinvalid CZ_LSMINFO structureiøÿÿÿr&   r   r'  r2  )r¹   rç  ræ  r,   r%   r;   r<   rM   r  r=   r6   r+  rÍ  r†	  râ  r@   )r»   r8   r<   r	  r  Úmagic_numberÚstructure_sizeÚlsminforG   rÚ  ÚreaderrS   s               r    rœ  rœ  6  sh  € à˜ÒÐÐÜ#)§=¡=°¸¿¹À»
Ó#CÑ €L�.ØÐ/Ñ/ÜÐ7Ó8Ð8Ø‡G�GˆB�„NàœŸ™¤D§O¡OÓ4×=Ñ=Ò=àˆØˆÜŸ?™?ò 	*‰KˆD�%Ø”E—K‘K Ó&×/Ñ/Ñ/ˆDØ�nÒ$ÙØ�N‰N˜D %˜=Õ)ñ		*ô —/‘/ˆà�n‰n˜W°	ˆnÓ:€GÜ˜GÓ$€Gô ×/Ñ/×5Ñ5Ó7ò 
‰ˆˆfØˆ>ØØ—‘˜X¨™_¨aÓ0ˆØ�AŠ:ØØ
�‰�Œð	Ù" 2›JˆG�DŠMð
ð €Nøô ò 	Ùð	ús   ÅE+Å+	E7Å6E7c                 óx   — t        j                  d| j                  d«      «      d   }| j                  d|¬«      S )z>Read LSM sequence of float pairs from file and return as list.ú<ir‹   r   ú<2f8©r	  ©r¹   rç  ræ  r  ©r»   rG   s     r    r…	  r…	  \  ó2   € ä�=‰=˜˜rŸw™w q›zÓ*¨1Ñ-€DØ�=‰=˜ tˆ=Ó,Ð,r`   c                 óx   — t        j                  d| j                  d«      «      d   }| j                  d|¬«      S )z0Read LSM positions from file and return as list.rÒ  r‹   r   rð  rñ  rò  ró  s     r    Úread_lsm_positionsrö  b  rô  r`   c                 ó¼   — t        j                  d| j                  d«      «      \  }}|dd|z  z   k7  rt        j                  d«       g S | j                  d|¬«      S )z2Read LSM time stamps from file and return as list.z<iir‡   zinvalid LSM TimeStamps blockz<f8rñ  )r¹   rç  ræ  rŸ   r    r  )r»   rG   r	  s      r    r‚	  r‚	  h  sS   € ä—-‘-  r§w¡w¨q£zÓ2�K€Dˆ%Ø��A˜‘I‘ÒÜ�‰Ð4Ô5Øˆ	à�=‰=˜ eˆ=Ó,Ð,r`   c                 ó@  — t        j                  d| j                  d«      «      d   }g }|dkD  rnt        j                  d| j                  d«      «      \  }}}t        t	        | j                  |dz
  «      «      «      }|j                  |||f«       |dz  }|dkD  rŒn|S )zCRead LSM events from file and return as list of (time, type, text).ré  r‡   r&   r   z<IdIr½   )r¹   rç  ræ  rÈ  r   r6   )r»   r	  ÚeventsÚesizeÚetimeÚetypeÚetexts          r    rƒ	  rƒ	  r  s’   € ä�M‰M˜% §¡¨£Ó,¨QÑ/€EØ€FØ
�!Š)Ü$Ÿm™m¨F°B·G±G¸B³KÓ@Ñˆˆu�eÜœ) B§G¡G¨E°B©JÓ$7Ó8Ó9ˆØ�‰�u˜e UÐ+Ô,Ø�‰
ˆð	 �!‹)ð
 €Mr`   c                 óš  — dg g dœ}| j                  «       }t        j                  d| j                  d«      «      \  }}}}}}||k7  rt	        j
                  d«       |S t        |«      |d<   | j                  ||z   «       | j                  d|dz  ¬	«      j                  |df«      }	|	j                  «       |d
<   | j                  ||z   «       | j                  ||z
  «      }
g }t        |
«      dkD  rSt        j                  d|
dd «      d   }|j                  t        |
dd|z    «      «       |
d|z   d }
t        |
«      dkD  rŒS||d<   |S )z>Read LSM ChannelColors structure from file and return as dict.F)ÚMonorT
  Ú
ColorNamesz<IIIIIIrn  z#invalid LSM ChannelColors structurerÿ  rô  r‹   rñ  rT
  rÒ  Nr   rÉ   r   )r—   r¹   rç  ræ  rŸ   r    r¢   r%   r  ra  rZ  r.   r6   rÈ  )r»   rX   r¼   rG   ÚncolorsÚnnamesÚcoffsetÚnoffsetÚmonoÚcolorsÚbufferÚnamess               r    r„	  r„	  ~  sF  € à r¸Ñ<€FØ
�'‰'‹)€CÜ4:·M±MØ�2—7‘7˜2“;ó5Ñ1€Dˆ'�6˜7 G¨Tð �&ÒÜ�‰Ð;Ô<ØˆÜ˜$“Z€Fˆ6�Nà‡G�GˆC�'‰MÔØ�]‰]˜7¨'°A©+ˆ]Ó6×>Ñ>ÀÈ¸|ÓL€FØ—}‘}“€Fˆ8Ñà‡G�GˆC�'‰MÔØ�W‰W�T˜G‘^Ó$€FØ€EÜ
ˆf‹+˜Š/Ü�}‰}˜T 6¨"¨1 :Ó.¨qÑ1ˆØ�‰”Y˜v a¨!¨d©(Ð3Ó4Ô5Ø˜˜D™˜
Ð#ˆô ˆf‹+˜‹/ð !€Fˆ<ÑØ€Mr`   c                 óx  — i }|g}t         j                  }t        j                  d| j                  d«      «      d   dk7  rt        j                  d«       |S | j                  d«       	  |d| j                  d«      «      \  }}}|d	k(  r$t        t        | j                  |«      «      «      }nD|dk(  r |d
| j                  d«      «      d   }n#|dk(  r |d| j                  d«      «      d   }nd}|t        j                  v r.|j                  |«       t        j                  |   }g }	|	||<   |	}n‚|t        j                  v r'|j                  |«       i }	|j                  |	«       |	}nI|t        j                  v rt        j                  |   }|||<   n|dk(  r|j                  «       }n||d|z  <   |s	 |S �ŒR)z9Read LSM ScanInfo structure from file and return as dict.rÒ  r‹   r   i   zinvalid LSM ScanInfo structurer‡   z<IIIrŒ   r�   rï  ræ   z<dr—  z	Entry0x%x)r¹   rç  ræ  rŸ   r    rÈ  r   rM   r›	  r6   r¥	  rJ
  Úpop)
r»   ÚblockÚblocksrç  Úentryr<   rG   rk   rÚ  Únewobjs
             r    r�	  r�	  ™  sž  € à€EØˆW€FÜ�]‰]€FÜ‡}�}�T˜2Ÿ7™7 1›:Ó& qÑ)¨ZÒ7ä�‰Ð6Ô7ØˆØ‡G�GˆA„JØ
Ù# F¨B¯G©G°B«KÓ8Ñˆˆu�dØ�AŠ:äœi¨¯©°«Ó6Ó7‰EØ�aŠZá˜4 §¡¨£Ó,¨QÑ/‰EØ�aŠZá˜4 §¡¨£Ó,¨QÑ/‰EàˆEØ”D×3Ñ3Ñ3Ø�M‰M˜%Ô Ü×2Ñ2°5Ñ9ˆDØˆFØ ˆE�$‰KØ‰EØ”d×6Ñ6Ñ6Ø�M‰M˜%Ô ØˆFØ�L‰L˜Ô Ø‰EØ”d×9Ñ9Ñ9Ü×6Ñ6°uÑ=ˆDØˆE�$ŠKØ�jÒ à—J‘J“L‰Eð */ˆE�+ Ñ%Ñ&ÙØØ€LñG r`   c                 óÐ  — i }| j                  t        j                  |¬«      }t        j                  D ]  \  }}||   j                  «       ||<   Œ |d   dk(  ræ| j                  t        j                  |¬«      }|d   t        d«      k7  rt        j                  d«       i S t        j                  D ]a  \  }}|j                  d«      r5||   j                  «       j                  dd	¬
«      }	t        |	d¬«      ||<   ŒL||   j                  «       ||<   Œc dD ]"  }
|d|
z   xx   dz  cc<   |d|
z   xx   dz  cc<   Œ$ |S |j                  dk7  rt        j                  d«       i S |S )z.Read TVIPS EM-MENU headers and return as dict.r'  rQ
  r�   r  l   ª*UU zinvalid TVIPS v2 magic numberr¼  Úutf16rj  )Úerrorsr  )Únullr³  rÏ
  g    eÍÍAÚ	PixelSizer&   zunknown TVIPS header version)r+  rM   rà
  rZ  r  rØ   rŸ   r    r‡  r  rŽ  r   rc  )r»   r8   r<   r	  r  rX   ÚheaderrÚ  Útypestrrû   rÍ   s              r    rž  rž  É  sl  € à€FØ�^‰^œD×0Ñ0¸Iˆ^ÓF€FÜ×-Ñ-ò -‰ˆˆgØ˜d‘|×*Ñ*Ó,ˆˆtŠð-àˆiÑ˜AÒØ—‘¤× 4Ñ 4À	�ÓJˆØ�'‰?œc *›oÒ-Ü�M‰MÐ9Ô:ØˆIä!×1Ñ1ò 	5‰MˆD�'Ø×!Ñ! #Ô&Ø˜4‘L×)Ñ)Ó+×2Ñ2°7À8Ð2ÓL�Ü(¨°Ô6��t’à% d™|×2Ñ2Ó4��t’ð	5ð ò 	.ˆDØÐ&¨Ñ-Ó.°#Ñ5Ó.Ø�; Ñ%Ó&¨#Ñ-Ô&ð	.ð €Mð 
�‰˜1Ò	Ü�‰Ð4Ô5Øˆ	Ø€Mr`   c                 ó(  — i }i }t        | j                  |«      «      }|j                  «       D ]Q  }|j                  «       }|j	                  d«      ri }|||dd <   Œ/	 |j                  d«      \  }	}
t        |
«      ||	<   ŒS |S # t        $ r Y Œaw xY w)z0Read FEI SFEG/HELIOS headers and return as dict.ú[r&   rÀ   r�   )rÈ  ræ  Ú
splitlinesr¯  r‡  r  r,   rZ  )r»   r8   r<   r	  r  rX   ÚsectionrC   rØ  rC  rk   s              r    r�  r�  å  s£   € à€FØ€GÜ�R—W‘W˜U“^Ó$€DØ—‘Ó!ò 
%ˆØ�z‰z‹|ˆØ�?‰?˜3ÔØˆGØ!(ˆF�4˜˜"�:ÑØð	ØŸ™ C›‰JˆC�ô ˜e“}ˆ�Šð
%ð €Møô ò 	Ùð	ús   ÁBÂ	BÂBc           	      óŽ  — ddi}d}t        | j                  |«      «      }|j                  «       D ]É  }|j                  «       r|j	                  «       }Œ$|r‚	 |j                  d«      \  }	}
|
j                  «       }
d}	 |
j                  «       \  }}t        |t        t        f«      }||k7  r|}
|}|	j                  «       |
f||<   |r||xx   |fz  cc<   d}Œ¨|dxx   t        |t        t        f«      fz  cc<   ŒË |S # t        $ r Y ŒÙw xY w# t        $ r- t        |
t        t        f«      }||
k7  r|}
|
dv rd}
n|
dv rd}
Y Œ’w xY w)	z&Read Zeiss SEM tag and return as dict.r'  r   Nr�   )ÚNoÚOffF)ÚYesÚOnT)rÈ  ræ  r  Úisupperr  r  r,   r¯  rZ  rØ   r’  r?   )r»   r8   r<   r	  r  rX   rC  rC   rØ  rÚ  rk   r˜  rœ  r0  Únumbers                  r    r™  r™  ø  sX  € à�"ˆX€FØ
€CÜ�R—W‘W˜U“^Ó$€DØ—‘Ó!ò 8ˆØ�<‰<Œ>Ø—*‘*“,‰CÙðØ"Ÿj™j¨›o‘��eð —K‘K“MˆEØˆDð!Ø—{‘{“}‘��1Ü ¤C¬ <Ó0�Ø˜Q’;Ø"�EØ�Dð  Ÿ:™:›<¨Ð/ˆF�3‰KÙØ�s“ ˜wÑ&“Ø‰Cà�2‹Jœ6 $¬¬e¨Ó5Ð7Ñ7ŒJð;8ð< €Møô1 ò Ùðûô ò !Ü ¬¬U |Ó4�Ø˜U’?Ø"�EØ˜MÑ)Ø!‘EØ˜mÑ+Ø �Eùð!ús$   ÁC?Á?2DÃ?	DÄ
DÄ3EÅEc                 óê   — | j                  t        j                  |¬«      }|j                  |j                  j                  |«      «      }t        |«      }|d   d|d    |d<   |d   d|d    |d<   |S )z7Read NIH_IMAGE_HEADER tag from file and return as dict.r'  r
  Nr~
  rf
  re
  )r+  rM   r‚
  rß  r<   rJ  rÍ  )r»   r8   r<   r	  r  r{   s         r    rŸ  rŸ    sw   € à
�‰”t×,Ñ,¸	ˆÓB€AØ	�‰ˆq�w‰w×#Ñ# IÓ.Ó/€AÜ�aÓ€AØ�7‘Ð,˜a ™nÐ-€A€g�JØ�‰g�m˜˜(™Ð$€A€d�GØ€Hr`   c                 óÞ  — | j                  d«       	 t        j                  d| j                  d«      «      \  }}|dk7  s|dk7  rt        ‚| j                  d«       t        j                  d| j                  d«      «      \  }}}}|dk7  s|d	k7  rt        ‚	 t        t        | j                  |«      dd «      «      }|dkD  rt        | dd|d«      ni }||fS # t        $ r t        d
«      ‚w xY w)a;  Read ScanImage BigTIFF v3 static and ROI metadata from open file.

    Return non-varying frame data as dict and ROI group data as JSON.

    The settings can be used to read image data and metadata without parsing
    the TIFF file.

    Raise ValueError if file does not contain valid ScanImage v3 metadata.

    r   z<2sHr‹   r’   r•   r½   z<IIIIirÉ   znot a ScanImage BigTIFF v3 fileNrÀ   r&   r„   )	r%   r¹   rç  ræ  r?   r,   Úmatlabstr2pyrÈ  r   )r»   r8   rc  ÚmagicÚsize0Úsize1Ú
frame_dataÚroi_datas           r    rb  rb  (  sê   € ð ‡G�GˆA„Jð	<Ü#Ÿ]™]¨6°2·7±7¸1³:Ó>Ñˆ	�7Ø˜Ò ¨B¢ÜˆOØ
�‰�ŒÜ'-§}¡}°W¸b¿g¹gÀb»kÓ'JÑ$ˆˆw˜˜uØ�IÒ ¨A¢ÜˆOð ".ô
 œi¨¯©°«°s¸Ð(;Ó<Ó=€JØ8=Àº	Œy˜˜S $¨¨tÔ4Àr€HØ�xÐÐøô ò <ÜÐ:Ó;Ð;ð<ús   “BC ÃC,c                 ór  — | j                  d«       	 dddœ| j                  d«         }i }| j                  d«       t	        j
                  |dz   | j                  d	«      «      \  }}}}}}}	}
|	d
k7  rt        d«      ‚t        | |d|
d«      |d<   |dk7  rt        d«      ‚| j                  |«       t	        j
                  |dz   | j                  d«      «      \  }}|dk7  rt        d«      ‚t	        j
                  |d|z  z   | j                  d|z  «      «      }|ddd…   |ddd…   |ddd…   |ddd…   |ddd…   dœ|d<   |dk7  rt        d«      ‚| j                  |«       t	        j
                  |dz   | j                  d«      «      \  }}|dk7  rt        d«      ‚t        | |d|d«      |d<   |dk7  rt        d«      ‚| j                  |«       t	        j
                  |dz   | j                  d«      «      \  }}|d k7  rt        d«      ‚t        | |d|d«      |d!<   |S # t        $ r t        d«      ‚w xY w)"zìRead MicroManager non-TIFF settings from open file and return as dict.

    The settings can be used to read image data without parsing the TIFF file.

    Raise ValueError if the file does not contain valid MicroManager metadata.

    r   r„   r…   rÛ  r�   znot a MicroManager TIFF filer‡   ÚIIIIIIIIrÈ  i$ñ# z#invalid MicroManager summary headerNÚSummaryi�ÇCz!invalid MicroManager index headerræ  i·²4 ÚIIIIIrˆ   ræ   r&   rÉ   r‹   )r€  ÚSliceÚFrameÚPositionr2  ÚIndexMapi„®Õz#invalid MicroManager display headerid‰»ÚDisplaySettingsi’}ìz$invalid MicroManager comments headerie»ÚComments)r%   ræ  r—  r,   r¹   rç  r   )r»   r8   rX   Úindex_headerÚindex_offsetÚdisplay_headerÚdisplay_offsetÚcomments_headerÚcomments_offsetÚsummary_headerÚsummary_lengthr  r	  rC   s                 r    r\  r\  D  sh  € ð ‡G�GˆA„Jð9Ø¨Ñ,¨R¯W©W°Q«ZÑ8ˆ	ð €FØ‡G�GˆA„Jô 	�‰�i *Ñ,¨b¯g©g°b«kÓ:ñ	ØØØØØØØØð ˜Ò ÜÐ>Ó?Ð?Ü! " i°°~ÀtÓL€Fˆ9Ñà�xÒÜÐ<Ó=Ð=Ø‡G�GˆLÔÜ—M‘M )¨dÑ"2°B·G±G¸A³JÓ?�M€FˆEØ�ÒÜÐ<Ó=Ð=Ü�=‰=˜ W¨u¡_Ñ4°b·g±g¸bÀ5¹jÓ6IÓJ€Dà™˜!˜‘9Ø�a�d˜�d‘Ø�a�d˜�d‘Ø˜˜˜A˜‘JØ�q�t˜!�t‘*ñ€Fˆ:Ñð ˜Ò"ÜÐ>Ó?Ð?Ø‡G�GˆNÔÜ—M‘M )¨dÑ"2°B·G±G¸A³JÓ?�M€FˆEØ�ÒÜÐ>Ó?Ð?Ü )¨"¨i¸¸uÀdÓ K€FÐÑà˜(Ò"ÜÐ?Ó@Ð@Ø‡G�GˆOÔÜ—M‘M )¨dÑ"2°B·G±G¸A³JÓ?�M€FˆEØ�ÒÜÐ?Ó@Ð@Ü" 2 y°$¸¸tÓD€Fˆ:Ñà€Møôg ò 9ÜÐ7Ó8Ð8ð9ús   “H! È!H6c                 ó   — t        «       ‚)zRead MetaSeries non-TIFF hint catalog from file.

    Raise ValueError if the file does not contain a valid hint catalog.

    )rÕ  )r»   s    r    Úread_metaseries_catalogr<  …  s   € ô Ó
Ðr`   c           
      óú  — dddœ|   g}dg}g }d„ }d„ }d„ }d„ }d	d
d|fddd|fddd|fddd|fddd|fddd|fddd|ff}	|	D ]¸  \  }
}}}|
j                  «       | v r|
j                  «       }
n|
| vrŒ0|dk(  r|ddd…   }| |
   }|€t        |«      }n|g}|j                  |t        j                  |dz   |«      z   «       |D ]6  } |||«      }|j                  |«       |j                  t        |«      «       Œ8 Œº |sydj                  |«      }dj                  |«      }||z   }t        |«      |d<   t        j                  |dt        |«      z  z   g|¢­Ž }ddt        |«      |d fd!dt        |«      d"z  |d ffS )#a  Return IJMetadata and IJMetadataByteCounts tags from metadata dict.

    The tags can be passed to the TiffWriter.save function as extratags.

    The metadata dict may contain the following keys and values:

        Info : str
            Human-readable information as string.
        Labels : sequence of str
            Human-readable labels for each channel.
        Ranges : sequence of doubles
            Lower and upper values for each channel.
        LUTs : sequence of (3, 256) uint8 ndarrays
            Color palettes for each channel.
        Plot : bytes
            Undocumented ImageJ internal format.
        ROI: bytes
            Undocumented ImageJ internal region of interest format.
        Overlays : bytes
            Undocumented ImageJ internal format.

    ó   IJIJó   JIJI©r…   r„   r   c                 ó6   — | j                  ddddœ|   z   «      S ©Nr¸  ÚbeÚler@  ©rÄ  ©rC   r8   s     r    Ú_stringz%imagej_metadata_tags.<locals>._stringª  ó    € Ø�{‰{˜8¨D°tÑ&<¸YÑ&GÑGÓHÐHr`   c                 óL   — t        j                  |dt        | «      z  z   g| ¢­Ž S )Nr‰  )r¹   rº   r.   rF  s     r    Ú_doublesz&imagej_metadata_tags.<locals>._doubles­  s#   € Ü�{‰{˜9¨¬c°$«i©Ñ8Ð@¸4Ò@Ð@r`   c                 ó"   — | j                  «       S r   )ÚtobytesrF  s     r    Ú_ndarrayz&imagej_metadata_tags.<locals>._ndarray°  s   € Ø�|‰|‹~Ðr`   c                 ó   — | S r   r   rF  s     r    Ú_bytesz$imagej_metadata_tags.<locals>._bytes³  rÎ  r`   ÚInfoó   infor&   ÚLabelsó   lablNÚRangesó   rangÚLUTsó   lutsÚPlotó   plotÚROIó   roi ÚOverlaysó   overr„   rÀ   rŽ   r   r`   r[  rÇ   TrZ  r‹   )r  r.   r6   r¹   rº   r  )r  r8   r  rÚ  ÚbodyrG  rJ  rM  rO  Úmetadata_typesrC  Úmtyper	  r\   rþ  rk   rC   s                    r    rk  rk  �  sì  € ð.  'Ñ*¨9Ñ5Ð6€FØ�€JØ€DòIòAòòð 
�˜!˜WÐ%Ø	�7˜D 'Ð*Ø	�7˜A˜xÐ(Ø	�˜$ Ð)Ø	�˜!˜VÐ$Ø	�˜˜FÐ#Ø	�W˜d FÐ+ð€Nð $2ò )ÑˆˆU�E˜4Ø�9‰9‹;˜(Ñ"Ø—)‘)“+‰CØ˜Ñ ØØ˜ÒØ™$˜B˜$‘KˆEØ˜#‘ˆØˆ=Ü˜“K‰Eà�XˆFØ�‰�eœfŸk™k¨)°c©/¸5ÓAÑAÔBØò 	)ˆEÙ˜˜yÓ)ˆDØ�K‰K˜ÔØ×Ñœc $›iÕ(ñ	)ð)ñ$ ØØ�8‰8�D‹>€DØ�X‰X�fÓ€FØ�D‰=€DÜ˜“K€Jˆq�MÜ—‘˜Y¨#´°J³Ñ*?Ñ@ÐNÀ:ÒN€Jà	�”S˜“Y  dÐ+Ø	�”S˜“_¨Ñ)¨:°tÐ<ðð r`   c           	      óÊ  — d„ }d„ }d„ }d„ }d|fd|fd|fd|fd	|fd
|fd|fdœ}|j                  t        d„ |j                  «       D «       «      «       |st        d«      ‚| dd dvrt        d«      ‚|d   }|dk  s|dkD  rt        d«      ‚|dz
  dz  }	t	        j
                  |d|	z  z   | dd|	dz  z    «      }
d|	dz  z   }d}i }t        |
ddd…   |
ddd…   «      D ]‚  \  }}g }|j                  |t        |«      t        f«      \  }}t        |«      D ],  }|dz  }|||   z   }|j                   || || |«      «       |}Œ. |dk(  r|d   n|||j                  «       <   Œ„ |S )zÕReturn IJMetadata tag value as dict.

    The 'Info' string can have multiple formats, e.g. OIF or ScanImage,
    that might be parsed into dicts using the matlabstr2py or
    oiffile.SettingsFile functions.

    c                 ó6   — | j                  ddddœ|   z   «      S rB  )rŽ  rF  s     r    rG  z imagej_metadata.<locals>._stringè  rH  r`   c                 óR   — t        j                  |dt        | «      dz  z  z   | «      S )Nr‰  r‡   )r¹   rç  r.   rF  s     r    rJ  z!imagej_metadata.<locals>._doublesë  s%   € Ü�}‰}˜Y¨#´°T³¸a±Ñ*@ÑAÀ4ÓHÐHr`   c                 óN   — t        j                  | d«      j                  dd«      S )Nrô  rÀ   rY  )r;   rË  ra  rF  s     r    Ú_lutzimagej_metadata.<locals>._lutî  s"   € Ü×Ñ  gÓ.×6Ñ6°r¸3Ó?Ð?r`   c                 ó   — | S r   r   rF  s     r    rO  zimagej_metadata.<locals>._bytesñ  rÎ  r`   rP  rR  rT  rV  ÚPlotsrZ  r\  )rQ  rS  rU  rW  rY  r[  r]  c              3   ó6   K  — | ]  \  }}|d d d…   |f–— Œ y ­wrÄ  r   rÀ  s      r    r!   z"imagej_metadata.<locals>.<genexpr>þ  s    è ø€ Ò=™d˜a ˆa‘�"�‰g�qŒ\Ñ=ùs   ‚zno ImageJ metadataNr‹   )r>  r?  zinvalid ImageJ metadatar   rŒ   i$  z#invalid ImageJ metadata header sizer‡   Ú4sIr�   r&   )rL   rÁ  râ  r,   r¹   rç  r(  r@   rÈ  rÅ  rn  r6   r¯  )rC   rÚ  r8   rG  rJ  re  rO  r_  Úheader_sizeÚntypesr  r¼   ÚcounterrX   r`  r	  rþ  rÚ  r\   rY   Úpos1s                        r    rB  rB  ß  sÝ  € òIòIò@òð ˜'Ð"Ø˜GÐ$Ø˜HÐ%Ø˜$�Ø˜6Ð"Ø˜�Ø˜fÐ%ñ€Nð ×ÑÜÑ= n×&:Ñ&:Ó&<Ô=Ó=ôñ ÜÐ-Ó.Ð.àˆBˆQ€xÐ)Ñ)ÜÐ2Ó3Ð3à˜Q‘-€KØ�RÒ˜;¨Ò,ÜÐ>Ó?Ð?à˜A‰o !Ñ#€FÜ�]‰]˜9 u¨v¡~Ñ5°t¸AÀÀFÈQÁJÁÐ7OÓP€FØ
ˆf�q‰j‰.€CØ€GØ€FÜ˜F¡3 Q 3™K¨°°°1°©Ó6ò C‰ˆˆuØˆØ#×'Ñ'¨´	¸%Ó0@Ä*Ð/MÓN‰
ˆˆdÜ�u“ò 	ˆAØ�q‰LˆGØ˜ GÑ,Ñ,ˆDØ�M‰M™$˜t C¨˜~¨yÓ9Ô:Ø‰Cð		ð
 -2°QªJ˜v ašy¸Fˆˆt�z‰z‹|ÒðCð €Mr`   c                 ó@  — d„ }i }| j                  «       D ]X  }	 |j                  d«      \  }}|j                  «       }|j                  «       }t        t
        |fD ]  }	  ||«      } n |||<   ŒZ d|vrt        d«      ‚|S # t        $ r Y Œww xY w# t        $ r Y ŒAw xY w)a8  Return metatata from ImageJ image description as dict.

    Raise ValueError if not a valid ImageJ description.

    >>> description = 'ImageJ=1.11a\nimages=510\nhyperstack=true\n'
    >>> imagej_description_metadata(description)  # doctest: +SKIP
    {'ImageJ': '1.11a', 'images': 510, 'hyperstack': True}

    c                 ó.   — dddœ| j                  «          S )NTF)ÚtrueÚfalse)r  )rø   s    r    Ú_boolz*imagej_description_metadata.<locals>._bool'   s   € Ø uÑ-¨c¯i©i«kÑ:Ð:r`   r�   rA  znot a ImageJ image description)r  r  r?   r¯  rØ   r’  r,   )r{  rr  rX   rØ  rC  rø   r<   s          r    r0  r0     sÈ   € ò;ð €FØ×&Ñ&Ó(ò ˆð	Ø—z‘z #“‰HˆC�ð �i‰i‹kˆØ�i‰i‹kˆÜœ5 %Ð(ò 	ˆEðÙ˜C“j�Ùð	ð ˆˆsŠðð �vÑÜÐ9Ó:Ð:Ø€Møô ò 	Ùð	ûô ò Ùðús#   šBÁBÂ	BÂBÂ	BÂBc                 óü  — |rt        d«      ‚t        | |¬«      } | d   dv }d|z  g}g }	|j                  dt        | dd «      z  «       |€d	}|	j                  d
«       n|	j                  dt	        |«      z  «       | d   dkD  r|j                  d| d   z  «       |€|sd}|r|r|	j                  d|z  «       | d   dkD  r|j                  d| d   z  «       | d   dkD  r*|j                  d| d   z  «       |€|	j                  d«       |�|	j                  dt	        |«      z  «       |j                  «       D ])  \  }
}|	j                  |
j                  «       ›d|›�«       Œ+ dj                  ||	z   dgz   «      S )a5  Return ImageJ image description from data shape.

    ImageJ can handle up to 6 dimensions in order TZCYXS.

    >>> imagej_description((51, 5, 2, 196, 171))  # doctest: +SKIP
    ImageJ=1.11a
    images=510
    channels=2
    slices=5
    frames=51
    hyperstack=true
    mode=grayscale
    loop=false

    z!ImageJ colormapping not supported)ÚrgbrÀ   rÈ   z	ImageJ=%sz	images=%iNrß   Tzhyperstack=truezhyperstack=%sr�   r&   zchannels=%iÚ	grayscalezmode=%sz	slices=%ir   z	frames=%iz
loop=falsezloop=%sr�   rì  r'  )rÕ  r\  r6   r   r¢   râ  r  r  )rD   rt  Ú
colormapedrc  r?  rW   Úloopr0   rX   r6   rC  rk   s               r    re  re  ?   sƒ  € ñ2 Ü!Ð"EÓFÐFÜ˜ CÔ(€EØ
�‰)�vÐ
€Cà˜GÑ#Ð$€FØ€FØ
‡M�M�+¤¨¨c¨r¨
Ó 3Ñ3Ô4ØÐØˆ
Ø�‰Ð'Õ(à�‰�o¬¨ZÓ(8Ñ8Ô9ØˆQ�x�!‚|Ø�‰�m e¨A¡hÑ.Ô/Ø€|™CØˆÙ‘dØ�‰�i $Ñ&Ô'ØˆQ�x�!‚|Ø�‰�k E¨!¡HÑ,Ô-ØˆQ�x�!‚|Ø�‰�k E¨!¡HÑ,Ô-Øˆ<Ø�M‰M˜,Ô'ØÐØ�‰�i¤$ t£*Ñ,Ô-Ø—l‘l“nò 6‰
ˆˆUØ�‰ §¡¥©eÐ4Õ5ð6ð �9‰9�V˜f‘_¨ tÑ+Ó,Ð,r`   c                 ó,  — t        d„ | D «       «      } t        | «      }d|cxkD  rdkD  rt        d«      ‚ |€| d   dv xr |dkD  }|r| d   dvrt        d«      ‚|s|dk(  r| d   dk7  rt        d	«      ‚|s| d   dk(  rd
d|z
  z  | z   S d
d|z
  z  | z   d
z   S )zÀReturn shape normalized to 6D ImageJ hyperstack TZCYXS.

    Raise ValueError if not a valid ImageJ hyperstack shape.

    >>> imagej_shape((2, 3, 4, 5, 3), False)
    (2, 3, 4, 5, 3, 1)

    c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   r×   rÙ   s     r    r!   zimagej_shape.<locals>.<genexpr>‚   s   è ø€ Ò(˜Q”#�a—&Ñ(ùrÚ   r&   rç   z1invalid ImageJ hyperstack: not 2 to 6 dimensionalrÀ   rÈ   r�   z*invalid ImageJ hyperstack: not a RGB imagez.invalid ImageJ hyperstack: not a non-RGB imagerá   ræ   )r  r.   r,   )rD   rt  r�  s      r    r\  r\  y   sÈ   € ô Ñ( %Ô(Ó(€EÜˆu‹:€DØˆ4„|�!‚|ÜÐLÓMÐMð à
€{Ø�B‰i˜6Ð!Ò. d¨Q¡hˆÙ
ˆu�R‰y Ñ&ÜÐEÓFÐFÙ�4˜1’9  r¡¨a¢ÜÐIÓJÐJÙ
ˆe�B‰i˜1ŠnØ�q˜4‘xÑ  5Ñ(Ð(Ø�1�t‘8Ñ˜uÑ$ tÑ+Ð+r`   c                 óP   — |j                  | ¬«       t        j                  |«      S )zÞReturn JSON image description from data shape and other meta data.

    Return UTF-8 encoded JSON.

    >>> json_description((256, 256, 3), axes='YXS')  # doctest: +SKIP
    b'{"shape": [256, 256, 3], "axes": "YXS"}'

    ©rD   )rL   rÉ  Údumps)rD   r  s     r    rf  rf  ‘   s!   € ð ‡O�O˜%€OÔ Ü�:‰:�hÓÐr`   c                 óÔ   — | dd dk(  r0t        d„ | dd j                  d«      D «       «      }t        |¬«      S | dd	 d
k(  r| dd dk(  rt        j                  | «      S t        d| «      ‚)a‚  Return metatata from JSON formatted image description as dict.

    Raise ValuError if description is of unknown format.

    >>> description = '{"shape": [256, 256, 3], "axes": "YXS"}'
    >>> json_description_metadata(description)  # doctest: +SKIP
    {'shape': [256, 256, 3], 'axes': 'YXS'}
    >>> json_description_metadata('shape=(256, 256, 3)')
    {'shape': (256, 256, 3)}

    Nrç   rv  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   r×   rÙ   s     r    r!   z,json_description_metadata.<locals>.<genexpr>¬   s   è ø€ ÒC ”c˜!—fÑCùrÚ   r¿  rÀ   ú,r{  r&   ru  ú}zinvalid JSON image description)r  r  rÁ  rÉ  rÊ  r,   )r{  rD   s     r    r*  r*  ž   sx   € ð �2�A€˜(Ò"äÑC k°!°BÐ&7×&=Ñ&=¸cÓ&BÔCÓCˆÜ˜%Ô Ð Ø�2�A€˜#Ò +¨b¨cÐ"2°cÒ"9ä�z‰z˜+Ó&Ð&Ü
Ð5°{Ó
CÐCr`   c                 ó6  — | j                  d«      st        d«      ‚|€ddh}i }|g}d}| j                  «       D �][  }|s|j                  «       }|sŒ|d   dk(  r‘|dd d	k(  rU|d
= |d
   }|dd }|rdj	                  ||   «      ||<   |dd dk(  r&t        j                  ||   d¬«      }d|_        |||<   Œ~d}|dd
 }|dd dk(  rg }n||v rg }d}ni }|j                  |«       |||<   Œ²|rj                  |«       ŒÆ|j                  dd«      }t        |«      dk(  rd|d   j                  «       <   Œý|\  }	}
|	dd dk(  r(j                  d„ |
j                  «       D «       «       �Œ2t        |
j                  «       «      |	j                  «       <   �Œ^ |S )al  Return metatata from FluoView image description as dict.

    The FluoView image description format is unspecified. Expect failures.

    >>> descr = ('[Intensity Mapping]\nMap Ch0: Range=00000 to 02047\n'
    ...          '[Intensity Mapping End]')
    >>> fluoview_description_metadata(descr)
    {'Intensity Mapping': {'Map Ch0: Range': '00000 to 02047'}}

    r  z"invalid FluoView image descriptionNzRegion Info (Fields)zProtocol DescriptionFr   éûÿÿÿz End]rÀ   r&   rì  r‹   zLUT rô  rÕ   )rÀ   rÉ   Tr�   zRGB c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   r×   )r   rt  s     r    r!   z0fluoview_description_metadata.<locals>.<genexpr>ð   s   è ø€ Ò=¨œ3˜sŸ8Ñ=ùrÚ   )r‡  r,   r  r¯  r  r;   r  rD   r6   r  r.   rC  rZ  )r{  ÚignoresectionsrX   ÚsectionsÚcommentrØ  r  rÚ  r{   rC  rk   s              r    Úfluoview_description_metadatar‡  ´   s×  € ð ×!Ñ! #Ô&ÜÐ=Ó>Ð>ØÐØ0Ð2HÐIˆà€FØˆx€HØ€GØ×&Ñ&Ó(ó +9ˆÙØ—:‘:“<ˆDÙØØ�‰7�cŠ>Ø�B�Cˆy˜GÒ#à˜R�LØ" 2™,�Ø˜A˜b�z�ÙØ$(§I¡I¨g°d©mÓ$<�G˜D‘MØ˜˜�8˜vÒ%ÜŸ™ G¨D¡M¸ÔA�AØ#�A”GØ$%�G˜D‘MØàˆGØ˜˜"�:ˆDØ�B�Qˆx˜6Ò!Ø‘Ø˜Ñ'Ø�Ø‘à�Ø�O‰O˜GÔ$Ø"ˆF�4‰LØáØ�N‰N˜4Ô ØØ�z‰z˜#˜qÓ!ˆÜˆt‹9˜Š>Ø'+ˆG�D˜‘G—M‘M“OÑ$ØØ‰
ˆˆUØˆr�ˆ7�fÒØ�N‰NÑ=¨u¯{©{«}Ô=Ö=ä#)¨%¯+©+«-Ó#8ˆG�C—I‘I“KÓ ðW+9ðX €Mr`   c                 óú  ‡— i }| j                  d«      s|S dD ]  }| j                  |d«      } Œ | j                  d«      D �]  }|dd dk7  rŒ|j                  «       }|d   }|d   t        j                  vr4	 t
        j
                  j                  dj                  |«      d	«      |d
<   Œkt        j                  |d      \  }Št        |d   t        «      r	||d      }n|D �cg c]  }||   ‘Œ	 }}‰t        u r|d   dk(  rdg}t        ˆfd„|D «       «      }‰t        k(  rdj                  |«      }nt        |«      dk(  r|d   }|||<   �Œ |S # t        $ r dj                  |dd «      ||<   Y ŒÉw xY wc c}w )a  Return metatata from Pilatus image description as dict.

    Return metadata from Pilatus pixel array detectors by Dectris, created
    by camserver or TVX software.

    >>> pilatus_description_metadata('# Pixel_size 172e-6 m x 172e-6 m')
    {'Pixel_size': (0.000172, 0.000172)}

    r•  z#:=,()r  rì  Nr�   rë  r   z%Y-%m-%dT%H %M %S.%fr&  r&   ÚnotÚNaNc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r   )r   rœ  r<   s     €r    r!   z/pilatus_description_metadata.<locals>.<genexpr>!  s   øè ø€ Ò0 A‘u˜Q—xÑ0ùrž  )r‡  r™  r  rM   rª  r|  Ústrptimer  r?   r(   r	  r’  r  r›   r.   )	r{  rX   r1  rØ  rÚ  rÐ  rþ  r   r<   s	           @r    rW  rW  ö   s�  ø€ ð €FØ×!Ñ! $Ô'ØˆØò 2ˆØ!×)Ñ)¨!¨SÓ1‰ð2à×!Ñ! $Ó'ó ˆØ��ˆ8�tÒØØ�z‰z‹|ˆØ�A‰wˆØ�‰7œ$×-Ñ-Ñ-ð2Ü%-×%6Ñ%6×%?Ñ%?Ø—H‘H˜T“NÐ$:ó&��zÑ"ð
 Ü×,Ñ,¨T°!©WÑ5‰ˆ�Ü�g˜a‘j¤%Ô(à˜' !™*Ñ%‰Fà'.Ö/ !�d˜1“gÐ/ˆFÐ/Ø”E‰>˜f Q™i¨5Ò0Ø�WˆFÜÓ0¨Ô0Ó0ˆØ”CŠ<Ø—X‘X˜fÓ%‰FÜ�‹[˜AÒØ˜A‘YˆFØˆˆt‹ð5ð6 €Møô# ò 2Ø"Ÿx™x¨¨Q¨R¨Ó1��t“ð2üò 0s   Á92EÃ%E8Å E5Å4E5c                 óö  — | j                  d«      st        d«      ‚i }| j                  d«      }|d   j                  «       j	                  dd«      \  }}|j                  «       ||j                  «       <   t        |«      dk(  r|S |d   j                  d«      }|d   j                  «       |d<   |dd D ]@  }|j                  d	«      \  }}t        |j                  «       «      ||j                  «       <   ŒB |S )
zêReturn metatata from Aperio image description as dict.

    The Aperio image description format is unspecified. Expect failures.

    >>> svs_description_metadata('Aperio Image Library v1.0')
    {'Aperio Image Library': 'v1.0'}

    zAperio Image Library z invalid Aperio image descriptionrì  r   Nr&   r‚   r'  z = )r‡  r,   r  r¯  Úrsplitr.   rZ  )r{  rX   ÚlinesrC  rk   râ  rŸ  s          r    Úsvs_description_metadatar�  #!  sê   € ð ×!Ñ!Ð"9Ô:ÜÐ;Ó<Ð<Ø€FØ×Ñ˜dÓ#€EØ�q‘—‘Ó!×(Ñ(¨¨qÓ1�J€CˆØŸ+™+›-€Fˆ3�9‰9‹;ÑÜ
ˆ5ƒz�Q‚ØˆØ�!‰H�N‰N˜3Ó€EØ�q‘—‘Ó!€Fˆ2�JØ�a�b�	ò 4ˆØ—Z‘Z Ó&‰
ˆˆUÜ$ U§[¡[£]Ó3ˆˆs�y‰y‹{Òð4ð €Mr`   c                 ó  — | j                  «       } | sg S 	 t        | «      } g }| j                  d«      D ]°  }i }|j                  d«      D ]‡  }|j                  dd«      }t        |«      dkD  r0|\  }}t        |j                  «       «      ||j                  «       <   ŒS|d   j                  «       }|sŒid|v r|d   j                  |«       Œ‚|g|d<   Œ‰ |j                  |«       Œ² |S # t        $ r t        j                  d«       g cY S w xY w)z”Return metadata from MetaMorph image description as list of dict.

    The MetaMorph image description format is unspecified. Expect failures.

    z+failed to parse MetaMorph image descriptionr  ú
r2  r&   r   r'  )	r¯  rÈ  rÊ  rŸ   r    r  r.   rZ  r6   )r{  rX   r¨  r‰  rØ  rÚ  rk   s          r    Ústk_description_metadatar“  <!  s  € ð ×#Ñ#Ó%€KÙØˆ	ðÜ Ó,ˆð €FØ×"Ñ" 6Ó*ò ˆØˆØ—K‘K Ó'ò 	(ˆDØ—:‘:˜c 1Ó%ˆDÜ�4‹y˜1Š}Ø"‘��eÜ"(¨¯©«Ó"7��$—*‘*“,’à˜Q™Ÿ™›�ÚØ˜Q‘wØ˜"™Ÿ™ UÕ+à!& ˜˜"šð	(ð 	�‰�aÕðð €Møô' ò Ü�‰ÐCÔDØŠ	ðús   –C) Ã) DÄDc                 óä   ‡‡— | j                  d«      st        d«      ‚ddlm} |j	                  | «      }t
        t        d„ dœŠˆˆfd„Š ‰|i «      }d|v r|d   j                  d	d
«      |d<   |S )z:Return metatata from MetaSeries image description as dict.r†  z$invalid MetaSeries image descriptionr   rh  c                 ó   — t        | dd«      S )NÚonrã  )Úasboolrí   s    r    rï   z1metaseries_description_metadata.<locals>.<lambda>e!  s   € ¼6À!ÀTÈ5Ó;Q€ r`   )r’  rØ   r¢   c                 ó¸   •— | D ]S  }|j                   }|s ‰|i «      ||j                  <   Œ(d|v sŒ-|d   }|d   }|d   }|‰v r ‰|   |«      ||<   ŒO|||<   ŒU |S )NÚidÚtyperk   )r�  r¢  )	r�  rX   Úchildr�  r   rG  rœ  ÚparseÚtypess	          €€r    rœ  z.metaseries_description_metadata.<locals>.parseg!  s‚   ø€ àò 	"ˆEØ—\‘\ˆFÙÙ$)¨%°Ó$4��u—y‘yÑ!ØØ�vŠ~Ø˜4‘L�Ø˜6‘N�Ø˜7‘O�Ø˜‘:Ø (  a¡¨£�F˜1’Ià !�F˜1’Ið	"ð ˆr`   r`  z
&#13;&#10;rì  )r‡  r,   r‹  ri  rŒ  r’  rØ   r™  )r{  r›  r�  Úadictrœ  r�  s       @@r    rS  rS  ]!  sx   ù€ à×!Ñ! ,Ô/ÜÐ?Ó@Ð@å/à×Ñ˜KÓ(€DÜ¤CÑ1QÑR€Eõñ" �$˜‹O€EØ˜ÑØ$ ]Ñ3×;Ñ;¸LÈ$ÓOˆˆmÑØ€Lr`   c                 ó   — t        | «      S )z9Return metatata from ScanImage image description as dict.)r#  rœ  s    r    rc  rc  ~!  s   € ä˜Ó$Ð$r`   c                 ó|   — 	 t        j                  | «      S # t        $ r t        j                  d| z  «       Y yw xY w)z2Return metatata from ScanImage artist tag as dict.rÈ  N)rÉ  rÊ  r,   rŸ   r    )Úartists    r    Úscanimage_artist_metadatar¢  ƒ!  s7   € ð4Ü�z‰z˜&Ó!Ð!øÜò 4Ü�‰Ð)¨FÑ2Ö3ð4ús   ‚ —!;º;rY   c                 ó   ‡‡‡‡— d„ S )z2Try replace decorated function by module.function.c                 ó   — | S r   r   )r!  s    r    rï   z_replace_by.<locals>.<lambda>�!  s   € �Q€ r`   )Ú	importlibÚimport_moduler„  rá  )Úmodule_functionÚpackager    Úprefixrl   ÚdecorateÚ_warnr¦  s    ` `  @@r    Ú_replace_byr¬  ‹!  s	   û€ áÐr`   c                 óš  — | j                   }| j                  }t        |«      dk  rt        d«      ‚|j                  dvrt        d«      ‚| j                  j
                  dk(  xs. t        j
                  dk(  xr | j                  j
                  dk(  }| j                  d«      } |d	d
 dz   |dd	 z   | _         t        j                  | d
d| ¬«       |r|d	d
 dz   |d
d	 z   | _         t        j                  | dd
«      } t        j                  | d
d«      } | dd	d	d…f   } t        j                  | «      } | j                  |«      } || _         | S )aï  Decode floating point horizontal differencing.

    The TIFF predictor type 3 reorders the bytes of the image values and
    applies horizontal byte differencing to improve compression of floating
    point images. The ordering of interleaved color channels is preserved.

    Parameters
    ----------
    data : numpy.ndarray
        The image to be decoded. The dtype must be a floating point.
        The shape must include the number of contiguous samples per pixel
        even if 1.

    rÉ   zinvalid data shapeÚdfeznot a floating point imager„   rƒ   r�   rô  NrÁ   rà   rÀ   rÓ  rß   .)rD   r<   r.   r,   rT   r8   rž   rß  r;   rä  ÚswapaxesÚascontiguousarray)rC   rD   r<   Úlittleendians       r    rå  rå  ³!  s?  € ð �J‰J€EØ�J‰J€EÜ
ˆ5ƒz�A‚~ÜÐ-Ó.Ð.Ø‡z�z˜ÑÜÐ5Ó6Ð6Ø—:‘:×'Ñ'¨3Ñ.ò Ü�‰˜Ñ!ÒA d§j¡j×&:Ñ&:¸cÑ&Að ð �9‰9�WÓ€DØ�s˜�˜eÑ# e¨B¨C jÑ0€D„JÜ	‡L�L�˜B g°4Õ8áØ˜3˜B�Z %Ñ'¨%°°¨*Ñ4ˆŒ
Ü�>‰>˜$  BÓ'€DÜ�>‰>˜$  BÓ'€DØ�‘T�r�T�	‰?€Dä×"Ñ" 4Ó(€DØ�9‰9�UÓ€DØ€D„JØ€Kr`   z_tifffile.decode_packbitsc                 ó‚  — t         j                  d   dk(  rt        nt        }g }|j                  }d}	 	  || |   «      dz   }|dz  }|dk  r || |||z    «       ||z  }n|dkD  r || ||dz    d|z
  z  «       |dz  }ŒK# t
        $ r Y nw xY wt         j                  d   dk(  rdj                  |«      S t        |«      S )zuDecompress PackBits encoded byte string.

    PackBits is a simple byte-oriented run-length compression scheme.

    r   ré   r&   é�   rÒ  r`   )rž   rc  Úordrá  rC  r—  r  rì   )Úencodedr\   rX   Úresult_extendr   Úns         r    r”  r”  Ü!  sà   € ô —+‘+˜a‘. CÒ'�3¬\€DØ€FØ—M‘M€MØ	€AðØÙ�W˜Q‘ZÓ  1Ñ$ˆAØ�‰FˆAØ�3ŠwÙ˜g a¨!¨a©%Ð0Ô1Ø�Q‘‘Ø�S’Ù˜g a¨!¨a©%Ð0°C¸!±GÑ<Ô=Ø�Q‘�ð øô ò Ùðúä"Ÿ{™{¨1™~°Ò4ˆ3�8‰8�FÓÐG¼%À»-ÐGs   ´AB  Â 	BÂBz_tifffile.decode_lzwc           	      óà  ‡ ‡‡‡‡— t        ‰ «      }|dz  }t        j                  Št        j                  d   dk(  r"t        d«      D �cg c]  }t        |«      ‘Œ }}n"t        d«      D �cg c]  }t        |g«      ‘Œ }}|j                  d«       ˆˆ ˆˆˆfd„}ddt        d	d
«      fddt        dd
«      fddt        dd
«      fddt        dd
«      fdœ}|d   \  }ŠŠdŠ|dk  rt        d«      ‚ |«       dk7  rt        d«      ‚d}d}	g }
|
j                  }	  |«       }‰|z  Š|dk(  s‰|k\  rn‰|dk(  r:|dd }|j                  }d}|d   \  }ŠŠ |«       }‰|z  Š|dk(  rnV |||   «       n:|k  r|   }||	   |dd z   }n|	   }||dd z  }|} ||«        |«       |dz  }|}	||v r	||   \  }ŠŠŒ |dk7  rt        j                  d|z  «       dj                  |
«      S c c}w c c}w )a+  Decompress LZW (Lempel-Ziv-Welch) encoded TIFF strip (byte string).

    The strip must begin with a CLEAR code and end with an EOI code.

    This implementation of the LZW decoding algorithm is described in (1) and
    is not compatible with old style LZW compressed files like quad-lzw.tif.

    r‡   r   ré   rY  )r   r   c            
      ó¶   •— ‰dz  } ‰| | dz    }	  ‰d|«      d   }|‰dz  z  }|‰z  }|‰z	  S # t         $ r!  ‰d|ddt        |«      z
  z  z   «      d   }Y Œ;w xY w)z@Return integer of 'bitw' bits at 'bitcount' position in encoded.r‡   r‹   z>Ir   rü   )r?   r.   )r¥  rû   r  Úbitcountrµ  ÚmaskÚshrrç  s      €€€€€r    Ú	next_codezdecode_lzw.<locals>.next_code
"  sˆ   ø€ à˜A‘ˆØ�E˜E A™IÐ&ˆð	?Ù˜$ “? 1Ñ%ˆDð 	�˜A‘ÑˆØ�‰ˆØ�s‰{Ðøô	 ò 	?Ù˜$  G¨q´3°q³6©zÑ$:Ñ :Ó;¸AÑ>ŠDð	?ús   �. ®'AÁArÃ   rm  Ú 11111111100000000000000000000000r�   rN  rŸ  Ú 11111111110000000000000000000000rP  rl  Ú 11111111111000000000000000000000rŒ   rˆ   Ú 11111111111100000000000000000000)ró  iÿ  iÿ  iÿ  ró  r‹   z(strip must be at least 4 characters longz strip must begin with CLEAR coderZ  NrÒ  r&   z&unexpected end of LZW stream (code %i)r`   )r.   r¹   rç  rž   rc  rn  Úchrrì   rC  rØ   r,   r6   rŸ   r    r  )rµ  Úlen_encodedÚbitcount_maxr   Únewtabler½  ÚswitchbitchÚbitwr  ÚoldcoderX   Úresult_appendrÅ  Útable_appendÚlentableÚdecodedÚnewcoderº  r»  r¼  rç  s   `                @@@@r    r   r   ö!  sQ  ü€ ô �g“,€KØ ‘?€LÜ�]‰]€Fä
‡{�{�1�~˜ÒÜ$)¨#£JÖ/˜q”C˜•FÐ/ˆÑ/ä(-¨c«
Ö3 1”E˜1˜#•JÐ3ˆÐ3Ø‡O�O�FÔ÷
ð 
ð �”SÐ+¨QÓ/Ð0Ø�"”cÐ-¨qÓ1Ð2Ø�2”sÐ.°Ó2Ð3Ø�2”sÐ.°Ó2Ð3ñ	€Kð " #Ñ&�O€Dˆ#ˆtØ€Hà�Q‚ÜÐCÓDÐDáƒ{�cÒÜÐ;Ó<Ð<à€DØ€GØ€FØ—M‘M€MØ
Ù‹{ˆØ�DÑˆØ�3Š;˜( lÒ2ØØ�3Š;Ø™Q�KˆEØ Ÿ<™<ˆLØˆHØ)¨#Ñ.‰OˆD�#�tÙ“;ˆDØ˜ÑˆHØ�sŠ{ØÙ˜% ™+Õ&à�hŠØ ™+�Ø ™.¨7°2°A¨;Ñ6‘à ™.�Ø˜7 2 A˜;Ñ&�Ø!�Ù˜'Ô"Ù˜Ô!Ø˜‰MˆHØˆØ�{Ñ"Ø)¨(Ñ3‰OˆD�#�tð9 ð< ˆs‚{Ü�‰Ð>ÀÑEÔFà�8‰8�FÓÐùòK 0ùâ3s   Á	G&Á+G+z_tifffile.unpack_intsc                 ó:  ‡— ‰dk(  rvt        j                  | d«      } t        j                  | «      } |dz  r5| j                  d|d|dz  z
  z   «      } | dd…d|…f   j                  d«      } | j	                  |«      S t        j
                  |«      }‰dv rt        j                  | |«      S ‰dvrt        d‰z  «      ‚|j                  d	vrt        d
«      ‚t        ˆfd„dD «       «      }||j                  k7  rt        d«      ‚|dk(  rdt        | «      z  ‰z  }|‰z  dz  }|rd|z
  }|dz  ‰z
  }t        ‰dz  d|z  z   d«      }d|j                  z   }t        j                  }	|t        | «      dz  |‰z  |z   z  z  }
t        j                  |
f|«      }d}t!        |
«      D ]G  }|dz  }| |||z    }	  |	||«      d   }||dz  z  }||z  }||z	  ||<   |‰z  }|dz   |z  dk(  sŒC||z  }ŒI |S # t"        $ r!  |	||d|t        |«      z
  z  z   «      d   }Y ŒXw xY w)a—  Decompress byte string to array of integers of any bit size <= 32.

    This Python implementation is slow and only handles itemsizes 1, 2, 4, 8,
    16, 32, and 64.

    Parameters
    ----------
    data : byte str
        Data to decompress.
    dtype : numpy.dtype or str
        A numpy boolean or integer type.
    itemsize : int
        Number of bits per integer.
    runlen : int
        Number of consecutive integers, after which to start at next byte.

    Examples
    --------
    >>> unpack_ints(b'a', 'B', 1)
    array([0, 1, 1, 0, 0, 0, 0, 1], dtype=uint8)
    >>> unpack_ints(b'ab', 'B', 2)
    array([1, 2, 0, 1, 1, 2, 0, 2], dtype=uint8)

    r&   z|Br‡   rÀ   Nr	  )r&   r�   r‹   r‡   r½   rÈ  zitemsize not supported: %iÚbiuzinvalid dtypec              3   ó4   •K  — | ]  }d |z  ‰k\  sŒ|–— Œ y­w©r‡   Nr   )r   r   r=   s     €r    r!   zunpack_ints.<locals>.<genexpr>w"  s   øè ø€ ÒB˜1°°A±¸Ó0A”QÑBùs   ƒ‘)r&   r�   r‹   r‡   zdtype.itemsize too smallr   Ú1Ú0r�   r…   rü   )r;   rË  Ú
unpackbitsra  rZ  r<   r,   r^  Únextr=   r.   rØ   rT   r¹   rç  rl  rn  r?   )rC   r<   r=   rÑ  Ú	itembytesÚskipbitsÚshrbitsÚbitmaskÚdtypestrrç  rG   rX   rº  r   r¥  rû   r  s     `              r    rÐ  rÐ  M"  sw  ø€ ð4 �1‚}Ü×Ñ  dÓ+ˆÜ×Ñ Ó%ˆØ�AŠ:Ø—<‘<  F¨a°&¸1±*©nÑ$=Ó>ˆDØš˜7˜F˜7˜
Ñ#×+Ñ+¨BÓ/ˆDØ�{‰{˜5Ó!Ð!ä�K‰K˜Ó€EØ�?Ñ"Ü×Ñ  eÓ,Ð,ØÐ+Ñ+ÜÐ5¸Ñ@ÓAÐAØ‡z�z˜ÑÜ˜Ó)Ð)äÓB ÔBÓB€IØ�E—N‘NÒ"ÜÐ3Ó4Ð4Ø�‚{Ø”c˜$“i‘- HÑ,ˆØ˜Ñ  1Ñ$€HÙØ�x‘<ˆØ˜!‰m˜hÑ&€GÜ�(˜S‘. 3¨¡=Ñ0°!Ó4€GØ�U—Z‘ZÑ€Hä�]‰]€FØ”S˜“Y ‘] v°Ñ'8¸8Ñ'CÑDÑE€DÜ�[‰[˜$˜ %Ó(€FØ€HÜ�4‹[ò !ˆØ˜A‘ˆØ�˜ Ñ*Ð+ˆð	KÙ˜( AÓ& qÑ)ˆDð 	�˜A‘ÑˆØ�‰ˆØ˜G‘Oˆˆq‰	Ø�HÑˆØ�‰E�VÑ˜qÓ Ø˜Ñ ‰Hð!ð €Møô ò 	KÙ˜( A¨°9¼sÀ1»vÑ3EÑ(FÑ$FÓGÈÑJŠDð	Kús   Æ5G0Ç0'HÈHc           	      ó\  ‡‡
— t        j                  ‰«      Št        t        j                  |«      «      Š
‰
dk  rt	        ˆfd„|D «       «      st        dt        |«      z  «      ‚t        ˆ
fd„dD «       «      }t        j                  | ‰j                  |z   «      } t        j                  | j                  t        |«      f‰j                  «      }t        |«      D ]½  \  }}| t        t        j                  ||dz   d «      «      z	  }|t        dd	|z  z   d
«      z  }|rq‰j                  dz  |z  dz   |z  }	|	| j                  j                  dz  kD  r|j!                  d«      }|d
|	z  dz
  d
|z  dz
  z  z  }|d
|	‰j                  dz  z
  z  z  }||dd…|f<   Œ¿ |j#                  d«      S )aÞ  Return array from byte string containing packed samples.

    Use to unpack RGB565 or RGB555 to RGB888 format.

    Parameters
    ----------
    data : byte str
        The data to be decoded. Samples in each pixel are stored consecutively.
        Pixels are aligned to 8, 16, or 32 bit boundaries.
    dtype : numpy.dtype
        The sample data type. The byteorder applies also to the data stream.
    bitspersample : tuple
        Number of bits for each sample in a pixel.
    rescale : bool
        Upscale samples to the number of bits in dtype.

    Returns
    -------
    result : ndarray
        Flattened array of unpacked samples of native dtype.

    Examples
    --------
    >>> data = struct.pack('BBBB', 0x21, 0x08, 0xff, 0xff)
    >>> print(unpack_rgb(data, '<B', (5, 6, 5), False))
    [ 1  1  1 31 63 31]
    >>> print(unpack_rgb(data, '<B', (5, 6, 5)))
    [  8   4   8 255 255 255]
    >>> print(unpack_rgb(data, '<B', (5, 5, 5)))
    [ 16   8   8 255 255 255]

    rÈ  c              3   óB   •K  — | ]  }|‰j                   d z  k  –— Œ y­wrÑ  )r=   )r   r   r<   s     €r    r!   zunpack_rgb.<locals>.<genexpr>º"  s   øè ø€ ÒN¸1˜q E§N¡N°QÑ$6Õ6ÑNùr¾  zsample size not supported: %sc              3   ón   •K  — | ],  }t        j                  |«      j                  d z  ‰k\  sŒ)|–— Œ. y­wrÑ  )r;   r<   r=   )r   r   Úbitss     €r    r!   zunpack_rgb.<locals>.<genexpr>¼"  s+   øè ø€ ÒF�A¤%§+¡+¨a£.×"9Ñ"9¸AÑ"=ÀÓ"EŒaÑFùs   ƒ*5®5ÚBHIr&   NÚ0brÒ  r�   r‡   rŽ   rÀ   )r;   r<   rØ   rs  r˜  r,   r›   rÕ  rË  r8   rl  rG   r.   rT   ro  r=   rZ  ra  )rC   r<   r7  Úrescaler+  rX   r   rœ  rG  ÚorÞ  s    `        @r    rÎ  rÎ  —"  s‘  ù€ ôB �K‰K˜Ó€EÜŒu�y‰y˜Ó'Ó(€DØ�BŠJœ3ÓNÀÔNÔNÜÐ8¼3¸}Ó;MÑMÓNÐNÜ	ÓF˜ÔFÓ	F€BÜ×Ñ˜D %§/¡/°BÑ"6Ó7€DÜ�[‰[˜$Ÿ)™)¤S¨Ó%7Ð8¸%¿*¹*ÓE€FÜ˜MÓ*ò 	‰ˆˆ3Ø”CœŸ	™	 -°°A±°Ð"8Ó9Ó:Ñ:ˆØ	ŒS�˜˜c™	Ñ! 1Ó%Ñ%ˆÙØ—.‘. 1Ñ$¨Ñ,¨qÑ0°CÑ7ˆAØ�4—:‘:×&Ñ&¨Ñ*Ò*Ø—H‘H˜S“M�Ø�!�Q‘$˜‘(  3¡¨¡
Ñ+Ñ+ˆAØ�!˜˜UŸ^™^¨aÑ/Ñ0Ñ1Ñ1ˆAØˆŠq�!ˆtŠð	ð �>‰>˜"ÓÐr`   z_tifffile.reverse_bitorderc                 óö   — 	 | j                  d«      }t        j                  t        j                  ||¬«       y# t
        $ r" | j                  t        j                  «      cY S t        $ r t        d«      ‚w xY w)aj  Reverse bits in each byte of byte string or numpy array.

    Decode data where pixels with lower column values are stored in the
    lower-order bits of the bytes (FillOrder is LSB2MSB).

    Parameters
    ----------
    data : byte string or ndarray
        The data to be bit reversed. If byte string, a new bit-reversed byte
        string is returned. Numpy arrays are bit-reversed in-place.

    Examples
    --------
    >>> reverse_bitorder(b'\x01\x64')
    b'\x80&'
    >>> data = numpy.array([1, 666], dtype='uint16')
    >>> reverse_bitorder(data)
    >>> data
    array([  128, 16473], dtype=uint16)

    rô  rÁ  zslices of arrays not supportedN)
rß  r;   ÚtakerM   r®  rb   Ú	translater¬  r,   rÕ  )rC   rß  s     r    rà  rà  Ì"  sf   € ð.DØ�y‰y˜Ó!ˆÜ�
‰
”4×.Ñ.°¸$Ö?øÜò ;Ø�~‰~œd×9Ñ9Ó:Ò:Üò DÜ!Ð"BÓCÐCðDús   ‚7: º(A8Á$A8c                 ó¦   — t        j                  || d¬«      } t        j                  | d| j                  «      } |rt        j                  | «      } | S )a±  Return palette-colored image.

    The image values are used to index the colormap on axis 1. The returned
    image is of shape image.shape+colormap.shape[0] and dtype colormap.dtype.

    Parameters
    ----------
    image : numpy.ndarray
        Indexes into the colormap.
    colormap : numpy.ndarray
        RGB lookup table aka palette of shape (3, 2**bits_per_sample).
    contig : bool
        If True, return a contiguous array.

    Examples
    --------
    >>> image = numpy.arange(256, dtype='uint8')
    >>> colormap = numpy.vstack([image, image, image]).astype('uint16') * 256
    >>> apply_colormap(image, colormap)[-1]
    array([65280, 65280, 65280], dtype=uint16)

    r&   rÌ   r   )r;   rä  Úrollaxisr�  r°  )Úimagerz  Úcontigs      r    r÷  r÷  ì"  sD   € ô. �J‰J�x ¨QÔ/€EÜ�N‰N˜5 ! U§Z¡ZÓ0€EÙÜ×'Ñ'¨Ó.ˆØ€Lr`   c                 ó”  — t         j                  }t        ||«      }||j                  k(  r| S ||j                  k(  r| dddd…dd…f   S ||j
                  k(  r| dddd…dd…dd…f   S ||j                  k(  r| dddd…ddd…dd…f   S ||j                  k(  rt        j                  | dd«      S ||j                  k(  r"t        j                  | dd«      dddd…dd…f   S ||j                  k(  r%t        j                  | dd«      dddd…dd…dd…f   S ||j                  k(  r&t        j                  | dd«      dddd…ddd…dd…f   S y)a+  Return reoriented view of image array.

    Parameters
    ----------
    image : numpy.ndarray
        Non-squeezed output of asarray() functions.
        Axes -3 and -2 must be image length and width respectively.
    orientation : int or str
        One of TIFF.ORIENTATION names or values.

    .NrÀ   rß   rÁ   )rM   r¬  rY  r  r  r  r  r  r;   r¯  r  r  r  )rè  Úorientationr¬  s      r    Úreorientrì  
#  s_  € ô ×"Ñ"€KÜ˜+ {Ó3€Kà�k×)Ñ)Ò)ØˆØ	˜×,Ñ,Ò	,Ø�S™$˜B˜$¢�\Ñ"Ð"Ø	˜×+Ñ+Ò	+Ø�S™$˜B˜$¢¢1�_Ñ%Ð%Ø	˜×,Ñ,Ò	,Ø�S™$˜B˜$¡ " ¢aÐ'Ñ(Ð(Ø	˜×+Ñ+Ò	+Ü�~‰~˜e R¨Ó,Ð,Ø	˜×,Ñ,Ò	,Ü�~‰~˜e R¨Ó,¨S±$°B°$º¨\Ñ:Ð:Ø	˜×,Ñ,Ò	,Ü�~‰~˜e R¨Ó,¨S±$°B°$ºº1¨_Ñ=Ð=Ø	˜×+Ñ+Ò	+Ü�~‰~˜e R¨Ó,¨S±$°B°$¹¸"¸ºaÐ-?Ñ@Ð@ð 
,r`   c                 óx  — t        j                  | «      } g }g }g }t        | j                  | j                  |«      D ]@  \  }}}|j                  ||f«       |j                  |df«       |j                  ||z  «       ŒB t         j                  j                  j                  | ||d¬«      j                  |«      S )a   Return read-only view into input array with elements repeated.

    Zoom nD image by integer factors using nearest neighbor interpolation
    (box filter).

    Parameters
    ----------
    a : array_like
        Input array.
    repeats : sequence of int
        The number of repetitions to apply along each dimension of input array.

    Example
    -------
    >>> repeat_nd([[1, 2], [3, 4]], (2, 2))
    array([[1, 1, 2, 2],
           [1, 1, 2, 2],
           [3, 3, 4, 4],
           [3, 3, 4, 4]])

    r   F)Ú	writeable)r;   r/   r(  ÚstridesrD   rC  r6   ÚlibÚstride_tricksÚ
as_stridedra  )r{   Úrepeatsra  rD   rï  r   r2  r  s           r    r   r   +#  s®   € ô, 	�‰�aÓ€AØ€GØ€EØ€GÜ�q—y‘y !§'¡'¨7Ó3ò ‰ˆˆ1ˆaØ�‰�a˜�VÔØ�‰˜˜1�vÔØ�‰�q˜1‘uÕðô �9‰9×"Ñ"×-Ñ-Ø	ˆ5�' Uð .ó ç�gˆgÓðr`   c                 ó´   — t        | t        «      }|r| n| j                  }t        |«      |k\  r| S d|t        |«      z
  z  |z   }|r|S | j	                  |«      S )a‡  Return image array or shape with at least ndim dimensions.

    Prepend 1s to image shape as necessary.

    >>> reshape_nd(numpy.empty(0), 1).shape
    (0,)
    >>> reshape_nd(numpy.empty(1), 2).shape
    (1, 1)
    >>> reshape_nd(numpy.empty((2, 3)), 3).shape
    (1, 2, 3)
    >>> reshape_nd(numpy.empty((3, 4, 5)), 3).shape
    (3, 4, 5)
    >>> reshape_nd((2, 3), 3)
    (1, 2, 3)

    rá   )r(   r  rD   r.   ra  )Údata_or_shaper�  Úis_shaperD   s       r    r_  r_  N#  sa   € ô" ˜-¬Ó/€HÙ%‰M¨=×+>Ñ+>€EÜ
ˆ5ƒz�TÒØÐØ�Dœ3˜u›:Ñ%Ñ&¨Ñ.€EÙˆ5Ð> -×"7Ñ"7¸Ó">Ð>r`   c                 ó¼   ‡— t        | «      t        |«      k7  rt        d«      ‚t        ˆfd„t        | |«      D «       Ž \  } }t        | «      dj	                  |«      fS )zÑReturn shape and axes with single-dimensional entries removed.

    Remove unused dimensions unless their axes are listed in 'skip'.

    >>> squeeze_axes((5, 1, 2, 1, 1), 'TZYXC')
    ((5, 2, 1), 'TYX')

    z)dimensions of axes and shape do not matchc              3   óB   •K  — | ]  }|d    dkD  s|d   ‰v sŒ|–— Œ y­w)r   r&   Nr   )r   r   r¦  s     €r    r!   zsqueeze_axes.<locals>.<genexpr>r#  s%   øè ø€ ÒP˜a°q¸±t¸a²xÀ1ÀQÁ4È4Â<œÑPùs   ƒ˜r'  )r.   r,   r(  r  r  )rD   r  r¦  s     `r    rš  rš  g#  sS   ø€ ô ˆ5ƒz”S˜“YÒÜÐDÓEÐEÜÓP¤3 u¨dÓ#3ÔPÐQ�K€Eˆ4Ü�‹<˜Ÿ™ ›Ð&Ð&r`   c                 ó  — |D ]  }||vsŒt        d|z  «      ‚ | j                  }t        |«      D ]  }||vsŒ||z   }d|z   }Œ | j                  |«      } | j	                  |D �cg c]  }|j                  |«      ‘Œ c}«      } | S c c}w )zÌReturn image with its axes permuted to match specified axes.

    A view is returned if possible.

    >>> transpose_axes(numpy.zeros((2, 3, 4, 5)), 'TYXC', asaxes='CTZYX').shape
    (5, 2, 1, 3, 4)

    zunknown axis %srá   )r,   rD   rO  ra  Ú	transposer†  )rè  r  Úasaxesr~  rD   s        r    Útranspose_axesrü  v#  sŸ   € ð ò 5ˆØ�VÒÜÐ.°Ñ3Ó4Ð4ð5ð �K‰K€EÜ�vÓò !ˆØ�TŠ>Ø˜‘9ˆDØ˜5‘L‰Eð!ð �M‰M˜%Ó €Eà�O‰O°fÖ=°˜TŸZ™Z¨�^Ò=Ó>€EØ€Lùò >s   Á%Bc                 ó�  — t        |«      }t        |«      }t        | «      t        |«      k7  rt        d«      ‚t        |«      }t        |«      }||k7  rt        d|›d|›�«      ‚| r|syt	        dt        |«      t        |«      z
  «      }|r|d|z  z   }t        |«      dz
  }d}d}	g }
|ddd	…   D ]w  }||z  }|dkD  r%||   dk(  r|dk7  r|dz  }|dkD  r||   dk(  r|dk7  rŒ|||   k(  r-||	||   z  k(  r"|	||   z  }	|
j                  | |   «       |dz  }Œg|
j                  |«       Œy dj                  t        |
|d «      «      S )
záReturn axes matching new shape.

    Unknown dimensions are labelled 'Q'.

    >>> reshape_axes('YXS', (219, 301, 1), (219, 301))
    'YX'
    >>> reshape_axes('IYX', (12, 219, 301), (3, 4, 219, 1, 301, 1))
    'QQYQXQ'

    r(  zcannot reshape r  r'  r   rá   r&   NrÀ   )r  r.   r,   r   rü  r6   r  rO  )r  rD   ÚnewshapeÚunknownrG   ÚnewsizeÚlendiffr   ÚprodnsÚprodsrX   Únss               r    r$  r$  Ž#  sn  € ô �%‹L€EÜ�X‹€HÜ
ˆ4ƒy”C˜“JÒÜÐ2Ó3Ð3ä�5‹>€DÜ�hÓ€GØˆw‚Ý²e¹XÐFÓGÐGÙ‘xØä�!”S˜“Z¤# h£-Ñ/Ó0€GÙØ˜d W™nÑ,ˆäˆE‹
�Q‰€AØ€FØ€EØ€FØ‘t˜�t‰nò 	#ˆØ�"‰ˆØ�!Še˜˜a™ Aš¨"°ª'Ø�‰FˆAð �!Še˜˜a™ Aš¨"°«'à��q‘Š>˜f¨°°a±Ñ(8Ò8Ø�U˜1‘XÑˆEØ�M‰M˜$˜q™'Ô"Ø�‰F‰Aà�M‰M˜'Õ"ð	#ð �7‰7”8˜F 7 8Ð,Ó-Ó.Ð.r`   c                 óX  — t        | «      }|dk(  rt        d«      ‚|dk(  r | d   j                  |d|i|¤ŽS t        d„ | D «       «      }|j                  d¬«       |f|j                  j
                  z   }|j                  j                  }t        |||«      }|€t        j                  «       dz  }|dkD  |j                  j                  _        t        t        d	|«      |j                  j                  j                  ¬
«      }	||	||fd„}
|dk  rt        | «      D ]  \  }} |
||«       Œ nDt         j"                  j%                  |«      5 }|j'                  |
| t)        |«      «       ddd«       |	j+                  «        d|j                  j                  _        |S # 1 sw Y   Œ6xY w)zŒRead data from sequence of TiffPage and stack them vertically.

    Additional parameters are passed to the TiffPage.asarray function.

    r   zno pagesr&   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr   r   )r   rÖ  s     r    r!   zstack_pages.<locals>.<genexpr>È#  s   è ø€ Ò3�q Q¡]”Ñ3ùr  N)r  r�   r‹   )rG   rÖ  c                 óä   — | �n|j                  | j                  j                  «        | j                  ||j                  dddœ|¤Ž||<   |j                  | j                  j                  «       yy)z!Read, decode, and copy page data.NF)rÖ  ræ  r  )r×  rŠ  rí  r/   rÖ  rË  )rV   r†  r   Ú	filecacherý  r0   s         r    r\   zstack_pages.<locals>.funcÖ#  sd   € àÐØ�N‰N˜4Ÿ;™;×1Ñ1Ô2Ø%˜Ÿ™ØDH�Y—^‘^¨E¸EñØLRñˆC�‰Jð �O‰O˜DŸK™K×2Ñ2Õ3ð r`   )r.   r,   r/   rÕ  r  rD   r<   r   ÚmultiprocessingÚ	cpu_countrŠ  rí  rÖ  rE  rü  ro  Ú
concurrentÚfuturesÚThreadPoolExecutorÚmaprn  r  )rO   r   r  rý  r0   r0  re  rD   r<   r  r\   r   rV   Úexecutors                 r    r  r  »#  s‹  € ô �‹Z€FØ�‚{Ü˜Ó$Ð$à�‚{Øˆu�Q‰x×Ñ¨$Ð9 CÐ9°&Ñ9Ð9äÑ3˜EÔ3Ó3€EØ	‡M�M˜4€MÔ ØˆI˜Ÿ™×,Ñ,Ñ,€EØ�N‰N× Ñ €EÜ
˜˜U EÓ
*€CàÐÜ$×.Ñ.Ó0°AÑ5ˆ
Ø#-°¡>€E‡L�L×ÑÔ äÜ��JÓ e§l¡l×&=Ñ&=×&BÑ&Bô€Ið "¨Y¸TÈ&ó 4ð �A‚~Ü  Ó'ò 	‰GˆAˆtÙ��q�Mñ	ô ×Ñ×2Ñ2°:Ó>ð 	5À(Ø�L‰L˜˜u¤e¨F£mÔ4÷	5ð ‡O�OÔØ#'€E‡L�L×ÑÔ à€J÷	5ð 	5ús   ÅF Æ F)c                 óX  — t        | «      } t        |«      }t        | «      t        |«      k(  sJ ‚d}t        t        | |«      «      D ]Q  \  }\  }}|dkD  r|dkD  r||kD  r
|| |<   |||<   |dz  }Œ(|dkD  r|dk  rt	        d«      ‚t        j                  d«       ŒS |dk(  rd}| d| |d| fS )zŸReturn cleaned offsets and byte counts.

    Remove zero offsets and counts. Use to sanitize _offsets and _bytecounts
    tag values for strips or tiles.

    r   r&   zinvalid offsetzempty byte countN)r  r.   ro  r(  r,   rŸ   r    )rØ  Úcountsr2  r   râ  rg  s         r    r  r  ì#  sÎ   € ô �7‹m€GÜ�&‹\€FÜˆw‹<œ3˜v›;Ò&Ð&Ð&Ø	€AÜœs 7¨FÓ3Ó4ò 	.‰	ˆ‰6ˆAˆqØˆqŠ5�Q˜’UØ�1ŠuØ�˜‘
Ø��q‘	Ø�‰F‰AØ�ŠU�q˜A’vÜÐ-Ó.Ð.ä�M‰MÐ,Õ-ð	.ð 	ˆA‚vØˆØ�2�Aˆ;˜˜r ˜
Ð"Ð"r`   c              #   ó:  K  — t        |«      }d}||k  ryg }|5  d}||k  rS||k  rN| j                  ||   «       ||   }	|j                  | j                  |	«      «       ||	z  }|dz  }||k  r||k  rŒNddd«       |D ]  }
|
–— Œ ||k  rŒxyy# 1 sw Y   ŒxY w­w)z+Return iterator over blocks read from file.r   r&   N)r.   r%   r6   ræ  )r»   rÖ  rØ  rÚ  Ú
buffersizeÚlengthr   rC   rG   Ú	bytecountr  s              r    râ  râ  $  sº   è ø€ ä�‹\€FØ	€AØ
ˆfŠ*ØˆØñ 	ØˆDØ˜Ò#¨¨Fª
Ø—‘˜ ™
Ô#Ø& q™M�	Ø—‘˜BŸG™G IÓ.Ô/Ø˜	Ñ!�Ø�Q‘�ð ˜Ò#¨¨F«
÷	ð ò 	ˆEØ‹Kð	ð ˆf�*÷	ð 	üs#   ‚B™ABÁ4BÂBÂBÂBc                 ó˜  — | €t        j                  ||«      S t        | t        «      rW| dd dk(  rOt	        | «      dkD  r| dd nd}t        j                  ||¬«      5 }t        j                  ||||¬«      cddd«       S t        | t         j                  «      rht        |«      t        | j                  «      k7  rt        d«      ‚t        j                  || j                  «      st        d«      ‚| j                  |«      S t        | t        j                   «      rt        | «      } t        j                  | |||¬«      S # 1 sw Y   ŒÉxY w)	a»  Return numpy array where image data of shape and dtype can be copied.

    The 'out' parameter may have the following values or types:

    None
        An empty array of shape and dtype is created and returned.
    numpy.ndarray
        An existing writable array of compatible dtype and shape. A view of
        the same array is returned after verification.
    'memmap' or 'memmap:tempdir'
        A memory-map to an array stored in a temporary binary file on disk
        is created and returned.
    str or open file
        The file name or file object used to create a memory-map to an array
        stored in a binary file on disk. The created memory-mapped array is
        returned.

    Nrç   r   r¿  )r¥  Úsuffix)rD   r<   rW   zincompatible output shapezincompatible output dtype)r;   rã  r(   r›   r.   ÚtempfileÚNamedTemporaryFiler   r  r   rD   r,   Úcan_castr<   ra  rò  ró  )r   rD   r<   rW   r  Útempdirr»   s          r    r   r   $  s  € ð& €{Ü�{‰{˜5 %Ó(Ð(Ü�#”sÔ  B Q ¨8Ò 3Ü  ›X¨š\�#�a�b‘'¨tˆÜ×(Ñ(¨W¸VÔDð 	IÈÜ—<‘< ¨%°uÀ4ÔH÷	Iñ 	Iä�#”u—}‘}Ô%Ü�5‹>œW S§Y¡YÓ/Ò/ÜÐ8Ó9Ð9Ü�~‰~˜e S§Y¡YÔ/ÜÐ8Ó9Ð9Ø�{‰{˜5Ó!Ð!Ü�#”w—|‘|Ô$Ü�#‹hˆÜ�<‰<˜ 5°¸DÔAÐA÷	Ið 	Iús   ÁE Å E	c                 ó@  ‡‡‡‡— ˆfd„Šd„ Šdd„Šˆˆfd„}d| v sd| v ryi }| j                  «       D ]b  }|j                  «       }|r|d   dk(  rŒ|j                  d	d
«      \  Š}‰j                  «       Št        ˆfd„dD «       «      rŒX ||«      |‰<   Œd |S  || «      S )aE  Return Python object from Matlab string representation.

    Return str, bool, int, float, list (Matlab arrays or cells), or
    dict (Matlab structures) types.

    Use to access ScanImage metadata.

    >>> matlabstr2py('1')
    1
    >>> matlabstr2py("['x y z' true false; 1 2.0 -3e4; NaN Inf @class]")
    [['x y z', True, False], [1, 2.0, -30000.0], [nan, inf, '@class']]
    >>> d = matlabstr2py("SI.hChannels.channelType = {'stripe' 'stripe'}\n"
    ...                  "SI.hChannels.channelsActive = 2")
    >>> d['SI.hChannels.channelType']
    ['stripe', 'stripe']

    c                 ó  •— dg}	  ‰| «      \  }}|€n\|dk(  r|j                  d«       n?|dk(  r|j                  d«       n(|dk(  r|j                  d«       n|j                  |«       | |d  } Œj|j                  d«       |S )Nr  ú;)ú]r  )r  r  r  )r  r  )rC  r6   )rû   ÚtokensrG  r   Ú
next_tokens       €r    Úlexzmatlabstr2py.<locals>.lexQ$  sŠ   ø€ à�ˆØÙ˜a“=‰DˆAˆqØˆyØØ�CŠxØ—‘˜jÕ)Ø�c’Ø—‘˜jÕ)Ø�c’Ø—‘˜jÕ)à—‘˜aÔ Ø�!�"�ˆAð ð 	�‰�cÔØˆr`   c                 óÒ  — t        | «      }|dk(  ryd}||k  r| |   dk(  r|dz  }||k  r	| |   dk(  rŒ||k(  rd |fS | |   dv r
| |   |dz   fS | |   dk(  r2|dz   }||k  r| |   dk7  r|dz  }||k  r	| |   dk7  rŒ| ||dz    |dz   fS | |   dk(  r2|dz   }||k  r| |   dk7  r|dz  }||k  r	| |   dk7  rŒ| ||dz    |dz   fS |}||k  r| |   d	vr|dz  }||k  r| |   d	vrŒ| || |fS )
Nr   rA  r  r&   z{[;]}rÝ  r„   r…   z {[;]})r.   )rû   r  r   r2  s       r    r!  z matlabstr2py.<locals>.next_tokend$  sl  € ä�Q“ˆØ�QŠ;ØØˆØ�&Šj˜Q˜q™T Sš[Ø�‰FˆAð �&Šj˜Q˜q™T S›[à�Š;Ø˜�7ˆNØˆQ‰4�7‰?Ø�Q‘4˜˜Q™�;ÐØˆQ‰4�3Š;Ø�A‘ˆAØ�f’*  1¡¨¢Ø�Q‘�ð �f’*  1¡¨£à�Q˜˜Q™�<  Q¡Ð&Ð&ØˆQ‰4�3Š;Ø�A‘ˆAØ�f’*  1¡¨¢Ø�Q‘�ð �f’*  1¡¨£à�Q˜˜Q™�<  Q¡Ð&Ð&ØˆØ�&Šj˜Q˜q™T¨Ñ1Ø�‰FˆAð �&Šj˜Q˜q™T¨Ò1à��1ˆv�qˆyÐr`   c                 óÌ  ‡ — ‰ j                  «       Š ‰ s‰ S t        ‰ «      dk(  r	 t        ‰ «      S ‰ d   dk(  r |r‰ d   dk7  sd‰ dd v r
t	        «       ‚‰ dd S ‰ d   dk(  r|r‰ d   dk7  sd‰ dd v r
t	        «       ‚‰ S |rt        ˆ fd„dD «       «      r
t	        «       ‚‰ d   d	k(  r‰ S ‰ d
v ry‰ dv ry‰ d d dk(  rLt        j                  ‰ dd j                  d«      D �cg c]  }t        |«      ‘Œ c}«      j                  «       S ‰ d d dk(  rLt        j                  ‰ dd j                  d«      D �cg c]  }t        |«      ‘Œ c}«      j                  «       S d‰ v sd‰ v r	 t        ‰ «      S 	 t        ‰ «      S # t        $ r |r
t	        «       ‚‰ cY S w xY wc c}w c c}w # t        $ r Y Œ>w xY w# t        $ r Y nw xY w	 t        ‰ «      S # t        $ r |r
t	        «       ‚Y ‰ S w xY w)Nr&   r   rÝ  rÀ   r„   r…   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r   )r   r   rû   s     €r    r!   z.matlabstr2py.<locals>.value.<locals>.<genexpr>“$  s   øè ø€ Ò2 1˜˜QœÑ2ùr"   z ';[]{}ú@)rp  ÚTrueT)rq  ÚFalseFrç   zzeros(r  ræ   zones(ú.rl   )r¯  r.   rØ   r?   r,   r*   r;   rã  r  rZ  Úonesr’  )rû   Úfailr   s   `  r    rk   zmatlabstr2py.<locals>.value$  s  ø€ à�G‰G‹IˆÙØˆHÜˆq‹6�QŠ;ðÜ˜1“v�ð
 ˆQ‰4�3Š;Ù˜˜"™ š¨¨q°°2¨w©Ü “lÐ"Ø�Q�r�7ˆNØˆQ‰4�3Š;Ù˜˜"™ š¨¨q°°2¨w©Ü “lÐ"ØˆHÙ”CÓ2¨	Ô2Ô2Ü“,ÐØˆQ‰4�3Š;ØˆHØÐ Ñ ØØÐ"Ñ"ØØˆRˆaˆ5�HÒÜ—;‘;°°!°B°·±¸cÓ0BÖC¨1¤ A¥ÒCÓD×KÑKÓMÐMØˆRˆaˆ5�GÒÜ—:‘:¨q°°2¨w¯}©}¸SÓ/AÖB¨!œs 1�vÒBÓC×JÑJÓLÐLØ�!‰8�s˜a‘xðÜ˜Q“x�ð	Ü�q“6ˆMøô= ò ÙÜ$›,Ð&Ø’ðüò*  DùâBøô ò Ùðûô ò 	Ùð	úð	#Ü˜“8ˆOøÜò 	#ÙÜ “lÐ"ð àˆð	#úsS   ¥
E9 ÃFÄ2FÅ"
F  Å.
F/ Å9FÆFÆ 	F,Æ+F,Æ/	F;Æ:F;Æ?
G
 Ç
G#Ç"G#c                 óè  •— | j                  «       } 	  ‰| d¬«      S # t        $ r Y nw xY wg x}}|g} ‰| «      D ]ˆ  }|dv rg }|j                  |«       Œ|dv rS|j                  «       }t	        |«      dk(  rt        |d   t        t        f«      r|d   }|d   }|j                  |«       Œr|j                   ‰|«      «       ŒŠ t	        |«      dk(  rt        |d   t        t        f«      r|d   }|S )NT)r+  z[{z]}r&   r   rÀ   )r¯  r,   r6   r
  r.   r(   r  r›   )rû   rX   Úadd2ÚlevelsrG  rî   r"  rk   s         €€r    rœ  zmatlabstr2py.<locals>.parse¯$  sö   ø€ à�G‰G‹Iˆð	Ù˜ Ô&Ð&øÜò 	Ùð	úàÐˆ�Ø�ˆÙ�Q“ò 	&ˆAØ�D‰yØ�Ø—‘˜dÕ#Ø�d‘Ø—J‘J“L�Ü�q“6˜Q’;¤:¨a°©d´T¼3°KÔ#@Ø˜!™�AØ˜b‘z�Ø—‘˜A•à—‘™E !›HÕ%ð	&ô ˆv‹;˜!Ò¤
¨6°!©9´t¼S°kÔ BØ˜A‘YˆFØˆs   “	 �	)¨)úrì  r   ú%r�   r&   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r   )r   r1  r  s     €r    r!   zmatlabstr2py.<locals>.<genexpr>Ñ$  s   øè ø€ Ò/˜a�1˜”6Ñ/ùr"   z	 ';[]{}<>rI  )r  r¯  r  r*   )	rä  rœ  r‰  rØ  rœ  r  r"  r!  rk   s	        @@@@r    r#  r#  <$  s­   û€ ô*ò&ó6.õ`ð2 ˆv�~˜ ™àˆØ×%Ñ%Ó'ò 	ˆDØ—:‘:“<ˆDÙ˜4 ™7 cš>ØØ—:‘:˜c 1Ó%‰DˆAˆqØ—‘“	ˆAÜÓ/ ;Ô/Ô/ØÙ˜“8ˆAˆaŠDð	ð ˆÙ�‹=Ðr`   c                 ó<   — | j                  |«      }|dk  r| S | d| S )zçReturn string truncated at first null character.

    Clean NULL terminated C strings. For unicode strings use null='\0'.

    >>> stripnull(b'string\x00')
    b'string'
    >>> stripnull('string\x00', null='\0')
    'string'

    r   N)r  )rä  r  r   s      r    r   r   Ø$  s)   € ð 	�‰�DÓ€AØ˜!’eˆ6Ð, &¨¨! *Ð,r`   c                 óv   — t        | «      }|r#|dz  }dt        | |   «      cxk  rdk  rn nn|rŒ#d}| d|dz    S )zçReturn string truncated at last byte that is 7-bit ASCII.

    Clean NULL separated and terminated TIFF strings.

    >>> stripascii(b'string\x00string\n\x01\x00')
    b'string\x00string\n'
    >>> stripascii(b'\x00')
    b''

    r&   r‡   é   rÀ   N)r.   Úbyte2int)rä  r   s     r    rÉ  rÉ  ç$  sN   € ô 	ˆF‹€AÙ
Ø	ˆQ‰ˆØŒx˜˜q™	Ó"Ô( SÕ(Øò ð
 ˆØ�'�A˜‘Eˆ?Ðr`   c                 óf   — | j                  «       j                  «       } | |v ry| |v ryt        «       ‚)zdReturn string as bool if possible, else raise TypeError.

    >>> asbool(b' False ')
    False

    TF)r¯  r  r  )rk   rp  rq  s      r    r—  r—  ý$  s4   € ð �K‰K‹M×ÑÓ!€EØ��}ØØ��~ØÜ
‹+Ðr`   c                 ó–   — |€t         t        t        t        f}|D ]  }	  || «      c S  | S # t        t
        t        t        f$ r Y Œ,w xY w)zºReturn argument as one of types if possible.

    >>> astype('42')
    42
    >>> astype('3.14')
    3.14
    >>> astype('True')
    True
    >>> astype(b'Neee-Wom')
    'Neee-Wom'

    )rØ   r’  r—  rÈ  r,   rb   r  ÚUnicodeEncodeError)rk   r�  Útyps      r    rZ  rZ  %  sZ   € ð €}Ü”UœF¤IÐ-ˆØò ˆð	Ù�u“:Òðð
 €Løô œN¬IÔ7IÐJò 	Ùð	ús   Ÿ,¬AÁAc                 óL   — | |k  rd| z  S dD ]  }| dz  } | |k  sŒd| |fz  c S  y)z‰Return file size as string from byte size.

    >>> format_size(1234)
    '1234 B'
    >>> format_size(12345678901)
    '11.50 GiB'

    z%i B)ÚKiBÚMiBÚGiBÚTiBÚPiBg      �@z%.2f %sNr   )rG   Ú	thresholdr˜  s      r    r   r   #%  sE   € ð ˆiÒØ˜‰}ÐØ3ò ,ˆØ�‰ˆØ�)ÓØ  d˜|Ñ+Ò+ñ,r`   c                 ó   — | S )zOSingle argument identity function.

    >>> identityfunc('arg')
    'arg'

    r   )r  s    r    rá  rá  4%  s	   € ð €Jr`   c                   ó   — y)z<Null function.

    >>> nullfunc('arg', kwarg='kwarg')

    Nr   )rý  r0   s     r    ÚnullfuncrC  >%  s   € ð r`   c                 óB   — 	 t        | «       | S # t        $ r | fcY S w xY w)z{Return tuple containing value if value is not a sequence.

    >>> sequence(1)
    (1,)
    >>> sequence([1])
    [1]

    )r.   r  r½  s    r    r)  r)  G%  s)   € ðÜˆEŒ
ØˆøÜò ØˆxŠðús   ‚ ��c                 ó"   — d}| D ]  }||z  }Œ	 |S )zæReturn product of sequence of numbers.

    Equivalent of functools.reduce(operator.mul, iterable, 1).
    Multiplying numpy integers might overflow.

    >>> product([2**8, 2**30])
    274877906944
    >>> product([])
    1

    r&   r   )ÚiterableÚprodr   s      r    r   r   W%  s&   € ð €DØò ˆØ�‰	‰ðà€Kr`   c                 óR   ‡— ˆfd„}t        j                  d«      Št        | |¬«      S )z‘Return human sorted list of strings.

    E.g. for sorting file names.

    >>> natural_sorted(['f1', 'f2', 'f10'])
    ['f1', 'f2', 'f10']

    c                 óŒ   •— t        j                  ‰| «      D �cg c]  }|j                  «       rt        |«      n|‘Œ! c}S c c}w r   )r  r  ÚisdigitrØ   )rî   r1  Únumberss     €r    Úsortkeyznatural_sorted.<locals>.sortkeys%  s3   ø€ Ü8:¿¹ÀÈ!Ó8LÖM°1˜1Ÿ9™9œ;”�Q”¨AÑ-ÒMÐMùÒMs   š$Az(\d+)rB  )r  r  rm  )rF  rL  rK  s     @r    r   r   i%  s&   ø€ ôNô �j‰j˜Ó"€GÜ�( Ô(Ð(r`   iZ•
 c                 ó2   — |t        j                  | «      z   S )zÃReturn datetime object from timestamp in Excel serial format.

    Convert LSM time stamps.

    >>> excel_datetime(40237.029999999795)
    datetime.datetime(2010, 2, 28, 0, 43, 11, 999982)

    )r|  Ú	timedelta)Ú	timestampÚepochs     r    Úexcel_datetimerQ  z%  s   € ð ”8×%Ñ% iÓ0Ñ0Ð0r`   c           	      ó$  — | dk  ry| dz   }|dkD  r)t        j                  |dz
  dz  «      }|d|z   |dz  z
  z  }||dkD  rdnd	z   }t        j                  |d
z
  dz  «      }t        j                  d|z  «      }t        j                  ||z
  dz  «      }||z
  t        j                  d|z  «      z
  }||dk  rdndz
  }	||	dkD  rdndz
  }
t        |d«      \  }}t        |d«      \  }}t        |d«      \  }}t        j                  |
|	|||||«      S )z×Return datetime from days since 1/1/4713 BC and ms since midnight.

    Convert Julian dates according to MetaMorph.

    >>> julian_datetime(2451576, 54362783)
    datetime.datetime(2000, 2, 2, 15, 6, 2, 783)

    iOD Nr&   i# g   @Ð}<Ag    ˆÕá@r‹   iô  i†  gfffff†^@g     Ôv@gaTR' ™>@g      +@rE  g      @il  ik  i€î6 i`ê  iè  )ÚmathÚtruncr+  r|  )Ú	juliandayÚ
milisecondr{   rú  rg  r1  r‰  rl   ÚdayÚmonthÚyearÚhourÚminuteÚseconds                 r    r)  r)  †%  s.  € ð �GÒàà�A‰€AØˆ7‚{Ü—
‘
˜A 
™N¨hÑ6Ó7ˆØ	ˆQ�‰Y˜ !™Ñ#Ñ#ˆØ	�Q˜’[‰T dÑ+€AÜ�
‰
�A˜‘I Ñ'Ó(€AÜ�
‰
�6˜A‘:Ó€AÜ�
‰
�A˜‘E˜WÑ$Ó%€Aà
ˆa‰%”$—*‘*˜W q™[Ó)Ñ
)€CØ�a˜$’h‘ BÑ'€EØ˜ š‘¨Ñ.€Dä˜j¨.Ó9Ñ€Dˆ*Ü 
¨IÓ6Ñ€FˆJÜ 
¨DÓ1Ñ€FˆJä×Ñ˜T 5¨#¨t°V¸VÀZÓPÐPr`   c                 óŠ   — | dk(  s| t         j                  k(  rydddœ}|j                  | | «      |t         j                     k(  S )zcReturn if byteorder matches the system's byteorder.

    >>> byteorder_isnative('=')
    True

    r�   Tr…   r„   rÜ  )rž   r8   r@   )r8   r  s     r    Úbyteorder_isnativer^  §%  sC   € ð �CÒ˜9¬¯©Ò5ØØ #Ñ&€DØ�8‰8�I˜yÓ)¨T´#·-±-Ñ-@Ñ@Ð@r`   c                 óì   — i }t        | j                  j                  | «      D ]N  \  }}|dd \  }}|d   dk(  rt        t	        |«      «      }n|j
                  dk  r|j                  «       }|||<   ŒP |S )zReturn numpy.recarray as dict.Nr�   r&   rõ  )r(  r<   ÚdescrrÈ  r   r�  rZ  )ÚrecarrayrX   r`  rk   rÚ  r<   s         r    rÍ  rÍ  ´%  s|   € ð €FÜ˜HŸN™N×0Ñ0°(Ó;ò ‰ˆˆuØ˜B˜Q�i‰ˆˆeØ�‰8�sŠ?Üœi¨Ó.Ó/‰EØ�Z‰Z˜!Š^Ø—L‘L“NˆEØˆˆtŠðð €Mr`   c                 ót   ‡‡‡‡‡— ddl m} dxŠŠ|r|\  ŠŠd„ Šˆˆˆˆˆfd„Š ‰|j                  | «      «      S )z“Return XML as dict.

    >>> xml2dict('<?xml version="1.0" ?><root attr="name"><key>1</key></root>')
    {'root': {'key': 1, 'attr': 'name'}}

    r   rh  r'  c                 ód   — t         t        t        fD ]  }	  || «      c S  | S # t        $ r Y Œw xY wr   )rØ   r’  r—  r?   )rk   rG  s     r    rZ  zxml2dict.<locals>.astypeÏ%  sA   € ä”uœfÐ%ò 	ˆAðÙ˜“x’ð	ð
 ˆøô ò Ùðús   –#£	/®/c           
      ó  •— | j                   }‰r|j                  dd«      d   }|| j                  ri nd i}t        | «      }|r¡t	        j
                  t        «      }t        ‰|«      D ]4  }|j                  «       D ]  \  }}||   j                   ‰	|«      «       Œ! Œ6 ||j                  «       D ��ci c]'  \  }}|t        |«      dk(  r ‰	|d   «      n ‰	|«      “Œ) c}}i}| j                  r6||   j                  ˆ	ˆ
fd„| j                  j                  «       D «       «       | j                  rH| j                  j                  «       }|s| j                  r|r ‰	|«      ||   ‰dz   <   |S  ‰	|«      ||<   |S c c}}w )Nr€  r&   rÀ   r   c              3   ó>   •K  — | ]  \  }}‰|z    ‰|«      f–— Œ y ­wr   r   )r   r  rœ  rZ  Úats      €€r    r!   z/xml2dict.<locals>.etree2dict.<locals>.<genexpr>ê%  s"   øè ø€ ÒK±$°!°Q˜2 ™6¡6¨!£9Ô-ÑKùs   ƒrk   )r¢  rŽ  r�  r  r
  Údefaultdictr  râ  r6   r.   rL   r”  r¯  )rG  rC  r‰  ÚchildrenÚddÚdcr  rœ  r”  rZ  rf  Ú
etree2dictÚsanitizer«  s            €€€€€r    rk  zxml2dict.<locals>.etree2dictØ%  s]  ø€ à�e‰eˆÙØ—*‘*˜S !Ó$ RÑ(ˆCØ˜Ÿš‘" dÐ+ˆÜ˜“7ˆÙÜ×(Ñ(¬Ó.ˆBÜ˜* hÓ/ò ,�ØŸH™H›Jò ,‘D�A�qØ�q‘E—L‘L¡¨£Õ+ñ,ð,ð ØNPÏhÉhËj÷ÙFJÀaÈ�A¤s¨1£v°¢{‘v˜a ™d”|¹¸q»	ÑAóðˆAð
 �8Š8Øˆc‰F�M‰MÔK¸!¿(¹(¿.¹.Ó:JÔKÔKØ�6Š6Ø—6‘6—<‘<“>ˆDÙ˜1Ÿ8š8ÙÙ+1°$«<�A�c‘F˜2 ™<Ñ(ð ˆñ   ›��#‘Øˆùós   Â4,E=)r‹  ri  rŒ  )r  rl  r©  r›  rZ  rf  rk  r«  s    `  @@@@r    r   r   Â%  sD   ü€ õ 0à€L€BˆÙØ‰ˆˆBò÷ð ñ8 �e×&Ñ& sÓ+Ó,Ð,r`   r�   c                 ó>  ‡— t        | «      }|dk  s
|dk  s|dk  ry|dk(  r,d}t        ||t        |«      z
  dz  |z  z  |«      }|dk  ryd}	nZdt        d|z  «      z  }t        ||t        |dz  «      z
  dz  |z  z  |«      }|dk  ryd|z  t        |dz  «      z   }|dz
  |z  dz   }	|�|dk(  r|}n8d
t        |«      cxk  rdk  r$n n!t        t	        j
                  ||z  «      «      }|d
k  r||z  }|dk(  s|	dk(  rd
| d	| fg}
d}d}d|z  }nh|�|	|k  rd
| fg}
n[|d
k  r||	|z
  z  }|| |d	 fg}
nE||k\  s|dk  r||z  }d
| d	| fg}
n-||z  }|||z
  dz
  z  }d
| d	| f||z
  |z
  d	f||z
  | ||z
  d	 fg}
t        |«      }g }|
D ]Û  \  }} | €|j                  |«       Œt        j                  | «      }t        j                  dd| «      }t        d
t        | «      |«      D ]}  }|d|z  d|z  |dz  z    Š|dkD  r|||z   z  n|}|dj                  ˆfd„t        d
d|z  d«      D «       «      z  }|d|t        |«      z
  z  z  }|||||z    z  }|j                  |«       Œ ŒÝ dj                  |«      }t        j                  d
   dk(  r|j!                  d«      }|S )zÃReturn hexdump representation of byte string.

    >>> hexdump(binascii.unhexlify('49492a00080000000e00fe0004000100'))
    '49 49 2a 00 08 00 00 00 0e 00 fe 00 04 00 01 00 II*.............'

    r&   r�   r'  r`   r‹   s   %%0%ix: s   %xrÉ   Nr   s   [^\x20-\x7f]ó   .ó    c              3   ó.   •K  — | ]  }‰||d z    –— Œ y­w)r�   Nr   )r   r   rh  s     €r    r!   zhexdump.<locals>.<genexpr>7&  s   øè ø€ ÒO¨A˜1˜Q  Q¡œ<ÑOùrž  ó   
rë   )r.   rq  ÚabsrØ   rS  Úfloorrg  r6   ÚbinasciiÚhexlifyr  Úsubrn  r  rž   Úversion_inforŽ  )r  ró  rø  Úsnipatro  ÚellipsisrG   ÚaddrÚbytesperlineÚnlinesr  r¥  ÚendÚend1Úend2rX   ÚhexstrÚstrstrr   r@  rh  s                       @r    Úhexdumpr‚  ÷%  sX  ø€ ô ˆw‹<€DØˆa‚x�5˜1’9 ¨¢
ØØ�‚{ØˆÜ˜6 u¬s°4«yÑ'8¸QÑ&>À6Ñ%IÑJÈDÓQˆØ˜!ÒØØ‰àœS ¨¡Ó.Ñ.ˆÜ˜6 u¬s°4¸!±8«}Ñ'<ÀÑ&BÀvÑ%MÑNÐPTÓUˆØ˜!ÒØØ�LÑ ¤3 t¨a¡x£=Ñ0ˆØ˜‘(˜|Ñ+¨aÑ/ˆà€~˜ 1šØ‰Ø	
ŒS�‹[Ô	˜1Õ	Ü”T—Z‘Z ¨¡Ó0Ó1ˆØ�‚zØ�&Ñˆà�‚{�f ’kØ�g˜m˜|Ð,Ð-Ð.ˆØˆØˆØ�LÑ ‰Ø	ˆ˜6 VÒ+Ø�g�,�‰Ø	�1ŠØ ¨¡Ñ0ˆØ˜' % &˜/Ð*Ð+‰Ø	�6Ò	˜V ašZØ˜VÑ#ˆØ�g˜d˜s�mÐ$Ð%‰à˜fÑ$ˆØ˜v¨™°Ñ2Ñ3ˆà�˜˜�ÐØ�D‰[˜4Ñ Ð&Ø�D‰[˜' $¨¡+ -Ð0Ð1ð
ˆô ˜Ó"€HØ€FØ ò ‰ˆˆwØˆ?Ø�M‰M˜(Ô#ØÜ×!Ñ! 'Ó*ˆÜ—‘Ð(¨$°Ó8ˆÜ�qœ#˜g›,¨Ó5ò 	ˆAØ�q˜1‘u˜q 1™u |°aÑ'7Ñ7Ð8ˆAØ(.°ª
�˜˜U™Ò#¸ˆAØ�—‘ÓO´°q¸!¸lÑ:JÈAÓ1NÔOÓOÑOˆAØ�˜¤ Q£™Ñ(Ñ(ˆAØ�˜˜A Ñ,Ð-Ñ-ˆAØ�M‰M˜!Õñ	ðð �Z‰Z˜Ó€FÜ
×Ñ˜Ñ˜aÒØ—‘˜wÓ'ˆØ€Mr`   c                 óZ  ‡— | j                  «       } t        | «      dk  ryt        j                  d   dk(  r	 | j	                  «       S | j                  «       rydŠt        ˆfd„| D «       «      S # t
        $ r Y nw xY w	 | j                  d«      j	                  «       S # t
        $ r Y yw xY w)	z€Return if all characters in string are printable.

    >>> isprintable('abc')
    True
    >>> isprintable(b'')
    False

    r&   Tr   rÉ   rÃ  zd0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 	
c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r   )r   r1  Ú	printables     €r    r!   zisprintable.<locals>.<genexpr>]&  s   øè ø€ Ò2 a�1˜	”>Ñ2ùr"   N)	r¯  r.   rž   rw  Úisprintabler?   rŽ  Úisalnumr˜  )rä  r…  s    @r    r†  r†  A&  sµ   ø€ ð �\‰\‹^€FÜ
ˆ6ƒ{�Q‚ØÜ
×Ñ˜Ñ˜aÒð	Ø×%Ñ%Ó'Ð'ð �>‰>ÔØðFð 	ô Ó2¨6Ô2Ó2Ð2øô ò 	Ùð	úð	Ø—=‘= Ó)×5Ñ5Ó7Ð7øÜò 	Ùð	ús#   ¸A/ Á/	A;Á:A;Á?B Â	B*Â)B*c                 ó–   — dD ]  \  }}| j                  ||«      } Œ |rdD ]  \  }}| j                  ||«      } Œ | j                  «       S )z)Return string with compressed whitespace.))r’  rì  )r/  rì  )rù  rì  )ú	r  ©rë  r  ))rì  r  )z[ r  rŠ  rŠ  rŠ  )r™  r¯  )rä  Úcompactr{   rg  s       r    Úclean_whitespacerŒ  `&  s]   € ðò &‰ˆˆ1ð —‘  1Ó%‰ð&ñ ØUò 	*‰DˆAˆqØ—^‘^ A qÓ)‰Fð	*à�<‰<‹>Ðr`   c                 ó¾  — 	 ddl m} t        | t        «      s| j	                  d«      } |j                  t        j                  | «      «      } |j                  | dd| j                  j                  ¬«      } t        | «      } | j                  dd	«      j                  d
d	«      S # t        $ r0 t        | t        «      rt        | «      } | j                  dd«      } Y ŒZw xY w)zReturn pretty formatted XML.r   NrÃ  T)Úpretty_printÚxml_declarationÚencodingz><z>
<rë  r  r‰  )Ú
lxml.etreer›  r(   rì   rÄ  rœ  r´  rµ  r  Údocinfor�  rÈ  r?   r™  )r  r›  s     r    Úpformat_xmlr“  p&  s½   € ð(Ý"ä˜#œuÔ%Ø—*‘*˜WÓ%ˆCØ�k‰kœ"Ÿ*™* S›/Ó*ˆØ�n‰nØ˜d°DÀ3Ç;Á;×CWÑCWð ó 
ˆô ˜‹nˆð
 �;‰;�t˜SÓ!×)Ñ)¨$°Ó4Ð4øô	 ò (Ü�cœ5Ô!Ü˜C“.ˆCØ�k‰k˜$ Ó'Šð(ús   ‚A?B# Â#6CÃCc                 óŒ  — |�|dk  rd}|�|dk  rd}t        j                  «       }t        j                  d|¬«       t        | t        «      r–| dd j                  «       dv r|dk(  r	| dd	|z   } nbt        | «      } nVt        | t        «      rFt        | «      rt        | «      } t        | «      } n$t        j                  di |¤Ž t        | ||d¬
«      S | j                  «       } nht        | t         j                  «      r| j                  «       } n=ddl}t        j                   d   dk(  ri nt#        |¬«      } |j$                  | fd|i|¤Ž} t        j                  di |¤Ž |dk(  rt        | d¬«      } | d| S t'        | j)                  «       «      }t+        |«      |kD  r%dj-                  |d|dz   dgz   || dz  d z   «      } | S )zcReturn pretty formatted representation of object as string.

    Whitespace might be altered.

    Nr&   rú  rY  éd   )r@  Ú	linewidthræ   )z<?xmls   <?xmlr‹   )ró  rø  ro  r   r�   )r‹  ró  Trì  ú...r   )r;   Úget_printoptionsÚset_printoptionsr(   r)   r  r“  rì   r†  rÈ  rŒ  r‚  Úrstripr*  Úpprintrž   rw  rÁ  rý  r  r  r.   r  )r  ró  rø  r‹  Únpoptr›  Úargls          r    rý  rý  ƒ&  s¬  € ð €~˜ !šØˆØ€}˜ š	Øˆä×"Ñ"Ó$€EÜ	×Ñ S°EÕ:ä�#”zÔ"Øˆr�ˆ7�=‰=‹?Ð1Ñ1Ø˜Š{Ø˜+˜A ™IÐ&‘ä! #Ó&‘Ü˜œUÔ#Ü˜3ÔÜ “n�Ü& sÓ+‘ä×&Ñ&Ñ/¨Ò/Ü˜s¨%¸ÀqÔIÐIØ�j‰j‹l‰Ü	�CœŸ™Ô	&Ø�j‰j‹l‰ãä×(Ñ(¨Ñ+¨qÒ0‘"´dÀ7Ô6KˆØˆf�n‰n˜SÑ9¨Ð9°Ñ9ˆä	×ÑÑ#˜UÒ#à�‚{Ü˜s¨DÔ1ˆØ�6�Eˆ{Ðä�—‘Ó Ó!€DÜ
ˆ4ƒy�6ÒØ�i‰i˜˜]˜v¨™{Ð+¨u¨gÑ5¸¸f¸WÈ¹\¸^Ð8LÑLÓMˆØ€Jr`   c                 óf  — |€t        | t        «      rd}nd}t        |«      }| j                  «       }g }|D �]F  }|€|j	                  |«       Œt        |«      }||k  r|j	                  | «       Œ:|}	|	�|	dk(  r|}	n8dt        |	«      cxk  rdk  r$n n!t        t        j                  ||	z  «      «      }	|	dk  r|	|z  }	|	dk  rd}	|dk(  s||dz   k  r0|	dk  r|j	                  | | d «       Œ·|j	                  | d| «       ŒÌ|	dk  r|j	                  || ||z
  d z   «       Œì|	|k\  s||dz   k  r|j	                  | d||z
   |z   «       �Œ||z
  |z   }
|	|
dz  z
  }||
z   }|j	                  | d| |z   | |d z   «       �ŒI t        | t        «      rdj                  |«      S d	j                  |«      S )
zcReturn string cut to specified length.

    >>> snipstr('abcdefghijklmnop', 8)
    'abc...op'

    Ns   ...u   â€¦r&   r   r‹   r�   rq  rì  )
r(   rì   r.   r  r6   rr  rØ   rS  rs  r  )rä  ró  rx  ry  rú  r  rX   rØ  Úlinelenr  Úsplitlenr~  r  s                r    rû  rû  ³&  sß  € ð ÐÜ�fœeÔ$Ø‰HàˆHÜ�‹M€Eà×"Ñ"Ó$€Jð €FØó  DˆØˆ<Ø�M‰M˜(Ô#ØÜ�d“)ˆØ�eÒØ�M‰M˜&Ô!ØàˆØˆ=˜E QšJØ‰EØ”�U“Ô˜aÕÜœŸ
™
 7¨U¡?Ó3Ó4ˆEØ�1Š9Ø�WÑˆEØ�qŠyØ�à�AŠ:˜ ¨¡Ò*Ø˜ŠzØ—‘˜f e V W˜oÕ.à—‘˜f V e˜nÕ-Ø�aŠZØ�M‰M˜( V¨E°E©M¨OÐ%<Ñ<Õ=Ø�gÒ ¨°©Ò!2Ø�M‰M˜&  5¨5¡=Ð1°HÑ<Ö=à ‘¨Ñ.ˆHØ˜8 q™=Ñ(ˆDØ˜(‘?ˆDØ�M‰M˜&  $˜-¨(Ñ2°V¸D¸E°]ÑBÖCðA DôD �&œ%Ô Ø�z‰z˜&Ó!Ð!à�y‰y˜Ó Ð r`   c                 ó�   — 	  | |«      S # t         $ r2 	 | |j                  «          cY S # t         $ r t        d|z  «      ‚w xY ww xY w)z±Return enum member from its name or value.

    >>> enumarg(TIFF.PHOTOMETRIC, 2)
    <PHOTOMETRIC.RGB: 2>
    >>> enumarg(TIFF.PHOTOMETRIC, 'RGB')
    <PHOTOMETRIC.RGB: 2>

    zinvalid argument %s)r?   rZ  r,   )r¸  r  s     r    rY  rY  í&  sV   € ð:Ù�C‹yÐøÜò :ð	:Ø˜Ÿ	™	›Ñ$Ò$øÜò 	:ÜÐ2°SÑ8Ó9Ð9ð	:úð:ús   ‚
 Š	A”)¦A©AÁAc                 ó’   — i }|D ]  }|| v sŒ| |   ||<   | |= Œ |j                  «       D ]  \  }}|| v r| |   ||<   | |= Œ|||<   Œ |S )aX  Return dict with keys from keys|keyvals and values from kwargs|keyvals.

    Existing keys are deleted from kwargs.

    >>> kwargs = {'one': 1, 'two': 2, 'four': 4}
    >>> kwargs2 = parse_kwargs(kwargs, 'two', 'three', four=None, five=5)
    >>> kwargs == {'one': 1}
    True
    >>> kwargs2 == {'two': 2, 'four': 4, 'five': 5}
    True

    ©râ  )r0   r  Ú	keyvaluesrX   rC  rk   s         r    r'   r'   ÿ&  sz   € ð €FØò ˆØ�&Š=Ø  ™+ˆF�3‰KØ�s‘ðð  —o‘oÓ'ò  ‰
ˆˆUØ�&‰=Ø  ™+ˆF�3‰KØ�s‘àˆF�3ŠKð ð €Mr`   c                 óH   — |j                  «       D ]  \  }}|| vsŒ|| |<   Œ y)zÂUpdate dict with keys and values if keys do not already exist.

    >>> kwargs = {'one': 1, }
    >>> update_kwargs(kwargs, one=None, two=2)
    >>> kwargs == {'one': 1, 'two': 2}
    True

    Nr£  )r0   r¤  rC  rk   s       r    Úupdate_kwargsr¦  '  s/   € ð  —o‘oÓ'ò  ‰
ˆˆUØ�fÒØˆF�3ŠKñ r`   c                 ó  — ddl }|j                  || ddg«      }d|v rd|j                  «       D ]P  }|j                  «       }|j	                  d«      sŒ%|dd j                  d«      }|D ]	  }||v sŒ  y t        |«      ‚ yy)a2  Validate TIFF file using jhove -m TIFF-hul.

    Raise ValueError if jhove outputs an error message unless the message
    contains one of the strings in 'ignore'.

    JHOVE does not support bigtiff or more than 50 IFDs.

    See `JHOVE TIFF-hul Module <http://jhove.sourceforge.net/tiff-hul.html>`_

    r   Nz-mzTIFF-huls   ErrorMessage: r‹  Úutf8)Ú
subprocessÚcheck_outputr  r¯  r‡  rŽ  r,   )rU   Újhoverj  r©  r   rØ  Úerrorr   s           r    Úvalidate_jhover­  ('  sœ   € ó à
×
!Ñ
! 5¨(°D¸*Ð"EÓ
F€CØ˜CÑØ—N‘NÓ$ò 		ˆDØ—:‘:“<ˆDØ�‰Ð0Õ1Ø˜R˜S˜	×(Ñ(¨Ó0�Øò ,�AØ˜E’zØñ ð,ô % UÓ+Ð+ñ		ð  r`   c                 óò  — |rt         nt        }|€| }n|j                  «       dk(  rd}|r|dz  } |ddd¬«       t        j                  «       }t	        | «      5 }|j
                  s |d|d¬	«       t        d
«      ‚|j                  d   }|j                  }|j                  }|j                  }	t        |«      |	j                  z  }
 |dt        j                  «       |z
  z  «        |d|›d|›d|	›dt        |
«      ›�d¬	«       |j                  j                  d«      st        d«      ‚ |ddd¬«       t        j                  «       }|d   |d   z  |d   |d   z  f}|r||d   |d   |d   |d   fz  }ddt        |«      z
  z  |z   }t!        j"                  |dd |	¬«      }t!        j"                  |d   |d   |d   |d   f|	¬«      }t%        |j&                  «      }t)        |d   «      D ]Ð  }t)        |d   «      D ]½  }t)        |d   «      D ]ª  }t)        |d   «      D ]  }t+        |«      j-                  «       ||<   Œ  t)        |d   «      D ]h  }t)        |d   «      D ]U  }|d||d   z  |dz   |d   z  …||d   z  |dz   |d   z  …f   |dd |r|j/                  ||||||fz  «        |ddd¬«       ŒW Œj Œ¬ Œ¿ ŒÒ  |d t        j                  «       |z
  z  «       ddd«       y# 1 sw Y   yxY w)!zæConvert [MP]TZCYX LSM file to series of BIN files.

    One BIN file containing 'ZCYX' data are created for each position, time,
    and tile. The position, time, and tile indices are encoded at the end
    of the filenames.

    NÚnonez*_(z%ic%iy%ix%i)_m%%ip%%it%%03iy%%ix%%i.binz
Opening LSM file... r'  T)r}  rr  rì  )rr  znot a LSM filer   z%.3f szImage
  axes:  z

  shape: z

  dtype: z

  size:  ÚTZCYXznot a *TZCYX LSM filez#Copying image from LSM to BIN filesrÁ   rÀ   rÞ   rß   r&   rá   r¿  rÉ   rÕ   r�   .r)  z %.3f s)Úprint_rC  r  r±  r	   rì  r,   rR   rD   r  r<   r   r=   r   rp  r.   r;   rl  ÚiterrO   rn  rÕ  r/   r.  )ÚlsmfileÚbinfilerv  ÚverboseÚ
start_timer|   rR   rD   r  r<   rG   r™  rC   r   rO   rÿ  rÖ  rG  rg  rf  rî   s                        r    Úlsm2binr·  C'  s  € ñ  �f¤X€Gà€Ø‰Ø	�‰‹˜FÒ	"ØˆÙØÐ?Ñ?ˆáÐ$¨"°DÕ9Ü—‘“€Jä	�'Ó	ð .8˜cØ�zŠzÙ�D˜# TÕ*ÜÐ-Ó.Ð.Ø—‘˜A‘ˆØ—‘ˆØ�{‰{ˆØ—‘ˆÜ�u‹~ §¡Ñ.ˆá�œDŸI™I›K¨*Ñ4Ñ5Ô6ââ’UšE¤;¨tÔ#4ð6àõ	
ð
 �{‰{×#Ñ# GÔ,ÜÐ4Ó5Ð5áÐ5¸2ÀTÕJÜ—Y‘Y“[ˆ
Ø�b‘	˜T "™XÑ% u¨R¡y°D¸±HÑ'<Ð<ˆÙØ  r¡¨E°"©I°t¸A±wÀÀQÁÐ HÑHˆGØ˜œC ›J™Ñ'¨%Ñ/ˆä�{‰{˜5  ˜9¨EÔ2ˆÜ�k‰k˜5 ™9 e¨B¡i°°a±¸$¸q¹'ÐBÈ%ÔPˆä�V—\‘\Ó"ˆÜ�u˜Q‘x“ò 	=ˆAÜ˜5 ™8“_ò =�Ü˜u Q™x›ò =�AÜ" 5¨¡8›_ò 8˜Ü"& u£+×"5Ñ"5Ó"7˜˜Qšð8ä" 5¨¡8›_ò 	=˜Ü!& u¨Q¡x£ò =˜AØ%)Ø #Ø ! D¨¡G¡¨q°1©u¸¸Q¹Ñ.?Ð ?Ø ! D¨¡G¡¨q°1©u¸¸Q¹Ñ.?Ð ?ð!Añ&˜C¡˜Fñ
  'Ø #§
¡
¨7°a¸¸A¸qÀ!°_Ñ+DÔ EÙ# C¨R°tÖ<ñ=ñ	=ñ=ñ=ð	=ñ 	�	œTŸY™Y›[¨:Ñ5Ñ6Ô7÷].8÷ .8ñ .8ús   ÁJ
K-Ë-K6c                 óÔ  ‡ ‡	‡‡‡‡‡‡— |dv }‰ j                   j                  dk(  rd}|r5‰ j                  d   dv s$‰ j                  dkD  r‰ j                  d   dv sd}d}‰ j	                  «       Š |d	v rt        ‰ d«      Š nt        ‰ d
«      Š ‰ j                  Š‰dk  rt        d«      ‚‰dk(  rdŠd}næ|r@‰ j                  d   dv r/t        j                  ‰ dd«      Š t        j                  ‰ dd«      Š n†|s„‰ j                  d   ‰ j                  d   dz  k  rb‰ j                  d   ‰ j                  d   dz  k  r@‰ j                  d   dk  r.t        j                  ‰ dd«      Š t        j                  ‰ dd«      Š |xr ‰ j                  d   dv }‰|rd
ndz  Š|r‰ dd|…d|…d|…f   Š n‰ dd|…d|…f   Š |dk(  r/|r-‰ j                  «       }|dkD  r‰ dz	  Š ‰ j                  d«      Š �n”‰ j                   j                  dv r¼|r‰ j                   j                  dk  r|€B	 t        t        j                  t        j                  ‰ j                  «       d«      «      «      }n)t#        |t$        «      s‰ j                   j                  dz  }d|z  }|rí|dk  r	‰ d|z
  z  Š n|dkD  r‰ |dz
  z	  Š ‰ j                  d«      Š nÀ‰ j                   j                  dk(  rM‰ j                  «       }|r•|dkD  r�‰ j                   j&                  dk(  r‰ j                  d«      Š ‰ |z  Š n`‰ |z  Š nZ‰ j                   j                  dk(  rd}n>‰ j                   j                  dk(  r%t        j(                  ‰ «      Š ‰ j                  «       }|sñ|€}|€ë‰ j                   j                  dk(  r[t        j*                  ‰ j                   «      j,                  }t        j,                  ‰ «      }||k(  rt        j,                  ‰ |kD  «      }‰ j                   j                  dk(  r\t        j.                  ‰ j                   «      j,                  }t        j,                  ‰ «      }||k(  rt        j,                  ‰ |kD  «      }nd}t0        j2                  d   }‰	€›|j5                  dddd¬ «       |j7                  |d!d"d#d$¬%«      Š		 ‰	j8                  j:                  j<                  j?                  |«       |rtA        |jC                  «       «      nd}|jE                  d&‰dz   z  d'|d&z  z
  d(d)d*d+¬,«       |jG                  |
«      }
|r 	 tI        |d-«      }|j?                  |d.¬/«       |€H‰ j                   j&                  d0k(  rd1}n"‰ j                   j                  d2v s|dk(  rd3}nd4}|d5k(  r|d6z  } |jL                  t        jN                  ‰ d7‰z     j	                  «       «      f||||d8œ|¤ŽŠ|s|jQ                  «        ˆˆˆ ˆfd9„}d:„ }||
_)        |‰_*        |‰_+        ‰�rtY        d7‰z  «      Šd‰ t[        ‰«         j	                  «       gŠt]        ‰«      D �cg c]V  }|j_                  |ja                  d;d&|dz   z  d<d=g«      d>|z  d‰ j                  |   dz
  dd?d@‰ j                  |   z  ¬A«      ‘ŒX }}|D ]	  }d|_1        Œ |‰ fˆˆ	ˆfdB„	Š‰ ‰fˆˆfdC„	Š‰ ‰fˆˆfdD„	}‰	j8                  je                  dE|«       tg        |«      D ]  \  }}|ji                  |fˆfdF„	«       Œ ‰	|
‰fS # t         $ r ‰ j                   j                  dz  }Y �Œ·w xY w# t         $ r Y �Œpw xY w# tJ        $ r Y �Œ w xY wc c}w )GaÙ  Plot n-dimensional images using matplotlib.pyplot.

    Return figure, subplot and plot axis.
    Requires pyplot already imported C{from matplotlib import pyplot}.

    Parameters
    ----------
    bitspersample : int or None
        Number of bits per channel in integer RGB images.
    photometric : {'MINISWHITE', 'MINISBLACK', 'RGB', or 'PALETTE'}
        The color space of the image data.
    title : str
        Window and subplot title.
    figure : matplotlib.figure.Figure (optional).
        Matplotlib to use for plotting.
    subplot : int
        A matplotlib.pyplot.subplot axis.
    maxdim : int
        maximum image width and length.
    kwargs : optional
        Arguments for matplotlib.pyplot.imshow.

    )rS  rg  FrÀ   rÈ   r�   rß   rR  )r`  rR  NrÉ   znot an imager   rÁ   r‡   ræ   .NrU  ró  rÇ   Úuir&   r!  g      ð?r‰  r1  r   úmatplotlib.pyplotÚfontz
sans-serifÚnormal)ÚfamilyÚweightrG   )gš™™™™™$@g333333@Tz1.0Úw)ÚdpiÚfigsizeÚframeonÚ	facecolorÚ	edgecolorg¸…ëQ¸ž?g\�Âõ(\ï?gš™™™™™¹?gffffffî?gš™™™™™©?g        )ÚbottomÚtopÚleftÚrightÚhspaceÚwspacezWindows-1252rP  )rG   r¿   ÚgrayÚbufÚviridisÚcoolwarmr`  Ú_rr9  )ÚvminÚvmaxrÆ  Úinterpolationc                 óœ   •— t        | dz   «      } t        |dz   «      }	 ‰rd‰d   || f   ‰|| fz  S d‰|| f   || fz  S # t        $ r Y yw xY w)Nç      à?z%s @ %s [%4i, %4i]r&   z%s @ [%4i, %4i]r'  )rØ   r—  )rî   rf  ÚcuraxdatÚcurrentrC   Údimss     €€€€r    Úformat_coordzimshow.<locals>.format_coord=(  sr   ø€ ä��C‘‹LˆÜ��C‘‹Lˆð	ÙØ+¨x¸©{¸1¸a¸4Ñ/@À'È1ÈaÐ.PÑPÐPØ$¨¨Q°¨T©
°A°qÐ'9Ñ9Ð9øÜò 	Ùð	ús   Ÿ? ²? ¿	AÁ
Ac                  ó   — y)Nr'  r   )r½  s    r    r¯  zimshow.<locals>.noneH(  s   € Ør`   g      À?g333333ç?gš™™™™™™?zDimension %iz0.5z
%%.0f [%i])rÃ  Úvalfmtc                 ó  •— |t        | «         j                  «       ‰d<   ‰j                  ‰d   «       t        || «      D ]$  \  }}d|_        |j                  |«       d|_        Œ& ‰j                  j                  «        y )Nr&   FT)r  r  Úset_datar(  ÚeventsonÚset_valÚcanvasÚdraw)rÖ  ÚslidersrC   Úctrlr†  rÕ  Úfigurerè  s        €€€r    Ú	set_imagezimshow.<locals>.set_imagea(  st   ø€ àœu W›~Ñ.×6Ñ6Ó8ˆH�Q‰KØ�N‰N˜8 A™;Ô'Ü" 7¨GÓ4ò %‘��eØ %�”Ø—‘˜UÔ#Ø $�•ð%ð �M‰M×ÑÕ r`   c                 ó¼   •— t        t        | «      «      } |‰d<   | ||   k(  ry | |j                  |   k\  rd} n| dk  r|j                  |   dz
  } | ||<    ‰|«       y )Nr   r&   )rØ   ÚroundrD   )r†  rÍ   rC   rÖ  rÕ  rä  s       €€r    Ú
on_changedzimshow.<locals>.on_changedk(  sj   ø€ äœ˜e›Ó%ˆEØˆH�Q‰KØ˜ ™Ò%ØØ˜Ÿ
™
 4Ñ(Ò(Ø‘Ø˜’ØŸ
™
 4Ñ(¨1Ñ,�Ø!ˆG�D‰MÙ�gÕr`   c                 óÂ  •— | j                   }‰d   }t        |«      dv r
 ‰||«       y |dk(  r ‰||   dz   |«       y |dk(  r ‰||   dz
  |«       y |dk(  r*|t        |j                  «      dz
  k(  rd‰d<   y |dz   ‰d<   y |dk(  r*|dk(  rt        |j                  «      dz
  ‰d<   y |dz
  ‰d<   y |dk(  r ‰|j                  |   dz
  |«       y |d	k(  r
 ‰d|«       y y )
Nr   Ú
0123456789rÈ  r&   rÇ  ÚupÚdownr}  Úhome)rC  r›   r.   rD   )r½  rC   rÖ  rC  rÍ   rÕ  rç  s        €€r    Úon_keypressedzimshow.<locals>.on_keypressedx(  só   ø€ à—)‘)ˆCØ˜A‘;ˆDÜ�3‹x˜<Ñ'Ù˜3 Õ%Ø˜’Ù˜7 4™=¨1Ñ,¨dÕ3Ø˜’Ù˜7 4™=¨1Ñ,¨dÕ3Ø˜’Ø#'¬3¨t¯z©z«?¸QÑ+>Ò#>˜a�˜’ÀDÈ1ÁH�˜’Ø˜’Ø59¸Q²Yœc $§*¡*›o°Ñ1�˜’ÀDÈ1ÁH�˜’Ø˜’Ù˜4Ÿ:™: dÑ+¨aÑ/°Õ6Ø˜’Ù˜1˜dÕ#ð r`   Úkey_press_eventc                 ó   •—  ‰| |«      S r   r   )r  r{   rç  s     €r    rï   zimshow.<locals>.<lambda>�(  s   ø€ ©j¸¸AÓ.>€ r`   )5r<   r^  rD   r�  r  r_  r,   r;   r¯  rü  rZ  r=   rØ   rS  ÚceilÚlogr?   r(   r  rT   ÚabsoluteÚiinforq  Úfinforž   ÚmodulesÚrcrã  rß  ÚmanagerÚwindowÚtitler.   r  Úsubplots_adjustÚsubplotrË  r  r   Ú
atleast_2dÚcolorbarrØ  Úget_cursor_dataÚformat_cursor_datar  r  rn  ÚSliderr  ÚdrawonÚmpl_connectro  rç  )rC   rù  rÐ  rÑ  rÆ  r7  rt  rÒ  rÀ  rã  rû  Úmaxdimr0   rÆ  ÚdatamaxÚdtminÚpyplotrG   rØ  r¯  rÍ   rá  Úsliderrí  râ  rÕ  rÖ  r×  rè  rç  rä  s   `        `               @@@@@@r    r   r   ˆ'  s4  ÿ€ ðL ˜8Ð#€EØ‡z�z‡�˜#ÒØˆÙØ�
‰
�2‰˜&Ñ  T§Y¡Y°¢]°t·z±zÀ"±~ÈÑ7OàˆØ"ˆà�<‰<‹>€DØÐ8Ñ8Ü˜$ Ó"‰ä˜$ Ó"ˆà�9‰9€DØˆa‚xÜ˜Ó(Ð(Ø	�ŠØˆØ‰á�T—Z‘Z ‘^ vÑ-Ü—>‘> $¨¨BÓ/ˆDÜ—>‘> $¨¨BÓ/‰DÙØ�J‰J�r‰N˜TŸZ™Z¨™^¨qÑ0Ò0Ø—
‘
˜2‘ §¡¨B¡°1Ñ!4Ò4Ø—
‘
˜2‘ Ò"ä—>‘> $¨¨BÓ/ˆDÜ—>‘> $¨¨BÓ/ˆDØÒ2˜$Ÿ*™* R™.¨FÐ2ˆØ‘U‘ Ñ!ˆáØ�C˜˜&˜ ' 6 '¨7¨F¨7Ð2Ñ3‰à�C˜˜&˜ ' 6 'Ð)Ñ*ˆà�iÒ¡EØ—(‘(“*ˆØ�SŠ=Ø˜1‘9ˆDØ�{‰{˜3ÓŠØ	�‰�‰˜DÑ	 Ù˜$Ÿ*™*×-Ñ-°Ò2°}Ð7Lð8Ü #¤D§I¡I¬d¯h©h°t·x±x³zÀ1Ó.EÓ$FÓ G‘ô ˜M¬8Ô4à ŸJ™J×/Ñ/°!Ñ3ˆMØ�]Ñ"ˆÙØ˜qÒ Ø  MÑ 1Ñ2‘Ø Ò"Ø °Ñ 1Ñ2�Ø—;‘;˜sÓ#‰DØ	�‰�‰˜CÒ	Ø—(‘(“*ˆÙ�W˜s’]Ø�z‰z�‰ #Ò%Ø—{‘{ 3Ó'�Ø˜‘‘à˜g‘~‘Ø	�‰�‰˜CÒ	Ø‰Ø	�‰�‰˜CÒ	Ü�~‰~˜dÓ#ˆØ—(‘(“*ˆáØˆ<ØˆDØˆ<Ø�z‰z�‰ #Ò%ÜŸ™ D§J¡JÓ/×3Ñ3�Ü—y‘y “�Ø˜5’=Ü Ÿ9™9 T¨E¡\Ó2�DØ�z‰z�‰ #Ò%ÜŸ™ D§J¡JÓ/×3Ñ3�Ü—y‘y “�Ø˜5’=Ü Ÿ9™9 T¨E¡\Ó2‘Dà�ä�[‰[Ð,Ñ-€Fà€~Ø�	‰	�& °hÀQˆ	ÔGØ—‘Ø˜[°$À%ÐSVð ó 
ˆð	Ø�M‰M×!Ñ!×(Ñ(×.Ñ.¨uÔ5ñ +0Œs�5×#Ñ#Ó%Ô&°QˆØ×ÑØ˜4 !™8Ñ$Ø�t˜d‘{Ñ"ØØØØð 	ô 	
ð �n‰n˜WÓ%€Gáð	Ü˜E >Ó2ˆEð 	�‰�U ˆÔ$à€|Ø�:‰:�?‰?˜cÒ!Ø‰DØ�Z‰Z�_‰_ Ñ%¨°ªØ‰DàˆDØ˜,Ò&Ø�D‰LˆDàˆF�M‰MÜ×Ñ˜˜d T™kÑ*×2Ñ2Ó4Ó5ðàØØØ#ñð ñ€Eñ Ø�‰Ô÷	òð (€GÔØ €EÔØ#€EÔâÜ�t˜d‘{Ó#ˆØ�tœE '›NÑ+×3Ñ3Ó5Ð6ˆô ˜d›ö
ð ð �M‰MØ—‘˜U D¨D°1©HÑ$5°u¸eÐDÓEØ Ñ%ØØ—
‘
˜4Ñ  1Ñ$ØØØ# d§j¡j°Ñ&6Ñ6ð õ ð
ˆð 
ð ò 	"ˆFØ!ˆF�Mð	"ð (/°T÷ 	!ð *.°wö 	ð '+°Gö 	$ð& 	�‰×!Ñ!Ð"3°]ÔCÜ# GÓ,ò 	@‰JˆD�$Ø�O‰O¨Ô>Õ?ð	@ð �7˜EÐ!Ð!øôa ò 8Ø $§
¡
× 3Ñ 3°aÑ 7“ð8ûôh ò 	Úð	ûô  ò 	Úð	üò^
s>   È A \ Ò2/] Ô5] ÙA]%Ü"]Ý]Ý	]Ý]Ý	]"Ý!]"c                  óJ   — t         j                  d   } | j                  «        y)z)Block the GUI. For use as skimage plugin.rº  N)rž   rõ  Úshow©r  s    r    Ú	_app_showr  ’(  s   € ä�[‰[Ð,Ñ-€FØ
‡K�K…Mr`   c                  óÜ   — 	 ddl m} ddl} |«       }|j                  «        |j                  «         |j                  di | ¤Ž}|j                  «        |S # t        $ r ddlm}m} Y Œ^w xY w)z4Return file name(s) from Tkinter's file open dialog.r   )ÚTkN)r  Ú
filedialogr   )
ÚTkinterr  ÚtkFileDialogr„  Útkinterr  ÚwithdrawrL   ÚaskopenfilenameÚdestroy)r0   r  r  r�  Ú	filenamess        r    r  r  ˜(  sc   € ð+ÝÛ)ñ ‹4€DØ‡M�M„OØ‡K�K„MØ*�
×*Ñ*Ñ4¨VÑ4€IØ‡L�L„NØÐøô ò +ß*Ñ*ð+ús   ‚
A ÁA+Á*A+c                 ó@  ‡— t        t        j                  dd «      dk  r(t        d«       t        dt        j                  z  «       y| €t        j                  } ddl}|j                  ddd	t        z  ¬
«      }|j                  } |dddddd¬«        |dddddd¬«        |ddddd¬«        |ddddd¬«        |d d!d"d#d$¬%«        |d&d'dd(d)¬«        |d*d+ddd,¬«        |d-d.ddd/¬«        |d0d1ddd2¬«        |d3d4ddd5¬«        |d6d7d8dd9¬:«        |d;d<d=d¬>«       |j                  «       \  }Šd?j                  ‰«      Š|j                  r!ddl}|j                  |j                  ¬@«       y‰s.t        dAt        j                   ¬B«      Š‰s|j#                  dC«       t%        ˆfdD„dED «       «      r(t'        j&                  ‰«      Š‰st        dF«       y‰d   Š|j(                  st        dGd?¬H«       t+        j*                  «       }	 t-        ‰|j.                   ¬I«      }|j(                  s&t        dKt+        j*                  «       |z
  dLz  z  «       j6                  rdM|_        g }	|j:                  dkD  �r||j(                  st        dNd?¬H«       dO„ }
t+        j*                  «       }	 |j<                  dk\  r.|j?                  |j<                  ¬P«      ||j<                     dfg}	nÜ|j@                  dk\  r_|j?                  |j@                  ¬Q«       |
|j@                  |j@                     jB                  «      |j@                  |j@                     fg}	nng }	tE        |j@                  d|j:                   «      D ]G  \  }}	 |	jG                  |j?                  |¬Q«       |
|jB                  «      |j@                  |   f«       ŒI |j(                  s&t        dKt+        j*                  «       |z
  dLz  z  «       |j(                  sGt        «        t        t,        jM                  |tO        |jP                  «      ¬T«      «       t        «        |jS                  «        |	�r¤|j:                  dkD  �r“	 ddl*}|jW                  dU«       ddVl*m,} |	D �]`  \  }}}|€Œ|jZ                  |j\                  }}dW|j^                  v r<	 ta        jb                  ||t        |j^                  dW   jd                  «      kD     «      }|jf                  r=	 |jh                  dX   }|jh                  dY   }||k  r|jZ                  |j\                  }}	 |r&tm        |«      ›dJtm        |«      ›dJtm        |«      ›�}ntm        |«      ›dZtm        |«      ›�}d[}|jn                  d\vr)t        jq                  |jn                  «      jr                  }tu        |||||jv                  ||jx                  |jz                  ¬]«       �Œc |j}                  «        yyy# t0        $ r9}|j2                  r‚ t        dJ|«       t        j4                  d«       Y d}~�Œd}~ww xY w# tH        $ rN}|	jG                  d |
|jJ                  «      df«       |j2                  r‚ t        dR||fz  dS¬H«       Y d}~�Œd}~ww xY w# t0        $ r#}|j2                  r‚ t        |«       Y d}~�ŒÑd}~ww xY w# tH        $ r Y �Œäw xY w# tj        $ r Y �Œ«w xY w# t~        $ r"}t�        j‚                  d^|z  «       Y d}~yd}~ww xY w)_z!Command line usage main function.r   rÉ   gš™™™™™@z2This script requires Python version 2.7 or better.zThis is Python version %sNzusage: %prog [options] pathz!Display image data in TIFF files.z	%%prog %s)Úusager{  rc  z-pz--pagerV   rØ   rÀ   zdisplay single page)Údestrš  ÚdefaultÚhelpz-sz--seriesrR   z%display series of pages of same shapez--nomultifileÚnomultifileÚ
store_trueFz*do not read OME series from multiple files)r  Úactionr  r  z	--noplotsÚnoplotsr‡   zmaximum number of plotsz
--interpolÚinterpolÚINTERPOLÚbilinearzimage interpolation method)r  Úmetavarr  r  z--dpirÀ  é`   zplot resolutionz--vminrÐ  zminimum value for colormappingz--vmaxrÑ  zmaximum value for colormappingz--debugÚdebugzraise exception on failuresz	--doctestÚdoctestzruns the docstring examplesz-vz--detailrò  r�   )r  rš  r  z-qz--quietÚquiet)r  r  r  )ÚoptionflagszSelect a TIFF file)rù  Ú	filetypeszNo file specifiedc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r   )r   r   r–  s     €r    r!   zmain.<locals>.<genexpr>)  s   øè ø€ Ò
#˜ˆ1�Œ9Ñ
#ùr"   r#   zno files match the patternz
Reading file structure...)r}  )r   rì  z%.3f msg     @�@TzReading image data... c                 ó&   — t        d„ | D «       «      S )Nc              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr   r   rÙ   s     r    r!   z(main.<locals>.notnone.<locals>.<genexpr>$)  s   è ø€ Ò6˜a¨©œÑ6ùr  )rÕ  rí   s    r    Únotnonezmain.<locals>.notnone#)  s   € ÜÑ6 1Ô6Ó6Ð6r`   rB  )rR   z
Series %i failed: %s... r'  )rò  ÚTkAggr
  rü  rA  rB  z
 rR  )rÉ   )rù  rÐ  rÑ  r7  rt  rÒ  rÀ  zfailed to import matplotlib.
%s)Br’  rž   rc  ÚprintÚargvÚoptparseÚOptionParserÚ__version__Ú
add_optionÚ
parse_argsr  r%  ÚtestmodÚELLIPSISr  rM   r«  r¬  r*   r+   r&  r±  r	   r  r?   r$  Úexitr   Únorgbr  rV   r/   rR   r  ro  r6   r,   rO   rõ  rØ   rò  rË  Ú
matplotlibÚuser  rÐ  rÑ  r  r;   rq  rk   r'  r,  r   r›   rt  rQ  rÚ  r   r7  r  rÀ  r	  r„  rŸ   r    )r/  r0  ÚparserÚoptÚsettingsr%  r¥  r3   rl   r6  r,  r   rû   r9  r  ÚimgrV   rR   rÐ  rÑ  rù  rt  r–  s                         @r    Úmainr?  §(  s�  ø€ äŒS�[‰[˜˜1ÐÓ Ò$ÜÐBÔCÜÐ)¬C¯K©KÑ7Ô8ØØ€|Ü�x‰xˆãà×"Ñ"Ø+Ø7ØœkÑ)ð #ó €Fð
 ×
Ñ
€CÙˆˆh˜V¨%¸ÐBWÕXÙØØØØØØ4õñ ØØØØØ9õñ ØØØØØ&õñ ØØØØØ)õñ ˆ�e %°Ð:KÕLÙØØØØØ-õñ ØØØØØ-õñ ØØØØØ*õñ ØØØØØ*õñ ˆˆj˜x¨e¸QÕ?Ùˆˆi˜g¨lÕ;à×&Ñ&Ó(�N€HˆdØ�8‰8�D‹>€Dà×ÒÛà�‰ G×$4Ñ$4ˆÔ5ØÙÜØ&´$×2FÑ2Fô
ˆñ Ø�L‰LÐ,Ô-ä
Ó
#˜dÔ
#Ô#Ü�y‰y˜‹ˆÙÜÐ.Ô/Øà�A‰wˆà�>Š>ÜÐ+°Õ5Ü�I‰I‹K€EðÜ�t¨8×+?Ñ+?Ð'?Ô@ˆð �>Š>ÜˆiœDŸI™I›K¨%Ñ/°3Ñ6Ñ7Ô8à
‡z‚zØˆŒà€FØ×Ñ˜!ÓØ�~Š~ÜÐ*°Õ4ò	7ô —	‘	“ˆð	Ø�}‰} Ò!ØŸ;™;¨8¯=©=˜;Ó9¸3¸x¿}¹}Ñ;MÈtÐTÐU‘Ø—‘ AÒ%ð Ÿ™¨8¯?©?˜Ó;Ù §
¡
¨8¯?©?Ñ ;× BÑ BÓCØŸ
™
 8§?¡?Ñ3ðð‘ð �Ü% c§j¡jÐ1C°8×3CÑ3CÐ&DÓEò 
Q‘D�A�qð	QØŸ™Ø Ÿ[™[°˜[Ó2±G¸A¿H¹HÓ4EÀsÇzÁzÐRSÁ}ÐUõð
Qð —>’>Ü�i¤D§I¡I£K°%Ñ$7¸3Ñ#>Ñ?Ô@ð �>Š>ÜŒÜŒh×Ñ˜s¬3¨x¯©Ó+?ÐÓ@ÔAÜŒØ‡I�I„Kâ�(×"Ñ" QÓ&ð-	Ûà�N‰N˜7Ô#Ý)ð &,ó $Ñ!��T˜6Ø�;ØØ%Ÿ]™]¨H¯M©M�d�Ø  D§I¡IÑ-ðÜ$Ÿy™yØ ¤e¨D¯I©I°mÑ,D×,JÑ,JÓ&KÑ KÑLó ˜ð
 —:’:ðFØ"×/Ñ/°
Ñ;˜Ø"×/Ñ/°
Ñ;˜ð   4š<Ø)1¯©¸¿¹ $™DÙÜ,/°­H´c¸$µiÄÀVÄÐM‘Eä),¨S­´3°t´9Ð=�EØ*�Ø×#Ñ#¨4Ñ/Ü"&×"2Ñ"2°4×3CÑ3CÓ"D×"IÑ"I�KÜØØØØØ"&×"4Ñ"4Ø +Ø"*×"3Ñ"3Ø Ÿ™÷	ð7$ðJ �K‰K�Mð] '€vøôw ò Ø�>Š>Øä�$˜ŒNÜ�H‰H�Q�KŠKûðûôN &ò QØŸ™ t©W°Q·W±WÓ-=¸tÐ&DÔEØ#Ÿ>š>Ø!ä!Ð">À!ÀQÀÑ"GÈR×PÓPûðQûô ò 	Ø�~Š~Øä�a—’ûð		ûô< &ò Úðûô $ò Úðûô% ò 	BÜ�M‰MÐ<¸qÑ@×AÑAûð	Bús™   ÈX Ê.CZ# ÎAY	Ï4Z# Ñ0[2 Ò?;[Ô["Ø	YØ.YÙYÙ		Z ÙAZÚZ# ÚZ Ú Z# Ú#	[Ú,[
Û
[Û	[Û[Û"	[/Û.[/Û2	\Û;\Ü\c                  ó€   — |j                  dd«      }t        | i |¤Ž |rt        j                  j	                  «        yy)z"Print function with flush support.rr  FN)r
  r.  rž   Ústdoutrr  )rý  r0   rr  s      r    r±  r±  �)  s7   € à—
‘
˜7 EÓ*ˆÜˆtÐ�vÒÙÜ�J‰J×ÑÕð r`   c                 ó   — | S )zReturn string from bytes.r   ©rg  r�  r  s      r    rÈ  rÈ  ˆ)  ó   € àˆr`   c                 ó   — | S )zReturn bytes from string.r   ©rû   r�  s     r    rg  rg  Œ)  rD  r`   c                 ó   — t        | «      S ©zReturn value of byte as int.)r´  ©rg  s    r    r5  r5  �)  s   € ä�1‹vˆr`   c                   ó   — e Zd Zy)r�   Nr»  r   r`   r    r�   r�   ”)  r¼  r`   r�   c                 ó’   — |�| j                  ||«      S 	 | j                  d|«      S # t        $ r | j                  d|«      cY S w xY w)z)Return unicode string from encoded bytes.rÃ  Úcp1252)rŽ  rÊ  rC  s      r    rÈ  rÈ  ž)  sO   € àÐØ—8‘8˜H fÓ-Ð-ð	.Ø—8‘8˜G VÓ,Ð,øÜ!ò 	.Ø—8‘8˜H fÓ-Ò-ð	.ús   –( ¨AÁAc                 ó$   — | j                  |«      S )z!Return bytes from unicode string.rE  rF  s     r    rg  rg  §)  s   € à�x‰x˜Ó!Ð!r`   c                 ó   — | S rH  r   rI  s    r    r5  r5  «)  rD  r`   Ú__main__)NNNl      | )NNNr   zr+)NNr   )NFz1.11aNNNr9  )z<Bry  Tr”  )r³  )ÚCTZYX)r‰   )Nr&   )i   )zw+z.memmap)rü   ))s   truerp  )s   falserq  )i   )TN)éK   rn  rÁ   r�   r—  rI  )rl  rn  T)rl  rÔ  r—  )r«  )zMore than 50 IFDs)N)rY  rY  T)Nr   NNNrS  Nr#  Néo   i €  )NÚstrict)rL  )¢rq   Ú
__future__r   r   rž   rú  r´  r  r+   rS  r~  r±  rÉ  r¸  r¹   rò  rŸ   rt  r  r|  r>  r
  r	  Úconcurrent.futuresr  r;   r2  Ú__docformat__Ú__all__r   r   r   r�  r   r
   r	   rë  rô  rz  rª  r,   rÚ  r  r   r   r  rE  rM  rM   rµ  r¡  r¢  r£  rÅ  rÂ  rÆ  r•  r   rš  r›  r³  r–  r—  r˜  rÖ  r‚  rœ  r…	  rö  r‚	  rƒ	  r„	  r�	  rž  r�  r™  rŸ  rb  r\  r<  rk  rB  r0  re  r\  rf  r*  r‡  rW  r�  r“  rS  rc  r¢  Ú__package__r¬  rå  r”  r   rÐ  rÎ  rà  r÷  rì  r   r_  rš  rü  r$  r  r  râ  r   r#  r   rÉ  r—  rZ  r   rá  rC  r)  r   r   ÚfromordinalrQ  r)  r^  rÍ  r   r‚  r†  rŒ  r“  rý  rû  rY  r'   r¦  r­  r·  r   r  r  r?  rw  rØ   Úlongr  r±  rÈ  rg  r5  rœ   r�   r›   rì   r)   rË  r.  rg   r7  r   r`   r    ú<module>r[     s¤  ðñDG÷R
 0ã 
Û 	Û 	Û 	Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û ã ð
 €Ø%€ð€ò,-+ó`C6óLOCôdˆvô ô4C�ô CôL"@*ˆvô @*ôF&f�ô fôRK1ˆvô K1ô\"AH�ô AHôHGˆfô GôZ	�Jô 	ôJ9�Vô J9ôZh&�6ô h&ôVsC�ô sCôl	�&ô ô/?�Fô /?ôd�ô ð( ôn *ˆ6ó n *ó ðn *óbAfòRò(Jò
Fòò*ò
'òò2òò&.ó
ò0
ò8ò
ò[ò|5ò#òL-ò-ò-ò	òò6-ò`ò8ò&#òLò ò8>òB òMò`:òz ðJ 	ØØØØ	Ø	ó7-ót,ò0
 òDó,?òD*òZò2òBòB%ò
4ð *5¸4Èó %òP&ñR Ð(Ó)ñHó *ðHñ2 Ð#Ó$ñSó %ðSñl Ð$Ó%òFó &ðFóR2ñj Ð)Ó*ñDó +ðDó>ò<AòB òF?ó2'óó0*/óZ.òb#ó4ó$!BòHYóx-òó,óó.,ò"òòò ò$)ð" %-×$5Ñ$5×$AÑ$AÀ&Ó$Ió 	1óQòB
Aòó2-ójGòT3ó>ò 5ó&-ó`7!òt:ò$ò6 óó6B8ðN Ø	
Ø	Ø	ØØØØ
ØØØóG"òTòóTðn ×Ò�AÑ˜!ÒØ�Dˆy€Hòóóòô˜Gô ð �Ià€HØ�e�€JØ€GØ€Fó.ó"òð
 ˆzÒØ€C‡H‚H‰T‹VÕð r`   