§
    
 @gv  ã                  ó„  — 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% 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j.        dLd)d'ie,¤Ž G d*„ d+ee*         ¦  «        ¦   «         Z/ G d,„ d-ej!        e/e*                  ¦  «        Z0 G d.„ d/e0e/e*                  ¦  «        Z1 G d0„ d1e0e/e*                  ¦  «        Z2 G d2„ d3e1e/e*                  e2e/e*                  ¦  «        Z3 G d4„ d5e0e/e4                  ¦  «        Z5 G d6„ d7e0e/e4                  ¦  «        Z6 G d8„ d9e0e/e                  ¦  «        Z7 G d:„ d;e0e/e                  ¦  «        Z8 G d<„ d=e0e/e                  ¦  «        Z9 G d>„ d?e0e/e                  ¦  «        Z: G d@„ dAe2e/e4                  ¦  «        Z; G dB„ dCe2e/e4                  ¦  «        Z< G dD„ dEe2e/e                  ¦  «        Z= G dF„ dGe2e/e                  ¦  «        Z> G dH„ dIe2e/e                  ¦  «        Z? G dJ„ dKe2e/e                  ¦  «        Z@dS )Mé    )ÚannotationsN)Údate)Údatetime)Ú	timedelta)ÚDecimal)ÚAny)Úcast)ÚGeneric)ÚOptional)Úoverload)Ú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                  ó`  — 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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Úemptyr/   )r1   r3   c               óD   — | j                              ||||dœ¦  «         d S )N)r-   r.   r1   r3   )Ú__dict__Úupdate)Úselfr-   r.   r1   r3   s        úY/var/www/piapp/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/ranges.pyÚ__init__zRange.__init__^   s>   € ð ŒM× Ò à"Ø"Ø$Ø"ð	ð ñô ð ð ð ó    Úreturnc                ó   — | j          S ©N©r3   ©r7   s    r8   Ú__bool__zRange.__bool__p   s   € Ø”:ˆ~Ðr:   c                ó   — | j         S ©z$A synonym for the 'empty' attribute.r>   r?   s    r8   ÚisemptyzRange.isemptys   ó   € ð ŒzÐr:   c                ó   — | j         S rB   r>   r?   s    r8   Úis_emptyzRange.is_emptyy   rD   r:   c                ó$   — | j         d         dk    S )z,Return True if the lower bound is inclusive.r   ú[©r1   r?   s    r8   Ú	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)r3   r-   r?   s    r8   Ú	lower_infzRange.lower_inf…   ó   € ð
 ”:ˆ~Ð4 $¤*°Ð"4Ð4r:   c                ó$   — | j         d         dk    S )z,Return True if the upper bound is inclusive.r   ú]rI   r?   s    r8   Ú	upper_inczRange.upper_incŒ   rK   r:   c                ó$   — | j          o| j        du S )zOReturn True if this range is non-empty and the upper bound is
        infinite.N)r3   r.   r?   s    r8   Ú	upper_infzRange.upper_inf’   rN   r:   úAbstractRange[Range[_T]]c                ó   — t          ¦   «         S r=   )ÚAbstractRanger?   s    r8   Ú__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   ú()r3   r-   r.   r1   ©r7   rX   s     r8   Ú_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-   Úintr.   r   r   r   r?   s    r8   Ú_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_valuesra   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[   rH   Nr   éÿÿÿÿr   >   rH   rP   TF)rb   )r7   rc   rd   rf   rg   rh   Úvalue1_is_lower_boundÚvalue2_is_lower_boundÚ
value1_incÚ
value2_incÚsteps              r8   Ú_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   )r`   r+   ÚNotImplementedr3   r-   r1   r.   rp   ©
r7   rq   ÚslowerÚslower_bÚolowerÚolower_bÚsupperÚsupper_bÚoupperÚoupper_bs
             r8   Ú__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   )r3   r-   r1   rp   r.   rt   s
             r8   Úcontained_byzRange.contained_byC  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`.)r`   r+   r€   r]   r\   s     r8   ÚcontainszRange.contains`  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©r3   r-   r1   r.   rp   ©
r7   rq   ru   rv   ry   rz   rw   rx   r{   r|   s
             r8   ÚoverlapszRange.overlapsh  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   )r3   r.   r1   r-   rp   )r7   rq   ry   rz   rw   rx   s         r8   Ú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…   )r7   rq   ru   rv   r{   r|   s         r8   Ú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   )r3   r-   r1   rp   )r7   rq   ru   rv   rw   rx   s         r8   Ú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   )r3   r.   r1   rp   )r7   rq   ry   rz   r{   r|   s         r8   Ú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.Trj   NFrP   rH   r   rZ   r[   )rp   rb   )r7   rc   rd   rf   rg   Úresro   s          r8   Ú_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   )r3   r-   r1   r.   r”   r†   s
             r8   Ú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   rI   )r3   r‡   r–   Ú
ValueErrorr-   r1   r.   rp   r+   r	   r0   ©r7   rq   ru   rv   ry   rz   rw   rx   r{   r|   ÚrlowerÚrlower_bÚrupperÚrupper_bs                 r8   Ú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ž   ©r7   rq   s     r8   Ú__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>   rH   rZ   rP   rI   r[   FzUnhandled case computing z - )	r3   r-   r1   r.   rp   r˜   r+   r	   r0   )r7   rq   ru   rv   ry   rz   rw   rx   r{   r|   Úsl_vs_olÚsu_vs_ouÚsl_vs_ouÚsu_vs_olr�   r›   s                   r8   Ú
differencezRange.difference>  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ÐBr:   c                ó,   — |                       |¦  «        S r=   )r§   r    s     r8   Ú__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   rI   )	r3   r‡   r+   r-   r1   r.   rp   r	   r0   r™   s                 r8   Ú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     r8   Ú__mul__zRange.__mul__³  s   € Ø× Ò  Ñ'Ô'Ð'r:   c                ó*   — |                       ¦   «         S r=   )Ú
_stringifyr?   s    r8   Ú__str__zRange.__str__¶  s   € Ø�ŠÑ Ô Ð r:   c                óŽ   — | j         rdS | j        | j        }}|€dn|}|€dn|}t          d| j        ¦  «        \  }}|› |› d|› |› �S )Nr3   Ú zTuple[str, str]ú,)r3   r-   r.   r	   r1   )r7   ÚlÚrÚb0Úb1s        r8   r¯   zRange._stringify¹  sl   € ØŒ:ð 	Ø�7àŒz˜4œ:ˆ1ˆØ�)ˆBˆB ˆØ�)ˆBˆB ˆåÐ'¨¬Ñ5Ô5‰ˆˆBàÐ!�aÐ!Ð!˜!Ð!˜RÐ!Ð!Ð!r:   © )NN)r-   r,   r.   r,   r1   r0   r3   r2   )r;   r2   )r;   rT   )rX   r$   r;   r2   )r;   r   )F)rc   r,   rd   re   rf   r,   rg   re   rh   r2   r;   ra   )rq   r   r;   r2   )rq   r~   r;   r2   )rX   r�   r;   r2   )
rc   r,   rd   re   rf   r,   rg   re   r;   r2   )rq   r~   r;   r~   )r;   re   )/Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   Ú__annotations__r.   r   ÚdataclassesÚfieldr1   r3   Ú	dc_kwonlyr   r9   r@   ÚpropertyrC   rF   rJ   rM   rQ   rS   rW   r]   rb   rp   r}   r€   rƒ   r‡   r‰   Ú
__lshift__rŒ   Ú
__rshift__rŽ   r‘   r”   r–   rž   r¡   r§   r©   r«   r­   r°   r¯   r¸   r:   r8   r+   r+   8   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ð ð ð ð:/ð /ð /ð /ðð ð ð ð@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dZdZedd	„¦   «         Zedd„¦   «         Zdˆ fd„Zdd„Z G d„ de	j
        ee                  ¦  «        Zˆ xZS )rV   zª
    Base for PostgreSQL RANGE types.

    .. seealso::

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

    TÚclsú	Type[_TE]Úkwr   r;   r"   c                ó   — d S r=   r¸   ©r7   rÅ   rÇ   s      r8   ÚadaptzAbstractRange.adaptÔ  ó   € àˆr:   úType[TypeEngineMixin]úTypeEngine[Any]c                ó   — d S r=   r¸   rÉ   s      r8   rÊ   zAbstractRange.adaptØ  rË   r:   ú-Type[Union[TypeEngine[Any], TypeEngineMixin]]c                óÚ   •— t          |t          ¦  «        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ÚAbstractRangeImplÚ	__class__rÒ   ÚtypeÚsuperrÊ   )r7   rÅ   rÇ   Ú
visit_namerÕ   s       €r8   rÊ   zAbstractRange.adaptÜ  s„   ø€ õ �cÕ,Ñ-Ô-ð 	&°#¸T¼^Ð2KÐ2Kð Ô,ˆJð•4ØÐ(Ð(Ð(Ø�d”nÐ%Ø! :Ð.ñô ñ ô ð õ ‘7”7—=’= Ñ%Ô%Ð%r:   rX   c                ó”  — |j         �|j         n|j        }t          |t          ¦  «        r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-   r.   r`   ra   Ú	INT8RANGEr   ÚfloatÚNUMRANGEr   ÚtzinfoÚTSRANGEÚ	TSTZRANGEr   Ú	DATERANGEÚsqltypesÚNULLTYPE)r7   rX   Úspecs      r8   Ú_resolve_for_literalz"AbstractRange._resolve_for_literalû  s¥   € Ø#œkÐ5ˆuŒ{ˆ{¸5¼;ˆå�d�CÑ Ô ð 
	%Ý‘;”;ÐÝ˜�w­Ð.Ñ/Ô/ð 	%Ý‘:”:ÐÝ˜�hÑ'Ô'ð 	%Ø$(¤KÐ@•7‘9”9�9µY±[´[Ð@Ý˜�dÑ#Ô#ð 	%Ý‘;”;Ðõ Ô$Ð$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.rq   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   )r7   rq   rÇ   s      r8   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     r8   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     r8   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     r8   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     r8   rŒ   z2AbstractRange.comparator_factory.strictly_right_of+  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     r8   r‘   z4AbstractRange.comparator_factory.not_extend_right_of3  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     r8   rŽ   z3AbstractRange.comparator_factory.not_extend_left_of9  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     r8   r–   z,AbstractRange.comparator_factory.adjacent_to?  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     r8   rž   z&AbstractRange.comparator_factory.unionE  ó   € ð
 ”9×$Ò$¥Y¤]°EÑ:Ô:Ð:r:   c                óL   — | j                              t          j        |¦  «        S ró   )ré   rê   r   Úsubr    s     r8   r§   z+AbstractRange.comparator_factory.differenceL  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     r8   r«   z-AbstractRange.comparator_factory.intersectionS  rõ   r:   N)rq   r   rÇ   r   r;   rç   )rq   r   r;   rç   )rq   r   r;   rø   )r¹   rº   r»   r¼   rƒ   r€   r‡   r‰   rÂ   rŒ   rÃ   r‘   rŽ   r–   rž   r§   r«   r¸   r:   r8   Ú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Í   )rX   r   r;   r   )r¹   rº   r»   r¼   Úrender_bind_castÚ__abstract__r   rÊ   rä   r   Ú
Comparatorr+   r   rû   Ú__classcell__)rÕ   s   @r8   rV   rV   Æ  sè   ø€ € € € € ðð ð Ðà€Làðð ð ñ „Xðð ðð ð ñ „Xðð&ð &ð &ð &ð &ð &ð>%ð %ð %ð %ðN;ð N;ð N;ð N;ð N;˜ZÔ2°5¸´:Ô>ñ N;ô N;ð N;ð N;ð N;ð N;ð N;r:   rV   c                  ó   — e Zd ZdZdS )rÔ   úKMarker for AbstractRange that will apply a subclass-specific
    adaptationN©r¹   rº   r»   r¼   r¸   r:   r8   rÔ   rÔ   [  s   € € € € € ðð ð ð r:   rÔ   c                  ó   — e Zd ZdZdZdS )ÚAbstractMultiRangez$base for PostgreSQL MULTIRANGE typesTN)r¹   rº   r»   r¼   rý   r¸   r:   r8   r  r  `  s   € € € € € Ø.Ð.à€L€L€Lr:   r  c                  ó   — e Zd ZdZdS )ÚAbstractMultiRangeImplr  Nr  r¸   r:   r8   r  r  f  s   € € € € € ðð ð ð r:   r  c                  ó   — e Zd ZdZd ZdS )Ú	INT4RANGEz(Represent the PostgreSQL INT4RANGE type.N©r¹   rº   r»   r¼   rÒ   r¸   r:   r8   r  r  m  ó   € € € € € Ø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:   r8   rÚ   rÚ   s  r
  r:   rÚ   c                  ó   — e Zd ZdZd ZdS )rÜ   z'Represent the PostgreSQL NUMRANGE type.Nr	  r¸   r:   r8   rÜ   rÜ   y  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:   r8   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:   r8   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:   r8   rß   rß   ‹  r
  r:   rß   c                  ó   — e Zd ZdZd ZdS )ÚINT4MULTIRANGEz-Represent the PostgreSQL INT4MULTIRANGE type.Nr	  r¸   r:   r8   r  r  ‘  ó   € € € € € Ø7Ð7à%€N€N€Nr:   r  c                  ó   — e Zd ZdZd ZdS )ÚINT8MULTIRANGEz-Represent the PostgreSQL INT8MULTIRANGE type.Nr	  r¸   r:   r8   r  r  —  r  r:   r  c                  ó   — e Zd ZdZd ZdS )ÚNUMMULTIRANGEz,Represent the PostgreSQL NUMMULTIRANGE type.Nr	  r¸   r:   r8   r  r  �  s   € € € € € Ø6Ð6à$€N€N€Nr:   r  c                  ó   — e Zd ZdZd ZdS )ÚDATEMULTIRANGEz-Represent the PostgreSQL DATEMULTIRANGE type.Nr	  r¸   r:   r8   r  r  £  r  r:   r  c                  ó   — e Zd ZdZd ZdS )ÚTSMULTIRANGEr  Nr	  r¸   r:   r8   r  r  ©  s   € € € € € Ø0Ð0à#€N€N€Nr:   r  c                  ó   — e Zd ZdZd ZdS )ÚTSTZMULTIRANGEr  Nr	  r¸   r:   r8   r  r  ¯  s   € € € € € Ø2Ð2à%€N€N€Nr:   r  r¸   )AÚ
__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á   ÚsqlÚsql.type_apir   Úutilr   Úutil.typingr    Úsql.elementsr!   r"   r#   r$   r0   Údc_slotsrÀ   Ú	dataclassr+   rV   rÔ   r  r  ra   r  rÚ   rÜ   rà   rÞ   rß   r  r  r  r  r  r  r¸   r:   r8   ú<module>r)     sD  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø (Ð (Ð (Ð (Ð (Ð (Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "àð 0Ø-Ð-Ð-Ð-Ð-Ð-Ø#Ð#Ð#Ð#Ð#Ð#Ø/Ð/Ð/Ð/Ð/Ð/à€WˆT˜ÐÑÔ€àÐ,Ô-€àð Ø˜ˆ€HØ˜DÐ!€I€Ià€HØ€Ið €ÔÐ/Ð/˜dÐ/ hÐ/Ð/ðJ
"ð J
"ð J
"ð J
"ð J
"ˆG�BŒKñ J
"ô J
"ñ 0Ô/ðJ
"ðZR;ð R;ð R;ð R;ð R;�HÔ'¨¨b¬	Ô2ñ R;ô R;ð R;ðjð ð ð ð ˜ e¨B¤iÔ0ñ ô ð ð
ð ð ð ð ˜ u¨R¤yÔ1ñ ô ð ðð ð ð ð Ø�e˜B”iÔ Ð"4°U¸2´YÔ"?ñô ð ð!ð !ð !ð !ð !�˜e CœjÔ)ñ !ô !ð !ð!ð !ð !ð !ð !�˜e CœjÔ)ñ !ô !ð !ð ð  ð  ð  ð  ˆ}˜U 7œ^Ô,ñ  ô  ð  ð!ð !ð !ð !ð !�˜e DœkÔ*ñ !ô !ð !ðð ð ð ð ˆm˜E (œOÔ,ñ ô ð ð!ð !ð !ð !ð !�˜e HœoÔ.ñ !ô !ð !ð&ð &ð &ð &ð &Ð'¨¨c¬
Ô3ñ &ô &ð &ð&ð &ð &ð &ð &Ð'¨¨c¬
Ô3ñ &ô &ð &ð%ð %ð %ð %ð %Ð& u¨W¤~Ô6ñ %ô %ð %ð&ð &ð &ð &ð &Ð'¨¨d¬Ô4ñ &ô &ð &ð$ð $ð $ð $ð $Ð% e¨H¤oÔ6ñ $ô $ð $ð&ð &ð &ð &ð &Ð'¨¨h¬Ô8ñ &ô &ð &ð &ð &r:   