ó
    ‰*£hó  ã                   óÀ   • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
JrJrJrJrJr  S SKJr  S SKJrJrJr  SS jrS	 rS
SKJr   " S S\5      r " S S\5      rg)é    )Údefaultdict©Úchain)Ú
itemgetter)ÚSerialisable)ÚBoolÚNoneSetÚStringÚSequenceÚAliasÚIntegerÚConvertible)Ú
NestedText)Úrows_from_rangeÚcoordinate_to_tupleÚget_column_letterc           	      ó¤  • [        U5      nS U  5       n[        [         5      n[        U[        S5      S9 H  u  pVXF   R	                  U5        M     UR                  5        HZ  u  p`[        U5      nSn[        U 5      S:X  a  SnUR                  U[        U 5      U[        U 5      5      nUR	                  U5        M\     SR                  U5      $ )aK  Collapse a collection of cell co-ordinates down into an optimal
range or collection of ranges.

E.g. Cells A1, A2, A3, B1, B2 and B3 should have the data-validation
object applied, attempt to collapse down to a single range, A1:B3.

Currently only collapsing contiguous vertical ranges (i.e. above
example results in A1:A3 B1:B3).
c              3   ó8   #   • U  H  n[        U5      v •  M     g 7f©N)r   )Ú.0Úcells     Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/openpyxl/worksheet/datavalidation.pyÚ	<genexpr>Ú*collapse_cell_addresses.<locals>.<genexpr>(   s   é € Ð>º°Ô% d×+Ð+ºùó   ‚é   )Úkeyz{0}{1}:{2}{3}z{0}{1}Ú )Úlistr   Úsortedr   ÚappendÚitemsr   ÚlenÚformatÚminÚmaxÚjoin)	ÚcellsÚinput_rangesÚrangesÚ
raw_coordsÚgrouped_coordsÚrowÚcolÚfmtÚrs	            r   Úcollapse_cell_addressesr1      s½   € ô �,Ó€Fñ ?¹Ó>€Jô !¤Ó&€NÜ˜:¬:°a«=Ô9‰ˆØÑ×"Ñ" 3Ö'ñ :ð %×*Ñ*Ö,‰
ˆÜ Ó$ˆØˆÜˆu‹:˜‹?ØˆCØ�J‰J�sœC ›J¨¬S°«ZÓ8ˆØ�‰�aÖñ -ð �8‰8�FÓÐó    c                 ód   • S U R                  5        5       nS U 5       n[        [        U6 5      $ )z‚
Expand cell ranges to a sequence of addresses.
Reverse of collapse_cell_addresses
Eg. converts "A1:A2 B1:B2" to (A1, A2, B1, B2)
c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )r   )r   Úrss     r   r   Ú%expand_cell_ranges.<locals>.<genexpr>B   s   é € Ð?Ò*> BŒO˜B×ÐÒ*>ùr   c              3   ó2   #   • U  H  n[        U6 v •  M     g 7fr   r   )r   r-   s     r   r   r6   C   s   é € Ð)¢D˜SŒU�C�[¢Dùs   ‚)ÚsplitÚsetr   )Úrange_stringÚrowsr(   s      r   Úexpand_cell_rangesr<   ;   s1   € ñ @¨,×*<Ñ*<Ô*>Ó?€DÙ)¡DÓ)€EÜŒu�eˆ}ÓÐr2   r   )ÚMultiCellRangec                   óV  • \ rS rSrSr\" \S9r\" S5      r	\" S5      r
\" SS9r\" S5      r\" SS9r\" SS9r\" SS9r\" S5      r\" SS9r\" SS9r\" SS9r\" SS9r\" S\S	9r\" S\S	9r\" S
S9r\" SS9r\" SS9r\" SS9r\" S5      r                 SS jr!S r"S r#Sr$g)ÚDataValidationéJ   ÚdataValidation©Úexpected_typeÚsqrefT©Ú
allow_noneÚshowDropDownÚ
allowBlank)rF   rC   )ÚwholeÚdecimalr   ÚdateÚtimeÚ
textLengthÚcustom)Úvalues)ÚstopÚwarningÚinformation)Ú	noControlÚoffÚonÚdisabledÚhiraganaÚfullKatakanaÚhalfKatakanaÚ	fullAlphaÚ	halfAlphaÚ
fullHangulÚ
halfHangul)ÚbetweenÚ
notBetweenÚequalÚnotEqualÚlessThanÚlessThanOrEqualÚgreaterThanÚgreaterThanOrEqualÚtypeNc                 óÂ   • X€l         X`l        Xàl        Xðl        X l        X0l        Ub  UnXpl        X@l        XPl        Xl	        X�l
        X l        X°l        XÀl        XÐl        g r   )rD   rG   ÚimeModeÚoperatorÚformula1Úformula2rH   ÚshowErrorMessageÚshowInputMessagerf   ÚpromptTitleÚ
errorStyleÚerrorÚpromptÚ
errorTitle)Úselfrf   rj   rk   rl   rm   rG   rH   rD   rn   ro   rp   rq   rr   rh   ri   Úallow_blanks                    r   Ú__init__ÚDataValidation.__init__j   s^   € ð$ Œ
Ø(ÔØŒØ ŒØ ŒØ ŒØÑ"Ø$ˆJØ$ŒØ 0ÔØ 0ÔØŒ	Ø&ÔØ$ŒØŒ
ØŒØ$�r2   c                 óh   • [        US5      (       a  UR                  nU =R                  U-  sl        g)z0Adds a cell or cell coordinate to this validatorÚ
coordinateN©Úhasattrrx   rD   ©rs   r   s     r   ÚaddÚDataValidation.add�   s&   € ä�4˜×&Ñ&Ø—?‘?ˆDØ�
Š
�dÑŽ
r2   c                 óX   • [        US5      (       a  UR                  nXR                  ;   $ )Nrx   ry   r{   s     r   Ú__contains__ÚDataValidation.__contains__–   s%   € Ü�4˜×&Ñ&Ø—?‘?ˆDØ—z‘zÑ!Ð!r2   )rH   rp   ro   rr   rj   rk   rh   ri   rq   rn   rG   rl   rm   rD   rf   )NNNFFFF© NNNNNNNN)%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Útagnamer   r=   rD   r   r(   r*   r   rG   Úhide_drop_downrm   rl   rH   rt   r
   rr   rp   rn   rq   r   Ústrrj   rk   r	   rf   ro   rh   ri   Úvalidation_typeru   r|   r   Ú__static_attributes__r�   r2   r   r?   r?   J   s(  † à€Gá nÑ5€EÙ�'‹N€EÙ�7‹^€Fá 4Ñ(€LÙ˜>Ó*€NÙ tÑ,ÐÙ tÑ,ÐÙ Ñ&€JÙ˜Ó%€Ká TÑ*€JÙ Ñ%€EÙ dÑ+€KÙ Ñ&€FÙ T¸Ñ=€HÙ T¸Ñ=€Háð 3ñ 4€DáÐ BÑC€JÙð :ñ ;€Gñ ð cñ d€Há˜F“m€Oð ØØØ"'Ø"'Ø#Ø!ØØ!Ø ØØØ ØØØ!ô!"%òJõ"r2   r?   c                   ó˜   ^ • \ rS rSrSr\" SS9r\" SS9r\" SS9r	\
" \S9rSrSr     SS jr\S	 5       rS
 rS rSU 4S jjrSrU =r$ )ÚDataValidationListéœ   ÚdataValidationsTrE   rB   )rA   )ÚdisablePromptsÚxWindowÚyWindowÚcountc                 ó4   • Xl         X l        X0l        XPl        g r   )r�   r�   r‘   rA   )rs   r�   r�   r‘   r’   rA   s         r   ru   ÚDataValidationList.__init__¨   s   € ð -ÔØŒØŒØ,Õr2   c                 ó   • [        U 5      $ r   )r#   ©rs   s    r   r’   ÚDataValidationList.countµ   s   € ä�4‹yÐr2   c                 ó,   • [        U R                  5      $ r   )r#   rA   r–   s    r   Ú__len__ÚDataValidationList.__len__º   s   € Ü�4×&Ñ&Ó'Ð'r2   c                 ó:   • U R                   R                  U5        g r   )rA   r!   )rs   Údvs     r   r!   ÚDataValidationList.append¾   s   € Ø×Ñ×"Ñ" 2Õ&r2   c                 óÐ   >• U R                   nU R                    Vs/ s H!  n[        UR                  5      (       d  M  UPM#     snU l         [        TU ]  U5      nX l         U$ s  snf )z3
Need to skip validations that have no cell ranges
)rA   ÚboolrD   ÚsuperÚto_tree)rs   r†   r*   r0   ÚxmlÚ	__class__s        €r   r¡   ÚDataValidationList.to_treeÂ   sX   ø€ ð ×$Ñ$ˆØ*.×*=Ò*=ÓOÒ*= QÄÀaÇgÁgÇŸqÑ*=ÑOˆÔÜ‰g‰o˜gÓ&ˆØ$ÔØˆ
ùò Ps
   œA#¾A#)rA   r�   r�   r‘   )NNNNr�   r   )r‚   rƒ   r„   r…   r†   r   r�   r   r�   r‘   r   r?   rA   Ú__elements__Ú	__attrs__ru   Úpropertyr’   r™   r!   r¡   rŠ   Ú__classcell__)r£   s   @r   rŒ   rŒ   œ   sx   ø† à€Gá TÑ*€NÙ Ñ&€GÙ Ñ&€GÙ¨NÑ;€Nà&€LØA€Ið !%ØØØØ "ô
-ð ñó ðò(ò'÷õ r2   rŒ   N)r�   )Úcollectionsr   Ú	itertoolsr   ri   r   Ú!openpyxl.descriptors.serialisabler   Úopenpyxl.descriptorsr   r	   r
   r   r   r   r   Úopenpyxl.descriptors.nestedr   Úopenpyxl.utilsr   r   r   r1   r<   Ú
cell_ranger=   r?   rŒ   r�   r2   r   Ú<module>r°      s\   ðõ $Ý Ý å :÷÷ ñ õ 3÷ñ ôòB	õ 'ôO"�\ô O"ôd.˜õ .r2   