§
    ŸjôL  ã                   óp  — d 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mZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej        d¦  «        Z edd¦  «        Zd„ Z G d„ dej        ¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z d„ Z!d„ Z"d„ Z# G d„ d¦  «        Z$dS )zî
Various data structures used in query construction.

Factored out from django.db.models.query to avoid making the main module very
large and/or so that they can be used by other modules without getting into
circular import difficulties.
é    N)Ú
namedtuple)Únullcontext)Ú
FieldError)ÚDEFAULT_DB_ALIASÚDatabaseErrorÚconnectionsÚmodelsÚtransaction)Ú
LOOKUP_SEP)Útree)Úcached_property)Úmake_hashableúdjango.db.modelsÚPathInfozGfrom_opts to_opts target_fields join_field m2m direct filtered_relationc              #   ój   K  — | V — |                       ¦   «         D ]}t          |¦  «        E d {V —† Œd S ©N)Ú__subclasses__Ú
subclasses©ÚclsÚsubclasss     úi/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/django/db/models/query_utils.pyr   r   !   sW   è è € Ø
€I€I€IØ×&Ò&Ñ(Ô(ð (ð (ˆÝ˜hÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(ð (ó    c                   óÆ   ‡ — e Zd ZdZdZdZdZeZdZdeeefZ	dddœˆ fd	„
Z
d
„ Zd„ Zd„ Zd„ Zd„ Z	 dd„Zd„ Zd„ Zefd„Zd„ Zed„ ¦   «         Zd„ Zd„ Zed„ ¦   «         Zˆ xZS )ÚQze
    Encapsulate filters as objects that can then be combined logically (using
    `&` and `|`).
    ÚANDÚORÚXORTNF)Ú
_connectorÚ_negatedc                ó&  •— || j         vr?d                     d„ | j         dd …         D ¦   «         ¦  «        }t          d|› d�¦  «        ‚t          ¦   «                              g |¢t          |                     ¦   «         ¦  «        ¢||¬¦  «         d S )Nz, c              3   ó   K  — | ]}|›V — Œd S r   © )Ú.0Úconns     r   ú	<genexpr>zQ.__init__.<locals>.<genexpr>7   s$   è è € Ð'TÐ'T¸¨4¨Ð'TÐ'TÐ'TÐ'TÐ'TÐ'Tr   é   z_connector must be one of z
, or None.)ÚchildrenÚ	connectorÚnegated)Ú
connectorsÚjoinÚ
ValueErrorÚsuperÚ__init__ÚsortedÚitems)Úselfr   r    ÚargsÚkwargsÚconnector_reprsÚ	__class__s         €r   r/   z
Q.__init__5   s¦   ø€ Ø˜Tœ_Ð,Ð,Ø"ŸišiÐ'TÐ'TÀÄÐPQÐPRÐPRÔ@SÐ'TÑ'TÔ'TÑTÔTˆOÝÐU¸/ÐUÐUÐUÑVÔVÐVÝ‰Œ×ÒØ5�tÐ5�f V§\¢\¡^¤^Ñ4Ô4Ð5Ø Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 óP  — t          |dd¦  «        du rt          |¦  «        ‚| s|                     ¦   «         S |s)t          |t          ¦  «        r|                      ¦   «         S |                      |¬¦  «        }|                     | |¦  «         |                     ||¦  «         |S )NÚconditionalF)r)   )ÚgetattrÚ	TypeErrorÚcopyÚ
isinstancer   ÚcreateÚadd)r2   Úotherr%   Úobjs       r   Ú_combinez
Q._combine?   s¤   € Ý�5˜-¨Ñ/Ô/°5Ð8Ð8Ý˜EÑ"Ô"Ð"Øð 	 Ø—:’:‘<”<ÐØð 	� E­1Ñ-Ô-ð 	Ø—9’9‘;”;Ðà�kŠk DˆkÑ)Ô)ˆØ�Š��dÑÔÐØ�Š��tÑÔÐØˆ
r   c                 ó8   — |                       || j        ¦  «        S r   )rA   r   ©r2   r?   s     r   Ú__or__zQ.__or__L   s   € Ø�}Š}˜U D¤GÑ,Ô,Ð,r   c                 ó8   — |                       || j        ¦  «        S r   )rA   r   rC   s     r   Ú__and__z	Q.__and__O   ó   € Ø�}Š}˜U D¤HÑ-Ô-Ð-r   c                 ó8   — |                       || j        ¦  «        S r   )rA   r   rC   s     r   Ú__xor__z	Q.__xor__R   rG   r   c                 óV   — |                       ¦   «         }|                     ¦   «          |S r   )r;   Únegate)r2   r@   s     r   Ú
__invert__zQ.__invert__U   s!   € Ø�iŠi‰kŒkˆØ�
Š
‰ŒˆØˆ
r   c                 ól   — |                      | ||dd|¬¦  «        \  }}|                     |¦  «         |S )NF)Úallow_joinsÚ
split_subqÚcheck_filterableÚ	summarize)Ú_add_qÚpromote_joins)r2   ÚqueryrN   ÚreuserQ   Úfor_saveÚclauseÚjoinss           r   Úresolve_expressionzQ.resolve_expressionZ   sM   € ð
 ŸšØØØ#ØØ"Øð %ñ 
ô 
‰ˆ�ð 	×Ò˜EÑ"Ô"Ð"Øˆr   c                 ó¶  — |s| S |                       | j        | j        ¬¦  «        }| j        D �]*}|}t	          |t
          ¦  «        rá|\  }}t          |v r|                     t          d¦  «        \  }}n|}d }t          j	        |¦  «        }	|	 
                    |¦  «        x}
|	ur‚|€d}|
                     |¦  «        x}€:|
                     |¦  «        x}	 �" ||
¦  «        }
d}|
                     |¦  «        }|€|dk    r|
                     d¦  «        }d}|� ||
|¦  «        }n| 
                    |¦  «        }|j                             |¦  «         �Œ,|S )N)r)   r*   r'   ÚexactÚisnullT)r=   r)   r*   r(   r<   Útupler   Úrsplitr	   ÚFÚreplace_expressionsÚ
get_lookupÚget_transformÚappend)r2   ÚreplacementsÚcloneÚchildÚchild_replacementÚlhsÚrhsÚpathÚlookupÚfieldÚfield_replacementÚlookup_classÚtransform_classs                r   r`   zQ.replace_expressionsj   s�  € Øð 	ØˆKØ—’ d¤n¸d¼l�ÑKÔKˆØ”]ð  	5ñ  	5ˆEØ %ÐÝ˜%¥Ñ'Ô'ð LØ ‘��SÝ Ð$Ð$Ø#&§:¢:­j¸!Ñ#<Ô#<‘L�D˜&˜&à�DØ!�FÝœ ™œ�à).×)BÒ)BÀ<Ñ)PÔ)PÐPÐ%Øðð ð �~Ø!(˜Ø(9×(DÒ(DÀVÑ(LÔ(LÐL˜ÐUà/@×/NÒ/NÈvÑ/VÔ/VÐV˜OØ!%ð&ð 1@°Ð@QÑ0RÔ0RÐ-Ø%,˜FØ+<×+GÒ+GÈÑ+OÔ+O˜LØ�{ v°Ò'8Ð'8Ø'8×'CÒ'CÀHÑ'MÔ'M˜Ø"˜Ø#Ð/Ø,8¨LÐ9JÈCÑ,PÔ,PÐ)øà$)×$=Ò$=¸lÑ$KÔ$KÐ!ØŒN×!Ò!Ð"3Ñ4Ô4Ð4Ñ4Øˆr   c              #   ó¾   K  — | V — | j         D ]N}t          |t          ¦  «        r|d         }t          |d¦  «        r|                     ¦   «         E d{V —† ŒJ|V — ŒOdS )zg
        Recursively yield this Q object and all subexpressions, in depth-first
        order.
        r'   ÚflattenN)r(   r<   r]   Úhasattrrq   )r2   rf   s     r   rq   z	Q.flatten‘   s‡   è è € ð
 ˆ
ˆ
ˆ
Ø”]ð 	ð 	ˆEÝ˜%¥Ñ'Ô'ð !à˜aœ�Ý�u˜iÑ(Ô(ð Ø Ÿ=š=™?œ?Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*à����ð	ð 	r   c           
      ó>  — ddl m}m} ddlm} ddlm} ddlm}  |d¦  «        }| 	                    ¦   «         D ]8\  }	}
t          |
d¦  «        s ||
¦  «        }
|                     |
|	d¬	¦  «         Œ9|                      |d
¦  «        d¦  «         t          |         }|j        j        r7|                     t!           || d |¦   «         ¬¦  «        ¦  «        ¦  «         n|                     | ¦  «         |                     |¬¦  «        }|j        rt'          j        |¬¦  «        nt+          ¦   «         }	 |5  |                     |¦  «        ducddd¦  «         S # 1 swxY w Y   dS # t.          $ r'}t0                               d| |¦  «         Y d}~dS d}~ww xY w)z|
        Do a database query to check if the expressions of the Q instance
        matches against the expressions.
        r   )ÚBooleanFieldÚValue)ÚCoalesce)ÚQuery)ÚSINGLENrY   F)Úselectr'   Ú_checkT)Úoutput_field)Úusingz.Got a database error calling check() on %r: %s)Údjango.db.modelsrt   ru   Údjango.db.models.functionsrv   Údjango.db.models.sqlrw   Údjango.db.models.sql.constantsrx   r1   rr   Úadd_annotationr   ÚfeaturesÚsupports_comparing_boolean_exprÚadd_qr   Úget_compilerÚin_atomic_blockr
   Úatomicr   Úexecute_sqlr   ÚloggerÚwarning)r2   Úagainstr|   rt   ru   rv   rw   rx   rT   ÚnameÚvalueÚ
connectionÚcompilerÚcontext_managerÚes                  r   ÚcheckzQ.check    sS  € ð 	9Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø7Ð7Ð7Ð7Ð7Ð7Ø.Ð.Ð.Ð.Ð.Ð.Ø9Ð9Ð9Ð9Ð9Ð9à��d‘”ˆØ"Ÿ=š=™?œ?ð 	<ð 	<‰KˆD�%Ý˜5Ð"6Ñ7Ô7ð %Ø˜˜e™œ�Ø× Ò  ¨°UÐ Ñ;Ô;Ð;Ð;Ø×Ò˜U˜U 1™XœX xÑ0Ô0Ð0Ý  Ô'ˆ
àÔÔ>ð 	Ø�KŠK�˜(˜( 4¨¸L¸L¹N¼NÐKÑKÔKÑLÔLÑMÔMÐMÐMà�KŠK˜ÑÔÐØ×%Ò%¨EÐ%Ñ2Ô2ˆð Ô)ð�KÔ UÐ+Ñ+Ô+Ð+å‘”ð 	ð
	Ø ð @ð @Ø×+Ò+¨FÑ3Ô3¸4Ð?ð@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @øåð 	ð 	ð 	Ý�NŠNÐKÈTÐSTÑUÔUÐUØ�4�4�4�4�4øøøøð	øøøs<   Ä8E+ Ä:EÅE+ ÅE"Å"E+ Å%E"Å&E+ Å+
FÅ5FÆFc                 ó  — | j         j        ›d| j         j        ›�}|                     d¦  «        r|                     dd¦  «        }t          | j        ¦  «        }i }| j        | j        k    r
| j        |d<   | j	        rd|d<   |||fS )Nú.zdjango.db.models.query_utilsr   r   Tr    )
r6   Ú
__module__Ú__name__Ú
startswithÚreplacer]   r(   r)   Údefaultr*   )r2   rj   r3   r4   s       r   ÚdeconstructzQ.deconstructÄ   sš   € Øœ.Ô3Ð3Ð3°T´^Ô5LÐ5LÐMˆØ�?Š?Ð9Ñ:Ô:ð 	TØ—<’<Ð >Ð@RÑSÔSˆDÝ�T”]Ñ#Ô#ˆØˆØŒ>˜Tœ\Ò)Ð)Ø#'¤>ˆF�<Ñ ØŒ<ð 	&Ø!%ˆF�:ÑØ�T˜6Ð!Ð!r   c                 ó4  — |                       ¦   «         \  }}}|g|                     ¦   «         ¢}|D ]X}t          |t          ¦  «        r,|\  }}t	          |¦  «        }|                     ||f¦  «         ŒC|                     |¦  «         ŒYt          |¦  «        S r   )rš   r1   r<   r]   r   rc   )r2   rj   r3   r4   Úidentityrf   Úargr�   s           r   rœ   z
Q.identityÐ   s    € à!×-Ò-Ñ/Ô/Ñˆˆd�FØÐ*˜6Ÿ<š<™>œ>Ð*ˆØð 	'ð 	'ˆEÝ˜%¥Ñ'Ô'ð 'Ø"‘
��UÝ% eÑ,Ô,�Ø—’  e Ñ-Ô-Ð-Ð-à—’ Ñ&Ô&Ð&Ð&Ý�X‰ŒÐr   c                 óZ   — t          |t          ¦  «        st          S |j        | j        k    S r   )r<   r   ÚNotImplementedrœ   rC   s     r   Ú__eq__zQ.__eq__Ý   s)   € Ý˜%¥Ñ#Ô#ð 	"Ý!Ð!ØŒ~ ¤Ò.Ð.r   c                 ó*   — t          | j        ¦  «        S r   )Úhashrœ   )r2   s    r   Ú__hash__z
Q.__hash__â   s   € Ý�D”MÑ"Ô"Ð"r   c                 óL   — ddl m} d„ |                     | ¦  «        D ¦   «         S )zŽ
        Retrieve all base fields referenced directly or through F expressions
        excluding any fields referenced through joins.
        r   )rT   c                 óP   — h | ]#}|                      t          d ¦  «        d         ’Œ$S )r'   r   )Úsplitr   )r$   rf   s     r   ú	<setcomp>z+Q.referenced_base_fields.<locals>.<setcomp>î   s8   € ð 
ð 
ð 
Ø.3ˆE�KŠK�
 AÑ&Ô& qÔ)ð
ð 
ð 
r   )r   rT   Úget_children_from_q)r2   rT   s     r   Úreferenced_base_fieldszQ.referenced_base_fieldså   sF   € ð 	/Ð.Ð.Ð.Ð.Ð.ð
ð 
Ø7<×7PÒ7PÐQUÑ7VÔ7Vð
ñ 
ô 
ð 	
r   )NTNFF)r–   r•   Ú__qualname__Ú__doc__r   r   r   r™   r8   r+   r/   rA   rD   rF   rI   rL   rY   r`   rq   r   r’   rš   r   rœ   r    r£   r©   Ú__classcell__)r6   s   @r   r   r   '   s|  ø€ € € € € ðð ð €CØ	€BØ
€CØ€GØ€KØ˜˜R Ð%€Jà)-¸ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð-ð -ð -ð.ð .ð .ð.ð .ð .ðð ð ð SXðð ð ð ð %ð %ð %ðNð ð ð $4ð "ð "ð "ð "ðH
"ð 
"ð 
"ð ð
ð 
ñ „_ð
ð/ð /ð /ð
#ð #ð #ð ð

ð 

ñ „_ð

ð 

ð 

ð 

ð 

r   r   c                   ó&   — e Zd ZdZd„ Zdd„Zd„ ZdS )ÚDeferredAttributez„
    A wrapper for a deferred-loading field. When the value is read from this
    object the first time, the query is executed.
    c                 ó   — || _         d S r   )rl   )r2   rl   s     r   r/   zDeferredAttribute.__init__ù   s   € ØˆŒ
ˆ
ˆ
r   Nc                 ó  — |€| S |j         }| j        j        }||vrc|                      |¦  «        }|€G|                     ¦   «         s| j        j        rt          d¦  «        ‚|                     |g¬¦  «         n|||<   ||         S )zx
        Retrieve and caches the value from the datastore on the first lookup.
        Return the cached value.
        Nz4Cannot read a generated field from an unsaved model.)Úfields)Ú__dict__rl   ÚattnameÚ_check_parent_chainÚ
_is_pk_setÚ	generatedÚAttributeErrorÚrefresh_from_db)r2   Úinstancer   ÚdataÚ
field_nameÚvals         r   Ú__get__zDeferredAttribute.__get__ü   s®   € ð
 ÐØˆKØÔ ˆØ”ZÔ'ˆ
Ø˜TÐ!Ð!ð ×*Ò*¨8Ñ4Ô4ˆCØˆ{Ø×*Ò*Ñ,Ô,ð °´Ô1Eð Ý(ØNñô ð ð ×(Ò(°°Ð(Ñ=Ô=Ð=Ð=à#&��ZÑ Ø�JÔÐr   c                 óª   — |j         }|                     | j        j        ¦  «        }| j        j        r | j        |k    rt          ||j        ¦  «        S dS )zÁ
        Check if the field value can be fetched from a parent field already
        loaded in the instance. This can be done if the to-be fetched
        field is a primary key field.
        N)Ú_metaÚget_ancestor_linkrl   ÚmodelÚprimary_keyr9   r³   )r2   r¹   ÚoptsÚ
link_fields       r   r´   z%DeferredAttribute._check_parent_chain  sT   € ð Œ~ˆØ×+Ò+¨D¬JÔ,<Ñ=Ô=ˆ
ØŒ:Ô!ð 	9 d¤j°JÒ&>Ð&>Ý˜8 ZÔ%7Ñ8Ô8Ð8Øˆtr   r   )r–   r•   rª   r«   r/   r½   r´   r#   r   r   r®   r®   ó   sP   € € € € € ðð ð
ð ð ð ð  ð  ð  ð.
ð 
ð 
ð 
ð 
r   r®   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Úclass_or_instance_methodzŒ
    Hook used in RegisterLookupMixin to return partial functions depending on
    the caller type (instance or class of models.Field).
    c                 ó"   — || _         || _        d S r   )Úclass_methodÚinstance_method)r2   rÈ   rÉ   s      r   r/   z!class_or_instance_method.__init__&  s   € Ø(ˆÔØ.ˆÔÐÐr   c                 ón   — |€t          j        | j        |¦  «        S t          j        | j        |¦  «        S r   )Ú	functoolsÚpartialrÈ   rÉ   )r2   r¹   Úowners      r   r½   z class_or_instance_method.__get__*  s4   € ØÐÝÔ$ TÔ%6¸Ñ>Ô>Ð>ÝÔ  Ô!5°xÑ@Ô@Ð@r   N)r–   r•   rª   r«   r/   r½   r#   r   r   rÆ   rÆ      sA   € € € € € ðð ð
/ð /ð /ðAð Að Að Að Ar   rÆ   c                   ó  — e Zd Zd„ Zej        d„ ¦   «         Zd„ Z eee¦  «        Z	 e
e¦  «        Zd„ Zd„ Zed„ ¦   «         Ze
d„ ¦   «         Zdd	„Zdd
„Z eee¦  «        Z e
e¦  «        Zdd„Zdd„Z eee¦  «        Z e
e¦  «        ZdS )ÚRegisterLookupMixinc                 óR   — |                       ¦   «                              |d ¦  «        S r   )Úget_lookupsÚget)r2   Úlookup_names     r   Ú_get_lookupzRegisterLookupMixin._get_lookup1  s$   € Ø×ÒÑ!Ô!×%Ò% k°4Ñ8Ô8Ð8r   c                 óh   — d„ t          j        | ¦  «        D ¦   «         }|                      |¦  «        S )Nc                 óD   — g | ]}|j                              d i ¦  «        ‘ŒS )Úclass_lookups)r²   rÒ   )r$   Úparents     r   ú
<listcomp>z9RegisterLookupMixin.get_class_lookups.<locals>.<listcomp>6  s7   € ð 
ð 
ð 
Ø9?ˆFŒO×Ò °Ñ4Ô4ð
ð 
ð 
r   )ÚinspectÚgetmroÚmerge_dicts)r   r×   s     r   Úget_class_lookupsz%RegisterLookupMixin.get_class_lookups4  s?   € ð
ð 
ÝCJÄ>ÐRUÑCVÔCVð
ñ 
ô 
ˆð �Š˜}Ñ-Ô-Ð-r   c                 ó`   — |                       ¦   «         }t          | dd ¦  «        x}ri |¥|¥S |S ©NÚinstance_lookups)rÝ   r9   )r2   r×   rà   s      r   Úget_instance_lookupsz(RegisterLookupMixin.get_instance_lookups;  sE   € Ø×.Ò.Ñ0Ô0ˆÝ& tÐ-?ÀÑFÔFÐFÐð 	9Ø8�mÐ8Ð'7Ð8Ð8ØÐr   c                 ó¼   — ddl m} |                      |¦  «        }|€*t          | d¦  «        r| j                             |¦  «        S |�t          ||¦  «        sd S |S )Nr   )ÚLookupr{   )Údjango.db.models.lookupsrã   rÔ   rr   r{   ra   Ú
issubclass)r2   rÓ   rã   Úfounds       r   ra   zRegisterLookupMixin.get_lookupD  sp   € Ø3Ð3Ð3Ð3Ð3Ð3à× Ò  Ñ-Ô-ˆØˆ=�W T¨>Ñ:Ô:ˆ=ØÔ$×/Ò/°Ñ<Ô<Ð<ØÐ¥Z°°vÑ%>Ô%>ÐØ�4Øˆr   c                 ó¼   — ddl m} |                      |¦  «        }|€*t          | d¦  «        r| j                             |¦  «        S |�t          ||¦  «        sd S |S )Nr   )Ú	Transformr{   )rä   rè   rÔ   rr   r{   rb   rå   )r2   rÓ   rè   ræ   s       r   rb   z!RegisterLookupMixin.get_transformN  sp   € Ø6Ð6Ð6Ð6Ð6Ð6à× Ò  Ñ-Ô-ˆØˆ=�W T¨>Ñ:Ô:ˆ=ØÔ$×2Ò2°;Ñ?Ô?Ð?ØÐ¥Z°°yÑ%AÔ%AÐØ�4Øˆr   c                 óX   — i }t          | ¦  «        D ]}|                     |¦  «         Œ|S )z«
        Merge dicts in reverse to preference the order of the original list. e.g.,
        merge_dicts([a, b]) will preference the keys in 'a' over those in 'b'.
        )ÚreversedÚupdate)ÚdictsÚmergedÚds      r   rÜ   zRegisterLookupMixin.merge_dictsX  s8   € ð ˆÝ˜%‘”ð 	ð 	ˆAØ�MŠM˜!ÑÔÐÐØˆr   c                 ó\   — t          | ¦  «        D ]}|j                             ¦   «          Œd S r   )r   rÝ   Úcache_clearr   s     r   Ú_clear_cached_class_lookupsz/RegisterLookupMixin._clear_cached_class_lookupsc  s9   € å" 3™œð 	5ð 	5ˆHØÔ&×2Ò2Ñ4Ô4Ð4Ð4ð	5ð 	5r   Nc                 ót   — |€|j         }d| j        vri | _        || j        |<   |                      ¦   «          |S )Nr×   )rÓ   r²   r×   rñ   ©r   rk   rÓ   s      r   Úregister_class_lookupz)RegisterLookupMixin.register_class_lookuph  sI   € ØÐØ Ô,ˆKØ #¤,Ð.Ð.Ø "ˆCÔØ)/ˆÔ˜+Ñ&Ø×'Ò'Ñ)Ô)Ð)Øˆr   c                 óL   — |€|j         }d| j        vri | _        || j        |<   |S rß   )rÓ   r²   rà   ©r2   rk   rÓ   s      r   Úregister_instance_lookupz,RegisterLookupMixin.register_instance_lookupq  s7   € ØÐØ Ô,ˆKØ T¤]Ð2Ð2Ø$&ˆDÔ!Ø-3ˆÔ˜kÑ*Øˆr   c                 óP   — |€|j         }| j        |= |                      ¦   «          dS )zn
        Remove given lookup from cls lookups. For use in tests only as it's
        not thread-safe.
        N)rÓ   r×   rñ   ró   s      r   Ú_unregister_class_lookupz,RegisterLookupMixin._unregister_class_lookup~  s5   € ð
 ÐØ Ô,ˆKØÔ˜kÐ*Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)r   c                 ó(   — |€|j         }| j        |= dS )zs
        Remove given lookup from instance lookups. For use in tests only as
        it's not thread-safe.
        N)rÓ   rà   rö   s      r   Ú_unregister_instance_lookupz/RegisterLookupMixin._unregister_instance_lookupˆ  s#   € ð
 ÐØ Ô,ˆKØÔ! +Ð.Ð.Ð.r   r   )r–   r•   rª   rÔ   rË   ÚcacherÝ   rá   rÆ   rÑ   Úclassmethodra   rb   ÚstaticmethodrÜ   rñ   rô   r÷   Úregister_lookuprù   rû   Ú_unregister_lookupr#   r   r   rÏ   rÏ   0  sq  € € € € € ð9ð 9ð 9ð „_ð.ð .ñ „_ð.ðð ð ð +Ð*Ð+<Ð>RÑSÔS€KØ#˜Ð$5Ñ6Ô6Ððð ð ðð ð ð ðð ñ „\ðð ð5ð 5ñ „[ð5ðð ð ð ðð ð ð ð /Ð.ØÐ7ñô €Oð (˜KÐ(=Ñ>Ô>Ðð*ð *ð *ð *ð/ð /ð /ð /ð 2Ð1Ø Ð"=ñô Ðð  +˜{Ð+CÑDÔDÐÐÐr   rÏ   c                 óÒ   — | j         sdS t          | j         dd¦  «        rdS |s| j         S | j        |vrdS |r.| |vr*t	          d| j        j        j        › d| j        › d�¦  «        ‚dS )aØ  
    Return whether `field` should be used to descend deeper for
    `select_related()` purposes.

    Arguments:
     * `field` - the field to be checked. Can be either a `Field` or
       `ForeignObjectRel` instance.
     * `restricted` - a boolean field, indicating if the field list has been
       manually restricted using a select_related() clause.
     * `requested` - the select_related() dictionary.
     * `select_mask` - the dictionary of selected fields.
    FÚparent_linkzField r”   zM cannot be both deferred and traversed using select_related at the same time.T)Úremote_fieldr9   ÚnullrŒ   r   rÁ   r¿   Úobject_name)rl   Ú
restrictedÚ	requestedÚselect_masks       r   Úselect_related_descendr	  —  s¹   € ð Ôð Øˆuõ ˆuÔ! =°%Ñ8Ô8ð Øˆuð ð Ø”:ˆ~Ðð „z˜Ð"Ð"Øˆuð ð 
�u KÐ/Ð/ÝðL�U”[Ô&Ô2ð Lð L°U´Zð Lð Lð Lñ
ô 
ð 	
ð ˆ4r   c                 óÊ   — t          dt          | ¦  «        dz   ¦  «        D ]A}t          j        | d|…         ¦  «        }|                     |¦  «        r|| |d…         fc S ŒBdS )zÕ
    Check if the lookup_parts contains references to the given annotations set.
    Because the LOOKUP_SEP is contained in the default annotation names, check
    each prefix of the lookup_parts for a match.
    r'   r   N)Nr#   )ÚrangeÚlenr   r,   rÒ   )Úlookup_partsÚannotationsÚnÚlevel_n_lookups       r   Úrefs_expressionr  ½  sz   € õ �1•c˜,Ñ'Ô'¨!Ñ+Ñ,Ô,ð 4ð 4ˆÝ#œ¨°a¸°cÔ):Ñ;Ô;ˆØ�?Š?˜>Ñ*Ô*ð 	4Ø! <°°°Ô#3Ð3Ð3Ð3Ð3ð	4àˆ8r   c                 óp   ‡ — ˆ fd„} ||¦  «        p%t          |dd¦  «        o ||j        j        ¦  «        S )zÞ
    Check that self.model is compatible with target_opts. Compatibility
    is OK if:
      1) model and opts match (where proxy inheritance is removed)
      2) model is parent of opts' model or the other way around
    c                 óf   •— ‰j         j        | j        k    p| j        ‰j         j        v p‰| j        v S r   )r¿   Úconcrete_modelÚall_parents)rÃ   rÁ   s    €r   r’   z-check_rel_lookup_compatibility.<locals>.checkÒ  s=   ø€ àŒKÔ&¨$Ô*=Ò=ð )ØÔ" e¤kÔ&=Ð=ð)à˜Ô(Ð(ð	
r   rÂ   F)r9   rÁ   r¿   )rÁ   Útarget_optsrl   r’   s   `   r   Úcheck_rel_lookup_compatibilityr  Ê  sX   ø€ ð
ð 
ð 
ð 
ð 
ð  ˆ5�ÑÔð Ý��} eÑ,Ô,ÐI°°°u´{Ô7HÑ1IÔ1Iðr   c                   óL   — e Zd ZdZ e¦   «         dœd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚFilteredRelationz7Specify custom filtering in the ON clause of SQL joins.©Ú	conditionc                ó¨   — |st          d¦  «        ‚|| _        d | _        t          |t          ¦  «        st          d¦  «        ‚|| _        d | _        d S )Nzrelation_name cannot be empty.z*condition argument must be a Q() instance.)r-   Úrelation_nameÚaliasr<   r   r  Úresolved_condition)r2   r  r  s      r   r/   zFilteredRelation.__init__ê  sa   € Øð 	?ÝÐ=Ñ>Ô>Ð>Ø*ˆÔØˆŒ
Ý˜)¥QÑ'Ô'ð 	KÝÐIÑJÔJÐJð #ˆŒØ"&ˆÔÐÐr   c                 óš   — t          || j        ¦  «        st          S | j        |j        k    o| j        |j        k    o| j        |j        k    S r   )r<   r6   rŸ   r  r  r  rC   s     r   r    zFilteredRelation.__eq__÷  sQ   € Ý˜% ¤Ñ0Ô0ð 	"Ý!Ð!àÔ %Ô"5Ò5ð 2Ø”
˜eœkÒ)ð2à” %¤/Ò1ð	
r   c                 ó˜   — t          | j        | j        ¬¦  «        }| j        |_        | j        x}�|                     ¦   «         |_        |S )Nr  )r  r  r  r  r  re   )r2   re   r  s      r   re   zFilteredRelation.clone   sJ   € Ý  Ô!3¸t¼~ÐNÑNÔNˆØ”jˆŒØ"&Ô"9Ð9ÐÐFØ'9×'?Ò'?Ñ'AÔ'AˆEÔ$Øˆr   c                 ót   — |                       ¦   «         }|j        x}r|                     |¦  «        |_        |S r   )re   r  Úrelabeled_clone)r2   Ú
change_mapre   r  s       r   r#  z FilteredRelation.relabeled_clone  s<   € Ø—
’
‘”ˆØ!&Ô!9Ð9Ðð 	VØ'9×'IÒ'IÈ*Ñ'UÔ'UˆEÔ$Øˆr   c                 ó‚   — |                       ¦   «         }|                     | j        |ddd¬¦  «        d         |_        |S )NTF)Ú	can_reuserN   rO   Úupdate_join_typesr   )re   Úbuild_filterr  r  )r2   rT   rU   r3   r4   re   s         r   rY   z#FilteredRelation.resolve_expression  sN   € Ø—
’
‘”ˆØ#(×#5Ò#5ØŒNØØØØ#ð $6ñ $
ô $
ð ô$ˆÔ ð ˆr   c                 ó6   — |                      | j        ¦  «        S r   )Úcompiler  )r2   r�   rŽ   s      r   Úas_sqlzFilteredRelation.as_sql  s   € Ø×Ò Ô 7Ñ8Ô8Ð8r   N)r–   r•   rª   r«   r   r/   r    re   r#  rY   r+  r#   r   r   r  r  ç  s‡   € € € € € ØAÐAà34°1±3´3ð 'ð 'ð 'ð 'ð 'ð
ð 
ð 
ðð ð ðð ð ð	ð 	ð 	ð9ð 9ð 9ð 9ð 9r   r  )%r«   rË   rÚ   ÚloggingÚcollectionsr   Ú
contextlibr   Údjango.core.exceptionsr   Ú	django.dbr   r   r   r	   r
   Údjango.db.models.constantsr   Údjango.utilsr   Údjango.utils.functionalr   Údjango.utils.hashabler   Ú	getLoggerr‰   r   r   ÚNoder   r®   rÆ   rÏ   r	  r  r  r  r#   r   r   ú<module>r7     s9  ððð ð Ð Ð Ð Ø €€€Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "à -Ð -Ð -Ð -Ð -Ð -Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø /Ð /Ð /Ð /Ð /Ð /à	ˆÔ	Ð-Ñ	.Ô	.€ð
 ˆ:ØØMñô €ð(ð (ð (ðI
ð I
ð I
ð I
ð I
ˆŒ	ñ I
ô I
ð I
ðX*ð *ð *ð *ð *ñ *ô *ð *ðZAð Að Að Að Añ Aô Að Að dEð dEð dEð dEð dEñ dEô dEð dEðN#ð #ð #ðL
ð 
ð 
ðð ð ð:29ð 29ð 29ð 29ð 29ñ 29ô 29ð 29ð 29ð 29r   