Ë
    r™ãjI~  ã                  ó8  — 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jZ                  d(d(¬)«       G d*„ d+ee+   «      «       Z. G d,„ d-ee.e+      «      Z/ G d.„ d/e!jL                  e+   «      Z0 G d0„ d1e0e.e+      «      Z1 G d2„ d3e1e+   «      Z2 G d4„ d5e0ee.e+         «      Z3 G d6„ d7e3e+   «      Z4 G d8„ d9e1e5   «      Z6 G d:„ d;e1e5   «      Z7 G d<„ d=e1e   «      Z8 G d>„ d?e1e   «      Z9 G d@„ dAe1e   «      Z: G dB„ dCe1e   «      Z; G dD„ dEe3e5   «      Z< G dF„ dGe3e5   «      Z= G dH„ dIe3e   «      Z> G dJ„ dKe3e   «      Z? G dL„ dMe3e   «      Z@ G dN„ dOe3e   «      ZAdPZBdQZCdSdR„ZDy)Té    )ÚannotationsN)Údate)Údatetime)Ú	timedelta)ÚDecimal)ÚAny)Úcast)ÚGeneric)ÚList)ÚLiteral)Ú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)ÚOperatorClass)Ú
TypeEngine)ÚColumnElement)Ú_TE)ÚTypeEngineMixinÚ_T)Úbound)z()ú[)z(]z[]T)ÚfrozenÚslotsc                  óþ  — e Zd ZU dZdZded<   	 dZded<   	  ej                  dd¬«      Z	d	ed
<    ej                  dd¬«      Z
ded<   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d-d„Zd.d„Z	 d/	 	 	 	 	 	 	 	 	 	 	 d0d„Zd1d„Zd2d„Zd3d„ZeZd2d„Zd2d„ZeZd2d„ZeZd2d„Z d2d „Z!	 	 	 	 	 	 	 	 	 	 d4d!„Z"d2d"„Z#d5d#„Z$d5d$„Z%d5d%„Z&d5d&„Z'd5d'„Z(d5d(„Z)d6d)„Z*d6d*„Z+y)7Ú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(   T)ÚdefaultÚkw_onlyÚ_BoundsTypeÚboundsFÚboolÚemptyc                ó   — | j                    S ©N©r5   ©Úselfs    úp/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/ranges.pyÚ__bool__zRange.__bool__T   s   € Ø—:‘:ˆ~Ðó    c                ó   — | j                   S ©z$A synonym for the 'empty' attribute.r8   r9   s    r;   ÚisemptyzRange.isemptyW   ó   € ð �z‰zÐr=   c                ó   — | j                   S r?   r8   r9   s    r;   Úis_emptyzRange.is_empty]   rA   r=   c                ó&   — | j                   d   dk(  S )z,Return True if the lower bound is inclusive.r   ú[©r3   r9   s    r;   Ú	lower_inczRange.lower_incc   ó   € ð �{‰{˜1‰~ Ñ$Ð$r=   c                ó<   — | j                    xr | j                  du S )zKReturn True if this range is non-empty and lower bound is
        infinite.N)r5   r.   r9   s    r;   Ú	lower_infzRange.lower_infi   ó   € ð
 —:‘:ˆ~Ò4 $§*¡*°Ð"4Ð4r=   c                ó&   — | j                   d   dk(  S )z,Return True if the upper bound is inclusive.r   ú]rF   r9   s    r;   Ú	upper_inczRange.upper_incp   rH   r=   c                ó<   — | j                    xr | j                  du S )zOReturn True if this range is non-empty and the upper bound is
        infinite.N)r5   r/   r9   s    r;   Ú	upper_infzRange.upper_infv   rK   r=   c                ó   — t        «       S r7   )ÚAbstractSingleRanger9   s    r;   Ú__sa_type_engine__zRange.__sa_type_engine__}   s   € ä"Ó$Ð$r=   c                óð  — | j                   ry| j                  €@| j                  du xs0 | j                  d   dk(  r|| j                  k  S || j                  k  S | j                  €0| j                  d   dk(  r|| j                  kD  S || j                  k\  S | j                  d   dk(  r|| j                  kD  n|| j                  k\  xr0 | j                  d   dk(  r|| j                  k  S || j                  k  S )z3Return True if this range contains the given value.FNr   ú)r   ú()r5   r.   r/   r3   ©r:   Úvalues     r;   Ú_contains_valuezRange._contains_value�   s  € ð �:Š:Øà�:‰:ÐØ—:‘: Ð%ò à—;‘;˜q‘> SÒ(ð ˜Ÿ
™
Ñ"ðð ˜dŸj™jÑ(ðð �:‰:Ðð —;‘;˜q‘> SÒ(ð ˜Ÿ
™
Ñ"ðð ˜dŸj™jÑ(ðð �{‰{˜1‰~ Ò$ð �D—J‘JÒà˜$Ÿ*™*Ñ$ò
ð �{‰{˜1‰~ Ò$ð �D—J‘JÑð	
ð ˜$Ÿ*™*Ñ$ð	
r=   c                óX  — t        | j                  t        «      st        | j                  t        «      ryt        | j                  t        «      st        | j                  t        «      ryt        | j                  t
        «      st        | j                  t
        «      rt        d¬«      S y)uA   Determine the â€œstepâ€� for this range, if it is a discrete one.r   N)Údays)Ú
isinstancer.   Úintr/   r   r   r   r9   s    r;   Ú_get_discrete_stepzRange._get_discrete_stepŸ   sn   € ô �d—j‘j¤#Ô&¬*°T·Z±ZÄÔ*EØÜ˜Ÿ
™
¤HÔ-´Ø�J‰Jœô2
ð
 Ü˜Ÿ
™
¤DÔ)¬Z¸¿
¹
ÄDÔ-IÜ !Ô$Ð$àr=   c                óf  — |dv }|dv }||cxu r€n n||k(  ry|rdS dS |€|rdS dS |€|rdS dS ||k(  r||k(  ry|dv }|dv }	| j                  «       }
|
�*|r
|s||
z  }d}n	|r||
z  }d}|r
|	s||
z  }d}	n	|	r||
z  }d}	||k  ry||kD  ry|ry|r|	ry|s|	s||k(  ry|rdS dS |s|rdS dS |	s|rdS dS y)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.
        >   rV   rE   r   éÿÿÿÿr   >   rE   rM   TF)r^   )r:   Úvalue1Úbound1Úvalue2Úbound2Úonly_valuesÚvalue1_is_lower_boundÚvalue2_is_lower_boundÚ
value1_incÚ
value2_incÚsteps              r;   Ú_compare_edgeszRange._compare_edges³   sN  € ð" !'¨*Ð 4ÐØ &¨*Ð 4Ðð �V×#Ø$Ð(=Ò=Øá2�rÐ9¸Ð9Øˆ^Ù.�2Ð5°AÐ5Øˆ^Ù-�1Ð5°2Ð5ð �VÒ ¨&Ò 0Øà˜zÐ)ˆ
Ø˜zÐ)ˆ
Ø×&Ñ&Ó(ˆàÐñ %Ù!Ø˜d‘N�FØ!%‘JáØ˜d‘N�FØ!&�JÙ$Ù!Ø˜d‘N�FØ!%‘JáØ˜d‘N�FØ!&�Jà�FŠ?ØØ�fŠ_ØÙØñ ™jØÙ©
Ø(Ð,AÒAØá 5˜1Ð=¸2Ð=ÙÙ1�qÐ9°rÐ9ÙÙ2�rÐ9¸Ð9àr=   c                óÌ  — t        |t        «      st        S | j                  r|j                  ry| j                  |j                  k7  ry| j                  }| j
                  d   }|j                  }|j
                  d   }| j                  }| j
                  d   }|j                  }|j
                  d   }	| j                  ||||«      dk(  xr | j                  ||||	«      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,   ÚNotImplementedr5   r.   r3   r/   rk   ©
r:   ÚotherÚslowerÚslower_bÚolowerÚolower_bÚsupperÚsupper_bÚoupperÚoupper_bs
             r;   Ú__eq__zRange.__eq__  sÎ   € ô
 ˜%¤Ô'Ü!Ð!à�:Š:˜%Ÿ+š+ØØ�Z‰Z˜5Ÿ;™;Ò&Øà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆð ×Ñ ¨°&¸(ÓCÀqÑHò MØ×#Ñ# F¨H°f¸hÓGÈ1ÑLð	
r=   c                óp  — | j                   ry|j                   ry| j                  }| j                  d   }|j                  }|j                  d   }| j                  ||||«      dk  ry| j                  }| j                  d   }|j                  }|j                  d   }	| j                  ||||	«      dkD  ryy)z7Determine whether this range is a contained by `other`.TFr   r   )r5   r.   r3   rk   r/   rn   s
             r;   Úcontained_byzRange.contained_by'  s­   € ð �:Š:Øð �;Š;Øà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v x°¸ÓBÀQÒFØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v x°¸ÓBÀQÒFØàr=   c                óf   — t        |t        «      r|j                  | «      S | j                  |«      S )z.Determine whether this range contains `value`.)r\   r,   rz   rY   rW   s     r;   ÚcontainszRange.containsD  s0   € ô �eœUÔ#Ø×%Ñ% dÓ+Ð+à×'Ñ'¨Ó.Ð.r=   c                óÊ  — | j                   s|j                   ry| j                  }| j                  d   }| j                  }| j                  d   }|j                  }|j                  d   }|j                  }|j                  d   }	| j	                  ||||«      dk\  r| j	                  ||||	«      dk  ry| j	                  ||||«      dk\  r| j	                  ||||«      dk  ryy)z3Determine whether this range overlaps with `other`.Fr   r   T©r5   r.   r3   r/   rk   ©
r:   ro   rp   rq   rt   ru   rr   rs   rv   rw   s
             r;   ÚoverlapszRange.overlapsN  sÝ   € ð �:Š:˜ŸšØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆð ×Ñ ¨°&¸(ÓCÀqÒHØ×#Ñ# F¨H°f¸hÓGÈ1ÒLàð ×Ñ ¨°&¸(ÓCÀqÒHØ×#Ñ# F¨H°f¸hÓGÈ1ÒLààr=   c                óÎ   — | j                   s|j                   ry| j                  }| j                  d   }|j                  }|j                  d   }| j	                  ||||«      dk  S )zBDetermine whether this range is completely to the left of `other`.Fr   r   )r5   r/   r3   r.   rk   )r:   ro   rt   ru   rr   rs   s         r;   Ústrictly_left_ofzRange.strictly_left_ofn  ó^   € ð �:Š:˜ŸšØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆð ×"Ñ" 6¨8°V¸XÓFÈÑJÐJr=   c                óÎ   — | j                   s|j                   ry| j                  }| j                  d   }|j                  }|j                  d   }| j	                  ||||«      dkD  S )zCDetermine whether this range is completely to the right of `other`.Fr   r   r~   )r:   ro   rp   rq   rv   rw   s         r;   Ústrictly_right_ofzRange.strictly_right_of  rƒ   r=   c                óÎ   — | j                   s|j                   ry| j                  }| j                  d   }|j                  }|j                  d   }| j                  ||||«      dk\  S )z>Determine whether this does not extend to the left of `other`.Fr   )r5   r.   r3   rk   )r:   ro   rp   rq   rr   rs   s         r;   Únot_extend_left_ofzRange.not_extend_left_of�  ó^   € ð �:Š:˜ŸšØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆð ×"Ñ" 6¨8°V¸XÓFÈ!ÑKÐKr=   c                óÎ   — | j                   s|j                   ry| j                  }| j                  d   }|j                  }|j                  d   }| j                  ||||«      dk  S )z?Determine whether this does not extend to the right of `other`.Fr   r   )r5   r/   r3   rk   )r:   ro   rt   ru   rv   rw   s         r;   Únot_extend_right_ofzRange.not_extend_right_ofŸ  rˆ   r=   c                ó<  — | j                  ||||d«      }|dk(  r<| j                  «       }|€y|dk(  r|dk(  r|||z
  k(  S ||k(  S |dk(  r||k(  S |||z
  k(  S |dk(  rA|dk(  r|dk(  s
|dk(  r|dk(  r| j                  «       }|�y|dk(  xr |dk(  xs |dk(  xr |dk(  S y)	zTDetermine whether an upper bound is immediately successive to a
        lower bound.Tr`   FrM   rE   r   rU   rV   )rk   r^   )r:   ra   rb   rc   rd   Úresrj   s          r;   Ú_upper_edge_adjacent_to_lowerz#Range._upper_edge_adjacent_to_lower®  só   € ð ×!Ñ! &¨&°&¸&À$ÓGˆØ�"Š9Ø×*Ñ*Ó,ˆDØˆ|ØØ˜Š}Ø˜S’=Ø! V¨d¡]Ñ2Ð2à! VÑ+Ð+à˜S’=Ø! VÑ+Ð+à! V¨d¡]Ñ2Ð2Ø�AŠXð ˜#’Ø˜c’MØ˜S’=Ø˜c’Mà×.Ñ.Ó0�ØÐ#Øà˜#‘ò "Ø˜c‘Mò"à˜S‘=ò "Ø˜c‘Mð	ð r=   c                ó`  — | j                   s|j                   ry| j                  }| j                  d   }| j                  }| j                  d   }|j                  }|j                  d   }|j                  }|j                  d   }	| j	                  ||||«      xs | j	                  ||	||«      S )z8Determine whether this range is adjacent to the `other`.Fr   r   )r5   r.   r3   r/   r�   r   s
             r;   Úadjacent_tozRange.adjacent_toÝ  s¤   € ð �:Š:˜ŸšØà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×1Ñ1Ø�H˜f hó
ò 
à×/Ñ/Ø�H˜f hó
ð	
r=   c           	     ó*  — | j                   r|S |j                   r| S | j                  |«      s| j                  |«      st        d«      ‚| j                  }| j
                  d   }| j                  }| j
                  d   }|j                  }|j
                  d   }|j                  }|j
                  d   }	| j                  ||||«      dk  r|}
|}n|}
|}| j                  ||||	«      dkD  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   rF   )r5   r€   r�   Ú
ValueErrorr.   r3   r/   rk   r,   r	   r2   ©r:   ro   rp   rq   rt   ru   rr   rs   rv   rw   ÚrlowerÚrlower_bÚrupperÚrupper_bs                 r;   ÚunionzRange.unionó  s  € ð �:Š:ØˆLØ�;Š;ØˆKà�}‰}˜UÔ#¨D×,<Ñ,<¸UÔ,CÜð-óð ð
 —‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v x°¸ÓBÀQÒFØˆFØ‰HàˆFØˆHà×Ñ˜v x°¸ÓBÀQÒFØˆFØ‰HàˆFØˆHäØ�F¤4¬°XÀÑ5HÓ#Iô
ð 	
r=   c                ó$   — | j                  |«      S r7   )r—   ©r:   ro   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   }	| j	                  ||||«      }
| j	                  ||||	«      }|
dk  r|dkD  rt        d«      ‚| j	                  ||||	«      }| j	                  ||||«      }|dkD  s|dk  r| S |
dk\  r|dk  rt        ddd¬«      S |
dk  ra|dk\  r\|dk  rW|dk(  rdnd	}|dk7  r*|d	k7  r%| j	                  ||||«      dk(  rt        ddd¬«      S t        ||t        t        ||z   «      ¬
«      S |
dk\  ra|dk\  r\|dk  rW|	d	k(  rdnd}|dk7  r*|d	k7  r%| j	                  ||||«      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 implementedNTr8   rE   rU   rM   rF   rV   zUnhandled case computing z - )	r5   r.   r3   r/   rk   r‘   r,   r	   r2   )r:   ro   rp   rq   rt   ru   rr   rs   rv   rw   Úsl_vs_olÚsu_vs_ouÚsl_vs_ouÚsu_vs_olr–   r”   s                   r;   Ú
differencezRange.difference$  s0  € ð �:Š:˜ŸšØˆKà—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×&Ñ& v¨x¸ÀÓJˆØ×&Ñ& v¨x¸ÀÓJˆØ�aŠ<˜H qšLÜØGóð ð ×&Ñ& v¨x¸ÀÓJˆØ×&Ñ& v¨x¸ÀÓ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                ó$   — | j                  |«      S r7   )r    r™   s     r;   Ú__sub__zRange.__sub__p  s   € Ø�‰˜uÓ%Ð%r=   c           	     ó  — | j                   s|j                   s| j                  |«      st        ddd¬«      S | j                  }| j                  d   }| j
                  }| j                  d   }|j                  }|j                  d   }|j
                  }|j                  d   }	| j                  ||||«      dk  r|}
|}n|}
|}| j                  ||||	«      dkD  r|}|	}n|}|}t        |
|t        t        ||z   «      ¬«      S )zdCompute the intersection of this range with the `other`.

        .. versionadded:: 2.0.10

        NTr8   r   r   rF   )	r5   r€   r,   r.   r3   r/   rk   r	   r2   r’   s                 r;   ÚintersectionzRange.intersections  sÿ   € ð �:Š:˜Ÿš¨D¯M©M¸%Ô,@Ü˜˜t¨4Ô0Ð0à—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—;‘;˜q‘>ˆØ—‘ˆØ—<‘< ‘?ˆØ—‘ˆØ—<‘< ‘?ˆà×Ñ˜v x°¸ÓBÀQÒFØˆFØ‰HàˆFØˆHà×Ñ˜v x°¸ÓBÀQÒFØˆFØ‰HàˆFØˆHäØØÜœ X°Ñ%8Ó9ô
ð 	
r=   c                ó$   — | j                  |«      S r7   )r¤   r™   s     r;   Ú__mul__zRange.__mul__™  s   € Ø× Ñ  Ó'Ð'r=   c                ó"   — | j                  «       S r7   )Ú
_stringifyr9   s    r;   Ú__str__zRange.__str__œ  s   € Ø�‰Ó Ð r=   c                ó¬   — | j                   ry| j                  | j                  }}|€dn|}|€dn|}t        d| j                  «      \  }}|› |› d|› |› �S )Nr5   Ú zTuple[str, str]ú,)r5   r.   r/   r	   r3   )r:   ÚlÚrÚb0Úb1s        r;   r¨   zRange._stringifyŸ  sa   € Ø�:Š:Øà�z‰z˜4Ÿ:™:ˆ1ˆØ�)‰B ˆØ�)‰B ˆäÐ'¨¯©Ó5‰ˆˆBà��a�S˜˜!˜˜R˜DÐ!Ð!r=   )Úreturnr4   )r±   zAbstractSingleRange[_T])rX   r&   r±   r4   )r±   r   )F)ra   r-   rb   Ústrrc   r-   rd   r²   re   r4   r±   r]   )ro   r   r±   r4   )ro   ú	Range[_T]r±   r4   )rX   zUnion[_T, Range[_T]]r±   r4   )
ra   r-   rb   r²   rc   r-   rd   r²   r±   r4   )ro   r³   r±   r³   )r±   r²   ),Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   Ú__annotations__r/   ÚdataclassesÚfieldr3   r5   r<   Úpropertyr@   rC   rG   rJ   rN   rP   rS   rY   r^   rk   rx   rz   r|   Ú__contains__r€   r‚   Ú
__lshift__r…   Ú
__rshift__r‡   rŠ   r�   r�   r—   rš   r    r¢   r¤   r¦   r©   r¨   © r=   r;   r,   r,   4   sæ  … ñð* €Eˆ<ÓØà€Eˆ<ÓØà+˜+×+Ñ+°DÀ$ÔG€FˆKÓGØ#�+×#Ñ#¨E¸4Ô@€Eˆ4Ó@óð òó ðð
 òó ðð
 ò%ó ð%ð
 ò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                  ó"   — e Zd ZdZedd„«       Zy)Ú
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`.
    c                ó   — t        «       S r7   )ÚAbstractMultiRanger9   s    r;   rS   zMultiRange.__sa_type_engine__Á  s   € ä!Ó#Ð#r=   N)r±   zAbstractMultiRange[_T])r´   rµ   r¶   r·   r»   rS   r¿   r=   r;   rÁ   rÁ   ¬  s   „ ñð( ò$ó ñ$r=   rÁ   c                  ó¶   ‡ — e Zd ZdZdZej                  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.Tc                 ó   — y r7   r¿   ©r:   ÚclsÚkws      r;   ÚadaptzAbstractRange.adaptÏ  s   € Ø7:r=   c                 ó   — y r7   r¿   rÇ   s      r;   rÊ   zAbstractRange.adaptÒ  s   € ð r=   c                óÈ   •— t        |t        t        f«      r=|| 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Ê   )r:   rÈ   rÉ   Ú
visit_namerÒ   s       €r;   rÊ   zAbstractRange.adapt×  st   ø€ ô �sÔ4Ô6LÐMÔNØ˜4Ÿ>™>Ñ)ð ×,Ñ,ˆJð”4Ø�,˜iÐ(Ø�d—n‘nÐ%Ø! :Ð.óó ð ô ‘7‘= Ó%Ð%r=   c                  óp   — 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y)ú AbstractRange.comparator_factoryz-Define comparison operations for range types.c                óB   — | j                   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   )r:   ro   rÉ   s      r;   r|   z)AbstractRange.comparator_factory.containsü  s   € ð —9‘9×$Ñ$¤X¨uÓ5Ð5r=   c                óB   — | j                   j                  t        |«      S )zsBoolean expression. Returns true if the column is contained
            within the right hand operand.
            )rÙ   rÚ   r   r™   s     r;   rz   z-AbstractRange.comparator_factory.contained_by  s   € ð —9‘9×$Ñ$¤\°5Ó9Ð9r=   c                óB   — | j                   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‘9×$Ñ$¤W¨eÓ4Ð4r=   c                óB   — | j                   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‘9×$Ñ$Ô%5°uÓ=Ð=r=   c                óB   — | j                   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_of  s   € ð —9‘9×$Ñ$Ô%6¸Ó>Ð>r=   c                óB   — | j                   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‘9×$Ñ$Ô%8¸%Ó@Ð@r=   c                óB   — | j                   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_of(  s   € ð —9‘9×$Ñ$Ô%7¸Ó?Ð?r=   c                óB   — | j                   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_to.  s   € ð —9‘9×$Ñ$¤[°%Ó8Ð8r=   c                óV   — | j                   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.union4  ó   € ð
 —9‘9×$Ñ$¤Y§]¡]°EÓ:Ð:r=   c                óV   — | j                   j                  t        j                  |«      S rã   )rÙ   rÚ   r    Úsubr™   s     r;   r    z+AbstractRange.comparator_factory.difference;  rå   r=   c                óV   — | j                   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.intersectionB  rå   r=   N)ro   r   rÉ   r   r±   úColumnElement[bool])ro   r   r±   rê   )ro   r   r±   zColumnElement[Range[_T]])r´   rµ   r¶   r·   r|   rz   r€   r‚   r½   r…   r¾   rŠ   r‡   r�   r—   r    r¤   r¿   r=   r;   Úcomparator_factoryr×   ù  sL   „ Ù;ó	6ó	:ó	5ó	>ð &ˆ
ó	?ð 'ˆ
ó	Aó	@ó	9ó	;ó	;ô	;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·   Úrender_bind_castr!   ÚNUMERICÚoperator_classesÚ__abstract__r   rÊ   r"   Ú
Comparatorr,   r   rë   Ú__classcell__)rÒ   s   @r;   rÅ   rÅ   Æ  sš   ø„ Ù:àÐà$×,Ñ,Ðà€LàÚ:ó Ø:àðØ(ðØ03ðà	òó ðð &à:ð &ð ð &ð 
õ	 &ôDN;˜Z×2Ñ2°5¸±:Ñ>÷ N;ð N;r=   rÅ   c                  ó   — e Zd ZdZdZdd„Zy)rR   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                óœ  — |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        «       S t        «       S t        |t        «      r
t        «       S t         j"                  S r7   )r.   r/   r\   r]   Ú	_is_int32Ú	INT4RANGEÚ	INT8RANGEr   ÚfloatÚNUMRANGEr   ÚtzinfoÚTSRANGEÚ	TSTZRANGEr   Ú	DATERANGEÚsqltypesÚNULLTYPE)r:   rX   Úspecs      r;   Ú_resolve_for_literalz(AbstractSingleRange._resolve_for_literalW  s”   € Ø#Ÿk™kÐ5ˆu�{Š{¸5¿;¹;ˆä�dœCÔ ô ˜ÔÜ “{Ð"ä “{Ð"Ü˜œw¬Ð.Ô/Ü“:ÐÜ˜œhÔ'Ø$(§K¢K”7“9Ð@´Y³[Ð@Ü˜œdÔ#Ü“;Ðô ×$Ñ$Ð$r=   N)rX   z
Range[Any]r±   r   ©r´   rµ   r¶   r·   rð   r  r¿   r=   r;   rR   rR   J  s   „ ñð €Lô%r=   rR   c                  ó   — e Zd ZdZy)rÐ   zQMarker for AbstractSingleRange that will apply a subclass-specific
    adaptationN©r´   rµ   r¶   r·   r¿   r=   r;   rÐ   rÐ   m  ó   „ òr=   rÐ   c                  ó   — e Zd ZdZdZdd„Zy)rÃ   z‚Base for PostgreSQL MULTIRANGE types.

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

    Tc                óØ  — |st         j                  S |d   }|j                  �|j                  n|j                  }t	        |t
        «      r&t        d„ |D «       «      r
t        «       S t        «       S t	        |t        t        f«      r
t        «       S t	        |t        «      r |j                  s
t        «       S t        «       S t	        |t         «      r
t#        «       S t         j                  S )Nr   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr7   )rõ   )Ú.0r®   s     r;   ú	<genexpr>z:AbstractMultiRange._resolve_for_literal.<locals>.<genexpr>‡  s   è ø€ Ò/ A”9˜Q—<Ñ/ùs   ‚)rþ   rÿ   r.   r/   r\   r]   ÚallÚINT4MULTIRANGEÚINT8MULTIRANGEr   rø   ÚNUMMULTIRANGEr   rú   ÚTSMULTIRANGEÚTSTZMULTIRANGEr   ÚDATEMULTIRANGE)r:   rX   Úfirstr   s       r;   r  z'AbstractMultiRange._resolve_for_literal|  s¶   € Ùä×$Ñ$Ð$Ø�a‘ˆØ#Ÿk™kÐ5ˆu�{Š{¸5¿;¹;ˆä�dœCÔ ô Ñ/¨Ô/Ô/Ü%Ó'Ð'ä%Ó'Ð'Ü˜œw¬Ð.Ô/Ü “?Ð"Ü˜œhÔ'Ø)-¯ª”<“>ÐJ¼.Ó:JÐJÜ˜œdÔ#Ü!Ó#Ð#ô ×$Ñ$Ð$r=   N)rX   zSequence[Range[Any]]r±   r   r  r¿   r=   r;   rÃ   rÃ   r  s   „ ñð €Lô%r=   rÃ   c                  ó   — e Zd ZdZy)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y)rö   z(Represent the PostgreSQL INT4RANGE type.N©r´   rµ   r¶   r·   rÎ   r¿   r=   r;   rö   rö   ›  ó
   „ Ù2à �Nr=   rö   c                  ó   — e Zd ZdZd Zy)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y)rù   z'Represent the PostgreSQL NUMRANGE type.Nr  r¿   r=   r;   rù   rù   §  s
   „ Ù1à�Nr=   rù   c                  ó   — e Zd ZdZd Zy)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y)rû   ú&Represent the PostgreSQL TSRANGE type.Nr  r¿   r=   r;   rû   rû   ³  s
   „ Ù0à�Nr=   rû   c                  ó   — e Zd ZdZd Zy)rü   ú(Represent the PostgreSQL TSTZRANGE type.Nr  r¿   r=   r;   rü   rü   ¹  r  r=   rü   c                  ó   — e Zd ZdZd Zy)r  z-Represent the PostgreSQL INT4MULTIRANGE type.Nr  r¿   r=   r;   r  r  ¿  ó
   „ Ù7à%�Nr=   r  c                  ó   — e Zd ZdZd Zy)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y)r  z,Represent the PostgreSQL NUMMULTIRANGE type.Nr  r¿   r=   r;   r  r  Ë  s
   „ Ù6à$�Nr=   r  c                  ó   — e Zd ZdZd Zy)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y)r  r  Nr  r¿   r=   r;   r  r  ×  s
   „ Ù0à#�Nr=   r  c                  ó   — e Zd ZdZd Zy)r  r  Nr  r¿   r=   r;   r  r  Ý  s
   „ Ù2à%�Nr=   r  iÿÿÿi   €c                óÎ   — | j                   d u xs" t        | j                   cxk  xr	 t        k  nc xr2 | j                  d u xs" t        | j                  cxk  xr	 t        k  S c S r7   )r.   Ú_min_int_32Ú_max_int_32r/   )r®   s    r;   rõ   rõ   ç  sP   € Ø�G‰G�tˆOÒDœ{¨a¯g©gÖD¼ÔDò Ø	�‰�4ˆÒ@œ;¨!¯'©'Ö@´[Ñ@ðÙ@ðr=   )r®   z
Range[int]r±   r4   )EÚ
__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   rþ   ÚsqlÚsql.operatorsr!   Úsql.type_apir"   Úsql.elementsr#   r$   r%   r&   r2   Ú	dataclassr,   rÁ   rÅ   rR   rÐ   rÃ   rÑ   r]   rö   r÷   rù   rý   rû   rü   r  r  r  r  r  r  r'  r&  rõ   r¿   r=   r;   ú<module>r0     s%  ðõ #ã Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý  Ý Ý å "Ý #Ý Ý )Ý *Ý Ý 'Ý (Ý !Ý Ý *Ý &áÝ-Ý#Ý/áˆT˜Ô€àÐ,Ñ-€ð €×Ñ˜d¨$Ô/ôt	"ˆG�B‰Kó t	"ó 0ðt	"ôn$��e˜B‘i‘ô $ô4A;�H×'Ñ'¨Ñ+ô A;ôH %˜-¨¨b©	Ñ2ô  %ôFÐ1°"Ñ5ô ô
!%˜ x°°b±	Ñ':Ñ;ô !%ôHÐ/°Ñ3ô ô
!Ð# CÑ(ô !ô!Ð# CÑ(ô !ô Ð" 7Ñ+ô  ô!Ð# DÑ)ô !ôÐ! (Ñ+ô ô!Ð# HÑ-ô !ô&Ð'¨Ñ,ô &ô&Ð'¨Ñ,ô &ô%Ð& wÑ/ô %ô&Ð'¨Ñ-ô &ô$Ð% hÑ/ô $ô&Ð'¨Ñ1ô &ð €Ø€ôr=   