§
    £”j¥:  ã                   óž   — d dl m Z  d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ  G d„ d	e	¦  «        Z G d
„ de¦  «        ZdS )é    ©Úcopy)Ú
attrgetter)ÚStrict)ÚMinMax)ÚUniqueSequence)ÚSerialisable)Úrange_boundariesÚrange_to_tupleÚget_column_letterÚquote_sheetnamec                   óø  — e Zd ZdZ edde¬¦  «        Z edde¬¦  «        Z edde¬¦  «        Z edde¬¦  «        Z		 	 d'd„Z
ed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd(d„Zd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ ZeZd„ Zd„ Z d„ Z!d„ Z"e"Z#d„ Z$e$Z%d„ Z&d)d „Z'd)d!„Z(ed"„ ¦   «         Z)ed#„ ¦   «         Z*ed$„ ¦   «         Z+ed%„ ¦   «         Z,ed&„ ¦   «         Z-dS )*Ú	CellRangeaÜ  
    Represents a range in a sheet: title and coordinates.

    This object is used to perform operations on ranges, like:

    - shift, expand or shrink
    - union/intersection with another sheet range,

    We can check whether a range is:

    - equal or not equal to another,
    - disjoint of another,
    - contained in another.

    We can get:

    - the size of a range.
    - the range bounds (vertices)
    - the coordinates,
    - the string representation,

    é   ifG  )ÚminÚmaxÚexpected_typei   Nc                 ó`  — |�0d|v rt          |¦  «        \  }\  }}}}nt          |¦  «        \  }}}}|| _        || _        || _        || _        || _        ||k    r&d}t          |                     ||¬¦  «        ¦  «        ‚||k    r&d}t          |                     ||¬¦  «        ¦  «        ‚d S )Nú!z({max_col} must be greater than {min_col})Úmin_colÚmax_colz({max_row} must be greater than {min_row})Úmin_rowÚmax_row)	r   r
   r   r   r   r   ÚtitleÚ
ValueErrorÚformat)ÚselfÚrange_stringr   r   r   r   r   Úfmts           úl/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/openpyxl/worksheet/cell_range.pyÚ__init__zCellRange.__init__0   sÍ   € àÐ#Ø�lÐ"Ð"Ý>LÈ\Ñ>ZÔ>ZÑ;�Ñ;˜ ¨'°7°7å5EÀlÑ5SÔ5SÑ2�˜ '¨7àˆŒØˆŒØˆŒØˆŒØˆŒ
à�WÒÐØ<ˆCÝ˜SŸZšZ°À˜ZÑIÔIÑJÔJÐJØ�WÒÐØ<ˆCÝ˜SŸZšZ°À˜ZÑIÔIÑJÔJÐJð Ðó    c                 ó6   — | j         | j        | j        | j        fS )z2
        Vertices of the range as a tuple
        ©r   r   r   r   ©r   s    r    ÚboundszCellRange.boundsF   s   € ð
 Œ|˜Tœ\¨4¬<¸¼ÐEÐEr"   c                 óØ   — d}| j         | j        k    r| j        | j        k    rd}|                     t          | j         ¦  «        | j        t          | j        ¦  «        | j        ¬¦  «        S )z9
        Excel-style representation of the range
        z%{min_col}{min_row}:{max_col}{max_row}z{min_col}{min_row}r$   )r   r   r   r   r   r   ©r   r   s     r    ÚcoordzCellRange.coordN   sk   € ð
 6ˆØŒL˜DœLÒ(Ð(Ø” ¤Ò,Ð,Ø&ˆCà�zŠzÝ% d¤lÑ3Ô3Ø”LÝ% d¤lÑ3Ô3Ø”Lð	 ñ 
ô 
ð 	
r"   c              #   ó¢   ‡K  — t          | j        | j        dz   ¦  «        D ]-Šˆfd„t          | j        | j        dz   ¦  «        D ¦   «         V — Œ.dS )z1
        Return cell coordinates as rows
        r   c                 ó   •— g | ]}‰|f‘ŒS © r,   )Ú.0ÚcolÚrows     €r    ú
<listcomp>z"CellRange.rows.<locals>.<listcomp>e   ó   ø€ ÐMÐMÐM #�C˜�:ÐMÐMÐMr"   N)Úranger   r   r   r   )r   r/   s    @r    ÚrowszCellRange.rows_   óm   øè è € õ
 ˜œ t¤|°A¡~Ñ6Ô6ð 	Nð 	NˆCØMÐMÐMÐM­¨t¬|¸T¼\È!¹^Ñ)LÔ)LÐMÑMÔMÐMÐMÐMÐMð	Nð 	Nr"   c              #   ó¢   ‡K  — t          | j        | j        dz   ¦  «        D ]-Šˆfd„t          | j        | j        dz   ¦  «        D ¦   «         V — Œ.dS )z4
        Return cell coordinates as columns
        r   c                 ó   •— g | ]}|‰f‘ŒS r,   r,   )r-   r/   r.   s     €r    r0   z"CellRange.cols.<locals>.<listcomp>n   r1   r"   N)r2   r   r   r   r   )r   r.   s    @r    ÚcolszCellRange.colsh   r4   r"   c                 ó’   — ddl m}  |t          | j        | j        dz   ¦  «        t          | j        | j        dz   ¦  «        ¦  «        S )Nr   )Úproductr   )Ú	itertoolsr9   r2   r   r   r   r   )r   r9   s     r    ÚcellszCellRange.cellsq   sN   € à%Ð%Ð%Ð%Ð%Ð%Øˆw•u˜Tœ\¨4¬<¸©>Ñ:Ô:½EÀ$Ä,ÐPTÔP\Ð]^ÑP^Ñ<_Ô<_Ñ`Ô`Ð`r"   c                 óÒ   — t          |t          ¦  «        s)t          t          t	          |¦  «        ¦  «        ¦  «        ‚|j        r| j        |j        k    rt          d¦  «        ‚dS dS )z²
        Check whether comparisons between ranges are possible.
        Cannot compare ranges from different worksheets
        Skip if the range passed in has no title.
        z1Cannot work with ranges from different worksheetsN)Ú
isinstancer   Ú	TypeErrorÚreprÚtyper   r   ©r   Úothers     r    Ú_check_titlezCellRange._check_titlew   sl   € õ ˜%¥Ñ+Ô+ð 	/Ý�D¥ e¡¤Ñ-Ô-Ñ.Ô.Ð.àŒ;ð 	R˜4œ:¨¬Ò4Ð4ÝÐPÑQÔQÐQð	Rð 	RÐ4Ð4r"   c                 óp   — d}| j         rd}|                     | j        j        | j         | j        ¬¦  «        S )Nz<{cls} {coord}>z<{cls} {title!r}!{coord}>)Úclsr   r)   )r   r   Ú	__class__Ú__name__r)   r(   s     r    Ú__repr__zCellRange.__repr__„   s7   € Ø ˆØŒ:ð 	/Ø.ˆCØ�zŠz˜dœnÔ5¸T¼ZÈtÌzˆzÑZÔZÐZr"   c                 óP   — t          | j        | j        | j        | j        f¦  «        S ©N)Úhashr   r   r   r   r%   s    r    Ú__hash__zCellRange.__hash__‹   s!   € Ý�T”\ 4¤<°´¸t¼|ÐLÑMÔMÐMr"   c                 ór   — d}| j         }|rd}t          |¦  «        }|                     || j        ¬¦  «        S )Nz{coord}z{title}!{coord})r   r)   )r   r   r   r)   )r   r   r   s      r    Ú__str__zCellRange.__str__�   s@   € ØˆØ”
ˆØð 	+Ø$ˆCÝ# EÑ*Ô*ˆEØ�zŠz ¨T¬ZˆzÑ8Ô8Ð8r"   c                 óh   — |                       | j        | j        | j        | j        | j        ¬¦  «        S )N©r   r   r   r   r   )rF   r   r   r   r   r   r%   s    r    Ú__copy__zCellRange.__copy__˜   s3   € Ø�~Š~ d¤l¸D¼LØ&*¤l¸D¼LØ$(¤Jð ñ 0ô 0ð 	0r"   r   c                 ó  — | j         |z   dk    s| j        |z   dk    r#t          d                     ||¦  «        ¦  «        ‚| xj         |z  c_         | xj        |z  c_        | xj        |z  c_        | xj        |z  c_        dS )a{  
        Shift the focus of the range according to the shift values (*col_shift*, *row_shift*).

        :type col_shift: int
        :param col_shift: number of columns to be moved by, can be negative
        :type row_shift: int
        :param row_shift: number of rows to be moved by, can be negative
        :raise: :class:`ValueError` if any row or column index < 1
        r   z1Invalid shift value: col_shift={0}, row_shift={1}N)r   r   r   r   r   r   )r   Ú	col_shiftÚ	row_shifts      r    ÚshiftzCellRange.shiftž   s�   € ð ŒL˜9Ñ$¨Ò)Ð)ØŒ|˜iÑ'¨1Ò,Ð,ÝÐP×WÒWÐXaÐclÑmÔmÑnÔnÐnØˆŒ˜	Ñ!ˆŒØˆŒ˜	Ñ!ˆŒØˆŒ˜	Ñ!ˆŒØˆŒ˜	Ñ!ˆŒˆˆr"   c                 óÒ   — 	 |                       |¦  «         n# t          $ r Y dS w xY w|j        | j        k    p/| j        |j        k    p|j        | j        k    p| j        |j        k    S )zÏ
        Test whether the ranges are not equal.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range
        :return: ``True`` if *range* != *other*.
        T)rC   r   r   r   r   r   rA   s     r    Ú__ne__zCellRange.__ne__²   sˆ   € ð	Ø×Ò˜eÑ$Ô$Ð$Ð$øÝð 	ð 	ð 	Ø�4�4ð	øøøð ŒM˜Tœ\Ò)ð -ØŒ|˜uœ}Ò,ð-àŒ} ¤Ò,ð-ð Œ|˜uœ}Ò,ð		
s   ‚ ˜
&¥&c                 ó.   — |                       |¦  «         S )zË
        Test whether the ranges are equal.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range
        :return: ``True`` if *range* == *other*.
        )rW   rA   s     r    Ú__eq__zCellRange.__eq__Ç   s   € ð —;’;˜uÑ%Ô%Ð%Ð%r"   c                 óV   — |                       |¦  «         |                     | ¦  «        S )zâ
        Test whether every cell in this range is also in *other*.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range
        :return: ``True`` if *range* <= *other*.
        ©rC   Ú_CellRange__supersetrA   s     r    ÚissubsetzCellRange.issubsetÒ   s,   € ð 	×Ò˜%Ñ Ô Ð à×Ò Ñ%Ô%Ð%r"   c                 óV   — |                       |¦  «        o|                      |¦  «        S )zé
        Test whether *other* contains every cell of this range, and more.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range
        :return: ``True`` if *range* < *other*.
        )Ú__le__rW   rA   s     r    Ú__lt__zCellRange.__lt__á   ó'   € ð �{Š{˜5Ñ!Ô!Ð8 d§k¢k°%Ñ&8Ô&8Ð8r"   c                 ó®   — | j         |j         cxk    o|j        cxk    o
| j        k    nc o*| j        |j        cxk    o|j        cxk    o
| j        k    nc S rJ   )r   r   r   r   rA   s     r    Ú
__supersetzCellRange.__supersetì   sw   € àŒ\˜Uœ]ÐKÐKÒKÐK¨e¬mÐKÐKÒKÐK¸t¼|ÒKÐKÐKÐKð MàŒ\˜Uœ]ÐKÐKÒKÐK¨e¬mÐKÐKÒKÐK¸t¼|ÒKÐKÐKÐKð	
r"   c                 óV   — |                       |¦  «         |                      |¦  «        S )zõ
        Test whether every cell in *other* is in this range.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range
        :return: ``True`` if *range* >= *other* (or *other* in *range*).
        r[   rA   s     r    Ú
issupersetzCellRange.issupersetô   s*   € ð 	×Ò˜%Ñ Ô Ð à�Š˜uÑ%Ô%Ð%r"   c                 óV   — |                       |¦  «        }|                      |¦  «        S )zO
        Check whether the range contains a particular cell coordinate
        )rF   r\   ©r   r)   Úcrs      r    Ú__contains__zCellRange.__contains__  s'   € ð �^Š^˜EÑ"Ô"ˆØ�Š˜rÑ"Ô"Ð"r"   c                 óV   — |                       |¦  «        o|                      |¦  «        S )zé
        Test whether this range contains every cell in *other*, and more.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range
        :return: ``True`` if *range* > *other*.
        )Ú__ge__rW   rA   s     r    Ú__gt__zCellRange.__gt__  ra   r"   c                 ó´   — |                       |¦  «         | j        |j        k    r|| }} | j        |j        k     p| j        |j        k     p|j        | j        k     S )aV  
        Return ``True`` if this range has no cell in common with *other*.
        Ranges are disjoint if and only if their intersection is the empty range.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range.
        :return: ``True`` if the range has no cells in common with other.
        )rC   r&   r   r   r   r   rA   s     r    Ú
isdisjointzCellRange.isdisjoint  se   € ð 	×Ò˜%Ñ Ô Ð ð Œ;˜œÒ%Ð%Ø �%ˆDà”˜uœ}Ò,ð 0Ø”< %¤-Ò/ð0à”= 4¤<Ò/ð	1r"   c                 óh  — |                       |¦  «        r#t          d                     | |¦  «        ¦  «        ‚t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          ||||¬¦  «        S )aN  
        Return a new range with cells common to this range and *other*

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range.
        :return: the intersecting sheet range.
        :raise: :class:`ValueError` if the *other* range doesn't intersect
            with this range.
        zRange {0} doesn't intersect {0}r$   )
rn   r   r   r   r   r   r   r   r   r   ©r   rB   r   r   r   r   s         r    ÚintersectionzCellRange.intersection*  s¤   € ð �?Š?˜5Ñ!Ô!ð 	TÝÐ>×EÒEÀdÈEÑRÔRÑSÔSÐSå�d”l E¤MÑ2Ô2ˆÝ�d”l E¤MÑ2Ô2ˆÝ�d”l E¤MÑ2Ô2ˆÝ�d”l E¤MÑ2Ô2ˆå °'À7Ø!(ð*ñ *ô *ð 	*r"   c                 ó.  — |                       |¦  «         t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          ||||| j        ¬¦  «        S )a�  
        Return the minimal superset of this range and *other*. This new range
        will contain all cells from this range, *other*, and any additional
        cells required to form a rectangular ``CellRange``.

        :type other: openpyxl.worksheet.cell_range.CellRange
        :param other: Other sheet range.
        :return: a ``CellRange`` that is a superset of this and *other*.
        rP   )	rC   r   r   r   r   r   r   r   r   rp   s         r    ÚunionzCellRange.unionB  sˆ   € ð 	×Ò˜%Ñ Ô Ð å�d”l E¤MÑ2Ô2ˆÝ�d”l E¤MÑ2Ô2ˆÝ�d”l E¤MÑ2Ô2ˆÝ�d”l E¤MÑ2Ô2ˆÝ °'À7Ø!(°´
ð<ñ <ô <ð 	<r"   c              #   óX   K  — | j         D ]}|dk    rŒ	t          | |¦  «        }||fV — Œ dS )zC
        For use as a dictionary elsewhere in the library.
        r   N)Ú	__attrs__Úgetattr)r   ÚxÚvs      r    Ú__iter__zCellRange.__iter__X  sM   è è € ð ”ð 	ð 	ˆAØ�GŠ|ˆ|ØÝ˜˜aÑ Ô ˆAØ�Q�$ˆJˆJˆJˆJð		ð 	r"   c                 ó†   — | xj         |z  c_         | xj        |z  c_        | xj        |z  c_        | xj        |z  c_        dS )a¦  
        Expand the range by the dimensions provided.

        :type right: int
        :param right: expand range to the right by this number of cells
        :type down: int
        :param down: expand range down by this number of cells
        :type left: int
        :param left: expand range to the left by this number of cells
        :type up: int
        :param up: expand range up by this number of cells
        Nr$   )r   ÚrightÚdownÚleftÚups        r    ÚexpandzCellRange.expandc  sH   € ð 	ˆŒ˜ÑˆŒØˆŒ˜ÑˆŒØˆŒ˜ÑˆŒØˆŒ˜ÑˆŒˆˆr"   c                 ó†   — | xj         |z  c_         | xj        |z  c_        | xj        |z  c_        | xj        |z  c_        dS )a¿  
        Shrink the range by the dimensions provided.

        :type right: int
        :param right: shrink range from the right by this number of cells
        :type down: int
        :param down: shrink range from the top by this number of cells
        :type left: int
        :param left: shrink range from the left by this number of cells
        :type up: int
        :param up: shrink range from the bottom by this number of cells
        Nr$   )r   r{   Úbottomr}   Útops        r    ÚshrinkzCellRange.shrinkv  sH   € ð 	ˆŒ˜ÑˆŒØˆŒ˜ÑˆŒØˆŒ˜ÑˆŒØˆŒ˜ÑˆŒˆˆr"   c                 óT   — | j         dz   | j        z
  }| j        dz   | j        z
  }||dœS )zC Return the size of the range as a dictionary of rows and columns. r   )Úcolumnsr3   )r   r   r   r   )r   r7   r3   s      r    ÚsizezCellRange.size‰  s8   € ð Œ|˜aÑ $¤,Ñ.ˆØŒ|˜aÑ $¤,Ñ.ˆØ tÐ,Ð,Ð,r"   c                 óV   ‡ — ˆ fd„t          ‰ j        ‰ j        dz   ¦  «        D ¦   «         S )z=A list of cell coordinates that comprise the top of the rangec                 ó"   •— g | ]}‰j         |f‘ŒS r,   )r   ©r-   r.   r   s     €r    r0   z!CellRange.top.<locals>.<listcomp>”  ó    ø€ ÐSÐSÐS¨�”˜sÐ#ÐSÐSÐSr"   r   ©r2   r   r   r%   s   `r    r‚   zCellRange.top‘  ó3   ø€ ð TÐSÐSÐS­u°T´\À4Ä<ÐPQÁ>Ñ/RÔ/RÐSÑSÔSÐSr"   c                 óV   ‡ — ˆ fd„t          ‰ j        ‰ j        dz   ¦  «        D ¦   «         S )z@A list of cell coordinates that comprise the bottom of the rangec                 ó"   •— g | ]}‰j         |f‘ŒS r,   )r   r‰   s     €r    r0   z$CellRange.bottom.<locals>.<listcomp>š  rŠ   r"   r   r‹   r%   s   `r    r�   zCellRange.bottom—  rŒ   r"   c                 óV   ‡ — ˆ fd„t          ‰ j        ‰ j        dz   ¦  «        D ¦   «         S )zCA list of cell coordinates that comprise the left-side of the rangec                 ó"   •— g | ]}|‰j         f‘ŒS r,   )r   ©r-   r/   r   s     €r    r0   z"CellRange.left.<locals>.<listcomp>   ó    ø€ ÐSÐSÐS¨��d”lÐ#ÐSÐSÐSr"   r   ©r2   r   r   r%   s   `r    r}   zCellRange.left�  rŒ   r"   c                 óV   ‡ — ˆ fd„t          ‰ j        ‰ j        dz   ¦  «        D ¦   «         S )zDA list of cell coordinates that comprise the right-side of the rangec                 ó"   •— g | ]}|‰j         f‘ŒS r,   )r   r‘   s     €r    r0   z#CellRange.right.<locals>.<listcomp>¦  r’   r"   r   r“   r%   s   `r    r{   zCellRange.right£  rŒ   r"   )NNNNNN)r   r   )r   r   r   r   ).rG   Ú
__module__Ú__qualname__Ú__doc__r   Úintr   r   r   r   r!   Úpropertyr&   r)   r3   r7   r;   rC   rH   rL   rN   rQ   rU   rW   rY   r]   r_   r`   r\   re   rk   ri   rl   rn   rq   Ú__and__rs   Ú__or__ry   r   rƒ   r†   r‚   r�   r}   r{   r,   r"   r    r   r      s"  € € € € € ðð ð. ˆf˜ °SÐ9Ñ9Ô9€GØˆf˜ °sÐ;Ñ;Ô;€GØˆf˜ °SÐ9Ñ9Ô9€GØˆf˜ °sÐ;Ñ;Ô;€Gð AEØ37ðKð Kð Kð Kð, ðFð Fñ „XðFð ð
ð 
ñ „Xð
ð  ðNð Nñ „XðNð ðNð Nñ „XðNð ðað añ „Xðað

Rð 
Rð 
Rð[ð [ð [ðNð Nð Nð9ð 9ð 9ð0ð 0ð 0ð"ð "ð "ð "ð(
ð 
ð 
ð*&ð &ð &ð
&ð 
&ð 
&ð €Fð9ð 9ð 9ð
ð 
ð 
ð
&ð 
&ð 
&ð €Fð#ð #ð #ð9ð 9ð 9ð1ð 1ð 1ð(*ð *ð *ð* €Gð<ð <ð <ð& €Fðð ð ðð ð ð ð&ð ð ð ð& ð-ð -ñ „Xð-ð ðTð Tñ „XðTð
 ðTð Tñ „XðTð
 ðTð Tñ „XðTð
 ðTð Tñ „XðTð Tð Tr"   r   c                   óŽ   — e Zd Z ee¬¦  «        Z e¦   «         f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S )ÚMultiCellRange)r   c                 ó”   — t          |t          ¦  «        rd„ |                     ¦   «         D ¦   «         }t          |¦  «        | _        d S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   )r   ©r-   Úrs     r    r0   z+MultiCellRange.__init__.<locals>.<listcomp>±  s   € Ð;Ð;Ð; q•i ‘l”lÐ;Ð;Ð;r"   )r=   ÚstrÚsplitÚsetÚranges©r   r¦   s     r    r!   zMultiCellRange.__init__¯  s@   € Ý�f�cÑ"Ô"ð 	<Ø;Ð;¨F¯LªL©N¬NÐ;Ñ;Ô;ˆFÝ˜&‘k”kˆŒˆˆr"   c                 ót   — t          |t          ¦  «        rt          |¦  «        }| j        D ]}||k    r dS ŒdS )NTF)r=   r£   r   r¦   )r   r)   r¢   s      r    ri   zMultiCellRange.__contains__µ  sL   € Ý�e�SÑ!Ô!ð 	%Ý˜eÑ$Ô$ˆEØ”ð 	ð 	ˆAØ˜ŠzˆzØ�t�tð àˆur"   c                 óŠ   — d                      d„ |                      ¦   «         D ¦   «         ¦  «        }d| j        j        › d|› d�S )Nú c                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   ©r£   r¡   s     r    r0   z+MultiCellRange.__repr__.<locals>.<listcomp>¿  s   € Ð9Ð9Ð9 a�3˜q™6œ6Ð9Ð9Ð9r"   ú<z [z]>)ÚjoinÚsortedrF   rG   r§   s     r    rH   zMultiCellRange.__repr__¾  sH   € Ø—’Ð9Ð9¨4¯;ª;©=¬=Ð9Ñ9Ô9Ñ:Ô:ˆØ8�4”>Ô*Ð8Ð8¨fÐ8Ð8Ð8Ð8r"   c                 óh   — d                      d„ |                      ¦   «         D ¦   «         ¦  «        }|S )Nrª   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   r¬   r¡   s     r    r0   z*MultiCellRange.__str__.<locals>.<listcomp>Ä  s   € Ð:Ð:Ð: q�C ™FœFÐ:Ð:Ð:r"   )r®   r¯   r§   s     r    rN   zMultiCellRange.__str__Ã  s/   € Ø—’Ð:Ð:¨D¯KªK©M¬MÐ:Ñ:Ô:Ñ;Ô;ˆØˆr"   c                 ó:   — t          t          | ¦  «        ¦  «        S rJ   )rK   r£   r%   s    r    rL   zMultiCellRange.__hash__È  s   € Ý•C˜‘I”I‰ŒÐr"   c           	      óN   — t          | j        t          dddd¦  «        ¬¦  «        S )z/
        Return a sorted list of items
        r   r   r   r   )Úkey)r¯   r¦   r   r%   s    r    r¯   zMultiCellRange.sortedÌ  s(   € õ �d”k¥z°)¸YÈ	ÐS\Ñ']Ô']Ð^Ñ^Ô^Ð^r"   c                 óÜ   — |}t          |t          ¦  «        rt          |¦  «        }n$t          |t          ¦  «        st          d¦  «        ‚|| vr| j                             |¦  «         dS dS )z4
        Add a cell coordinate or CellRange
        zYou can only add CellRangesN)r=   r£   r   r   r¦   Úaddrg   s      r    r¶   zMultiCellRange.addÓ  su   € ð ˆÝ�e�SÑ!Ô!ð 	<Ý˜5Ñ!Ô!ˆBˆBÝ˜E¥9Ñ-Ô-ð 	<ÝÐ:Ñ;Ô;Ð;Ø�Tˆ>ˆ>ØŒK�OŠO˜BÑÔÐÐÐð ˆ>r"   c                 ó0   — |                       |¦  «         | S rJ   )r¶   ©r   r)   s     r    Ú__iadd__zMultiCellRange.__iadd__à  s   € Ø�Š�‰ŒˆØˆr"   c                 óv   — t          |t          ¦  «        r|                      |¦  «        }| j        |j        k    S rJ   )r=   r£   rF   r¦   rA   s     r    rY   zMultiCellRange.__eq__å  s4   € Ý�u�cÑ"Ô"ð 	*Ø—N’N 5Ñ)Ô)ˆEØŒ{˜eœlÒ*Ð*r"   c                 ó   — | |k     S rJ   r,   rA   s     r    rW   zMultiCellRange.__ne__ë  s   € Ø˜5’=Ð Ð r"   c                 ó*   — t          | j        ¦  «        S rJ   )Úboolr¦   r%   s    r    Ú__bool__zMultiCellRange.__bool__ï  s   € Ý�D”KÑ Ô Ð r"   c                 ó‚   — t          |t          ¦  «        st          |¦  «        }| j                             |¦  «         d S rJ   )r=   r   r¦   Úremover¸   s     r    rÀ   zMultiCellRange.removeó  s=   € Ý˜%¥Ñ+Ô+ð 	%Ý˜eÑ$Ô$ˆEØŒ×Ò˜5Ñ!Ô!Ð!Ð!Ð!r"   c              #   ó&   K  — | j         D ]}|V — Œd S rJ   )r¦   )r   rh   s     r    ry   zMultiCellRange.__iter__ù  s,   è è € Ø”+ð 	ð 	ˆBØˆHˆHˆHˆHð	ð 	r"   c                 óB   — d„ | j         D ¦   «         }t          |¦  «        S )Nc                 ó,   — h | ]}t          |¦  «        ’ŒS r,   r   r¡   s     r    ú	<setcomp>z*MultiCellRange.__copy__.<locals>.<setcomp>ÿ  s   € Ð/Ð/Ð/˜a•$�q‘'”'Ð/Ð/Ð/r"   )r¦   rž   r§   s     r    rQ   zMultiCellRange.__copy__þ  s%   € Ø/Ð/ 4¤;Ð/Ñ/Ô/ˆÝ˜fÑ%Ô%Ð%r"   N)rG   r–   r—   r   r   r¦   r¥   r!   ri   rH   rN   rL   r¯   r¶   r¹   rY   rW   r¾   rÀ   ry   rQ   r,   r"   r    rž   rž   ©  s  € € € € € ð ˆ^¨)Ð4Ñ4Ô4€Fð "˜c™eœeð "ð "ð "ð "ðð ð ð9ð 9ð 9ð
ð ð ð
ð ð ð_ð _ð _ð
 ð 
 ð 
 ðð ð ð
+ð +ð +ð!ð !ð !ð!ð !ð !ð"ð "ð "ðð ð ð
&ð &ð &ð &ð &r"   rž   N)r   Úoperatorr   Úopenpyxl.descriptorsr   r   Úopenpyxl.descriptors.sequencer   Ú!openpyxl.descriptors.serialisabler	   Úopenpyxl.utilsr
   r   r   r   r   rž   r,   r"   r    ú<module>rÊ      s(  ðð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ðTTð TTð TTð TTð TT�ñ TTô TTð TTðnW&ð W&ð W&ð W&ð W&�Vñ W&ô W&ð W&ð W&ð W&r"   