ó
    Ñ]j²€  ã                  óf  • S SK Jr  S SKr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	  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  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  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  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   SSK!Jr  SSK"J#r#  SS K$J%r%  SS!K&J'r'  \(       a  SS"K(J)r)  SS#K"J*r*  SS$K"J+r+  \" S%\	S&9r,\'S'   r-\%(       a	  S(S)0r.S*S)0r/O0 r.0 r/\R`                  " SUS+S)0\.D6 " S, S-\\,   5      5       r1 " S. S/\\1\,      5      r2 " S0 S1\ RF                  \,   5      r3 " S2 S3\3\1\,      5      r4 " S4 S5\4\,   5      r5 " S6 S7\3\\1\,         5      r6 " S8 S9\6\,   5      r7 " S: S;\4\8   5      r9 " S< S=\4\8   5      r: " S> S?\4\   5      r; " S@ SA\4\   5      r< " SB SC\4\   5      r= " SD SE\4\   5      r> " SF SG\6\8   5      r? " SH SI\6\8   5      r@ " SJ SK\6\   5      rA " SL SM\6\   5      rB " SN SO\6\   5      rC " SP SQ\6\   5      rDSRrESSrFSVST jrGg)Wé    )ÚannotationsN)Údate)Údatetime)Ú	timedelta)ÚDecimal)ÚAny)Úcast)ÚGeneric)ÚList)ÚOptional)Úoverload)ÚSequence)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )ÚADJACENT_TO)ÚCONTAINED_BY)ÚCONTAINS)ÚNOT_EXTEND_LEFT_OF)ÚNOT_EXTEND_RIGHT_OF)ÚOVERLAP)ÚSTRICTLY_LEFT_OF)ÚSTRICTLY_RIGHT_OFé   )Útypes)Ú	operators)Ú
TypeEngine)Úpy310)ÚLiteral)ÚColumnElement)Ú_TE)ÚTypeEngineMixinÚ_T)Úbound)z()ú[)z(]z[]ÚslotsTÚkw_onlyÚfrozenc                  óÞ  • \ rS rSr% SrSrS\S'    SrS\S'    \(       a+  \	R                  " SS9rS	\S
'   \	R                  " SS9rS\S'   O2\	R                  " S.SS0\D6rS	\S
'   \	R                  " S.SS0\D6rS\S'   \(       d    S/SSS.       S0S jjjrS1S jr\S1S j5       r\S1S j5       r\S1S j5       r\S1S j5       r\S1S j5       r\S1S j5       r\S2S j5       rS3S jrS4S jr S5           S6S jjrS7S jrS8S jrS9S jr\rS8S jr S8S  jr!\!r"S8S! jr#\#r$S8S" jr%S8S# jr&          S:S$ jr'S8S% jr(S;S& jr)S;S' jr*S;S( jr+S;S) jr,S;S* jr-S;S+ jr.S<S, jr/S<S- jr0S.r1g)=ÚRangeé;   a+  Represent a PostgreSQL range.

E.g.::

    r = Range(10, 50, bounds="()")

The calling style is similar to that of psycopg and psycopg2, in part
to allow easier migration from previous SQLAlchemy versions that used
these objects directly.

:param lower: Lower bound value, or None
:param upper: Upper bound value, or None
:param bounds: keyword-only, optional string value that is one of
 ``"()"``, ``"[)"``, ``"(]"``, ``"[]"``.  Defaults to ``"[)"``.
:param empty: keyword-only, optional bool indicating this is an "empty"
 range

.. versionadded:: 2.0

NúOptional[_T]ÚlowerÚupperr(   )ÚdefaultÚ_BoundsTypeÚboundsFÚboolÚemptyr2   )r4   r6   c               óD   • U R                   R                  UUUUS.5        g )N)r0   r1   r4   r6   )Ú__dict__Úupdate)Úselfr0   r1   r4   r6   s        Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/ranges.pyÚ__init__ÚRange.__init__a   s'   € ð �M‰M× Ñ à"Ø"Ø$Ø"ñ	õó    c                ó$   • U R                   (       + $ ©N©r6   ©r:   s    r;   Ú__bool__ÚRange.__bool__s   s   € Ø—:‘:Œ~Ðr>   c                ó   • U R                   $ ©z$A synonym for the 'empty' attribute.rA   rB   s    r;   ÚisemptyÚRange.isemptyv   ó   € ð �z‰zÐr>   c                ó   • U R                   $ rF   rA   rB   s    r;   Úis_emptyÚRange.is_empty|   rI   r>   c                ó&   • U R                   S   S:H  $ )z,Return True if the lower bound is inclusive.r   Ú[©r4   rB   s    r;   Ú	lower_incÚRange.lower_inc‚   ó   € ð �{‰{˜1‰~ Ñ$Ð$r>   c                óN   • U R                   (       + =(       a    U R                  SL $ )zCReturn True if this range is non-empty and lower bound is
infinite.N)r6   r0   rB   s    r;   Ú	lower_infÚRange.lower_infˆ   ó   € ð
 —:‘:Œ~×4 $§*¡*°Ð"4Ð4r>   c                ó&   • U R                   S   S:H  $ )z,Return True if the upper bound is inclusive.r   Ú]rO   rB   s    r;   Ú	upper_incÚRange.upper_inc�   rR   r>   c                óN   • U R                   (       + =(       a    U R                  SL $ )zGReturn True if this range is non-empty and the upper bound is
infinite.N)r6   r1   rB   s    r;   Ú	upper_infÚRange.upper_inf•   rV   r>   c                ó   • [        5       $ r@   )ÚAbstractSingleRangerB   s    r;   Ú__sa_type_engine__ÚRange.__sa_type_engine__œ   s   € ä"Ó$Ð$r>   c                ó
  • U R                   (       a  gU R                  cD  U R                  SL =(       d/    U R                  S   S:X  a  XR                  :  $ XR                  :*  $ U R                  c/  U R                  S   S:X  a  XR                  :„  $ XR                  :¬  $ U R                  S   S:X  a  XR                  :„  OXR                  :¬  =(       a/    U R                  S   S:X  a  XR                  :  $ XR                  :*  $ )z3Return True if this range contains the given value.FNr   Ú)r   Ú()r6   r0   r1   r4   ©r:   Úvalues     r;   Ú_contains_valueÚRange._contains_value    sü   € ð �:�:Øà�:‰:ÑØ—:‘: Ð%÷ à—;‘;˜q‘> SÓ(ð Ÿ
™
Ñ"ðð Ÿj™jÑ(ðð �:‰:Ñð —;‘;˜q‘> SÓ(ð Ÿ
™
Ñ"ðð Ÿj™jÑ(ðð �{‰{˜1‰~ Ó$ð —J‘JÒàŸ*™*Ñ$÷
ð �{‰{˜1‰~ Ó$ð —J‘JÑð	
ð Ÿ*™*Ñ$ð	
r>   c                óŽ  • [        U R                  [        5      (       d  [        U R                  [        5      (       a  g[        U R                  [        5      (       d  [        U R                  [        5      (       a  g[        U R                  [
        5      (       d  [        U R                  [
        5      (       a	  [        SS9$ g)uA   Determine the â€œstepâ€� for this range, if it is a discrete one.r   N)Údays)Ú
isinstancer0   Úintr1   r   r   r   rB   s    r;   Ú_get_discrete_stepÚRange._get_discrete_step¾   s‚   € ô �d—j‘j¤#×&Ñ&¬*°T·Z±ZÄ×*EÑ*EØÜ˜Ÿ
™
¤H×-Ñ-´Ø�J‰Jœ÷2
ñ 2
ð
 Ü˜Ÿ
™
¤D×)Ñ)¬Z¸¿
¹
ÄD×-IÑ-IÜ !Ñ$Ð$àr>   c                ó,  • US;   nUS;   nXs=L a  c  O  OXg:X  a  gU(       a  S$ S$ Uc  U(       a  S$ S$ Uc  U(       a  S$ S$ X$:X  a  X:X  a  gUS;   nUS;   n	U R                  5       n
U
bD  U(       a  U(       d  X-  nSnOU(       a  X-  nSnU(       a  U	(       d  X:-  nSn	OU	(       a  X:-  nSn	X:  a  gX:”  a  gU(       a  gU(       a  U	(       a  gU(       d  U	(       d  Xg:X  a  gU(       a  S$ S$ U(       d  U(       a  S$ S$ U	(       d  U(       a  S$ S$ g)zÜCompare two range bounds.

Return -1, 0 or 1 respectively when `value1` is less than,
equal to or greater than `value2`.

When `only_value` is ``True``, do not consider the *inclusivity*
of the edges, just their values.
>   rd   rN   r   éÿÿÿÿr   >   rN   rX   TF)rm   )r:   Úvalue1Úbound1Úvalue2Úbound2Úonly_valuesÚvalue1_is_lower_boundÚvalue2_is_lower_boundÚ
value1_incÚ
value2_incÚsteps              r;   Ú_compare_edgesÚRange._compare_edgesÒ   s;  € ð" !'¨*Ñ 4ÐØ &¨*Ñ 4Ðð ×#Ñ#Ø$Ó=Øæ2�rÐ9¸Ð9Ø‰^Þ.�2Ð5°AÐ5Ø‰^Þ-�1Ð5°2Ð5ð Ó Ó 0Øà˜zÑ)ˆ
Ø˜zÑ)ˆ
Ø×&Ñ&Ó(ˆàÑö %Þ!Ø‘N�FØ!%�JøæØ‘N�FØ!&�JÞ$Þ!Ø‘N�FØ!%�JøæØ‘N�FØ!&�Jà‹?ØØ‹_ØÞØö žjØÞ®
Ø(ÓAØæ 5˜1Ð=¸2Ð=ÞÞ1�qÐ9°rÐ9ÞÞ2�rÐ9¸Ð9àr>   c                óî  • [        U[        5      (       d  [        $ U R                  (       a  UR                  (       a  gU R                  UR                  :w  a  gU R                  nU R
                  S   nUR                  nUR
                  S   nU R                  nU R
                  S   nUR                  nUR
                  S   n	U R                  X#XE5      S:H  =(       a    U R                  XgX‰5      S:H  $ )zpCompare this range to the `other` taking into account
bounds inclusivity, returning ``True`` if they are equal.
TFr   r   )rk   r-   ÚNotImplementedr6   r0   r4   r1   r{   ©
r:   ÚotherÚslowerÚslower_bÚolowerÚolower_bÚsupperÚsupper_bÚoupperÚoupper_bs
             r;   Ú__eq__ÚRange.__eq__+  sÉ   € ô
 ˜%¤×'Ñ'Ü!Ð!à�:�:˜%Ÿ+Ÿ+ØØ�Z‰Z˜5Ÿ;™;Ó&Øà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆð ×Ñ °&ÓCÀqÑH÷ MØ×#Ñ# F°fÓGÈ1ÑLð	
r>   c                ó€  • U R                   (       a  gUR                   (       a  gU R                  nU R                  S   nUR                  nUR                  S   nU R                  X#XE5      S:  a  gU R                  nU R                  S   nUR                  nUR                  S   n	U R                  XgX‰5      S:”  a  gg)z7Determine whether this range is a contained by `other`.TFr   r   )r6   r0   r4   r{   r1   r   s
             r;   Úcontained_byÚRange.contained_byF  s¥   € ð �:�:Øð �;�;Øà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v°ÓBÀQÓFØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v°ÓBÀQÓFØàr>   c                óp   • [        U[        5      (       a  UR                  U 5      $ U R                  U5      $ )z.Determine whether this range contains `value`.)rk   r-   rŒ   rg   re   s     r;   ÚcontainsÚRange.containsc  s3   € ô �eœU×#Ñ#Ø×%Ñ% dÓ+Ð+à×'Ñ'¨Ó.Ð.r>   c                óÖ  • U R                   (       d  UR                   (       a  gU R                  nU R                  S   nU R                  nU R                  S   nUR                  nUR                  S   nUR                  nUR                  S   n	U R	                  X#Xg5      S:¼  a  U R	                  X#X‰5      S::  a  gU R	                  XgX#5      S:¼  a  U R	                  XgXE5      S::  a  gg)z3Determine whether this range overlaps with `other`.Fr   r   T©r6   r0   r4   r1   r{   ©
r:   r€   r�   r‚   r…   r†   rƒ   r„   r‡   rˆ   s
             r;   ÚoverlapsÚRange.overlapsm  sÍ   € ð �:�:˜ŸŸØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆð ×Ñ °&ÓCÀqÓHØ×#Ñ# F°fÓGÈ1ÓLàð ×Ñ °&ÓCÀqÓHØ×#Ñ# F°fÓGÈ1ÓLààr>   c                óÞ   • U R                   (       d  UR                   (       a  gU R                  nU R                  S   nUR                  nUR                  S   nU R	                  X#XE5      S:  $ )zBDetermine whether this range is completely to the left of `other`.Fr   r   )r6   r1   r4   r0   r{   )r:   r€   r…   r†   rƒ   r„   s         r;   Ústrictly_left_ofÚRange.strictly_left_of�  óZ   € ð �:�:˜ŸŸØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆð ×"Ñ" 6°VÓFÈÑJÐJr>   c                óÞ   • U R                   (       d  UR                   (       a  gU R                  nU R                  S   nUR                  nUR                  S   nU R	                  X#XE5      S:„  $ )zCDetermine whether this range is completely to the right of `other`.Fr   r   r’   )r:   r€   r�   r‚   r‡   rˆ   s         r;   Ústrictly_right_ofÚRange.strictly_right_ofž  r™   r>   c                óÞ   • U R                   (       d  UR                   (       a  gU R                  nU R                  S   nUR                  nUR                  S   nU R                  X#XE5      S:¬  $ )z>Determine whether this does not extend to the left of `other`.Fr   )r6   r0   r4   r{   )r:   r€   r�   r‚   rƒ   r„   s         r;   Únot_extend_left_ofÚRange.not_extend_left_of¯  óZ   € ð �:�:˜ŸŸØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆð ×"Ñ" 6°VÓFÈ!ÑKÐKr>   c                óÞ   • U R                   (       d  UR                   (       a  gU R                  nU R                  S   nUR                  nUR                  S   nU R                  X#XE5      S:*  $ )z?Determine whether this does not extend to the right of `other`.Fr   r   )r6   r1   r4   r{   )r:   r€   r…   r†   r‡   rˆ   s         r;   Únot_extend_right_ofÚRange.not_extend_right_of¾  r    r>   c                ód  • U R                  XX4S5      nUS:X  a<  U R                  5       nUc  gUS:X  a  US:X  a  XU-
  :H  $ X:H  $ US:X  a  X:H  $ XU-
  :H  $ US:X  aU  US:X  a  US:X  d  US:X  a  US:X  a  U R                  5       nUb  gUS:H  =(       a    US:H  =(       d    US:H  =(       a    US:H  $ g)	zLDetermine whether an upper bound is immediately successive to a
lower bound.Trp   FrX   rN   r   rc   rd   )r{   rm   )r:   rq   rr   rs   rt   Úresrz   s          r;   Ú_upper_edge_adjacent_to_lowerÚ#Range._upper_edge_adjacent_to_lowerÍ  sç   € ð ×!Ñ! &°&À$ÓGˆØ�"‹9Ø×*Ñ*Ó,ˆDØ‰|ØØ˜‹}Ø˜S“=Ø!¨d¡]Ñ2Ð2à!Ñ+Ð+à˜S“=Ø!Ñ+Ð+à!¨d¡]Ñ2Ð2Ø�A‹Xð ˜#“Ø˜c“MØ˜S“=Ø˜c“Mà×.Ñ.Ó0�ØÑ#Øà˜#‘÷ "Ø˜c‘M÷"à˜S‘=÷ "Ø˜c‘Mð	ð r>   c                óv  • U R                   (       d  UR                   (       a  gU R                  nU R                  S   nU R                  nU R                  S   nUR                  nUR                  S   nUR                  nUR                  S   n	U R	                  XEXg5      =(       d    U R	                  X‰X#5      $ )z8Determine whether this range is adjacent to the `other`.Fr   r   )r6   r0   r4   r1   r¦   r“   s
             r;   Úadjacent_toÚRange.adjacent_toü  sœ   € ð �:�:˜ŸŸØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×1Ñ1Ø˜fó
÷ 
à×/Ñ/Ø˜fó
ð	
r>   c           	     óD  • U R                   (       a  U$ UR                   (       a  U $ U R                  U5      (       d!  U R                  U5      (       d  [        S5      eU R                  nU R
                  S   nU R                  nU R
                  S   nUR                  nUR
                  S   nUR                  nUR
                  S   n	U R                  X#Xg5      S:  a  Un
UnOUn
UnU R                  XEX‰5      S:”  a  UnUnOUnU	n[        X¬[        [        X½-   5      S9$ )z¦Compute the union of this range with the `other`.

This raises a ``ValueError`` exception if the two ranges are
"disjunct", that is neither adjacent nor overlapping.
zAAdding non-overlapping and non-adjacent ranges is not implementedr   r   rO   )r6   r”   r©   Ú
ValueErrorr0   r4   r1   r{   r-   r	   r3   ©r:   r€   r�   r‚   r…   r†   rƒ   r„   r‡   rˆ   ÚrlowerÚrlower_bÚrupperÚrupper_bs                 r;   ÚunionÚRange.union  s  € ð �:�:ØˆLØ�;�;ØˆKà�}‰}˜U×#Ñ#¨D×,<Ñ,<¸U×,CÑ,CÜð-óð ð
 —‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v°ÓBÀQÓFØˆFØ‰HàˆFØˆHà×Ñ˜v°ÓBÀQÓFØˆFØ‰HàˆFØˆHäØ¤4¬°XÑ5HÓ#Iñ
ð 	
r>   c                ó$   • U R                  U5      $ r@   )r²   ©r:   r€   s     r;   Ú__add__ÚRange.__add__@  s   € Ø�z‰z˜%Ó Ð r>   c           	     óÔ  • U R                   (       d  UR                   (       a  U $ U R                  nU R                  S   nU R                  nU R                  S   nUR                  nUR                  S   nUR                  nUR                  S   n	U R	                  X#Xg5      n
U R	                  XEX‰5      nU
S:  a  US:”  a  [        S5      eU R	                  X#X‰5      nU R	                  XEXg5      nUS:”  d  US:  a  U $ U
S:¼  a  US::  a  [        SSSS9$ U
S::  a^  US:¼  aX  US::  aR  US:X  a  SOS	nUS:w  a'  US	:w  a!  U R	                  X#Xn5      S:X  a  [        SSSS9$ [        UU[        [        X>-   5      S
9$ U
S:¼  a^  US:¼  aX  US::  aR  U	S	:X  a  SOSnUS:w  a'  US	:w  a!  U R	                  X�XE5      S:X  a  [        SSSS9$ [        UU[        [        Xõ-   5      S
9$  SU  SU 35       e)z¯Compute the difference between this range and the `other`.

This raises a ``ValueError`` exception if the two ranges are
"disjunct", that is neither adjacent nor overlapping.
r   r   z5Subtracting a strictly inner range is not implementedNTrA   rN   rc   rX   rO   rd   zUnhandled case computing z - )	r6   r0   r4   r1   r{   r¬   r-   r	   r3   )r:   r€   r�   r‚   r…   r†   rƒ   r„   r‡   rˆ   Úsl_vs_olÚsu_vs_ouÚsl_vs_ouÚsu_vs_olr±   r¯   s                   r;   Ú
differenceÚRange.differenceC  s  € ð �:�:˜ŸŸØˆKà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×&Ñ& v¸ÓJˆØ×&Ñ& v¸ÓJˆØ�a‹<˜H q›LÜØGóð ð ×&Ñ& v¸ÓJˆØ×&Ñ& v¸ÓJˆð �a‹<˜8 a›<ØˆKð �q‹=˜X¨›]Ü˜˜t¨4Ñ0Ð0ð �q‹=˜X¨›]¨x¸1«}Ø&¨#›o‘s°3ˆHà˜C“Ø “OØ×'Ñ'¨¸&ÓKØóô ˜T 4¨tÑ4Ð4äØØÜ¤¨XÑ-@ÓAñð ð �q‹=˜X¨›]¨x¸1«}Ø&¨#›o‘s°3ˆHà˜C“Ø “OØ×'Ñ'¨¸&ÓKØóô ˜T 4¨tÑ4Ð4äØØÜ¤¨XÑ-@ÓAñð ð 	CÐ1°$°°s¸5¸'ÐBÓBˆur>   c                ó$   • U R                  U5      $ r@   )r½   rµ   s     r;   Ú__sub__ÚRange.__sub__�  s   € Ø�‰˜uÓ%Ð%r>   c           	     ó  • U R                   (       d'  UR                   (       d  U R                  U5      (       d  [        SSSS9$ U R                  nU R                  S   nU R
                  nU R                  S   nUR                  nUR                  S   nUR
                  nUR                  S   n	U R                  X#Xg5      S:  a  Un
UnOUn
UnU R                  XEX‰5      S:”  a  UnU	nOUnUn[        U
U[        [        X½-   5      S9$ )zTCompute the intersection of this range with the `other`.

.. versionadded:: 2.0.10

NTrA   r   r   rO   )	r6   r”   r-   r0   r4   r1   r{   r	   r3   r­   s                 r;   ÚintersectionÚRange.intersection’  sø   € ð �:�:˜ŸŸ¨D¯M©M¸%×,@Ñ,@Ü˜˜t¨4Ñ0Ð0à—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v°ÓBÀQÓFØˆFØ‰HàˆFØˆHà×Ñ˜v°ÓBÀQÓFØˆFØ‰HàˆFØˆHäØØÜœ XÑ%8Ó9ñ
ð 	
r>   c                ó$   • U R                  U5      $ r@   )rÃ   rµ   s     r;   Ú__mul__ÚRange.__mul__¸  s   € Ø× Ñ  Ó'Ð'r>   c                ó"   • U R                  5       $ r@   )Ú
_stringifyrB   s    r;   Ú__str__ÚRange.__str__»  s   € Ø�‰Ó Ð r>   c                ó¶   • U R                   (       a  gU R                  U R                  p!Uc  SOUnUc  SOUn[        SU R                  5      u  p4U U SU U 3$ )Nr6   Ú zTuple[str, str]Ú,)r6   r0   r1   r	   r4   )r:   ÚlÚrÚb0Úb1s        r;   rÉ   ÚRange._stringify¾  s]   € Ø�:�:Øà�z‰z˜4Ÿ:™:ˆ1Ø‘)‰B ˆØ‘)‰B ˆäÐ'¨¯©Ó5‰ˆà��a�S˜˜!˜˜R˜DÐ!Ð!r>   © )NN)r0   r/   r1   r/   r4   r3   r6   r5   )Úreturnr5   )rÕ   zAbstractSingleRange[_T])rf   r&   rÕ   r5   )rÕ   r   )F)rq   r/   rr   Ústrrs   r/   rt   rÖ   ru   r5   rÕ   rl   )r€   r   rÕ   r5   )r€   ú	Range[_T]rÕ   r5   )rf   zUnion[_T, Range[_T]]rÕ   r5   )
rq   r/   rr   rÖ   rs   r/   rt   rÖ   rÕ   r5   )r€   r×   rÕ   r×   )rÕ   rÖ   )2Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r0   Ú__annotations__r1   r   ÚdataclassesÚfieldr4   r6   Ú	dc_kwonlyr!   r<   rC   ÚpropertyrG   rK   rP   rT   rY   r\   r`   rg   rm   r{   r‰   rŒ   r�   Ú__contains__r”   r—   Ú
__lshift__r›   Ú
__rshift__rž   r¢   r¦   r©   r²   r¶   r½   rÀ   rÃ   rÆ   rÊ   rÉ   Ú__static_attributes__rÔ   r>   r;   r-   r-   ;   s^  ‡ ñð* €Eˆ<ÓØà€Eˆ<ÓØæØ)×/Ò/¸Ñ=ˆ�Ó=Ø!×'Ò'°Ñ6ˆˆtÔ6à)×/Ò/ÑJ¸ÐJÀ	ÑJˆ�ÓJØ!×'Ò'ÑC°ÐC¸ÑCˆˆtÓCæð #'Ø"&ð	ð
 #'Øñ	àð	ð  ð	ð
  ð	ð ö	ô$ð óó ðð
 óó ðð
 ó%ó ð%ð
 ó5ó ð5ð ó%ó ð%ð
 ó5ó ð5ð ó%ó ð%ô
ô<ð4 "ðWàðWð ðWð ð	Wð
 ðWð ðWð 
õWôr
ô6ô:/ð €Lôô@Kð "€JôKð #€JôLôLð-àð-ð ð-ð ð	-ð
 ð-ð 
ô-ô^
ô,,
ô\!ôJCôX&ô$
ôL(ô!÷
"r>   r-   c                  ó,   • \ rS rSrSr\SS j5       rSrg)Ú
MultiRangeiË  a  Represents a multirange sequence.

This list subclass is an utility to allow automatic type inference of
the proper multi-range SQL type depending on the single range values.
This is useful when operating on literal multi-ranges::

    import sqlalchemy as sa
    from sqlalchemy.dialects.postgresql import MultiRange, Range

    value = literal(MultiRange([Range(2, 4)]))

    select(tbl).where(tbl.c.value.op("@")(MultiRange([Range(-3, 7)])))

.. versionadded:: 2.0.26

.. seealso::

    - :ref:`postgresql_multirange_list_use`.
c                ó   • [        5       $ r@   )ÚAbstractMultiRangerB   s    r;   r`   ÚMultiRange.__sa_type_engine__à  s   € ä!Ó#Ð#r>   rÔ   N)rÕ   zAbstractMultiRange[_T])rØ   rÙ   rÚ   rÛ   rÜ   rá   r`   rå   rÔ   r>   r;   rç   rç   Ë  s   † ñð( ó$ó ó$r>   rç   c                  ó®   ^ • \ rS rSrSrSrSr\S
S j5       r\      SS j5       r      SU 4S jjr " S S\	R                  \\      5      rS	rU =r$ )ÚAbstractRangeiå  z0Base class for single and multi Range SQL types.Tc                ó   • g r@   rÔ   ©r:   ÚclsÚkws      r;   ÚadaptÚAbstractRange.adaptì  s   € Ø7:r>   c                ó   • g r@   rÔ   rî   s      r;   rñ   rò   ï  s   € ð r>   c                óÐ   >• [        U[        [        45      (       a<  XR                  La.  U R                  n[        U S3XR                  4SU05      " 5       $ [        TU ]  U5      $ )zéDynamically adapt a range type to an abstract impl.

For example ``INT4RANGE().adapt(_Psycopg2NumericRange)`` should
produce a type that will have ``_Psycopg2NumericRange`` behaviors
and also render as ``INT4RANGE`` in SQL and DDL.

Ú	RangeImplÚ__visit_name__)Ú
issubclassÚAbstractSingleRangeImplÚAbstractMultiRangeImplÚ	__class__rö   ÚtypeÚsuperrñ   )r:   rï   rð   Ú
visit_namerú   s       €r;   rñ   rò   ô  so   ø€ ô �sÔ4Ô6LÐM×NÑNØŸ>™>Ò)ð ×,Ñ,ˆJÜØ�,˜iÐ(Ø—n‘nÐ%Ø! :Ð.ôó ð ô ‘7‘= Ó%Ð%r>   c                  óŽ   • \ rS rSrSrSS jrSS jrSS jrSS jr\r	SS jr
\
rSS jrSS	 jrSS
 jrSS jrSS jrSS jrSrg)Ú AbstractRange.comparator_factoryi  z-Define comparison operations for range types.c                óB   • U R                   R                  [        U5      $ )zÎBoolean expression. Returns true if the right hand operand,
which can be an element or a range, is contained within the
column.

kwargs may be ignored by this operator but are required for API
conformance.
)ÚexprÚoperater   )r:   r€   rð   s      r;   r�   Ú)AbstractRange.comparator_factory.contains  s   € ð —9‘9×$Ñ$¤X¨uÓ5Ð5r>   c                óB   • U R                   R                  [        U5      $ )z[Boolean expression. Returns true if the column is contained
within the right hand operand.
)r  r  r   rµ   s     r;   rŒ   Ú-AbstractRange.comparator_factory.contained_by#  s   € ð —9‘9×$Ñ$¤\°5Ó9Ð9r>   c                óB   • U R                   R                  [        U5      $ )zlBoolean expression. Returns true if the column overlaps
(has points in common with) the right hand operand.
)r  r  r   rµ   s     r;   r”   Ú)AbstractRange.comparator_factory.overlaps)  s   € ð —9‘9×$Ñ$¤W¨eÓ4Ð4r>   c                óB   • U R                   R                  [        U5      $ )z[Boolean expression. Returns true if the column is strictly
left of the right hand operand.
)r  r  r   rµ   s     r;   r—   Ú1AbstractRange.comparator_factory.strictly_left_of/  s   € ð —9‘9×$Ñ$Ô%5°uÓ=Ð=r>   c                óB   • U R                   R                  [        U5      $ )z\Boolean expression. Returns true if the column is strictly
right of the right hand operand.
)r  r  r   rµ   s     r;   r›   Ú2AbstractRange.comparator_factory.strictly_right_of7  s   € ð —9‘9×$Ñ$Ô%6¸Ó>Ð>r>   c                óB   • U R                   R                  [        U5      $ )zoBoolean expression. Returns true if the range in the column
does not extend right of the range in the operand.
)r  r  r   rµ   s     r;   r¢   Ú4AbstractRange.comparator_factory.not_extend_right_of?  s   € ð —9‘9×$Ñ$Ô%8¸%Ó@Ð@r>   c                óB   • U R                   R                  [        U5      $ )znBoolean expression. Returns true if the range in the column
does not extend left of the range in the operand.
)r  r  r   rµ   s     r;   rž   Ú3AbstractRange.comparator_factory.not_extend_left_ofE  s   € ð —9‘9×$Ñ$Ô%7¸Ó?Ð?r>   c                óB   • U R                   R                  [        U5      $ )zeBoolean expression. Returns true if the range in the column
is adjacent to the range in the operand.
)r  r  r   rµ   s     r;   r©   Ú,AbstractRange.comparator_factory.adjacent_toK  s   € ð —9‘9×$Ñ$¤[°%Ó8Ð8r>   c                óV   • U R                   R                  [        R                  U5      $ ©zyRange expression. Returns the union of the two ranges.
Will raise an exception if the resulting range is not
contiguous.
)r  r  r   Úaddrµ   s     r;   r²   Ú&AbstractRange.comparator_factory.unionQ  ó   € ð
 —9‘9×$Ñ$¤Y§]¡]°EÓ:Ð:r>   c                óV   • U R                   R                  [        R                  U5      $ r  )r  r  r   Úsubrµ   s     r;   r½   Ú+AbstractRange.comparator_factory.differenceX  r  r>   c                óV   • U R                   R                  [        R                  U5      $ )z€Range expression. Returns the intersection of the two ranges.
Will raise an exception if the resulting range is not
contiguous.
)r  r  r   Úmulrµ   s     r;   rÃ   Ú-AbstractRange.comparator_factory.intersection_  r  r>   rÔ   N)r€   r   rð   r   rÕ   úColumnElement[bool])r€   r   rÕ   r  )r€   r   rÕ   zColumnElement[Range[_T]])rØ   rÙ   rÚ   rÛ   rÜ   r�   rŒ   r”   r—   rã   r›   rä   r¢   rž   r©   r²   r½   rÃ   rå   rÔ   r>   r;   Úcomparator_factoryrÿ     sL   † Ù;ô	6ô	:ô	5ô	>ð &ˆ
ô	?ð 'ˆ
ô	Aô	@ô	9ô	;ô	;÷	;r>   r  rÔ   )rï   z	Type[_TE]rð   r   rÕ   r$   )rï   zType[TypeEngineMixin]rð   r   rÕ   úTypeEngine[Any])rï   z-Type[Union[TypeEngine[Any], TypeEngineMixin]]rð   r   rÕ   r  )rØ   rÙ   rÚ   rÛ   rÜ   Úrender_bind_castÚ__abstract__r   rñ   r    Ú
Comparatorr-   r   r  rå   Ú__classcell__)rú   s   @r;   rì   rì   å  sŽ   ø† Ù:àÐà€LàÛ:ó Ø:àðØ(ðØ03ðà	óó ðð &à:ð &ð ð &ð 
÷	 &ôDN;˜Z×2Ñ2°5¸±:Ñ>÷ N;ò N;r>   rì   c                  ó&   • \ rS rSrSrSrSS jrSrg)r_   ig  zâBase for PostgreSQL RANGE types.

These are types that return a single :class:`_postgresql.Range` object.

.. seealso::

    `PostgreSQL range functions <https://www.postgresql.org/docs/current/static/functions-range.html>`_

Tc                óÚ  • UR                   b  UR                   OUR                  n[        U[        5      (       a$  [	        U5      (       a
  [        5       $ [        5       $ [        U[        [        45      (       a
  [        5       $ [        U[        5      (       a%  UR                  (       d
  [        5       $ [        5       $ [        U[        5      (       a
  [        5       $ [         R"                  $ r@   )r0   r1   rk   rl   Ú	_is_int32Ú	INT4RANGEÚ	INT8RANGEr   ÚfloatÚNUMRANGEr   ÚtzinfoÚTSRANGEÚ	TSTZRANGEr   Ú	DATERANGEÚsqltypesÚNULLTYPE)r:   rf   Úspecs      r;   Ú_resolve_for_literalÚ(AbstractSingleRange._resolve_for_literalt  s£   € Ø#Ÿk™kÑ5ˆu�{Š{¸5¿;¹;ˆä�dœC× Ñ ô ˜×ÑÜ “{Ð"ä “{Ð"Ü˜œw¬Ð.×/Ñ/Ü“:ÐÜ˜œh×'Ñ'Ø$(§K§K”7“9Ð@´Y³[Ð@Ü˜œd×#Ñ#Ü“;Ðô ×$Ñ$Ð$r>   rÔ   N)rf   z
Range[Any]rÕ   r   ©rØ   rÙ   rÚ   rÛ   rÜ   r!  r2  rå   rÔ   r>   r;   r_   r_   g  s   † ñð €L÷%r>   r_   c                  ó   • \ rS rSrSrSrg)rø   iŠ  zMMarker for AbstractSingleRange that will apply a subclass-specific
adaptationrÔ   N©rØ   rÙ   rÚ   rÛ   rÜ   rå   rÔ   r>   r;   rø   rø   Š  ó   † ôr>   rø   c                  ó&   • \ rS rSrSrSrSS jrSrg)ré   i�  zvBase for PostgreSQL MULTIRANGE types.

these are types that return a sequence of :class:`_postgresql.Range`
objects.

Tc                ó   • U(       d  [         R                  $ US   nUR                  b  UR                  OUR                  n[	        U[
        5      (       a+  [        S U 5       5      (       a
  [        5       $ [        5       $ [	        U[        [        45      (       a
  [        5       $ [	        U[        5      (       a%  UR                  (       d
  [        5       $ [        5       $ [	        U[         5      (       a
  [#        5       $ [         R                  $ )Nr   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr@   )r&  )Ú.0rÐ   s     r;   Ú	<genexpr>Ú:AbstractMultiRange._resolve_for_literal.<locals>.<genexpr>¤  s   é € Ð/ª A”9˜Q—<�<ªùs   ‚)r/  r0  r0   r1   rk   rl   ÚallÚINT4MULTIRANGEÚINT8MULTIRANGEr   r)  ÚNUMMULTIRANGEr   r+  ÚTSMULTIRANGEÚTSTZMULTIRANGEr   ÚDATEMULTIRANGE)r:   rf   Úfirstr1  s       r;   r2  Ú'AbstractMultiRange._resolve_for_literal™  sÅ   € Þä×$Ñ$Ð$Ø�a‘ˆØ#Ÿk™kÑ5ˆu�{Š{¸5¿;¹;ˆä�dœC× Ñ ô Ñ/©Ó/×/Ñ/Ü%Ó'Ð'ä%Ó'Ð'Ü˜œw¬Ð.×/Ñ/Ü “?Ð"Ü˜œh×'Ñ'Ø)-¯¯”<“>ÐJ¼.Ó:JÐJÜ˜œd×#Ñ#Ü!Ó#Ð#ô ×$Ñ$Ð$r>   rÔ   N)rf   zSequence[Range[Any]]rÕ   r   r4  rÔ   r>   r;   ré   ré   �  s   † ñð €L÷%r>   ré   c                  ó   • \ rS rSrSrSrg)rù   i³  zLMarker for AbstractMultiRange that will apply a subclass-specific
adaptationrÔ   Nr6  rÔ   r>   r;   rù   rù   ³  r7  r>   rù   c                  ó   • \ rS rSrSrS rSrg)r'  i¸  z(Represent the PostgreSQL INT4RANGE type.rÔ   N©rØ   rÙ   rÚ   rÛ   rÜ   rö   rå   rÔ   r>   r;   r'  r'  ¸  ó
   † Ù2à ƒNr>   r'  c                  ó   • \ rS rSrSrS rSrg)r(  i¾  z(Represent the PostgreSQL INT8RANGE type.rÔ   NrI  rÔ   r>   r;   r(  r(  ¾  rJ  r>   r(  c                  ó   • \ rS rSrSrS rSrg)r*  iÄ  z'Represent the PostgreSQL NUMRANGE type.rÔ   NrI  rÔ   r>   r;   r*  r*  Ä  s
   † Ù1àƒNr>   r*  c                  ó   • \ rS rSrSrS rSrg)r.  iÊ  z(Represent the PostgreSQL DATERANGE type.rÔ   NrI  rÔ   r>   r;   r.  r.  Ê  rJ  r>   r.  c                  ó   • \ rS rSrSrS rSrg)r,  iÐ  ú&Represent the PostgreSQL TSRANGE type.rÔ   NrI  rÔ   r>   r;   r,  r,  Ð  s
   † Ù0àƒNr>   r,  c                  ó   • \ rS rSrSrS rSrg)r-  iÖ  ú(Represent the PostgreSQL TSTZRANGE type.rÔ   NrI  rÔ   r>   r;   r-  r-  Ö  rJ  r>   r-  c                  ó   • \ rS rSrSrS rSrg)r?  iÜ  z-Represent the PostgreSQL INT4MULTIRANGE type.rÔ   NrI  rÔ   r>   r;   r?  r?  Ü  ó
   † Ù7à%ƒNr>   r?  c                  ó   • \ rS rSrSrS rSrg)r@  iâ  z-Represent the PostgreSQL INT8MULTIRANGE type.rÔ   NrI  rÔ   r>   r;   r@  r@  â  rS  r>   r@  c                  ó   • \ rS rSrSrS rSrg)rA  iè  z,Represent the PostgreSQL NUMMULTIRANGE type.rÔ   NrI  rÔ   r>   r;   rA  rA  è  s
   † Ù6à$ƒNr>   rA  c                  ó   • \ rS rSrSrS rSrg)rD  iî  z-Represent the PostgreSQL DATEMULTIRANGE type.rÔ   NrI  rÔ   r>   r;   rD  rD  î  rS  r>   rD  c                  ó   • \ rS rSrSrS rSrg)rB  iô  rO  rÔ   NrI  rÔ   r>   r;   rB  rB  ô  s
   † Ù0à#ƒNr>   rB  c                  ó   • \ rS rSrSrS rSrg)rC  iú  rQ  rÔ   NrI  rÔ   r>   r;   rC  rC  ú  s
   † Ù2à%ƒNr>   rC  iÿÿÿi   €c                ó   • U R                   S L =(       d'    [        U R                   s=:*  =(       a	    [        :*  Os  =(       a<    U R                  S L =(       d'    [        U R                  s=:*  =(       a	    [        :*  $ s  $ r@   )r0   Ú_min_int_32Ú_max_int_32r1   )rÐ   s    r;   r&  r&    sV   € Ø�G‰G�tˆO×Dœ{¨a¯g©g×DÓD¼ÔD÷ Ø	�‰�4ˆ×@œ;¨!¯'©'×@Ó@´[Ñ@ðÙ@ðr>   rÔ   )rÐ   z
Range[int]rÕ   r5   )HÚ
__future__r   rÞ   r   r   r   Údecimalr   Útypingr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rÍ   r   r/  ÚsqlÚsql.type_apir    Úutilr!   Úutil.typingr"   Úsql.elementsr#   r$   r%   r&   r3   Údc_slotsrà   Ú	dataclassr-   rç   rì   r_   rø   ré   rù   rl   r'  r(  r*  r.  r,  r-  r?  r@  rA  rD  rB  rC  r[  rZ  r&  rÔ   r>   r;   Ú<module>rf     sI  ðõ #ã Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý  Ý Ý å "Ý #Ý Ý )Ý *Ý Ý 'Ý (Ý !Ý Ý &Ý Ý "æÝ-Ý#Ý/áˆT˜Ñ€àÐ,Ñ-€æØ˜ˆ€HØ˜DÐ!�Ià€HØ€Ið ×ÒÑ/˜dÐ/ hÑ/ôL
"ˆG�B‰Kó L
"ó 0ðL
"ô^$��e˜B‘i‘ô $ô4;�H×'Ñ'¨Ñ+ô ;ôD %˜-¨¨b©	Ñ2ô  %ôFÐ1°"Ñ5ô ô
!%˜ x°°b±	Ñ':Ñ;ô !%ôHÐ/°Ñ3ô ô
!Ð# CÑ(ô !ô!Ð# CÑ(ô !ô Ð" 7Ñ+ô  ô!Ð# DÑ)ô !ôÐ! (Ñ+ô ô!Ð# HÑ-ô !ô&Ð'¨Ñ,ô &ô&Ð'¨Ñ,ô &ô%Ð& wÑ/ô %ô&Ð'¨Ñ-ô &ô$Ð% hÑ/ô $ô&Ð'¨Ñ1ô &ð €Ø€õr>   