
    h                    |   U d Z ddlmZ ddlmZ ddlZddlZddl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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/m0Z0 d d(l1m2Z2 d d)l1m3Z3 d d*l1m4Z4 ej$                  rdd+l5m6Z6 dd,l5m7Z7 dd-lm8Z8 dd.lm9Z9 dd/lm:Z: dd0l;m<Z< dd1l=m>Z> dd2l?m@Z@ dd3lAmBZB dd4lAmCZC dd5lDmEZE d d6lFmGZG d d7lHmIZI d d8lJmKZK d d9lJmLZL d d:l/mMZM d d;l/mNZN d d<lOmPZP d d=lQmRZR d d>lSmTZT d d?l1mUZU d d@l1mVZV d dAl1mWZW d dBl1mXZX  edCe	D      ZY edEe	D      ZZ G dF dGe$eY         Z[ee\dHdIdJdKf   Z] edLe	D      Z^ ej                         Z`dMeadN<    G dO dPe#e^   e"e[e^         Zb G dQ dRebeY   eeY         Zc G dS dTe[eY         Zd G dU dVe[eY         Ze G dW dXeeeY   eeY         Zfy)YzDescriptor properties are more "auxiliary" properties
that exist as configurational elements, but don't participate
as actively in the load/persist ORM loop.

    )annotations)is_dataclassN)Any)Callable)Dict)List)NoReturn)Optional)Sequence)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )
attributes)util)_DeclarativeMapped)LoaderCallableStatus)Mapped)PassiveFlag)SQLORMOperations)_AttributeOptions)_IntrospectsAnnotations)_MapsColumns)MapperProperty)PropComparator)	_none_set)de_stringify_annotation   )event)exc)schema)sql
expression)	operators)BindParameter)get_args)
is_fwd_ref)	is_pep593)_InstanceDict)_RegistryType)History)InstrumentedAttribute)QueryableAttribute)ORMCompileState)_ClassScanMapperConfig)Mapper)ColumnProperty)MappedColumn)InstanceState)
Connection)Row)_DMLColumnArgument)	_InfoType)
ClauseList)ColumnElement)OperatorType)Column)Select)_AnnotationScanType)CallableReference)DescriptorReference)RODescriptorReference_T)bound_PTc                  h    e Zd ZU dZdZded<   dZdZded<   ej                  f	 	 	 	 	 	 	 d
dZ
dd	Zy)DescriptorPropertyzO:class:`.MapperProperty` which proxies access to a
    user-defined descriptor.NOptional[str]docFzDescriptorReference[Any]
descriptorc                    t               N)NotImplementedError)selfstatedict_passives       HD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/orm/descriptor_props.pyget_historyzDescriptorProperty.get_historyf   s     "##    c                      G fddt         j                        } j                  Dt        j                   j
                  d       }j                   j
                  |      r| _         j                  %d	 fd}d
 fd}d fd}t        |||       _         t        j                   j                         j                  j                   j
                   j                   fd j                         } | j
                        |_        j                  j                   j
                  |       y )Nc                  j    e Zd ZdZdZdZed fd       ZddZe	j                  f	 	 	 	 	 	 	 d	 fdZy)
7DescriptorProperty.instrument_class.<locals>._ProxyImplFTc                    j                   S rM   )uses_objectsrO   props    rS   rZ   zDDescriptorProperty.instrument_class.<locals>._ProxyImpl.uses_objectsv   s    (((rU   c                    || _         y rM   )key)rO   r^   s     rS   __init__z@DescriptorProperty.instrument_class.<locals>._ProxyImpl.__init__z   s	    rU   c                *    j                  |||      S rM   )rT   )rO   rP   rQ   rR   r\   s       rS   rT   zCDescriptorProperty.instrument_class.<locals>._ProxyImpl.get_history}   s     ''ug>>rU   Nreturnbool)r^   strrP   InstanceState[Any]rQ   r,   rR   r   rb   r.   )__name__
__module____qualname__accepts_scalar_loaderload_on_unexpire
collectionpropertyrZ   r_   r   PASSIVE_OFFrT   )r\   s   rS   
_ProxyImplrX   q   sa    $)!#J) ) (3'>'>	?)? %? %	?
 ?rU   ro   c                4    t        | j                  |       y rM   )setattrname)objvaluerO   s     rS   fsetz1DescriptorProperty.instrument_class.<locals>.fset   s    TYY.rU   c                2    t        | j                         y rM   )delattrrr   rs   rO   s    rS   fdelz1DescriptorProperty.instrument_class.<locals>.fdel   s    TYY'rU   c                0    t        | j                        S rM   )getattrrr   rx   s    rS   fgetz1DescriptorProperty.instrument_class.<locals>.fget   s    sDII..rU   )r|   ru   ry   c                 &    j                         S rM   )_comparator_factory)mapperrO   s   rS   <lambda>z5DescriptorProperty.instrument_class.<locals>.<lambda>   s    D,,V4rU   )rJ   original_property)rs   r   rt   r   rb   None)rs   r   rb   r   )rs   r   rb   r   )r   AttributeImplrK   r{   class_r^   _is_userland_descriptorrm   create_proxied_attributeparentrJ   implclass_managerinstrument_attribute)	rO   r   ro   descru   ry   r|   
proxy_attrr\   s	   ``      @rS   instrument_classz#DescriptorProperty.instrument_classn   s    	?11 	?( ??"6==$((D9D--dhh="&??"/(/ 'Dt$GDOIZ88IKKHHOO4"

 %TXX.
11$((JGrU   re   r   Mapper[Any]rb   r   )rg   rh   ri   __doc__rJ   __annotations__rZ   _links_to_entityr   rn   rT   r    rU   rS   rH   rH   [   s`      CL((  +66	$!$ $ 	$
 
$2HrU   rH   z
Column[_T]zMappedColumn[_T]zInstrumentedAttribute[_T]z
Mapped[_T]_CCzFweakref.WeakKeyDictionary[Type[Any], Callable[[Any], Tuple[Any, ...]]]_composite_gettersc                  p    e Zd ZU dZded<   ded<   ded<   ded	<   	 d(d
ddd
d
d
d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d) fdZd* fdZd+dZd,dZ e	       Z
d,dZ ej                  d      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-d       Zd,dZ ej                  d       ej                  d      	 	 	 	 	 	 	 	 	 	 d.d              Zej"                  d/d       Zej"                   ej                  d      d0d              Zej(                   ej                  d      d1d              Zed2d       Zed3d       Z ej                  d      d,d       Zd,dZej"                  d4d       Z	 	 d5d Zej<                  f	 	 	 	 	 	 	 d6d!Z	 	 	 	 d7d"Z  G d# d$e!jD                  e#         Z$ G d% d&e%e&         Z'd8d'Z( xZ)S )9CompositePropertyzDefines a "composite" mapped attribute, representing a collection
    of columns as one attribute.

    :class:`.CompositeProperty` is constructed using the :func:`.composite`
    function.

    .. seealso::

        :ref:`mapper_composite`

    z$Union[Type[_CC], Callable[..., _CC]]composite_classz#Tuple[_CompositeAttrType[Any], ...]attrsz=CallableReference[Optional[Callable[[_CC], Tuple[Any, ...]]]]_generated_composite_accessorzType[Comparator[_CC]]comparator_factoryNF)attribute_optionsactive_historydeferredgroupr   infoc                  t         
|   |       t        |t        t        t
        j                  f      r|f|z   | _        d | _        n|| _        || _        || _	        || _
        || _        ||n| j                  j                  | _        d | _        || j                   j#                  |       t%        j&                  |        | j)                          | j+                          y N)r   )superr_   
isinstancer   rd   r$   r<   r   r   r   r   r   	__class__
Comparatorr   r   r   updater   set_creation_order_create_descriptor_init_accessor)rO   _class_or_attrr   r   r   r   r   r   r   kwargsr   s             rS   r_   zCompositeProperty.__init__   s     	+<=nvsC4E4E&FG(*U2DJ#'D #1D DJ, 
 "- ** 	
 .2*IIT"%!rU   c                D    t         |   |       | j                          y rM   )r   r   _setup_event_handlers)rO   r   r   s     rS   r   z"CompositeProperty.instrument_class   s     (""$rU   c                    | j                   r| j                  |      S 	 |j                  } |       S # t        $ r3}t        j                  d| j
                  j                   d      |d }~ww xY w)NzComposite class zX is not a dataclass and does not define a __composite_values__() method; can't get state)r   __composite_values__AttributeErrorsa_excInvalidRequestErrorr   rg   )rO   rt   accessoraes       rS   _composite_values_from_instancez1CompositeProperty._composite_values_from_instance   s    --55e<<	" 55  z! " 00&t';';'D'D&E F/ / 	s   2 	A..A))A.c                $    | j                          y)zwInitialization which occurs after the :class:`.Composite`
        has been associated with its parent mapper.

        N)_setup_arguments_on_columnsrO   s    rS   do_initzCompositeProperty.do_init  s    
 	((*rU   c                T     d fdd fd}d fd}t        ||       _        y)ztCreate the Python descriptor that will serve as
        the access point on instances of the mapped class.

        c                
   t        j                  |       }t        j                  |       }j                  |vrj                  D cg c]  }t        | |       }}j                  |vry|j                  t        j                  |      sX j                  | |j                  <   |j                  j                  j                  |j                  j                  g       |j                  j                  d       S c c}w rM   )r   instance_dictinstance_stater^   _attribute_keysr{   r   
issupersetr   managerdispatchrefresh_COMPOSITE_FGETget)instancerQ   rP   r^   valuesrO   s        rS   r|   z2CompositeProperty._create_descriptor.<locals>.fget  s    ,,X6E--h7Exxu$
 7;6J6J6JsGHc*6J   885(II)1E1Ef1M&:d&:&:F&CE$((OMM**22t33dhhZ 99TXXt,,#s   D c                R   t        j                  |       }t        j                  |       }|j                  	j                     }|j
                  j                  r	 |       }n*|j                  	j                  t        j                        }|j
                  j                  D ]  } |||||j                        } ||	j                  <   |	j                  D ]  }t        | |d         y t        	j                  	j                  |            D ]  \  }}t        | ||        y rM   )r   r   r   r   r^   r   _active_historyr   r   NO_VALUEsetr   r   rq   zipr   )
r   rt   rQ   rP   attrpreviousfnr^   r|   rO   s
           rS   ru   z2CompositeProperty._create_descriptor.<locals>.fset1  s    ,,X6E--h7E==*D}},,> 99TXX/C/L/LMmm''5%499= (#E$((O}//CHc40 0 #&((88?#JC Hc51	#rU   c                   t        j                  |       }t        j                  |       }|j                  j                     }|j
                  j                  r% |       }|j                  j                  d        n*|j                  j                  t        j                        }|j                  j                     }|j
                  j                  |||j                         j                  D ]  }t        | |d         y rM   )r   r   r   r   r^   r   r   popr   r   remover   r   rq   )r   rP   rQ   r   r   r^   r|   rO   s         rS   ry   z2CompositeProperty._create_descriptor.<locals>.fdelH  s    --h7E,,X6E==*D}},,>		$((D) 99TXX/C/L/LM==*DMM  $))<++#t, ,rU   N)r   r   rb   r   )r   r   rt   r   rb   r   )r   r   rb   r   )rm   rK   )rO   ru   ry   r|   s   `  @rS   r   z$CompositeProperty._create_descriptor  s$    	-6	2.	-  #4t4rU   sqlalchemy.orm.propertiesc
                   t         j                  j                  j                  }
| j                  || j                  ||       |}t        |      rt        |      d   }|r| j                  tt        |t              st        |d      rP|?t        |d      r|j                  n
t        |      }t        j                  d| d| d      t        |||d      }|| _        t!        | j                        r| j#                  ||||       nO| j$                  D ]@  }t        ||
t&        j(                  f      s |j*                  -t        j                  d	       | j-                          y )
Nr   T)check_generic__forward_arg__zCan't use forward ref z9 for composite class argument; set up the type as Mapped[])include_genericzIComposite class column arguments must be named unless a dataclass is used)r   	preloadedorm_propertiesr5   r   _raise_for_requiredr+   r)   r   rd   r*   hasattrr   r   ArgumentErrorr   r   _setup_for_dataclassr   r#   r>   rr   r   )rO   	decl_scanregistryclsoriginating_moduler^   mapped_container
annotationextracted_mapped_annotationis_dataclass_fieldr5   argumentstr_argr   s                 rS   declarative_scanz"CompositeProperty.declarative_scanZ  sj    ~~44AA  (+3$$S#..X)!,H,,4(C(J- &- #8->? !00 ] 
 !..0
 ;EELIQP  3#5t $,D ,,-%%h5GM

tlFMM%BC		) ..5  # 	rU   c                   t        | j                        rt        | j                  d      st        j                  | j                        }t        j                  |j                  j                         D cg c]  }|j                   c} t        |j                        dk(  rfd| _        n| _        | j                  t        | j                  t              ri| j                  t        vrV| j                  | j                  t        | j                  <   y t        | j                  d      rd t        | j                  <   y y y y y c c}w )Nr   r   c                     |       fS rM   r   )rs   getters    rS   r   z2CompositeProperty._init_accessor.<locals>.<lambda>  s    &+rU   c                "    | j                         S rM   r   )rs   s    rS   r   z2CompositeProperty._init_accessor.<locals>.<lambda>  s     8 8 :rU   )r   r   r   inspect	signatureoperator
attrgetter
parametersr   rr   lenr   r   typer   )rO   insppr   s      @rS   r   z CompositeProperty._init_accessor  s&   ,,-g  "87
 $$T%9%9:D(("&//"8"8":;":Q!&&":;F 4??#q(5O25;2   ,4//6$$,>>11=66 #4#7#78 --/EF: #4#7#78 G ? 7 - <s   7E	zsqlalchemy.orm.decl_basec                   t         j                  j                  j                  }t         j                  j                  }t        j                  | j                        }t        j                  |j                  j                         | j                        D ]  \  }}	|Xt        j                  dt        | j                         d| j                  j                    dt        |j                               |	 |       }	| xj                  |	fz  c_        t#        |	|      r+|	j%                  |||||j&                  |j(                         t#        |	t*        j,                        s|j/                  |j&                  |	        y )Nznumber of composite attributes z3 exceeds that of the number of attributes in class  )r   r   r   r5   orm_decl_baser   r   r   	itertoolszip_longestr   r   r   r   r   r   rg   r   declarative_scan_for_compositerr   r   r#   r>   _undefer_column_name)
rO   r   r   r   r^   r5   	decl_baser   paramr   s
             rS   r   z&CompositeProperty._setup_for_dataclass  s<    ~~44AANN00	  !5!56$00OO""$djj
KE4 }**54::' (A++445Qs4??7K6LN  |#~

tg%
$-33&JJ$$ D&--0..uzz4@3
rU   c                    | j                   D cg c],  }t        | j                  j                  |j                        . c}S c c}w rM   )propsr{   r   r   r^   r[   s     rS   _comparable_elementsz&CompositeProperty._comparable_elements  s3    BF**M*$**DHH5*MMMs   1Azorm.propertiesc                \   g }t         j                  j                  j                  }| j                  D ]  }t        |t              r| j                  j                  |d      }nt        |t        j                        r| j                  j                  |   }nYt        ||      r$| j                  j                  |j                     }n)t        |t        j                        r|j                  }nd }t        |t               st#        j$                  d|      |j'                  |        |S )NF)_configure_mapperszYComposite expects Column objects or mapped attributes/attribute names as arguments, got: )r   r   r   r5   r   r   rd   r   get_propertyr#   r>   _columntopropertycolumnr   r/   rm   r   r   r   append)rO   r  r5   r   r\   s        rS   r  zCompositeProperty.props  s     ~~44AAJJD$${{///OD&--0{{44T:D,/{{44T[[AD*"B"BC}}dN3**EEIHN 
 LL% & rU   c                    t         j                  j                  j                  }| j                  D cg c]8  }t        |t        j                  |f      rt        ||      r|j                  n|: c}S c c}w rM   )	r   r   r   r5   r   r   r#   r>   r  )rO   r5   as      rS   columnszCompositeProperty.columns  si     ~~44AA ZZ
!fmm\:; #1l3AHH:
 	
 
s   =A3c                    | S rM   r   r   s    rS   mapper_property_to_assignz+CompositeProperty.mapper_property_to_assign  s    rU   c                ^    | j                   D cg c]  }|j                  |df c}S c c}w )Nr   )r  table)rO   cs     rS   columns_to_assignz#CompositeProperty.columns_to_assign  s*     $@1A@@@s   **c                   t         j                  j                  j                  }| j                  D ]W  }t        ||      s|}| j                  |_        | j                  r| j                  |_        d|_        | j                  |_	        Y y)zwPropagate configuration arguments made on this composite
        to the target columns, for those that apply.

        ))r   T)
instrumentTN)
r   r   r   r4   r  r   r   r   strategy_keyr   )rO   r4   r\   cprops       rS   r   z-CompositeProperty._setup_arguments_on_columns	  sl     66EEJJDdN3#'#6#6E }}!%%O"**EK rU   c                    	 	 	 	 	 	 dfd}	 	 	 	 	 	 	 	 d fd}	 	 	 	 	 	 	 	 	 	 d fd	 	 	 	 	 	 d fd}	 	 	 	 	 	 	 	 d fd}t        j                   j                  d|d       t        j                   j                  d	|d       t        j                   j                  d
|dd       t        j                   j                  d|dd       t        j                   j                  d|dd        j                  j                   j                     }|j
                  |j                  _         j                  |j                  j
                  _        y)z>Establish events that populate/expire the composite attribute.c                     | |d d       y )NF
is_refreshr   )rP   context_load_refresh_handlers     rS   load_handlerz=CompositeProperty._setup_event_handlers.<locals>.load_handler   s     "%$5IrU   c                    |r5j                   hj                  j                        j                  |      r | ||d       y y )NTr  )r^   unionr   intersection)rP   r  to_loadr  rO   s      rS   refresh_handlerz@CompositeProperty._setup_event_handlers.<locals>.refresh_handler%  sF     
  !5!56l7#$ &eWg$O$rU   c                   | j                   }|r|j                  u rj                  |v ry j                  D ]  }||vs y   j                  j                  D cg c]  }| j                   |    c} |j                  <   y c c}w rM   )dictr   r^   r   r   )rP   r  r!  r  rQ   kr^   rO   s          rS   r  zFCompositeProperty._setup_event_handlers.<locals>._load_refresh_handler1  s     JJE 'T-A-A"A((e#
 ))E> * 3d22-1-A-AB-Ac%**S/-ABE$((OBs   Bc                    |$t        j                        j                  |      r'| j                  j	                  j
                  d        y y rM   )r   r   r   r$  r   r^   )rP   keysrO   s     rS   expire_handlerz?CompositeProperty._setup_event_handlers.<locals>.expire_handlerR  s>     |s4#7#78EEdK

txx.  LrU   c                R    |j                   j                  j                  d       y)zAfter an insert or update, some columns may be expired due
            to server side defaults, or re-populated due to client side
            defaults.  Pop out the composite value here so that it
            recreates.

            N)r$  r   r^   )r   
connectionrP   rO   s      rS   insert_update_handlerzFCompositeProperty._setup_event_handlers.<locals>.insert_update_handlerX  s     JJNN488T*rU   after_insertT)rawafter_updateload)r-  	propagater   expireN)rP   rf   r  r1   rb   r   )rP   rf   r  r1   r!  Optional[Sequence[str]]rb   r   )
rP   rf   r  r1   r!  r2  r  rc   rb   r   )rP   rf   r'  r2  rb   r   )r   r   r*  r7   rP   rf   rb   r   )	r!   listenr   r   r^   r   r   r   r   )rO   r  r"  r(  r+  r   r  s   `     @rS   r   z'CompositeProperty._setup_event_handlers  s   	J%	J0?	J	J

	P%
	P$
	P -
	P 	
	P	%	$	 -	 		
 	B	/%	/-D	/	/	+	+"	+ &	+ 		+ 	KK)>D	
 	KK)>D	
 	KK44	
 	KKO	
 	KK>tt	
 [[..txx8
#-#6#6
 373F3F
  0rU   c                T    | j                   D cg c]  }|j                   c}S c c}w rM   )r  r^   r[   s     rS   r   z!CompositeProperty._attribute_keys|  s"    %)ZZ0ZTZ000s   %c                      j                   r j                   ndd j                  D cg c]  }|j                   c}d fd}|S c c}w )Nc                "    | j                         S rM   r   )vals    rS   
get_valueszOCompositeProperty._populate_composite_bulk_save_mappings_fn.<locals>.get_values  s    //11rU   c           
         | j                  t         | j                  j                                    D ci c]  \  }}||
 c}}       y c c}}w rM   )r   r   r   r^   )	dest_dictr^   r7  r   r8  rO   s      rS   populatezMCompositeProperty._populate_composite_bulk_save_mappings_fn.<locals>.populate  s[     %(z)--*AB%%S H%s   A
)r7  r   rb   z
Tuple[Any])r:  zDict[str, Any]rb   r   )r   r  r^   )rO   r\   r;  r   r8  s   `  @@rS   )_populate_composite_bulk_save_mappings_fnz;CompositeProperty._populate_composite_bulk_save_mappings_fn  sM     --;;J2 '+jj1jdj1	  2s   Ac                N   g }g }d}| j                   D ]  }|j                  }|j                  |   j                  j	                  ||      }	|	j                         rd}|	j                         }
|
r|j                  |
       n|j                  d       |	j                  r|j                  |	j                         |j                  d        |r3t        j                   | j                  | gd | j                  | g      S t        j                  d | j                  | gd      S )z>Provided for userland code that uses attributes.get_history().FTNr   )r  r^   r   r   rT   has_changesnon_deletedextendr	  deletedr   r.   r   )rO   rP   rQ   rR   addedrA  has_historyr\   r^   histr?  s              rS   rT   zCompositeProperty.get_history  s    JJD((C==%**66ueDD!"**,K[)T"||t||,t$   %%%%%u-.%%%w/0  %%b+?4+?+?+G*H"MMrU   c                &    | j                  | |      S rM   )r   )rO   r   s     rS   r~   z%CompositeProperty._comparator_factory  s     &&tV44rU   c                  @     e Zd Z	 	 	 	 d fdZ	 	 	 	 	 	 	 	 ddZ xZS )!CompositeProperty.CompositeBundlec                H    || _         t        |   |j                  g|  y rM   )rm   r   r_   r^   )rO   	property_exprr   s      rS   r_   z*CompositeProperty.CompositeBundle.__init__  s"    
 &DMGY]]2T2rU   c                     d fd}|S )Nc                h     j                   j                  D cg c]
  } ||        c} S c c}w rM   )rm   r   )rowprocprocsrO   s     rS   rN  zDCompositeProperty.CompositeBundle.create_row_processor.<locals>.proc  s5    4t}}44,12EDd3iE2 2s   /)rM  zRow[Any]rb   r   r   )rO   queryrO  labelsrN  s   ` `  rS   create_row_processorz6CompositeProperty.CompositeBundle.create_row_processor  s    
 KrU   )rI  zComposite[_T]rJ  r;   )rP  zSelect[Any]rO  z#Sequence[Callable[[Row[Any]], Any]]rQ  Sequence[str]rb   zCallable[[Row[Any]], Any])rg   rh   ri   r_   rR  __classcell__r   s   @rS   CompositeBundlerG    sE    	3$	3 	3		 7	 "		
 '	rU   rV  c                      e Zd ZU dZdZded<   ej                  dd       ZddZ	ej                  dd       Z
	 	 	 	 ddZej                  dd	       Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 ddZy)CompositeProperty.Comparatora  Produce boolean, comparison, and other operators for
        :class:`.Composite` attributes.

        See the example in :ref:`composite_operations` for an overview
        of usage , as well as the documentation for :class:`.PropComparator`.

        .. seealso::

            :class:`.PropComparator`

            :class:`.ColumnOperators`

            :ref:`types_operators`

            :attr:`.TypeEngine.comparator_factory`

        Nz%RODescriptorReference[Composite[_PT]]r\   c                @    t        j                  | j                  ddiS )Nr   F)r&   r;   r  r   s    rS   clausesz$CompositeProperty.Comparator.clauses  s&    (("77 rU   c                    | j                   S rM   r%   r   s    rS   __clause_element__z/CompositeProperty.Comparator.__clause_element__  s    ??"rU   c                    | j                   j                  | j                  | j                  | j                  j                  d      }t
        j                  | j                  |      S )N)parententityparentmapper	proxy_key)rZ  	_annotate_parententityr\   r^   r   rV  )rO   rZ  s     rS   r&   z'CompositeProperty.Comparator.expression  sQ    ll,,$($6$6$($6$6!%G %44TYYHHrU   c                   t        |t              r|j                  }|$| j                  j                  D cg c]  }d  }}nt        | j                  j
                  t              r<t        || j                  j
                        r| j                  j                  |      }n%t        j                  d| j                  d|      t        t        | j                  |            S c c}w )Nz!Can't UPDATE composite attribute z to )r   r(   rt   r\   r   r   r   r   r   r   listr   r  )rO   rt   r^   r   s       rS   _bulk_update_tuplesz0CompositeProperty.Comparator._bulk_update_tuples  s     %/ }*.))*C*CD*C3$*CDDII55t<tyy00B BB **yy%) 
 D55v>?? Es   	C'c                    | j                   rL| j                  j                  D cg c],  }t        | j                   j                  |j
                        . c}S | j                  j                  S c c}w rM   )_adapt_to_entityr\   r  r{   entityr^   r[   s     rS   r  z1CompositeProperty.Comparator._comparable_elements  se    $$ !%		 > > > D1188$((C > 
 yy555s   1A/c                B    | j                  t        j                  |      S rM   )_comparer'   eqrO   others     rS   __eq__z#CompositeProperty.Comparator.__eq__&      ==u55rU   c                B    | j                  t        j                  |      S rM   )rj  r'   nerl  s     rS   __ne__z#CompositeProperty.Comparator.__ne__)  ro  rU   c                B    | j                  t        j                  |      S rM   )rj  r'   ltrl  s     rS   __lt__z#CompositeProperty.Comparator.__lt__,  ro  rU   c                B    | j                  t        j                  |      S rM   )rj  r'   gtrl  s     rS   __gt__z#CompositeProperty.Comparator.__gt__/  ro  rU   c                B    | j                  t        j                  |      S rM   )rj  r'   lerl  s     rS   __le__z#CompositeProperty.Comparator.__le__2  ro  rU   c                B    | j                  t        j                  |      S rM   )rj  r'   gerl  s     rS   __ge__z#CompositeProperty.Comparator.__ge__5  ro  rU   c                   |$d gt        | j                  j                        z  }n| j                  j                  |      }t	        | j                  j                  |      D cg c]  \  }} |||       }}}| j
                  r,| j                  J |D cg c]  }| j                  |       }}t        j                  | S c c}}w c c}w rM   )	r   r\   r  r   r   rg  adapterr$   and_)rO   r   rm  r   r  bcomparisonsxs           rS   rj  z%CompositeProperty.Comparator._compare?  s     }#dii&D&D"EEBB5I  		 > >GGDAq AG   $$||///8CD1t||AD88[)) Es   %CC)rb   r;   )rb   z&CompositeProperty.CompositeBundle[_PT])rt   r   rb   z(Sequence[Tuple[_DMLColumnArgument, Any]]rb   z!Sequence[QueryableAttribute[Any]])rm  r   rb   ColumnElement[bool])r   r=   rm  r   rb   r  )rg   rh   ri   r   __hash__r   r   memoized_propertyrZ  r\  r&   re  r  rn  rr  ru  rx  r{  r~  rj  r   rU   rS   r   rX    s    	& 33				 
 	
	# 
			I 
 	I	@	@5	@0 
			6 
 	6	6	6	6	6	6	6	*(	*14	* 	*rU   r   c                t    t        | j                  j                  j                        dz   | j                  z   S )N.)rd   r   r   rg   r^   r   s    rS   __str__zCompositeProperty.__str__P  s+    4;;%%../#5@@rU   rM   )r   zCUnion[None, Type[_CC], Callable[..., _CC], _CompositeAttrType[Any]]r   z_CompositeAttrType[Any]r   Optional[_AttributeOptions]r   rc   r   rc   r   rI   r   zOptional[Type[Comparator[_CC]]]r   Optional[_InfoType]r   r   r   )rt   r   rb   zTuple[Any, ...]rb   r   )r   r2   r   r-   r   	Type[Any]r   rI   r^   rd   r   zOptional[Type[Mapped[Any]]]r   Optional[_AnnotationScanType]r   r  r   rc   rb   r   )
r   r-   r   r  r   rI   r^   rd   rb   r   r  )rb   zSequence[MapperProperty[Any]])rb   zSequence[Column[Any]])rb   zOptional[MapperProperty[_CC]])rb   z$List[Tuple[schema.Column[Any], int]])rb   rS  )rb   z Callable[[Dict[str, Any]], None]re   )r   r   rb   zComposite.Comparator[_CC])rb   rd   )*rg   rh   ri   r   r   r_   r   r   r   objectr   r   r   preload_moduler   r   r   r  r  r  non_memoized_propertyr  rm   r  r  r   r   r   r<  r   rn   rT   r~   orm_utilBundlerD   rV  r   rF   r   r  rT  rU  s   @rS   r   r      s7   
 :9..$  .- 	& :>$#>B$(&
&
 (& 7& & & & <& "& &P%"+ hOH5T T457)7  7 	7
 *7 7 67 27 &C7 !7 
7 67r6 T45T34%A%A %A *	%A
 %A 
%A 5 6%AN 
N N 
T)* + 2 
T)*
 +  
   A A T)*% +%&[G~ 
1 1	)8  +66	#N!#N #N 	#N
 
#NJ5!5	"5
(//"- ,v*^C( v*pArU   r   c                      e Zd ZdZdZy)	CompositeaS  Declarative-compatible front-end for the :class:`.CompositeProperty`
    class.

    Public constructor is the :func:`_orm.composite` function.

    .. versionchanged:: 2.0 Added :class:`_orm.Composite` as a Declarative
       compatible subclass of :class:`_orm.CompositeProperty`.

    .. seealso::

        :ref:`mapper_composite`

    TNrg   rh   ri   r   inherit_cacher   rU   rS   r  r  T  s     MrU   r  c                  4     e Zd ZdZ	 	 	 	 ddZd fdZ xZS )ConcreteInheritedPropertya4  A 'do nothing' :class:`.MapperProperty` that disables
    an attribute on a concrete subclass that is only present
    on the inherited mapper, not the concrete classes' mapper.

    Cases where this occurs include:

    * When the superclass mapper is mapped against a
      "polymorphic union", which includes all attributes from
      all subclasses.
    * When a relationship() is configured on an inherited mapper,
      but not on the subclass mapper.  Concrete mappers require
      that relationship() is configured explicitly on each
      subclass.

    c                    d }| j                   j                         D ]6  }|j                  | j                     }t	        |dd       *|j
                  } n |J  ||      S )Nr   )r   iterate_to_root_propsr^   r{   r   )rO   r   comparator_callablemr   s        rS   r~   z-ConcreteInheritedProperty._comparator_factoryx  sm     #,,.A"Aq.5A&'&:&:#	 /
 #..."1f--rU   c                d     t                    d fd G  fdd      } |        _        y )Nc            	     j    t        d j                  d j                  d j                  d      )Nz	Concrete z does not implement attribute z9 at the instance level.  Add this property explicitly to r  )r   r   r^   r   s   rS   warnz0ConcreteInheritedProperty.__init__.<locals>.warn  s*      ;;$++7 rU   c                  4    e Zd ZdfdZdfdZd fdZy)DConcreteInheritedProperty.__init__.<locals>.NoninheritedConcretePropc                             y rM   r   )srs   rt   r  s      rS   __set__zLConcreteInheritedProperty.__init__.<locals>.NoninheritedConcreteProp.__set__      rU   c                             y rM   r   )r  rs   r  s     rS   
__delete__zOConcreteInheritedProperty.__init__.<locals>.NoninheritedConcreteProp.__delete__  r  rU   c                0    |j                   S          y rM   )rK   )r  rs   ownerrO   r  s      rS   __get__zLConcreteInheritedProperty.__init__.<locals>.NoninheritedConcreteProp.__get__  s    ;??*rU   N)r  r   rs   r   rt   r   rb   r	   )r  r   rs   r   rb   r	   )r  r   rs   r   r  r   rb   r   )rg   rh   ri   r  r  r  )rO   r  s   rS   NoninheritedConcretePropr    s    rU   r  )rb   r	   )r   r_   rK   )rO   r  r  r   s   ` @rS   r_   z"ConcreteInheritedProperty.__init__  s)    	
	 
	 34rU   )r   r   rb   zType[PropComparator[_T]]r  )rg   rh   ri   r   r~   r_   rT  rU  s   @rS   r  r  g  s'     .!.	!.5 5rU   r  c                       e Zd ZU dZded<   	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZes	edd       Ze	j                  	 	 dd       ZddZej                  f	 	 	 	 	 	 	 ddZ e	j                   d	      dd
       Z xZS )SynonymPropertya8  Denote an attribute name as a synonym to a mapped property,
    in that the attribute will mirror the value and expression behavior
    of another attribute.

    :class:`.Synonym` is constructed using the :func:`_orm.synonym`
    function.

    .. seealso::

        :ref:`synonyms` - Overview of synonyms

    "Optional[Type[PropComparator[_T]]]r   c                $   t         |   |       || _        || _        || _        || _        |r|| _        n'|r|j                  r|j                  | _        nd | _        |r| j                  j                  |       t        j                  |        y r   )r   r_   rr   
map_columnrK   r   rJ   r   r   r   r   r   )	rO   rr   r  rK   r   r   r   rJ   r   s	           rS   r_   zSynonymProperty.__init__  s     	+<=	$$"4DHJ..!))DHDHIIT"%rU   c                ~    t        | j                  j                  | j                        j                  j
                  S rM   )r{   r   r   rr   r   rZ   r   s    rS   rZ   zSynonymProperty.uses_objects  s)    4;;--tyy9>>KKKrU   c                   t        | j                  j                  | j                        }t	        |d      rt        |j                  t              s~t        |t        j                        r|j                  S t        |t              r|S t        j                  d| j                  j                  j                  d| j                  d|      |j                  S )Nrm   zsynonym() attribute "r  z+" only supports ORM mapped attributes, got )r{   r   r   rr   r   r   rm   r   r   r0   
comparatorr   r   r   rg   )rO   r   s     rS   _proxied_objectzSynonymProperty._proxied_object  s     t{{))4995tZ(
MM>1

 $
 = =>&D"23,, ;;%%..		4A 
 }}rU   c                    | j                   }t        |t              r4| j                  r| j                  ||      }|S |j                  ||      }|S |S rM   )r  r   r   r   )rO   r   r\   comps       rS   r~   z#SynonymProperty._comparator_factory  sW    ##dN+&&..tV< K ..tV<KKrU   c                    t        | j                  j                  | j                        }|j                  j                  |||      S )N)rR   )r{   r   r   rr   r   rT   )rO   rP   rQ   rR   r   s        rS   rT   zSynonymProperty.get_history  s:     )00B0BDII(Nyy$$UE7$CCrU   r   c           
     t   t         j                  j                  }| j                  r| j                  |j
                  j                  vrGt        j                  d| j                  d|j
                  j                  d| j                  d      |j
                  j                  | j                     |j                  v r|j                  |j
                  j                  | j                        j                  | j                  k(  rIt        j                  d| j                  d| j                  d| j                  d| j                        |j                  |j
                  j                  | j                           }|j                  | j                  ||d	
       | j                  |_        || _        y )NzCan't compile synonym 'z': no column on table 'z	' named ''z'Can't call map_column=True for synonym =z4, a ColumnProperty already exists keyed to the name z for column T)init	setparent)r   r   r   r  r^   persist_selectabler  r   r   rr   descriptionr  r4   _configure_property_mapped_by_synonymr   )rO   r   r  
propertiesr   s        rS   
set_parentzSynonymProperty.set_parent  sV   ^^22
??xxv88:::** 		11==  ))++DHH5++,,,--//9#99
 ** xxDIItxxA  &0%>%>))++DHH5&A &&tyy!$$&O#'88A rU   )NNNNNN)rr   rd   r  zOptional[bool]rK   zOptional[Any]r   r  r   r  r   r  rJ   rI   ra   )rb   z/Union[MapperProperty[_T], SQLORMOperations[_T]])r   r   rb   zSQLORMOperations[_T]re   )r   r   r  rc   rb   r   )rg   rh   ri   r   r   r_   r   rm   rZ   r   r  r  r~   r   rn   rT   r  r  rT  rU  s   @rS   r  r    s
    ;:
 &*$(AE9=$(!&& #& "	&
 ?& 7& "& &6 		L 
	L 
	8 ,
   +66	D!D D 	D
 
D T45# 6#rU   r  c                      e Zd ZdZdZy)SynonymaK  Declarative front-end for the :class:`.SynonymProperty` class.

    Public constructor is the :func:`_orm.synonym` function.

    .. versionchanged:: 2.0 Added :class:`_orm.Synonym` as a Declarative
       compatible subclass for :class:`_orm.SynonymProperty`

    .. seealso::

        :ref:`synonyms` - Overview of synonyms

    TNr  r   rU   rS   r  r  &  s     MrU   r  )gr   
__future__r   dataclassesr   r   r   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   weakref r   r   r  baser   r   r   r   r   
interfacesr   r   r   r   r   r   r   r!   r"   r   r#   r$   r&   r'   sql.elementsr(   util.typingr)   r*   r+   _typingr,   r-   r.   r/   r0   r  r1   r   r2   r   r3   r  r4   r5   rP   r6   engine.baser7   
engine.rowr8   sql._typingr9   r:   r;   r<   sql.operatorsr=   
sql.schemar>   sql.selectabler?   r@   rA   rB   rC   rD   rF   rH   rd   _CompositeAttrTyper   WeakKeyDictionaryr   r   r   r  r  r  r  r   rU   rS   <module>r     s  
 # $                     $ &   " ) / $ & &  )        ( " $ # 
&&#1.(1*($( 0'),,#'1/13Te3EH+ EHP 	  e3
 G    
]
A.0B30G]
A@!"%'9"'= &55 22 6 55pD(, DNob!#5b#9 rU   