§
    eŠtj²€  ã                  óR  — d dl mZ d dl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
 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 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 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# dd l$m%Z% dd!l&m'Z' erdd"l(m)Z) dd#l"m*Z* dd$l"m+Z+  ed%e	¬&¦  «        Z,e'd'         Z-e%r	d(d)iZ.d*d)iZ/ni Z.i Z/ ej0        dYd+d)ie.¤Ž G d,„ d-ee,         ¦  «        ¦   «         Z1 G d.„ d/ee1e,                  ¦  «        Z2 G d0„ d1e j#        e,         ¦  «        Z3 G d2„ d3e3e1e,                  ¦  «        Z4 G d4„ d5e4e,         ¦  «        Z5 G d6„ d7e3ee1e,                           ¦  «        Z6 G d8„ d9e6e,         ¦  «        Z7 G d:„ d;e4e8         ¦  «        Z9 G d<„ d=e4e8         ¦  «        Z: G d>„ d?e4e         ¦  «        Z; G d@„ dAe4e         ¦  «        Z< G dB„ dCe4e         ¦  «        Z= G dD„ dEe4e         ¦  «        Z> G dF„ dGe6e8         ¦  «        Z? G dH„ dIe6e8         ¦  «        Z@ G dJ„ dKe6e         ¦  «        ZA G dL„ dMe6e         ¦  «        ZB G dN„ dOe6e         ¦  «        ZC G dP„ dQe6e         ¦  «        ZDdRZEdSZFdZdX„ZGdS )[é    )Ú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                  ód  — e Zd ZU dZdZded<   	 dZded<   	 er- ej	        d¬¦  «        Z
ded	<    ej	        d
¬¦  «        Zded<   n( ej	        d<ddie¤ŽZ
ded	<    ej	        d<dd
ie¤ŽZded<   es	 	 d=dd
dœd>d„Zd?d„Zed?d„¦   «         Zed?d„¦   «         Zed?d„¦   «         Zed?d„¦   «         Zed?d„¦   «         Zed?d„¦   «         Zed@d„¦   «         ZdAd„ZdBd„Z	 dCdDd&„ZdEd(„ZdFd*„ZdGd,„ZeZdFd-„ZdFd.„Z e Z!dFd/„Z"e"Z#dFd0„Z$dFd1„Z%dHd2„Z&dFd3„Z'dId4„Z(dId5„Z)dId6„Z*dId7„Z+dId8„Z,dId9„Z-dJd:„Z.dJd;„Z/dS )KÚRangea_  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Úemptyr1   )r3   r5   c               óD   — | j                              ||||dœ¦  «         d S )N)r/   r0   r3   r5   )Ú__dict__Úupdate)Úselfr/   r0   r3   r5   s        úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/ranges.pyÚ__init__zRange.__init__a   s>   € ð ŒM× Ò à"Ø"Ø$Ø"ð	ð ñô ð ð ð ó    Úreturnc                ó   — | j          S ©N©r5   ©r9   s    r:   Ú__bool__zRange.__bool__s   s   € Ø”:ˆ~Ðr<   c                ó   — | j         S ©z$A synonym for the 'empty' attribute.r@   rA   s    r:   ÚisemptyzRange.isemptyv   ó   € ð ŒzÐr<   c                ó   — | j         S rD   r@   rA   s    r:   Úis_emptyzRange.is_empty|   rF   r<   c                ó$   — | j         d         dk    S )z,Return True if the lower bound is inclusive.r   ú[©r3   rA   s    r:   Ú	lower_inczRange.lower_inc‚   ó   € ð Œ{˜1Œ~ Ò$Ð$r<   c                ó$   — | j          o| j        du S )zKReturn True if this range is non-empty and lower bound is
        infinite.N)r5   r/   rA   s    r:   Ú	lower_infzRange.lower_infˆ   ó   € ð
 ”:ˆ~Ð4 $¤*°Ð"4Ð4r<   c                ó$   — | j         d         dk    S )z,Return True if the upper bound is inclusive.r   ú]rK   rA   s    r:   Ú	upper_inczRange.upper_inc�   rM   r<   c                ó$   — | j          o| j        du S )zOReturn True if this range is non-empty and the upper bound is
        infinite.N)r5   r0   rA   s    r:   Ú	upper_infzRange.upper_inf•   rP   r<   úAbstractSingleRange[_T]c                ó   — t          ¦   «         S r?   )ÚAbstractSingleRangerA   s    r:   Ú__sa_type_engine__zRange.__sa_type_engine__œ   s   € å"Ñ$Ô$Ð$r<   Úvaluer&   c                óz  — | j         rdS | j        €0| j        du p&| j        d         dk    r|| j        k     n
|| j        k    S | j        €'| j        d         dk    r|| j        k    n
|| j        k    S | j        d         dk    r|| j        k    n
|| j        k    o&| j        d         dk    r|| j        k     n
|| j        k    S )z3Return True if this range contains the given value.FNr   ú)r   ú()r5   r/   r0   r3   ©r9   rZ   s     r:   Ú_contains_valuezRange._contains_value    sö   € ð Œ:ð 	Ø�5àŒ:ÐØ”: Ð%ð à”;˜q”> SÒ(Ð(ð ˜œ
Ò"Ð"à˜dœjÒ(ðð Œ:Ðð ”;˜q”> SÒ(Ð(ð ˜œ
Ò"Ð"à˜dœjÒ(ðð Œ{˜1Œ~ Ò$Ð$ð �D”JÒÐà˜$œ*Ò$ð
ð Œ{˜1Œ~ Ò$Ð$ð �D”JÒÐà˜$œ*Ò$ð	
r<   r   c                óf  — t          | j        t          ¦  «        st          | j        t          ¦  «        rdS t          | j        t          ¦  «        st          | j        t          ¦  «        rdS t          | j        t
          ¦  «        st          | j        t
          ¦  «        rt          d¬¦  «        S dS )uA   Determine the â€œstepâ€� for this range, if it is a discrete one.r   N)Údays)Ú
isinstancer/   Úintr0   r   r   r   rA   s    r:   Ú_get_discrete_stepzRange._get_discrete_step¾   s    € õ �d”j¥#Ñ&Ô&ð 	­*°T´ZÅÑ*EÔ*Eð 	Ø�1Ý˜œ
¥HÑ-Ô-ð 		µØŒJ�ñ2
ô 2
ð 		ð
 �4Ý˜œ
¥DÑ)Ô)ð 	­Z¸¼
ÅDÑ-IÔ-Ið 	Ý !Ð$Ñ$Ô$Ð$à�4r<   Úvalue1Úbound1ÚstrÚvalue2Úbound2Úonly_valuesrc   c                óŠ  — |dv }|dv }||cxu r€n n||k    rdS |rdndS |€|rdndS |€|rdndS ||k    r||k    rdS |dv }|dv }	|                       ¦   «         }
|
�*|r
|s||
z  }d}n	|r||
z  }d}|r
|	s||
z  }d}	n	|	r||
z  }d}	||k     rdS ||k    rdS |rdS |r|	rdS |s|	s||k    rdS |rdndS |s|rdndS |	s|rdndS dS )	a  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.
        >   r]   rJ   Nr   éÿÿÿÿr   >   rJ   rR   TF)rd   )r9   re   rf   rh   ri   rj   Úvalue1_is_lower_boundÚvalue2_is_lower_boundÚ
value1_incÚ
value2_incÚsteps              r:   Ú_compare_edgeszRange._compare_edgesÒ   sÕ  € ð" !'¨*Ð 4ÐØ &¨*Ð 4Ðð �VÐ#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø$Ð(=Ò=Ð=Ø�qà2Ð9�r�r¸Ð9Øˆ^Ø.Ð5�2�2°AÐ5Øˆ^Ø-Ð5�1�1°2Ð5ð �VÒÐ ¨&Ò 0Ð 0Ø�1à˜zÐ)ˆ
Ø˜zÐ)ˆ
Ø×&Ò&Ñ(Ô(ˆàÐð %ð 'Ø!ð &Ø˜d‘N�FØ!%�Jøàð 'Ø˜d‘N�FØ!&�JØ$ð 'Ø!ð &Ø˜d‘N�FØ!%�Jøàð 'Ø˜d‘N�FØ!&�Jà�FŠ?ˆ?Ø�2Ø�fŠ_ˆ_Ø�1Øð 	Ø�1ð ð ˜jð Ø�qØð 
¨
ð 
Ø(Ð,AÒAÐAØ˜1à 5Ð=˜1˜1¸2Ð=Øð Ø1Ð9�q�q°rÐ9Øð Ø2Ð9�r�r¸Ð9à�qr<   Úotherc                óŽ  — t          |t          ¦  «        st          S | j        r	|j        rdS | j        |j        k    rdS | j        }| j        d         }|j        }|j        d         }| j        }| j        d         }|j        }|j        d         }	|                      ||||¦  «        dk    o|                      ||||	¦  «        dk    S )z€Compare this range to the `other` taking into account
        bounds inclusivity, returning ``True`` if they are equal.
        TFr   r   )rb   r-   ÚNotImplementedr5   r/   r3   r0   rr   ©
r9   rs   ÚslowerÚslower_bÚolowerÚolower_bÚsupperÚsupper_bÚoupperÚoupper_bs
             r:   Ú__eq__zRange.__eq__+  sÕ   € õ
 ˜%¥Ñ'Ô'ð 	"Ý!Ð!àŒ:ð 	˜%œ+ð 	Ø�4ØŒZ˜5œ;Ò&Ð&Ø�5à”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆØ”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆð ×Ò ¨°&¸(ÑCÔCÀqÒHð MØ×#Ò# F¨H°f¸hÑGÔGÈ1ÒLð	
r<   ú	Range[_T]c                óB  — | j         rdS |j         rdS | j        }| j        d         }|j        }|j        d         }|                      ||||¦  «        dk     rdS | j        }| j        d         }|j        }|j        d         }	|                      ||||	¦  «        dk    rdS dS )z7Determine whether this range is a contained by `other`.TFr   r   )r5   r/   r3   rr   r0   rv   s
             r:   Úcontained_byzRange.contained_byF  s¹   € ð Œ:ð 	Ø�4ð Œ;ð 	Ø�5à”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆà×Ò˜v x°¸ÑBÔBÀQÒFÐFØ�5à”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆà×Ò˜v x°¸ÑBÔBÀQÒFÐFØ�5àˆtr<   úUnion[_T, Range[_T]]c                ó€   — t          |t          ¦  «        r|                     | ¦  «        S |                      |¦  «        S )z.Determine whether this range contains `value`.)rb   r-   r‚   r_   r^   s     r:   ÚcontainszRange.containsc  s>   € õ �e�UÑ#Ô#ð 	/Ø×%Ò% dÑ+Ô+Ð+à×'Ò'¨Ñ.Ô.Ð.r<   c                ó®  — | j         s|j         rdS | j        }| j        d         }| j        }| j        d         }|j        }|j        d         }|j        }|j        d         }	|                      ||||¦  «        dk    r|                      ||||	¦  «        dk    rdS |                      ||||¦  «        dk    r|                      ||||¦  «        dk    rdS dS )z3Determine whether this range overlaps with `other`.Fr   r   T©r5   r/   r3   r0   rr   ©
r9   rs   rw   rx   r{   r|   ry   rz   r}   r~   s
             r:   ÚoverlapszRange.overlapsm  só   € ð Œ:ð 	˜œð 	Ø�5à”ˆØ”;˜q”>ˆØ”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆØ”ˆØ”< ”?ˆð ×Ò ¨°&¸(ÑCÔCÀqÒHÐHØ×#Ò# F¨H°f¸hÑGÔGÈ1ÒLÐLà�4ð ×Ò ¨°&¸(ÑCÔCÀqÒHÐHØ×#Ò# F¨H°f¸hÑGÔGÈ1ÒLÐLà�4àˆur<   c                óª   — | j         s|j         rdS | j        }| j        d         }|j        }|j        d         }|                      ||||¦  «        dk     S )zBDetermine whether this range is completely to the left of `other`.Fr   r   )r5   r0   r3   r/   rr   )r9   rs   r{   r|   ry   rz   s         r:   Ústrictly_left_ofzRange.strictly_left_of�  óa   € ð Œ:ð 	˜œð 	Ø�5à”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆð ×"Ò" 6¨8°V¸XÑFÔFÈÒJÐJr<   c                óª   — | j         s|j         rdS | j        }| j        d         }|j        }|j        d         }|                      ||||¦  «        dk    S )zCDetermine whether this range is completely to the right of `other`.Fr   r   r‡   )r9   rs   rw   rx   r}   r~   s         r:   Ústrictly_right_ofzRange.strictly_right_ofž  rŒ   r<   c                óª   — | j         s|j         rdS | j        }| j        d         }|j        }|j        d         }|                      ||||¦  «        dk    S )z>Determine whether this does not extend to the left of `other`.Fr   )r5   r/   r3   rr   )r9   rs   rw   rx   ry   rz   s         r:   Únot_extend_left_ofzRange.not_extend_left_of¯  óa   € ð Œ:ð 	˜œð 	Ø�5à”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆð ×"Ò" 6¨8°V¸XÑFÔFÈ!ÒKÐKr<   c                óª   — | j         s|j         rdS | j        }| j        d         }|j        }|j        d         }|                      ||||¦  «        dk    S )z?Determine whether this does not extend to the right of `other`.Fr   r   )r5   r0   r3   rr   )r9   rs   r{   r|   r}   r~   s         r:   Únot_extend_right_ofzRange.not_extend_right_of¾  r‘   r<   c                óp  — |                       ||||d¦  «        }|dk    rH|                      ¦   «         }|€dS |dk    r|dk    r	|||z
  k    S ||k    S |dk    r||k    S |||z
  k    S |dk    rH|dk    r|dk    s|dk    r|d	k    r|                      ¦   «         }|�dS |dk    r|dk    p|dk    o|d	k    S dS )
zTDetermine whether an upper bound is immediately successive to a
        lower bound.Trl   NFrR   rJ   r   r\   r]   )rr   rd   )r9   re   rf   rh   ri   Úresrq   s          r:   Ú_upper_edge_adjacent_to_lowerz#Range._upper_edge_adjacent_to_lowerÍ  s  € ð ×!Ò! &¨&°&¸&À$ÑGÔGˆØ�"Š9ˆ9Ø×*Ò*Ñ,Ô,ˆDØˆ|Ø�uØ˜Š}ˆ}Ø˜S’=�=Ø! V¨d¡]Ò2Ð2à! VÒ+Ð+à˜S’=�=Ø! VÒ+Ð+à! V¨d¡]Ò2Ð2Ø�AŠXˆXð ˜#’�Ø˜c’M�MØ˜S’=�=Ø˜c’M�Mà×.Ò.Ñ0Ô0�ØÐ#Ø˜4à˜#’ð "Ø˜c’Mð"à˜S’=ð "Ø˜c’Mð	ð �5r<   c                ó"  — | j         s|j         rdS | j        }| j        d         }| j        }| j        d         }|j        }|j        d         }|j        }|j        d         }	|                      ||||¦  «        p|                      ||	||¦  «        S )z8Determine whether this range is adjacent to the `other`.Fr   r   )r5   r/   r3   r0   r–   rˆ   s
             r:   Úadjacent_tozRange.adjacent_toü  s¦   € ð Œ:ð 	˜œð 	Ø�5à”ˆØ”;˜q”>ˆØ”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆØ”ˆØ”< ”?ˆà×1Ò1Ø�H˜f hñ
ô 
ð 
à×/Ò/Ø�H˜f hñ
ô 
ð	
r<   c           	     ó  — | j         r|S |j         r| S |                      |¦  «        s$|                      |¦  «        st          d¦  «        ‚| j        }| j        d         }| j        }| j        d         }|j        }|j        d         }|j        }|j        d         }	|                      ||||¦  «        dk     r|}
|}n|}
|}|                      ||||	¦  «        dk    r|}|}n|}|	}t          |
|t          t          ||z   ¦  «        ¬¦  «        S )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   rK   )r5   r‰   r˜   Ú
ValueErrorr/   r3   r0   rr   r-   r	   r2   ©r9   rs   rw   rx   r{   r|   ry   rz   r}   r~   ÚrlowerÚrlower_bÚrupperÚrupper_bs                 r:   ÚunionzRange.union  sC  € ð Œ:ð 	ØˆLØŒ;ð 	ØˆKà�}Š}˜UÑ#Ô#ð 	¨D×,<Ò,<¸UÑ,CÔ,Cð 	Ýð-ñô ð ð
 ”ˆØ”;˜q”>ˆØ”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆØ”ˆØ”< ”?ˆà×Ò˜v x°¸ÑBÔBÀQÒFÐFØˆFØˆHˆHàˆFØˆHà×Ò˜v x°¸ÑBÔBÀQÒFÐFØˆFØˆHˆHàˆFØˆHåØ�F¥4­°XÀÑ5HÑ#IÔ#Ið
ñ 
ô 
ð 	
r<   c                ó,   — |                       |¦  «        S r?   )r    ©r9   rs   s     r:   Ú__add__zRange.__add__@  s   € Ø�zŠz˜%Ñ Ô Ð r<   c           	     ó(  — | j         s|j         r| S | j        }| j        d         }| j        }| j        d         }|j        }|j        d         }|j        }|j        d         }	|                      ||||¦  «        }
|                      ||||	¦  «        }|
dk     r|dk    rt          d¦  «        ‚|                      ||||	¦  «        }|                      ||||¦  «        }|dk    s|dk     r| S |
dk    r|dk    rt          ddd¬¦  «        S |
dk    rx|dk    rr|dk    rl|dk    rdnd	}|dk    r4|d	k    r.|                      ||||¦  «        dk    rt          ddd¬¦  «        S t          ||t          t          ||z   ¦  «        ¬
¦  «        S |
dk    rx|dk    rr|dk    rl|	d	k    rdnd}|dk    r4|d	k    r.|                      ||||¦  «        dk    rt          ddd¬¦  «        S t          ||t          t          ||z   ¦  «        ¬
¦  «        S J d| › d|› �¦   «         ‚)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 implementedNTr@   rJ   r\   rR   rK   r]   FzUnhandled case computing z - )	r5   r/   r3   r0   rr   rš   r-   r	   r2   )r9   rs   rw   rx   r{   r|   ry   rz   r}   r~   Úsl_vs_olÚsu_vs_ouÚsl_vs_ouÚsu_vs_olrŸ   r�   s                   r:   Ú
differencezRange.differenceC  s¡  € ð Œ:ð 	˜œð 	ØˆKà”ˆØ”;˜q”>ˆØ”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆØ”ˆØ”< ”?ˆà×&Ò& v¨x¸ÀÑJÔJˆØ×&Ò& v¨x¸ÀÑJÔJˆØ�aŠ<ˆ<˜H qšL˜LÝØGñô ð ð ×&Ò& v¨x¸ÀÑJÔJˆØ×&Ò& v¨x¸ÀÑJÔJˆð �aŠ<ˆ<˜8 aš<˜<ØˆKð �qŠ=ˆ=˜X¨š]˜]Ý˜˜t¨4Ð0Ñ0Ô0Ð0ð �qŠ=ˆ=˜X¨š]˜]¨x¸1ª}¨}Ø&¨#šo˜o�s�s°3ˆHà˜C’�Ø ’O�OØ×'Ò'¨°¸&À(ÑKÔKØòð õ ˜T 4¨tÐ4Ñ4Ô4Ð4åØØÝ¥¨X¸Ñ-@ÑAÔAðñ ô ð ð �qŠ=ˆ=˜X¨š]˜]¨x¸1ª}¨}Ø&¨#šo˜o�s�s°3ˆHà˜C’�Ø ’O�OØ×'Ò'¨°¸&À(ÑKÔKØòð õ ˜T 4¨tÐ4Ñ4Ô4Ð4åØØÝ¥¨X¸Ñ-@ÑAÔAðñ ô ð ð 	CÐB°$ÐBÐB¸5ÐBÐBÑBÔBˆur<   c                ó,   — |                       |¦  «        S r?   )r©   r¢   s     r:   Ú__sub__zRange.__sub__�  s   € Ø�Š˜uÑ%Ô%Ð%r<   c           	     óð  — | j         s|j         s|                      |¦  «        st          ddd¬¦  «        S | j        }| j        d         }| j        }| j        d         }|j        }|j        d         }|j        }|j        d         }	|                      ||||¦  «        dk     r|}
|}n|}
|}|                      ||||	¦  «        dk    r|}|	}n|}|}t          |
|t          t          ||z   ¦  «        ¬¦  «        S )zdCompute the intersection of this range with the `other`.

        .. versionadded:: 2.0.10

        NTr@   r   r   rK   )	r5   r‰   r-   r/   r3   r0   rr   r	   r2   r›   s                 r:   ÚintersectionzRange.intersection’  s   € ð Œ:ð 	1˜œð 	1¨D¯MªM¸%Ñ,@Ô,@ð 	1Ý˜˜t¨4Ð0Ñ0Ô0Ð0à”ˆØ”;˜q”>ˆØ”ˆØ”;˜q”>ˆØ”ˆØ”< ”?ˆØ”ˆØ”< ”?ˆà×Ò˜v x°¸ÑBÔBÀQÒFÐFØˆFØˆHˆHàˆFØˆHà×Ò˜v x°¸ÑBÔBÀQÒFÐFØˆFØˆHˆHàˆFØˆHåØØÝ� X°Ñ%8Ñ9Ô9ð
ñ 
ô 
ð 	
r<   c                ó,   — |                       |¦  «        S r?   )r­   r¢   s     r:   Ú__mul__zRange.__mul__¸  s   € Ø× Ò  Ñ'Ô'Ð'r<   c                ó*   — |                       ¦   «         S r?   )Ú
_stringifyrA   s    r:   Ú__str__zRange.__str__»  s   € Ø�ŠÑ Ô Ð r<   c                óŽ   — | j         rdS | j        | j        }}|€dn|}|€dn|}t          d| j        ¦  «        \  }}|› |› d|› |› �S )Nr5   Ú zTuple[str, str]ú,)r5   r/   r0   r	   r3   )r9   ÚlÚrÚb0Úb1s        r:   r±   zRange._stringify¾  sl   € ØŒ:ð 	Ø�7àŒz˜4œ:ˆ1ˆØ�)ˆBˆB ˆØ�)ˆBˆB ˆåÐ'¨¬Ñ5Ô5‰ˆˆBàÐ!�aÐ!Ð!˜!Ð!˜RÐ!Ð!Ð!r<   © )NN)r/   r.   r0   r.   r3   r2   r5   r4   )r=   r4   )r=   rV   )rZ   r&   r=   r4   )r=   r   )F)re   r.   rf   rg   rh   r.   ri   rg   rj   r4   r=   rc   )rs   r   r=   r4   )rs   r€   r=   r4   )rZ   rƒ   r=   r4   )
re   r.   rf   rg   rh   r.   ri   rg   r=   r4   )rs   r€   r=   r€   )r=   rg   )0Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Ú__annotations__r0   r   ÚdataclassesÚfieldr3   r5   Ú	dc_kwonlyr!   r;   rB   ÚpropertyrE   rH   rL   rO   rS   rU   rY   r_   rd   rr   r   r‚   r…   Ú__contains__r‰   r‹   Ú
__lshift__rŽ   Ú
__rshift__r�   r“   r–   r˜   r    r£   r©   r«   r­   r¯   r²   r±   rº   r<   r:   r-   r-   ;   sÿ  € € € € € € ðð ð* €EÐÐÐÑØà€EÐÐÐÑØàð DØ/˜kÔ/¸Ð=Ñ=Ô=ˆÐ=Ð=Ð=Ñ=Ø'�kÔ'°Ð6Ñ6Ô6ˆÐ6Ð6Ð6Ñ6Ð6à/˜kÔ/ÐJÐJ¸ÐJÀ	ÐJÐJˆÐJÐJÐJÑJØ'�kÔ'ÐCÐC°ÐC¸ÐCÐCˆÐCÐCÐCÑCàð ð #'Ø"&ð	ð
 #'Øð	ð 	ð 	ð 	ð 	ð 	ð$ð ð ð ð ðð ð ñ „Xðð
 ðð ð ñ „Xðð
 ð%ð %ð %ñ „Xð%ð
 ð5ð 5ð 5ñ „Xð5ð ð%ð %ð %ñ „Xð%ð
 ð5ð 5ð 5ñ „Xð5ð ð%ð %ð %ñ „Xð%ð
ð 
ð 
ð 
ð<ð ð ð ð4 "ðWð Wð Wð Wð Wðr
ð 
ð 
ð 
ð6ð ð ð ð:/ð /ð /ð /ð €Lðð ð ð ð@Kð Kð Kð Kð "€JðKð Kð Kð Kð #€JðLð Lð Lð LðLð Lð Lð Lð-ð -ð -ð -ð^
ð 
ð 
ð 
ð,,
ð ,
ð ,
ð ,
ð\!ð !ð !ð !ðJCð JCð JCð JCðX&ð &ð &ð &ð$
ð $
ð $
ð $
ðL(ð (ð (ð (ð!ð !ð !ð !ð
"ð 
"ð 
"ð 
"ð 
"ð 
"r<   r-   c                  ó*   — e Zd ZdZedd„¦   «         ZdS )Ú
MultiRangea?  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`.
    r=   úAbstractMultiRange[_T]c                ó   — t          ¦   «         S r?   )ÚAbstractMultiRangerA   s    r:   rY   zMultiRange.__sa_type_engine__à  s   € å!Ñ#Ô#Ð#r<   N)r=   rÉ   )r»   r¼   r½   r¾   rÃ   rY   rº   r<   r:   rÈ   rÈ   Ë  s>   € € € € € ðð ð( ð$ð $ð $ñ „Xð$ð $ð $r<   rÈ   c                  óš   ‡ — e Zd ZdZdZdZedd	„¦   «         Zedd„¦   «         Zdˆ fd„Z G d„ dej	        e
e                  ¦  «        Zˆ xZS )ÚAbstractRangez0Base class for single and multi Range SQL types.TÚclsú	Type[_TE]Úkwr   r=   r$   c                ó   — d S r?   rº   ©r9   rÎ   rÐ   s      r:   ÚadaptzAbstractRange.adaptì  s   € Ø7:°sr<   úType[TypeEngineMixin]úTypeEngine[Any]c                ó   — d S r?   rº   rÒ   s      r:   rÓ   zAbstractRange.adaptï  s	   € ð ˜#r<   ú-Type[Union[TypeEngine[Any], TypeEngineMixin]]c                óè   •— t          |t          t          f¦  «        r5|| j        ur,| j        } t          |› d�|| j        fd|i¦  «        ¦   «         S t          ¦   «                              |¦  «        S )a	  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Ó   )r9   rÎ   rÐ   Ú
visit_namerÞ   s       €r:   rÓ   zAbstractRange.adaptô  s‹   ø€ õ �sÕ4Õ6LÐMÑNÔNð	&à˜4œ>Ð)Ð)ð Ô,ˆJð•4ØÐ(Ð(Ð(Ø�d”nÐ%Ø! :Ð.ñô ñ ô ð õ ‘7”7—=’= Ñ%Ô%Ð%r<   c                  ór   — e Zd ZdZdd„Zdd„Zdd	„Zdd
„ZeZdd„Z	e	Z
dd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )ú AbstractRange.comparator_factoryz-Define comparison operations for range types.rs   r   rÐ   r=   úColumnElement[bool]c                óB   — | j                              t          |¦  «        S )a
  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   )r9   rs   rÐ   s      r:   r…   z)AbstractRange.comparator_factory.contains  s   € ð ”9×$Ò$¥X¨uÑ5Ô5Ð5r<   c                óB   — | j                              t          |¦  «        S )zsBoolean expression. Returns true if the column is contained
            within the right hand operand.
            )ræ   rç   r   r¢   s     r:   r‚   z-AbstractRange.comparator_factory.contained_by#  s   € ð ”9×$Ò$¥\°5Ñ9Ô9Ð9r<   c                óB   — | j                              t          |¦  «        S )z„Boolean expression. Returns true if the column overlaps
            (has points in common with) the right hand operand.
            )ræ   rç   r   r¢   s     r:   r‰   z)AbstractRange.comparator_factory.overlaps)  s   € ð ”9×$Ò$¥W¨eÑ4Ô4Ð4r<   c                óB   — | j                              t          |¦  «        S )zsBoolean expression. Returns true if the column is strictly
            left of the right hand operand.
            )ræ   rç   r   r¢   s     r:   r‹   z1AbstractRange.comparator_factory.strictly_left_of/  s   € ð ”9×$Ò$Õ%5°uÑ=Ô=Ð=r<   c                óB   — | j                              t          |¦  «        S )ztBoolean expression. Returns true if the column is strictly
            right of the right hand operand.
            )ræ   rç   r   r¢   s     r:   rŽ   z2AbstractRange.comparator_factory.strictly_right_of7  s   € ð ”9×$Ò$Õ%6¸Ñ>Ô>Ð>r<   c                óB   — | j                              t          |¦  «        S )z‡Boolean 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“   z4AbstractRange.comparator_factory.not_extend_right_of?  s   € ð ”9×$Ò$Õ%8¸%Ñ@Ô@Ð@r<   c                óB   — | j                              t          |¦  «        S )z†Boolean 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�   z3AbstractRange.comparator_factory.not_extend_left_ofE  s   € ð ”9×$Ò$Õ%7¸Ñ?Ô?Ð?r<   c                óB   — | j                              t          |¦  «        S )z}Boolean expression. Returns true if the range in the column
            is adjacent to the range in the operand.
            )ræ   rç   r   r¢   s     r:   r˜   z,AbstractRange.comparator_factory.adjacent_toK  s   € ð ”9×$Ò$¥[°%Ñ8Ô8Ð8r<   c                óL   — | j                              t          j        |¦  «        S ©z�Range 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    z&AbstractRange.comparator_factory.unionQ  ó   € ð
 ”9×$Ò$¥Y¤]°EÑ:Ô:Ð:r<   c                óL   — | j                              t          j        |¦  «        S rð   )ræ   rç   r   Úsubr¢   s     r:   r©   z+AbstractRange.comparator_factory.differenceX  rò   r<   úColumnElement[Range[_T]]c                óL   — | j                              t          j        |¦  «        S )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­   z-AbstractRange.comparator_factory.intersection_  rò   r<   N)rs   r   rÐ   r   r=   rä   )rs   r   r=   rä   )rs   r   r=   rõ   )r»   r¼   r½   r¾   r…   r‚   r‰   r‹   rÅ   rŽ   rÆ   r“   r�   r˜   r    r©   r­   rº   r<   r:   Úcomparator_factoryrã     s  € € € € € Ø;Ð;ð	6ð 	6ð 	6ð 	6ð	:ð 	:ð 	:ð 	:ð	5ð 	5ð 	5ð 	5ð	>ð 	>ð 	>ð 	>ð &ˆ
ð	?ð 	?ð 	?ð 	?ð 'ˆ
ð	Að 	Að 	Að 	Að	@ð 	@ð 	@ð 	@ð	9ð 	9ð 	9ð 	9ð	;ð 	;ð 	;ð 	;ð	;ð 	;ð 	;ð 	;ð	;ð 	;ð 	;ð 	;ð 	;ð 	;r<   rø   )rÎ   rÏ   rÐ   r   r=   r$   )rÎ   rÔ   rÐ   r   r=   rÕ   )rÎ   r×   rÐ   r   r=   rÕ   )r»   r¼   r½   r¾   Úrender_bind_castÚ__abstract__r   rÓ   r    Ú
Comparatorr-   r   rø   Ú__classcell__)rÞ   s   @r:   rÍ   rÍ   å  sÅ   ø€ € € € € Ø:Ð:àÐà€LàØ:Ð:Ð:ñ „XØ:àðð ð ñ „Xðð &ð  &ð  &ð  &ð  &ð  &ðDN;ð N;ð N;ð N;ð N;˜ZÔ2°5¸´:Ô>ñ N;ô N;ð N;ð N;ð N;ð N;ð N;r<   rÍ   c                  ó   — e Zd ZdZdZd	d„ZdS )
rX   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>`_

    TrZ   ú
Range[Any]r=   r   c                óÎ  — |j         �|j         n|j        }t          |t          ¦  «        r+t	          |¦  «        rt          ¦   «         S t          ¦   «         S t          |t          t          f¦  «        rt          ¦   «         S t          |t          ¦  «        r#|j        st          ¦   «         nt          ¦   «         S t          |t          ¦  «        rt          ¦   «         S t           j        S r?   )r/   r0   rb   rc   Ú	_is_int32Ú	INT4RANGEÚ	INT8RANGEr   ÚfloatÚNUMRANGEr   ÚtzinfoÚTSRANGEÚ	TSTZRANGEr   Ú	DATERANGEÚsqltypesÚNULLTYPE)r9   rZ   Úspecs      r:   Ú_resolve_for_literalz(AbstractSingleRange._resolve_for_literalt  sÁ   € Ø#œkÐ5ˆuŒ{ˆ{¸5¼;ˆå�d�CÑ Ô ð 	%õ ˜ÑÔð #Ý ‘{”{Ð"å ‘{”{Ð"Ý˜�w­Ð.Ñ/Ô/ð 	%Ý‘:”:ÐÝ˜�hÑ'Ô'ð 	%Ø$(¤KÐ@•7‘9”9�9µY±[´[Ð@Ý˜�dÑ#Ô#ð 	%Ý‘;”;Ðõ Ô$Ð$r<   N)rZ   rþ   r=   r   ©r»   r¼   r½   r¾   rú   r  rº   r<   r:   rX   rX   g  s9   € € € € € ðð ð €Lð%ð %ð %ð %ð %ð %r<   rX   c                  ó   — e Zd ZdZdS )rÜ   zQMarker for AbstractSingleRange that will apply a subclass-specific
    adaptationN©r»   r¼   r½   r¾   rº   r<   r:   rÜ   rÜ   Š  ó   € € € € € ðð ð ð r<   rÜ   c                  ó   — e Zd ZdZdZd	d„ZdS )
rË   z‚Base for PostgreSQL MULTIRANGE types.

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

    TrZ   úSequence[Range[Any]]r=   r   c                ó  — |st           j        S |d         }|j        �|j        n|j        }t	          |t
          ¦  «        r5t          d„ |D ¦   «         ¦  «        rt          ¦   «         S t          ¦   «         S t	          |t          t          f¦  «        rt          ¦   «         S t	          |t          ¦  «        r#|j        st          ¦   «         nt          ¦   «         S t	          |t           ¦  «        rt#          ¦   «         S t           j        S )Nr   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r?   )r   )Ú.0r·   s     r:   ú	<genexpr>z:AbstractMultiRange._resolve_for_literal.<locals>.<genexpr>¤  s(   è è € Ð/Ð/ A•9˜Q‘<”<Ð/Ð/Ð/Ð/Ð/Ð/r<   )r	  r
  r/   r0   rb   rc   ÚallÚINT4MULTIRANGEÚINT8MULTIRANGEr   r  ÚNUMMULTIRANGEr   r  ÚTSMULTIRANGEÚTSTZMULTIRANGEr   ÚDATEMULTIRANGE)r9   rZ   Úfirstr  s       r:   r  z'AbstractMultiRange._resolve_for_literal™  sò   € Øð 	%åÔ$Ð$Ø�a”ˆØ#œkÐ5ˆuŒ{ˆ{¸5¼;ˆå�d�CÑ Ô ð 	%õ Ð/Ð/¨Ð/Ñ/Ô/Ñ/Ô/ð (Ý%Ñ'Ô'Ð'å%Ñ'Ô'Ð'Ý˜�w­Ð.Ñ/Ô/ð 	%Ý ‘?”?Ð"Ý˜�hÑ'Ô'ð 	%Ø)-¬ÐJ•<‘>”>�>½.Ñ:JÔ:JÐJÝ˜�dÑ#Ô#ð 	%Ý!Ñ#Ô#Ð#õ Ô$Ð$r<   N)rZ   r  r=   r   r  rº   r<   r:   rË   rË   �  s9   € € € € € ðð ð €Lð%ð %ð %ð %ð %ð %r<   rË   c                  ó   — e Zd ZdZdS )rÝ   zPMarker for AbstractMultiRange that will apply a subclass-specific
    adaptationNr  rº   r<   r:   rÝ   rÝ   ³  r  r<   rÝ   c                  ó   — e Zd ZdZd ZdS )r  z(Represent the PostgreSQL INT4RANGE type.N©r»   r¼   r½   r¾   rÚ   rº   r<   r:   r  r  ¸  ó   € € € € € Ø2Ð2à €N€N€Nr<   r  c                  ó   — e Zd ZdZd ZdS )r  z(Represent the PostgreSQL INT8RANGE type.Nr!  rº   r<   r:   r  r  ¾  r"  r<   r  c                  ó   — e Zd ZdZd ZdS )r  z'Represent the PostgreSQL NUMRANGE type.Nr!  rº   r<   r:   r  r  Ä  s   € € € € € Ø1Ð1à€N€N€Nr<   r  c                  ó   — e Zd ZdZd ZdS )r  z(Represent the PostgreSQL DATERANGE type.Nr!  rº   r<   r:   r  r  Ê  r"  r<   r  c                  ó   — e Zd ZdZd ZdS )r  ú&Represent the PostgreSQL TSRANGE type.Nr!  rº   r<   r:   r  r  Ð  s   € € € € € Ø0Ð0à€N€N€Nr<   r  c                  ó   — e Zd ZdZd ZdS )r  ú(Represent the PostgreSQL TSTZRANGE type.Nr!  rº   r<   r:   r  r  Ö  r"  r<   r  c                  ó   — e Zd ZdZd ZdS )r  z-Represent the PostgreSQL INT4MULTIRANGE type.Nr!  rº   r<   r:   r  r  Ü  ó   € € € € € Ø7Ð7à%€N€N€Nr<   r  c                  ó   — e Zd ZdZd ZdS )r  z-Represent the PostgreSQL INT8MULTIRANGE type.Nr!  rº   r<   r:   r  r  â  r+  r<   r  c                  ó   — e Zd ZdZd ZdS )r  z,Represent the PostgreSQL NUMMULTIRANGE type.Nr!  rº   r<   r:   r  r  è  s   € € € € € Ø6Ð6à$€N€N€Nr<   r  c                  ó   — e Zd ZdZd ZdS )r  z-Represent the PostgreSQL DATEMULTIRANGE type.Nr!  rº   r<   r:   r  r  î  r+  r<   r  c                  ó   — e Zd ZdZd ZdS )r  r'  Nr!  rº   r<   r:   r  r  ô  s   € € € € € Ø0Ð0à#€N€N€Nr<   r  c                  ó   — e Zd ZdZd ZdS )r  r)  Nr!  rº   r<   r:   r  r  ú  s   € € € € € Ø2Ð2à%€N€N€Nr<   r  iÿÿÿi   €r·   ú
Range[int]r=   r4   c                ó¢   — | j         d u st          | j         cxk    o
t          k    nc o'| j        d u pt          | j        cxk    o
t          k    nc S r?   )r/   Ú_min_int_32Ú_max_int_32r0   )r·   s    r:   r   r     sd   € ØŒG�tˆOÐD�{¨a¬gÐDÐDÒDÐD½ÒDÐDÐDÐDð Ø	Œ�4ˆÐ@�;¨!¬'Ð@Ð@Ò@Ð@µ[Ò@Ð@Ð@Ð@ðr<   rº   )r·   r1  r=   r4   )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&   r2   Údc_slotsrÂ   Ú	dataclassr-   rÈ   rÍ   rX   rÜ   rË   rÝ   rc   r  r  r  r  r  r  r  r  r  r  r  r  r4  r3  r   rº   r<   r:   ú<module>r?     s³  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø (Ð (Ð (Ð (Ð (Ð (Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "àð 0Ø-Ð-Ð-Ð-Ð-Ð-Ø#Ð#Ð#Ð#Ð#Ð#Ø/Ð/Ð/Ð/Ð/Ð/à€WˆT˜ÐÑÔ€àÐ,Ô-€àð Ø˜ˆ€HØ˜DÐ!€I€Ià€HØ€Ið €ÔÐ/Ð/˜dÐ/ hÐ/Ð/ðL
"ð L
"ð L
"ð L
"ð L
"ˆG�BŒKñ L
"ô 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<   