§
    Ï“ÙhŒ;  ã                   óF  — 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	m
Z
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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)Ú
FieldError)ÚDEFAULT_DB_ALIASÚDatabaseErrorÚconnections)Ú
LOOKUP_SEP)Útreeú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     ú[/var/www/surfInsights/venv3-11/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ddœˆ fd	„
Z	d
„ Z
d„ Zd„ Zd„ Zd„ Z	 dd„Zd„ Zefd„Zd„ Zˆ xZS )ÚQze
    Encapsulate filters as objects that can then be combined logically (using
    `&` and `|`).
    ÚANDÚORÚXORTNF)Ú
_connectorÚ_negatedc                ó–   •— t          ¦   «                              g |¢t          |                     ¦   «         ¦  «        ¢||¬¦  «         d S )N)ÚchildrenÚ	connectorÚnegated)ÚsuperÚ__init__ÚsortedÚitems)Úselfr   r   ÚargsÚkwargsÚ	__class__s        €r   r!   z
Q.__init__0   sQ   ø€ Ý‰Œ×ÒØ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)r$   ÚotherÚconnÚobjs       r   Ú_combinez
Q._combine7   s¤   € Ý�5˜-¨Ñ/Ô/°5Ð8Ð8Ý˜EÑ"Ô"Ð"Øð 	 Ø—:’:‘<”<ÐØð 	� E­1Ñ-Ô-ð 	Ø—9’9‘;”;Ðà�kŠk DˆkÑ)Ô)ˆØ�Š��dÑÔÐØ�Š��tÑÔÐØˆ
r   c                 ó8   — |                       || j        ¦  «        S r   )r3   r   ©r$   r0   s     r   Ú__or__zQ.__or__D   s   € Ø�}Š}˜U D¤GÑ,Ô,Ð,r   c                 ó8   — |                       || j        ¦  «        S r   )r3   r   r5   s     r   Ú__and__z	Q.__and__G   ó   € Ø�}Š}˜U D¤HÑ-Ô-Ð-r   c                 ó8   — |                       || j        ¦  «        S r   )r3   r   r5   s     r   Ú__xor__z	Q.__xor__J   r9   r   c                 óV   — |                       ¦   «         }|                     ¦   «          |S r   )r,   Únegate)r$   r2   s     r   Ú
__invert__zQ.__invert__M   s!   € Ø�iŠi‰kŒkˆØ�
Š
‰ŒˆØˆ
r   c                 ól   — |                      | ||dd|¬¦  «        \  }}|                     |¦  «         |S )NF)Úallow_joinsÚ
split_subqÚcheck_filterableÚ	summarize)Ú_add_qÚpromote_joins)r$   Úqueryr@   ÚreuserC   Úfor_saveÚclauseÚjoinss           r   Úresolve_expressionzQ.resolve_expressionR   sM   € ð
 ŸšØØØ#ØØ"Øð %ñ 
ô 
‰ˆ�ð 	×Ò˜EÑ"Ô"Ð"Øˆ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.
        é   ÚflattenN)r   r-   ÚtupleÚhasattrrN   )r$   Úchilds     r   rN   z	Q.flattenb   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|                     | ¦  «         |                     |¬¦  «        }	 |                     |¦  «        duS # t&          $ r'}t(                               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)ÚSINGLENrK   F)ÚselectrM   Ú_checkT)Úoutput_field)Úusingz.Got a database error calling check() on %r: %s)Údjango.db.modelsrS   rT   Údjango.db.models.functionsrU   Údjango.db.models.sqlrV   Údjango.db.models.sql.constantsrW   r#   rP   Úadd_annotationr   ÚfeaturesÚsupports_comparing_boolean_exprÚadd_qr   Úget_compilerÚexecute_sqlr   ÚloggerÚwarning)r$   Úagainstr[   rS   rT   rU   rV   rW   rF   ÚnameÚvalueÚcompilerÚes                r   ÚcheckzQ.checkq   s§  € ð 	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å�uÔÔ&ÔFð 	Ø�KŠK�˜(˜( 4¨¸L¸L¹N¼NÐKÑKÔKÑLÔLÑMÔMÐMÐMà�KŠK˜ÑÔÐØ×%Ò%¨EÐ%Ñ2Ô2ˆð	Ø×'Ò'¨Ñ/Ô/°tÐ;Ð;øÝð 	ð 	ð 	Ý�NŠNÐKÈTÐSTÑUÔUÐUØ�4�4�4�4�4øøøøð	øøøs   ÄD# Ä#
EÄ-EÅE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   )
r'   Ú
__module__Ú__name__Ú
startswithÚreplacerO   r   r   Údefaultr   )r$   Úpathr%   r&   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   )NTNFF)rq   rp   Ú__qualname__Ú__doc__r   r   r   rt   r)   r!   r3   r6   r8   r;   r>   rK   rN   r   rm   rv   Ú__classcell__)r'   s   @r   r   r   #   s	  ø€ € € € € ðð ð €CØ	€BØ
€CØ€GØ€Kà)-¸ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð-ð -ð -ð.ð .ð .ð.ð .ð .ðð ð ð SXðð ð ð ð ð ð ð $4ð ð ð ð ð:
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"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   )Úfield)r$   r}   s     r   r!   zDeferredAttribute.__init__¡   s   € ØˆŒ
ˆ
ˆ
r   Nc                 ó°   — |€| S |j         }| j        j        }||vr4|                      |¦  «        }|€|                     |g¬¦  «         n|||<   ||         S )zx
        Retrieve and caches the value from the datastore on the first lookup.
        Return the cached value.
        N)Úfields)Ú__dict__r}   ÚattnameÚ_check_parent_chainÚrefresh_from_db)r$   Úinstancer   ÚdataÚ
field_nameÚvals         r   Ú__get__zDeferredAttribute.__get__¤   sw   € ð
 ÐØˆKØÔ ˆØ”ZÔ'ˆ
Ø˜TÐ!Ð!ð ×*Ò*¨8Ñ4Ô4ˆCØˆ{Ø×(Ò(°°Ð(Ñ=Ô=Ð=Ð=à#&��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_linkr}   ÚmodelÚprimary_keyr*   r�   )r$   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   )rq   rp   rw   rx   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)r$   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•   )r$   r„   Úowners      r   rˆ   z class_or_instance_method.__get__Î   s4   € ØÐÝÔ$ TÔ%6¸Ñ>Ô>Ð>ÝÔ  Ô!5°xÑ@Ô@Ð@r   N)rq   rp   rw   rx   r!   rˆ   r�   r   r   r’   r’   Ä   sA   € € € € € ðð ð
/ð /ð /ðAð Að Að Að Ar   r’   c                   ó0  — e Zd Zd„ Z ej        d¬¦  «        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)r$   Úlookup_names     r   Ú_get_lookupzRegisterLookupMixin._get_lookupÕ   s$   € Ø×ÒÑ!Ô!×%Ò% k°4Ñ8Ô8Ð8r   N)Úmaxsizec                 óh   — d„ t          j        | ¦  «        D ¦   «         }|                      |¦  «        S )Nc                 óD   — g | ]}|j                              d i ¦  «        ‘ŒS )Úclass_lookups)r€   rž   )Ú.0Úparents     r   ú
<listcomp>z9RegisterLookupMixin.get_class_lookups.<locals>.<listcomp>Ú   s7   € ð 
ð 
ð 
Ø9?ˆFŒO×Ò °Ñ4Ô4ð
ð 
ð 
r   )ÚinspectÚgetmroÚmerge_dicts)r   r¤   s     r   Úget_class_lookupsz%RegisterLookupMixin.get_class_lookupsØ   s?   € ð
ð 
ÝCJÄ>ÐRUÑCVÔCVð
ñ 
ô 
ˆð �Š˜}Ñ-Ô-Ð-r   c                 ó`   — |                       ¦   «         }t          | dd ¦  «        x}ri |¥|¥S |S ©NÚinstance_lookups)r«   r*   )r$   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   )ÚLookuprZ   )Údjango.db.models.lookupsr±   r    rP   rZ   Ú
get_lookupÚ
issubclass)r$   rŸ   r±   Úfounds       r   r³   zRegisterLookupMixin.get_lookupè   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   )Ú	TransformrZ   )r²   r·   r    rP   rZ   Úget_transformr´   )r$   rŸ   r·   rµ   s       r   r¸   z!RegisterLookupMixin.get_transformò   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_dictsü   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_lookups  s9   € å" 3™œð 	5ð 	5ˆHØÔ&×2Ò2Ñ4Ô4Ð4Ð4ð	5ð 	5r   c                 ót   — |€|j         }d| j        vri | _        || j        |<   |                      ¦   «          |S )Nr¤   )rŸ   r€   r¤   rÁ   ©r   ÚlookuprŸ   s      r   Úregister_class_lookupz)RegisterLookupMixin.register_class_lookup  sI   € ØÐØ Ô,ˆKØ #¤,Ð.Ð.Ø "ˆCÔØ)/ˆÔ˜+Ñ&Ø×'Ò'Ñ)Ô)Ð)Øˆr   c                 óL   — |€|j         }d| j        vri | _        || j        |<   |S r­   )rŸ   r€   r®   ©r$   rÄ   rŸ   s      r   Úregister_instance_lookupz,RegisterLookupMixin.register_instance_lookup  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   )rq   rp   rw   r    r—   Ú	lru_cacher«   r¯   r’   r�   Úclassmethodr³   r¸   Ústaticmethodrª   rÁ   rÅ   rÈ   Úregister_lookuprÊ   rÌ   Ú_unregister_lookupr�   r   r   r›   r›   Ô   s€  € € € € € ð9ð 9ð 9ð €YÔ Ð&Ñ&Ô&ð.ð .ñ 'Ô&ð.ðð ð ð +Ð*Ð+<Ð>RÑSÔS€KØ#˜Ð$5Ñ6Ô6Ððð ð ðð ð ð ðð ñ „\ðð ð5ð 5ñ „[ð5ðð ð ð ðð ð ð ð /Ð.ØÐ7ñô €Oð (˜KÐ(=Ñ>Ô>Ðð*ð *ð *ð *ð/ð /ð /ð /ð 2Ð1Ø Ð"=ñô Ðð  +˜{Ð+CÑDÔDÐÐÐr   r›   Fc                 ó  — | j         sdS | j         j        r|sdS |r'|r|                      ¦   «         |vrdS |s| j        |vrdS |s	| j        rdS |r9|r7| j        |v r.| |vr*t          d| j        j        j        › d| j        › d�¦  «        ‚dS )af  
    Return True if this field should be used to descend deeper for
    select_related() purposes. Used by both the query construction code
    (compiler.get_related_selections()) and the model instance creation code
    (compiler.klass_info).

    Arguments:
     * field - the field to be checked
     * restricted - a boolean field, indicating if the field list has been
       manually restricted using a requested clause)
     * requested - The select_related() dictionary.
     * select_mask - the dictionary of selected fields.
     * reverse - boolean, True if we are checking a reverse select related
    FzField ro   zM cannot be both deferred and traversed using select_related at the same time.T)	Úremote_fieldÚparent_linkÚrelated_query_nameri   Únullr   rŒ   rŠ   Úobject_name)r}   Ú
restrictedÚ	requestedÚselect_maskÚreverses        r   Úselect_related_descendrÜ   ;  sý   € ð Ôð ØˆuØÔÔ%ð ¨gð ØˆuØð Øð 	�u×/Ò/Ñ1Ô1¸ÐBÐBØ�5Øð 	˜5œ:¨YÐ6Ð6Ø�5Øð ˜%œ*ð Øˆuàð	
àð	
ð ŒJ˜)Ð#Ð#Ø˜Ð$Ð$åð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.
    rM   r   N)Nr�   )ÚrangeÚlenr   Újoinrž   )Úlookup_partsÚannotationsÚnÚlevel_n_lookups       r   Úrefs_expressionrå   b  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                 óš   •— ‰j         j        | j        k    p5| j        ‰j                              ¦   «         v p‰|                      ¦   «         v S r   )rŠ   Úconcrete_modelÚget_parent_list)rŽ   rŒ   s    €r   rm   z-check_rel_lookup_compatibility.<locals>.checkw  sO   ø€ àŒKÔ&¨$Ô*=Ò=ð /ØÔ" e¤k×&AÒ&AÑ&CÔ&CÐCð/à˜×,Ò,Ñ.Ô.Ð.ð	
r   r�   F)r*   rŒ   rŠ   )rŒ   Útarget_optsr}   rm   s   `   r   Úcheck_rel_lookup_compatibilityrë   o  sX   ø€ ð
ð 
ð 
ð 
ð 
ð  ˆ5�ÑÔð Ý��} eÑ,Ô,ÐI°°°u´{Ô7HÑ1IÔ1Iðr   c                   óF   — e Zd ZdZ e¦   «         dœ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¦  «        ‚|| _        g | _        d S )Nzrelation_name cannot be empty.z*condition argument must be a Q() instance.)Ú
ValueErrorÚrelation_nameÚaliasr-   r   rï   ru   )r$   rò   rï   s      r   r!   zFilteredRelation.__init__�  s\   € Øð 	?ÝÐ=Ñ>Ô>Ð>Ø*ˆÔØˆŒ
Ý˜)¥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-   r'   ÚNotImplementedrò   ró   rï   r5   s     r   Ú__eq__zFilteredRelation.__eq__™  sQ   € Ý˜% ¤Ñ0Ô0ð 	"Ý!Ð!àÔ %Ô"5Ò5ð 2Ø”
˜eœkÒ)ð2à” %¤/Ò1ð	
r   c                 ó|   — t          | j        | j        ¬¦  «        }| j        |_        | j        d d …         |_        |S )Nrî   )rí   rò   rï   ró   ru   )r$   Úclones     r   rø   zFilteredRelation.clone¢  s8   € Ý  Ô!3¸t¼~ÐNÑNÔNˆØ”jˆŒØ”Y˜q˜q˜q”\ˆŒ
Øˆr   c                 ó    — t          d¦  «        ‚)zz
        QuerySet.annotate() only accepts expression-like arguments
        (with a resolve_expression() method).
        z0FilteredRelation.resolve_expression() is unused.)ÚNotImplementedError)r$   r%   r&   s      r   rK   z#FilteredRelation.resolve_expression¨  s   € õ
 "Ð"TÑUÔUÐUr   c                 ó–   — |j         }|                     | j        t          | j        ¦  «        ¬¦  «        }|                     |¦  «        S )N)rG   )rF   Úbuild_filtered_relation_qrï   Úsetru   Úcompile)r$   rk   Ú
connectionrF   Úwheres        r   Úas_sqlzFilteredRelation.as_sql¯  s?   € à”ˆØ×/Ò/°´ÅcÈ$Ì)ÁnÄnÐ/ÑUÔUˆØ×Ò Ñ&Ô&Ð&r   N)
rq   rp   rw   rx   r   r!   rö   rø   rK   r  r�   r   r   rí   rí   Œ  s{   € € € € € ØAÐAà34°1±3´3ð ð ð ð ð ð
ð 
ð 
ðð ð ðVð Vð Vð'ð 'ð 'ð 'ð 'r   rí   )F)rx   r—   r¨   ÚloggingÚcollectionsr   Údjango.core.exceptionsr   Ú	django.dbr   r   r   Údjango.db.models.constantsr   Údjango.utilsr	   Ú	getLoggerrf   r   r   ÚNoder   r{   r’   r›   rÜ   rå   rë   rí   r�   r   r   ú<module>r
     sü  ððð ð Ð Ð Ð Ø €€€Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "à -Ð -Ð -Ð -Ð -Ð -Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð à	ˆÔ	Ð-Ñ	.Ô	.€ð
 ˆ:ØØMñô €ð(ð (ð (ðu"ð u"ð u"ð u"ð u"ˆŒ	ñ u"ô u"ð u"ðp&ð &ð &ð &ð &ñ &ô &ð &ðR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$ð $ð $ð $ðN
ð 
ð 
ðð ð ð:''ð ''ð ''ð ''ð ''ñ ''ô ''ð ''ð ''ð ''r   