
     h                    n   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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mZ d dlmZmZmZmZmZ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%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZH d dlImJZK  G d d          ZL eL            ZMd ZNd ZO G d deP          ZQ G d d           ZR G d! d"          ZS G d# d$eQ%          ZTd+d&ZUd' ZVd( ZWd) ZXd*eX_Y        dS ),    N)partialmethod)chain)apps)settings)checks)NON_FIELD_ERRORSFieldDoesNotExist
FieldErrorMultipleObjectsReturnedObjectDoesNotExistValidationError)DJANGO_VERSION_PICKLE_KEYDatabaseError
connectionconnectionsroutertransaction)NOT_PROVIDEDExpressionWrapperIntegerFieldMaxValue
LOOKUP_SEP)CheckConstraintUniqueConstraint)CASCADE	Collector)RawSQL)ForeignObjectRelOneToOneFieldlazy_related_operationresolve_relation)Coalesce)Manager)Options)FQ)class_prepared	post_init	post_savepre_initpre_save)make_model_tuple)	force_str)make_hashable)capfirstget_text_list)gettext_lazyc                       e Zd Zd Zd ZdS )Deferredc                     dS Nz<Deferred field> selfs    Q/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/django/db/models/base.py__repr__zDeferred.__repr__9       !!    c                     dS r7   r8   r9   s    r;   __str__zDeferred.__str__<   r=   r>   N)__name__
__module____qualname__r<   r@   r8   r>   r;   r5   r5   8   s2        " " "" " " " "r>   r5   c                 >    t          | |||j        d| d          S )z
    Create exception subclass. Used by ModelBase below.

    The exception is created in a way that allows it to be pickled, assuming
    that the returned exception class will be added as an attribute to the
    'attached_to' class.
    .)rB   rC   )typerC   )namebasesmoduleattached_tos       r;   subclass_exceptionrK   C   s<      '2'?'?'?F	
 	
  r>   c                 L    t          j        |            ot          | d          S )Ncontribute_to_class)inspectisclasshasattr)values    r;   _has_contribute_to_classrR   U   s%    u%%%O'%9N*O*OOr>   c                   Z     e Zd ZdZ fdZd Zd Zed             Zed             Z	 xZ
S )	ModelBasezMetaclass for all models.c                    t                      j        }d |D             }|s || |||          S |                    d          }d|i}|                    dd           }	|	|	|d<   |                    dd           }
i }|                                D ]\  }}t	          |          r|||<   |||<     || |||fi |}t          |
dd          }|
pt          |dd           }t          |dd           }d }t          j        |          }t          |dd           "||st          d	|d
|d          n|j	        }|
                    dt          ||                     |s|
                    dt          dt          d |D                       pt          f||                     |
                    dt          dt          d |D                       pt          f||                     |rI|j        sBt#          |d          s|j        |j        _        t#          |d          s|j        |j        _        |j        j        }|r#|r!|j        rt/          |d|j        d          |                                D ]\  }}|
                    ||           t1          |j        j        |j        j        |j        j                  }d |D             }|rd }d |D             D ]\}|j        j        r|j        j        rt/          d|z            -||}2|j        j        |j        j        urt/          d|z            ]|t/          d|z            |j                            |           |j        j        |j        _        n||j        _        i }t?          |g|z             D ]}t#          |d          s||k    r|j        j        s&|j        j        D ]O}tA          |tB                    r8|j"        j#        r,tI          ||j"        j%                  }||tM          |          <   PtO                      }|(                                D ]}||vst#          |d          s|)                    |j*                   2|j        j        |j        j        z   }|j        j        s|D ]H}|j+        |v r#tY          d|j+        d|d|j-        d
          |.                    |j+                   I|j        j        }tM          |          }||v r	||         }nu|sqd|j        j/        z  }tC          |t`          |dd          }||v rtY          d |d!|d"|j-        d#          t#          ||          s|
                    ||           nd }||j        j1        |<   n|j        j1        2                                } |D ]}}|j+        |vrr|j+        |j*        vrd|j+        |vr[te          j3        |          }!|
                    |j+        |!           |j4        r%|                                 D ]\  }}"||"k    r|!| |<   ~|j        j1        )                    |            |j        j        D ]}}|j+        |v r0|j        j        s#tY          d|j+        d|d|j-        d
          ;te          j3        |          }|j        j        sd|_5        |
                    |j+        |           ~d$ |j        j6        D             |j        _6        |rd|
_        |
|_7        |S |8                                 |j        j        9                    |j        j:        |           |S )%Nc                 <    g | ]}t          |t                    |S r8   )
isinstancerT   ).0bs     r;   
<listcomp>z%ModelBase.__new__.<locals>.<listcomp>b   s'    @@@z!Y'?'?@1@@@r>   rB   __classcell__MetaabstractF_meta	app_labelzModel class rE   zU doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.DoesNotExistc              3   \   K   | ]'}t          |d           |j        j        |j        V  (dS r^   N)rP   r^   r]   r`   rX   xs     r;   	<genexpr>z$ModelBase.__new__.<locals>.<genexpr>   sW        "1g.. 89w7G     r>   )rJ   r   c              3   \   K   | ]'}t          |d           |j        j        |j        V  (dS rb   )rP   r^   r]   r   rc   s     r;   re   z$ModelBase.__new__.<locals>.<genexpr>   sX        "1g.. 89w7G1     r>   orderingget_latest_byz! cannot proxy the swapped model ''.c                     h | ]	}|j         
S r8   rG   rX   fs     r;   	<setcomp>z$ModelBase.__new__.<locals>.<setcomp>   s    222!qv222r>   c                 2    g | ]}t          |d           |S )r^   )rP   )rX   klss     r;   rZ   z%ModelBase.__new__.<locals>.<listcomp>   s'    KKK3WS'5J5JK3KKKr>   zOAbstract base class containing model fields not permitted for proxy model '%s'.zAProxy model '%s' has more than one non-abstract model base class.z6Proxy model '%s' has no non-abstract model base class.zLocal field z
 in class z5 clashes with field of the same name from base class z%s_ptrT)	on_deleterG   auto_createdparent_linkzAuto-generated field 'z' in class z for parent_link to base class z. clashes with declared field of the same name.c                 6    g | ]}t          j        |          S r8   )copydeepcopy)rX   idxs     r;   rZ   z%ModelBase.__new__.<locals>.<listcomp>_  s/     #
 #
 #
#&DM##
 #
 #
r>   );super__new__popitemsrR   getattrr   get_containing_app_configRuntimeErrorlabeladd_to_classr&   rK   tupler   r   r]   rP   rg   r^   rh   proxyswapped	TypeErrorr   local_fieldslocal_many_to_manyprivate_fieldsfieldsconcrete_modelsetup_proxyreversedrW   r!   remote_fieldrs   r#   modelr.   setmroupdate__dict__rG   r
   rA   add
model_namer   parentsru   rv   
one_to_onemti_inheritedindexesr\   _prepareregister_modelr_   )$clsrG   rH   attrskwargs	super_newr   rI   	new_attrs	classcell	attr_metacontributable_attrsobj_nameobj	new_classr]   meta	base_metar_   
app_configis_proxy
new_fieldsfield_namesbaseparentparent_linksfieldrelatedinherited_attributesparent_fieldsbase_key	attr_namebase_parents	new_fieldrs   	__class__s$                                      r;   ry   zModelBase.__new__]   sg	   GGO	 A@e@@@ 	69S$u555 <((!6*	IIot44	 )2Io&IIfd++	 !"[[]] 	* 	*MHc',, *03#H--&)	(##Ic4	DDVDD	9j%88<GIvt<<Iw55		 3F;;
4d++3! &, .4VVTTT;   ',	wi(@(@AAA $	L""""  !(     -
 +, )
 
 
   "")"-  !(     2
 01 )
 
 
    L!3 L tZ00 B/8/AIO,t_55 L4=4KIO1?(  		 	i&7 	=ATT9CTCTCTU   16688 	2 	2MHc""8S1111 O(O.O*
 


 32z222  	7DKK'KKK  <( !|* !'>@DE  
 !<!DD\0
8QQQ#!#'(   R
 |LtS   O''----1Z-FIO**-6IO* i[7233 	D 	DD4)) y  )< 0 D De]33 D8J8V D.y%:L:RSSG>CL!1'!:!:;D  #uuMMOO c	> c	>D7""'$*@*@" %++DM::: J3dj6SSM:& G= + = =Ez[00(j !&


 $ $   -00<<<< z0+D11|++(2EE! ! (4:+@ @I)")&%)$(  E !K//(j
 !*		 $ $	 	 	 #9i88 A!..y%@@@ E05	'--#z16688 + E EE
+55!Ji.@@@!J.BBB$(M%$8$8	!..uz9EEE !+ E7C7I7I7K7K E E 3#(K#7#7;DL$8 '..|<<< 2 > >:,,:. 	(j !&


 $ $  	 !M%00E:. 3.2+**5:u====!>(#
 #
*3/*A#
 #
 #
	  	 "'I&IN++IO,EyQQQr>   c                 v    t          |          r|                    | |           d S t          | ||           d S N)rR   rM   setattr)r   rG   rQ   s      r;   r   zModelBase.add_to_classo  sF    #E** 	&%%c400000Cu%%%%%r>   c                 T   | j         }|                    |            |j        rkt          | j        d          | _        t          | j        d          | _        |j        j        r)|j        }|j        j        }t          t          | |           | j        4| j        dd                    d |j        D                       d| _        t          j                            |j                  }|rt'          | d	|           |j        s`t+          d
 |j        D                       rt-          d| j        z            t/                      }d|_        |                     d|           | j         j        D ]}|j        s|                    |            t;          j        |            dS )z7Create some methods once self._meta has been populated.T)is_nextFN(, c              3   $   K   | ]}|j         V  d S r   rk   rl   s     r;   re   z%ModelBase._prepare.<locals>.<genexpr>  s$      66Q!&666666r>   )get_absolute_urlc              3   ,   K   | ]}|j         d k    V  dS )objectsNrk   rl   s     r;   re   z%ModelBase._prepare.<locals>.<genexpr>  s)      <<116Y&<<<<<<r>   zOModel %s must specify a custom Manager, because it has a field named 'objects'.r   )sender)r^   r   order_with_respect_tor   _get_next_or_previous_in_orderget_next_in_orderget_previous_in_orderr   r   r"   make_foreign_order_accessors__doc__rA   joinr   r   ABSOLUTE_URL_OVERRIDESgetlabel_lowerr   managersany
ValueErrorr%   rr   r   r   rG   set_name_with_modelr)   send)r   optswrtremoteget_absolute_url_overridemanagerindexs          r;   r   zModelBase._prepareu  s   yc% 	R$12D% % %C! )62E) ) )C% )6 R0)/&'CS&QQQ ;		66$+6666666CK
 %-$C$G$G%
 %
! % 	HC+-FGGG} 	1<<<<<<<  -/2|<   iiG#'G Y000
 Y& 	/ 	/E: /))#...3''''''r>   c                     | j         j        S r   )r^   base_managerr   s    r;   _base_managerzModelBase._base_manager  s    y%%r>   c                     | j         j        S r   )r^   default_managerr   s    r;   _default_managerzModelBase._default_manager  s    y((r>   )rA   rB   rC   r   ry   r   r   propertyr   r   r[   r   s   @r;   rT   rT   Z   s        ##P P P P Pd& & &5( 5( 5(n & & X& ) ) X) ) ) ) )r>   rT   c                       e Zd ZddZdS )ModelStateFieldsCacheDescriptorNc                      || S i x}|_         |S r   )fields_cache)r:   instancer   ress       r;   __get__z'ModelStateFieldsCacheDescriptor.__get__  s    K&((h#
r>   r   )rA   rB   rC   r   r8   r>   r;   r   r     s(             r>   r   c                   .    e Zd ZdZdZdZ e            ZdS )
ModelStatezStore model instance state.NT)rA   rB   rC   r   dbaddingr   r   r8   r>   r;   r   r     s.        %%	B
 F2244LLLr>   r   c                   N    e Zd Z fdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd?dZd Z eee          Zd Zd@dZd Z	 dAdZde_        	 	 	 	 	 dBdZde_        d Z	 	 	 	 	 	 dCdZd Zd Zd?dZdDdZde_        d Zd Zd Zd?dZ d Z!d Z"d?d Z#dDd!Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d?d'Z*dEd(Z+d?d)Z,ed*             Z-ed+             Z.ed,             Z/ed-             Z0ed.             Z1ed/             Z2ed0             Z3ed1             Z4ed2             Z5ed3             Z6ed4             Z7ed5             Z8ed6             Z9ed7             Z:ed8             Z;ed9             Z<ed:             Z=ed;             Z>ed<             Z?ed=             Z@ed>             ZA xZBS )FModelc                    | j         }| j        }t          }t          }|j        rt          d          t          j        |||           t                      | _	        t          |          t          |j                  k    rt          d          |sBt          |j                  }t          ||          D ]\  }}	||u r
 || |	j        |           nt          |j                  }t          ||          D ]b\  }}	||u r
 || |	j        |           |                    |	j        t&                    t&          urt          |j         d|	j         d          c|D ]$}	d}
|	j        |vr|	j        |rt-          |	j        t0                    rn	 |                    |	j                  }d}
n# t2          $ rC 	 |                    |	j                  }n$# t2          $ r |	                                }Y nw xY wY nXw xY w	 |                    |	j                  }n8# t2          $ r |	                                }Y nw xY w|	                                }|
r||ur || |	j        |           ||ur || |	j        |           &|r|j        }d}|                                D ]X\  }}||v r||ur || ||           	 |                    |           ||ur || ||           C# t<          $ r	 ||fz  }Y Uw xY w|r8d	                    d
 |D                       }t          |j          d|           tC                      "                                 tG          j        ||            d S )Nz'Abstract models cannot be instantiated.)r   argsr   z'Number of args exceeds number of fieldsz8() got both positional and keyword arguments for field 'ri   FTr8   r   c              3   4   K   | ]}t          |          V  d S r   )repr)rX   ns     r;   re   z!Model.__init__.<locals>.<genexpr>4  s(      ,I,IT!WW,I,I,I,I,I,Ir>   z%() got unexpected keyword arguments: )r   r   )$r   r^   r   DEFERREDr]   r   r,   r   r   _statelenconcrete_fields
IndexErroriterzipattnamer   rz   rG   r   rC   columnrW   r   r    KeyErrorget_default_property_namesr{   	get_fieldr	   r   rA   rx   __init__r*   )r:   r   r   r   r   _setattr	_DEFERREDfields_itervalr   is_related_objectrel_objproperty_names
unexpectedproprQ   unexpected_namesr   s                    r;   r  zModel.__init__  sg   nz	= 	GEFFFStF;;;; !ll t99s4/0000FGGG 	t344K
 "$44 3 3
U)##u}c22223 t{++K!$44  
U)##u}c222::ej,77|KK#+ G G8=
G G G   L ! &	7 &	7E %}F**u|/C *e02BCC 2	6"(**UZ"8"8,0))# 6 6 66"(**U]";";CC' 6 6 6"'"3"3"5"5CCC6	62$jj77# 2 2 2
 $//112 ''))  	7
 )++HT5:w777i''HT5=#666 	!1NJ%||~~ 8 8e >))I-- tU3338t,,, !	11$HT4777	 - . . ."tg-


.
  #'99,I,Ij,I,I,I#I#I | * *'* *   	cD111111sZ   F//
G<:GG<G63G<5G66G<;G< HH<;H< K''K:9K:c                     t          |          t          | j        j                  k    r(t          |          fd| j        j        D             } | | }d|j        _        ||j        _        |S )Nc                 N    g | ]!}|j         v rt                    nt          "S r8   )r   nextr   )rX   rm   r   values_iters     r;   rZ   z!Model.from_db.<locals>.<listcomp>@  sB        &'Y+%=%=[!!!8  r>   F)r   r^   r   r   r   r   r   )r   r   r   valuesnewr  s     `  @r;   from_dbzModel.from_db<  s    v;;#ci78888v,,K    2  F c6l!


r>   c                 (    d| j         j        d| dS )N<z: >)r   rA   r9   s    r;   r<   zModel.__repr__I  s     !^444ddd;;r>   c                 0    | j         j        d| j        dS )Nz	 object (r   )r   rA   pkr9   s    r;   r@   zModel.__str__L  s    #'>#:#:#:DGGGDDr>   c                     t          |t                    st          S | j        j        |j        j        k    rdS | j        }|| |u S ||j        k    S NF)rW   r   NotImplementedr^   r   r  )r:   othermy_pks      r;   __eq__zModel.__eq__O  sW    %'' 	"!!:$(BBB5=5=   r>   c                 V    | j         t          d          t          | j                   S )Nz8Model instances without primary key value are unhashable)r  r   hashr9   s    r;   __hash__zModel.__hash__Y  s&    7?VWWWDG}}r>   c                     |                                  }t          j        |t          <   | j        j        | j        j        f}t          |f|fS r   )__getstate__django__version__r   r^   r_   object_namemodel_unpickle)r:   dataclass_ids      r;   
__reduce__zModel.__reduce__^  sD      ""*0*<&':')??{D00r>   c                    | j                                         }t          j        |d                   |d<   |d         j                                        |d         _        g }|                                D ]>\  }}t	          |t
                    r$|                    |t          |          f           ?|r"||d<   |D ]\  }}|                    |           |S )z0Hook to allow choosing the attributes to pickle.r   _memoryview_attrs)	r   ru   r   r{   rW   
memoryviewappendbytesrz   )r:   stater+  attrrQ   s        r;   r"  zModel.__getstate__d  s    ""$$)E(O44h',X'C'H'H'J'Jh$  ;;== 	? 	?KD%%,, ?!(($e)=>>> 	 ):E%&0    e		$r>   c                    |                     t                    }|r>|t          j        k    r-t	          j        d|dt          j        dt          d           nt	          j        dt          d           d|v r-|                    d          D ]\  }}t          |          ||<   | j	        
                    |           d S )Nz(Pickled model instance's Django version z$ does not match the current version rE      )
stacklevelz9Pickled model instance's Django version is not specified.r+  )r   r   r#  r$  warningswarnRuntimeWarningrz   r,  r   r   )r:   r/  pickled_versionr0  rQ   s        r;   __setstate__zModel.__setstate__u  s    ))$=>> 	&"444 '(:(:(:< #     MK   
 %''$yy)<== 0 0e(//dU#####r>   Nc                 H    |p| j         }t          | |j        j                  S r   )r^   r|   r  r   )r:   r   s     r;   _get_pk_valzModel._get_pk_val  s"    !tztTW_---r>   c                     | j         j                                        D ]/}|r+|| j         j        k    rt	          | |j        j        |           0t	          | | j         j        j        |          S r   )r^   r   r  r  r   target_fieldr   )r:   rQ   rs   s      r;   _set_pk_valzModel._set_pk_val  sm    :-4466 	G 	GK G{djm;;k6>FFFtTZ]2E:::r>   c                 4      fd j         j        D             S )zU
        Return a set containing names of deferred fields for this instance.
        c                 :    h | ]}|j         j        v|j         S r8   )r   r   )rX   rm   r:   s     r;   rn   z,Model.get_deferred_fields.<locals>.<setcomp>  s4     
 
 
y-- I---r>   )r^   r   r9   s   `r;   get_deferred_fieldszModel.get_deferred_fields  s3    
 
 
 
Z/
 
 
 	
r>   c           	        	 |i | _         nft          | dd          }|D ]}||v r||= |                    |           |sdS t          d |D                       rt	          dt
          z            d| i}| j        j                            ||          	                    | j
                  }|                                 	|t          |          } |j        | }n$	r"	fd	| j        j        D             } |j        | }|                                }|                                }| j        j        D ]f}|j        |v rt%          | |j        t          ||j                             |j        r*|                    |           r|                    |            g| j        j        D ],}|                    |           r|                    |            -|j        j        | j        _        dS )
aU  
        Reload field values from the database.

        By default, the reloading happens from the database this instance was
        loaded from, or by the read router if this instance wasn't loaded from
        any database. The using parameter will override the default.

        Fields can be used to specify which fields to reload. The fields
        should be an iterable of field attnames. If fields is None, then
        all non-deferred fields are reloaded.

        When accessing deferred fields of an instance, the deferred loading
        of the field will call this method.
        N_prefetched_objects_cacher8   c              3   (   K   | ]}t           |v V  d S r   r   rl   s     r;   re   z(Model.refresh_from_db.<locals>.<genexpr>  s&      33q:?333333r>   zRFound "%s" in fields argument. Relations and transforms are not allowed in fields.r   )hintsr  c                 0    g | ]}|j         v|j         S r8   )r   )rX   rm   deferred_fieldss     r;   rZ   z)Model.refresh_from_db.<locals>.<listcomp>  s2       9O33 	333r>   )rB  r|   remover   r   r   r   r   
db_managerfilterr  r@  listonlyr^   r   r   r   r   is_relation	is_cacheddelete_cached_valuerelated_objectsr   r   )
r:   usingr   prefetched_objects_cacher   rD  db_instance_qsdb_instancenon_loaded_fieldsrG  s
            @r;   refresh_from_dbzModel.refresh_from_db  sW    >-/D**'.t5PRT'U'U$ ) )44407MM%((( 33F33333  13=>  
 T"5@@ A 
 

&DG&

 	
 2244&\\F0^0&9NN 	:   3  F
 1^0&9N$((**';;==Z/ 	0 	0E} 111D%-em)L)LMMM  0U__T%:%: 0))$/// Z/ 	0 	0Et$$ 0))$///$+.r>   c                     	 | j                             |          }n # t          $ r t          | |          cY S w xY wt          | |j                  S )a  
        Return the value of the field name for this instance. If the field is
        a foreign key, return the id value instead of the object. If there's
        no Field object with this name on the model, return the model
        attribute's value.

        Used to serialize a field's value (in the serializer, or form output,
        for example). Normally, you would just access the attribute directly
        and not use this method.
        )r^   r   r	   r|   r   )r:   
field_namer   s      r;   serializable_valuezModel.serializable_value  sa    	-J((44EE  	- 	- 	-4,,,,,	-tU]+++s    ::Fc                 t   |                      d           |pt          j        | j        |           }|r|s|rt	          d          |                                 }||sdS t          |          }t                      }| j        j	        D ]M}|j
        sD|                    |j                   |j        |j        k    r|                    |j                   N|                    |          }|r%t	          dd                    |          z            n|s|r|| j        j        k    rtt                      }| j        j	        D ]3}|j
        s*t%          |d          s|                    |j                   4|                    |          }	|	rt          |	          }|                     ||||	           dS )
aa  
        Save the current instance. Override this in a subclass if you want to
        control the saving process.

        The 'force_insert' and 'force_update' parameters can be used to insist
        that the "save" must be an SQL insert or update (or equivalent for
        non-SQL backends), respectively. Normally, they should not be set.
        save)operation_namer   z6Cannot force both insert and updating in model saving.Nz_The following fields do not exist in this model, are m2m fields, or are non-concrete fields: %sr   through)rQ  force_insertforce_updateupdate_fields) _prepare_related_fields_for_saver   db_for_writer   r   r@  	frozensetr   r^   r   primary_keyr   rG   r   
differencer   r   r   rP   	save_base)
r:   r_  r`  rQ  ra  rG  r   r   non_model_fieldsloaded_fieldss
             r;   r[  z
Model.save  s    	--V-DDDK,T^dKKK 	W\ 	W] 	WUVVV2244$ ! %m44M%%K3 7 7( 7OOEJ///zU]22#666,77DD  =ii 0112    	9/ 	9et{~6M6M%%K3 3 3( 3	1J1J 3OOEM222'22?CCM 9 )- 8 8%%'	 	 	
 	
 	
 	
 	
r>   Tc           	      l   |pt          j        | j        |           }|r|s|rJ ||sJ | j        x}}|j        j        r|j        j        }|j        }|j        st          j        || |||           |j	        rt          j        |d          }	nt          j        |          }	|	5  d}
|s|                     |||          }
|                     |||p|
|||          }ddd           n# 1 swxY w Y   || j        _        d| j        _        |j        st%          j        || | |||           dS dS )av  
        Handle the parts of saving which should be done only once per save,
        yet need to be done in raw saves, too. This includes some sanity
        checks and signal sending.

        The 'raw' argument is telling save_base not to save any parent
        models and not to do any changes to the values before save. This
        is used by fixture loading.
        r]  N)r   r   rawrQ  ra  F)rQ  	savepoint)rQ  )r   r   createdra  rk  rQ  )r   rc  r   r^   r   r   rr   r-   r   r   r   atomicmark_for_rollback_on_error_save_parents_save_tabler   r   r   r+   )r:   rk  r_  r`  rQ  ra  r   originr   context_managerparent_insertedupdateds               r;   rg  zModel.save_base5  s   " K,T^dKKK ElEmEEE$$$5~%f9? 	+)*Cy  	M+    < 	R)0uNNNOO)D5QQQO 	 	#O P"&"4"4S%"O"O&&/ G		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "   	N$+     	 	s   )8C--C14C1c           	      F   |j         }d}|j                                        D ]\  }}|rgt          | |j         j        j                  Ht          | |j                  3t          | |j         j        j        t          | |j                             |                     |||          }|                     ||||          }	|	sd}|rXt          | |j        | 	                    |j                              |
                    |           r|                    |            |S )z3Save all the parents of cls using values from self.FN)r   rQ  ra  )r   rQ  ra  r_  T)r^   r   r{   r|   r  r   r   rp  rq  r:  rN  rO  )
r:   r   rQ  ra  r   insertedr   r   rt  ru  s
             r;   rp  zModel._save_parentsy  s<   y!\//11 	4 	4MFE UD&,/"9::BD%-00<flo5wtU]7S7STTT"00%} 1  O &&+,	 '  G    4emT-=-=fl-K-KLLL ??4(( 4--d333r>   c           
          |j         d j        D             }rfd|D             }                               }|5j                                       }t           j        j        |           |du}	|	s|srt          d          d}
s/|s- j        j	        r!j        j
        rj        j
        t          urd}|	ro|sm|j                            |          } fd|D             }p|}                     |||||          }
|r|
st          d          r|
st          d	          |
s*j        rj        }|                               } |j                            |          j        di |                    t)          t+          t-          d
          t/          d          z   t1                                t/          d                              d          _        j        }|	sfd|D             }j        }                     |j        |||          }|r2t9          |d         |          D ]\  }}t           |j        |           |
S )zp
        Do the heavy-lifting involved in saving. Update or insert the data
        for a single table.
        c                      g | ]}|j         	|S r8   re  rl   s     r;   rZ   z%Model._save_table.<locals>.<listcomp>  s    NNNN1NNNr>   c                 8    g | ]}|j         v s	|j        v |S r8   )rG   r   )rX   rm   ra  s     r;   rZ   z%Model._save_table.<locals>.<listcomp>  s<       6]**ai=.H.H .H.H.Hr>   Nz5Cannot force an update in save() with no primary key.FTc                 p    g | ]2}|d rt          |j                  n|                    d          f3S r  )r|   r   r-   )rX   rm   rk  r:   s     r;   rZ   z%Model._save_table.<locals>.<listcomp>  sZ        	 14QWT19---!**T5:Q:Q  r>   z&Forced update did not affect any rows.z0Save with update_fields did not affect any rows._order   )output_fieldr   )_order__maxr  c                 &    g | ]}|j         u|S r8   )
auto_field)rX   rm   r   s     r;   rZ   z%Model._save_table.<locals>.<listcomp>  s%    HHHq/G/G!/G/G/Gr>   r8   )r^   local_concrete_fieldsr:  r  get_pk_value_on_saver   r   r   r   r   defaultr   r   rQ  
_do_updater   r   get_filter_kwargs_for_objectrJ  	aggregater$   r   r   r   r   r}  db_returning_fields
_do_insertr   )r:   rk  r   r_  r`  rQ  ra  non_pkspk_valpk_setru  base_qsr  forced_updater   filter_argsr   returning_fieldsresultsrQ   r   s   ``    `             @r;   rq  zModel._save_table  sD    yNNd8NNN 	      G !!$''>W11$77FD$'/6222t# 	V< 	V= 	VTUUU 	  	  "	  		 
 |33L 	X, 	X'--e44G     !  F *9\Moo} G  NG N#$LMMM XW X#$VWWW 	8)  2#@@FFC%++E22+ +)+ +Y$,- #Ha 8|~~   "!HH	% %    $	%  /F IHHHHVHHH#7oo!5&2BC G  8$'
4D$E$E 8 8LE5D%-7777r>   c                 2   |                     |          }|s|dup|                                S | j        j        rC|sA|                                o,|                    |          dk    p|                                S |                    |          dk    S )z
        Try to update the model. Return True if the model was updated (if an
        update query was done and a matching row was found in the DB).
        rE  Nr   )rJ  existsr^   select_on_save_update)r:   r  rQ  r  r  ra  r  filtereds           r;   r  zModel._do_update  s    
 >>V>,, 	B !,A0A0AA:$ 	] 	!! 	D !!&))A-B1B1B ''!++r>   c                 8    |                     | g||||          S )z
        Do an INSERT. If returning_fields is defined then this method should
        return the newly created data for the model.
        )r   r  rQ  rk  )_insert)r:   r   rQ  r   r  rk  s         r;   r  zModel._do_insert  s0    
 F-  
 
 	
r>   c                     | j         j        D ]}|r||vr
|j        r|                    |           rt	          | |j        d           }|s?|j        @|j        j        s|j        	                    |           t          |d|j        d          t	          | |j                  |j        v rt          | |j        |j                   t	          ||j        j                  t	          | |j                  k    r|	                    |            | j         j        D ]o}|r||vr	|j        r_|                    |           rJt!          |d          r:|                    | d           }|r!|j        t          | d|j         d          pd S )NzB() prohibited to prevent data loss due to unsaved related object 'ri   fk_field)r  )r^   r   rM  rN  r|   rG   r  r   multiplerO  r   r   empty_valuesr   r<  r   rP   get_cached_value)r:   r\  r   r   r   s        r;   rb  z&Model._prepare_related_fields_for_save  s   
 Z/  	4  	4E %v--   4U__T%:%: 4dEJ55  6> -6 D*>>sCCC$2@..%***N   T5=11U5GGG D%-888 3 2 :;;w%-@ @   --d333Z. 	 	E %v--!
OOD))
 E:..

 ,,T4,@@ 36>$) B B38:B B B  	 	r>   c                     | j         .t          | j        j        d| j        j         j        d          |pt          j        | j        |           }t          ||           }|	                    | g|           |
                                S )Nz% object can't be deleted because its z attribute is set to None.r]  )rQ  rr  )keep_parents)r  r   r^   r%  r   r   rc  r   r   collectdelete)r:   rQ  r  	collectors       r;   r  zModel.deleteU  s    7?"j444djm6K6K6KM   K,T^dKKKE$777	4&|<<<!!!r>   c                     t          | |j                  }t          t          |j                            }t          |                    t          |          |          d          S )NT)strings_only)r|   r   dictr0   flatchoicesr/   r   )r:   r   rQ   choices_dicts       r;   _get_FIELD_displayzModel._get_FIELD_displayb  s_    em,,M%*;<<==]511599
 
 
 	
r>   c                 d   | j         st          d          |rdnd}|rdnd}t          | |j                  }t	          |j        |fd| | j         ft          j                  }t	          ||j         d| |ft          j                  } | j        j	        
                    | j        j                  j        di |                    |                              ||j        d	|z            }	 |d
         S # t          $ r( |                     d| j        j        j        z            w xY w)Nz8get_next/get_previous cannot be used on unsaved objects.gtlt -pk__)
_connector__z%spkr   z!%s matching query does not exist.r8   )r  r   r|   r   r(   rG   ANDORr   r   rQ  r   r   rJ  order_byr   r`   r^   r%  )	r:   r   r   r   oporderparamqqss	            r;   _get_next_or_previous_by_FIELDz$Model._get_next_or_previous_by_FIELDj  sU   w 	YWXXX&TT$&3em,,uz5!K2KK#9aeLLLaUZ''2''/ADAAADN+11$+.AA  VAYYXuzz2FUNCC	 		a5L 	 	 	##3dn6J6VV  	s   5C= =2D/c                    d|z  }t          | |          s|rdnd}|rdnd}| j        j        }|                    |           }  | j        j        j        di |j        di d|z   | j        j                            d          j        di | j        j        j	        | j        ii
                    |          d d                                         }t          | ||           t          | |          S )	Nz__%s_order_cacher  r  r}  z-_orderz
_order__%sr~  r8   )rP   r^   r   r  r   r   rJ  r  r  rG   r  r   r   r|   )r:   r   	cachenamer  r  order_fieldr  r   s           r;   r   z$Model._get_next_or_previous_in_order  s,   &0	tY'' 	* *dB '6HHYE*:K%BB4HHK6/6EEEE  %Udn=DDXNNU  #z}147;   %!	%   D)S)))tY'''r>   c                 `     t                      |p j        } fd|j        D             S )Nc           	      t    i | ]4}|j         v|j         t          t          |j                  |          5S r8   )rG   r   r|   r   )rX   r   excluder:   s     r;   
<dictcomp>z.Model._get_field_value_map.<locals>.<dictcomp>  sJ     
 
 
z(( JgdEM::EBB(((r>   )r   r^   r  )r:   r   r  s   ` `r;   _get_field_value_mapzModel._get_field_value_map  sQ    ?eeG!tz
 
 
 
 
3
 
 
 	
r>   c                     | j         t          d| z            t          | |j                                        j                  S )Nz9Unsaved model instance %r cannot be used in an ORM query.)r  r   r|   r   get_related_fieldr   )r:   r   s     r;   prepare_database_savezModel.prepare_database_save  sG    7?KdR   tU/AACCKLLLr>   c                     dS )aI  
        Hook for doing any extra model-wide validation after clean() has been
        called on every field by self.clean_fields. Any ValidationError raised
        by this method will not be associated with a particular field; it will
        have a special-case association with the field defined by NON_FIELD_ERRORS.
        Nr8   r9   s    r;   cleanzModel.clean  s	     	r>   c                 4   |                      |          \  }}|                     |          }|                     |          }|                                D ].\  }}|                    |g                               |           /|rt          |          dS )zh
        Check unique constraints on the model and raise ValidationError if any
        failed.
        r  N)_get_unique_checks_perform_unique_checks_perform_date_checksr{   
setdefaultextendr   )r:   r  unique_checksdate_checkserrorsdate_errorskvs           r;   validate_uniquezModel.validate_unique  s    
 &*%<%<W%<%M%M"{,,];;//<<%%'' 	/ 	/DAqa$$++A.... 	*!&)))	* 	*r>   c                    t                      g }| j        | j        j        fg}g }|r| j        | j        j        fg}| j                                        D ]^}|j        j        r!|                    ||j        j        f           |r-|j        j        r!|                    ||j        j        f           _|D ]I\  }}|D ]A}	t          fd|	D                       s$|                    |t          |	          f           BJ|rI|D ]F\  }}
|
D ]>}t          fd|j	        D                       s|                    ||j	        f           ?Gg }| j        | j        j
        fg}| j                                        D ]#}|                    ||j        j
        f           $|D ]\  }}|D ]}|j        }|v r|j        r|                    ||ff           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           ||fS )a{  
        Return a list of checks to perform. Since validate_unique() could be
        called from a ModelForm, some fields may have been excluded; we can't
        perform a unique check on a model that is missing fields involved
        in that check. Fields that did not validate should also be excluded,
        but they need to be passed in via the exclude argument.
        Nc              3       K   | ]}|v V  	d S r   r8   rX   rG   r  s     r;   re   z+Model._get_unique_checks.<locals>.<genexpr>  s'      ==t47?======r>   c              3       K   | ]}|v V  	d S r   r8   r  s     r;   re   z+Model._get_unique_checks.<locals>.<genexpr>  s'      MM4twMMMMMMr>   dateyearmonth)r   r   r^   unique_togethertotal_unique_constraintsget_parent_listr-  r   r   r   r   rG   uniqueunique_for_dateunique_for_yearunique_for_month)r:   r  include_meta_constraintsr  unique_togethersconstraintsparent_classmodel_classr  checkmodel_constraints
constraintr  fields_with_classr   rm   rG   s    `               r;   r  zModel._get_unique_checks  sP    ?eeG!^TZ-GHI# 	R NDJ,OPQK J6688 	 	L!1  ''!<#5#EF   ( L,>,W ""!<#5#NO   -= 	F 	F(K( F F====u===== F!((+uU||)DEEEF
 $ 	O2= O O.."3 O OJMMMM:;LMMMMM O%,,k:;L-MNNNO
 
 #ndj.EFG J6688 	V 	VL$$lL4F4S%TUUUU#4 	Y 	YK Y Yv7??8 A!((+w)?@@@$ W):')I)I&&VT1CT'UVVV$ W):')I)I&&VT1CT'UVVV% Y!*<G*K*K&&WdADV'WXXXY k))r>   c                    i }|D ]a\  }}i }|D ]q}| j                             |          }t          | |j                  }||dk    rt          j        j        rK|j        r| j        j	        s_||t          |          <   rt          |          t          |          k    r |j        j        di |}	|                     |j                   }
| j        j	        s|
|	                    |
          }	|	                                r`t          |          dk    r	|d         }nt"          }|                    |g                               |                     ||                     c|S )Nr  rE  r~  r   r8   )r^   r   r|   r   r   features!interprets_empty_strings_as_nullsre  r   r   strr   r   rJ  r:  r  r  r   r  r-  unique_error_message)r:   r  r  r  unique_checklookup_kwargsrX  rm   lookup_valuer  model_class_pkkeys               r;   r  zModel._perform_unique_checks  s   )6 *	 *	%K M* > >
J((44&tQY77' B&&"+M ' = ); 1=c*oo.. <  C$6$6664-4EE}EEB "--k.?@@N;% 3.*DZZ>Z22yy{{ |$$))&q/CC*C!!#r**11--k<HH   r>   c                 "   i }|D ]\  }}}}i }t          | |          }||dk    r(|j        |d|z  <   |j        |d|z  <   |j        |d|z  <   nt          ||          ||d|<   t          | |          ||<    |j        j        di |}	| j        j        s"| j        |		                    | j                  }	|	
                                r>|                    |g                               |                     |||                     
|S )Nr  z%s__dayz	%s__monthz%s__yearr  rE  r8   )r|   dayr  r  r   rJ  r   r   r  r  r  r  r-  date_error_message)
r:   r  r  r  lookup_typer   
unique_forr  r  r  s
             r;   r  zModel._perform_date_checks0  sU   ;F 	 	7KeZM 4,,D|f$$8<i*45:>*kJ679=j:566FM+G G***kkBC $+4#7#7M% 4-4EE}EEB ;% ,$'*=ZZ47Z++yy{{ !!%,,33++K
KK   r>   c                    | j         }|                    |          }t          |j        d         d| t	          |j                  ||t	          |j                  |t	          |                    |          j                  d          S )Nr  )r   r   r  r   field_label
date_fielddate_field_labelmessagecodeparams)r^   r   r   error_messagesr1   verbose_name)r:   r  rX  r  r   r   s         r;   r  zModel.date_error_messageO  s    zz**():;"&t'899*#'(:;;($,T^^J-G-G-T$U$U 
 
 
 	
r>   c                    |j         | |t          j                  |d}t          |          dk    rO                    |d                   }t          |j                  |d<   t          |j        d         d|          S fd|D             }t          |t          d                    |d	<   t          t          d
          d|          S )N)r   r  r   r  r~  r   r  r  r   c                 ^    g | ])}t                              |          j                  *S r8   )r1   r   r  )rX   rm   r   s     r;   rZ   z.Model.unique_error_message.<locals>.<listcomp>v  s=       =>**788  r>   andfield_labelsz9%(model_name)s with this %(field_labels)s already exists.r  )	r^   r1   r  r   r   r   r  r2   _)r:   r  r  r  r   r	  r   s         @r;   r  zModel.unique_error_message`  s     &"4#455(	
 
 |!!NN<?33E$,U-?$@$@F=!",X6      BN  L &3<5%J%JF>""UVV&   r>   c                     | j         | j        j        fg}| j                                        D ]/}|j        j        r!|                    ||j        j        f           0|S r   )r   r^   r  r  r-  )r:   r  r  s      r;   get_constraintszModel.get_constraints  sj    
(>?@ J6688 	S 	SL!- S""L,2D2P#QRRRr>   c                    |                                  }t          j        | j        |           }i }|D ]\  }}|D ]}	 |                    || ||           # t
          $ rw}|j        dk    rMt          |j                  dk    r5|	                    |j        d         g           
                    |           n|                    |          }Y d }~d }~ww xY w|rt          |          d S )Nr]  )r  rQ  r  r~  r   )r  r   rc  r   validater   r  r   r   r  r-  update_error_dict)	r:   r  r  rQ  r  r  r  r  es	            r;   validate_constraintszModel.validate_constraints  s(   **,,#DNTBBB.9 	= 	=*K*/ = =
=''T7RW'XXXX& = = =v))c*2C.D.D.I.I))**;A*>CCJJ1MMMM!"!4!4V!<!<	==  	*!&)))	* 	*s   A
C"A-CCc                 4   i }|t                      }nt          |          }	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w	 |                                  n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rt          |          dS )z
        Call clean_fields(), clean(), validate_unique(), and
        validate_constraints() on the model. Raise a ValidationError for any
        errors that occur.
        Nr  )	r   clean_fieldsr   r  r  r   r   r  r  )r:   r  r  r  r  r  rG   s          r;   
full_cleanzModel.full_clean  s+    ?eeGG'llG	1g.... 	1 	1 	1((00FFFFFF	1
	1JJLLLL 	1 	1 	1((00FFFFFF	1  	5 & &+++G0C0CKK%%%5$$W$5555" 5 5 5,,V445   	5 & &+++G0C0CKK%%%5))')::::" 5 5 5,,V445  	*!&)))	* 	*s]   ; 
A$AA$(A= =
B&B!!B&C, ,
D6DDE 
F%E??Fc           	      l   |t                      }i }| j        j        D ]}|j        |v rt	          | |j                  }|j        r
||j        v r2	 t          | |j        |	                    ||                      ^# t          $ r}|j        ||j        <   Y d}~|d}~ww xY w|rt          |          dS )z
        Clean all fields and raise a ValidationError containing a dict
        of all validation errors if any occur.
        N)r   r^   r   rG   r|   r   blankr  r   r  r   
error_list)r:   r  r  rm   	raw_valuer  s         r;   r  zModel.clean_fields  s    
 ?eeG" 	. 	.Av    ai00Iw 966.aiD)A)ABBBB" . . .!"qv.  	*!&)))	* 	*s   *A==
B BB c                 z   g |                                  |                                  | j        di |}| j        j        sv|                    d          pg }|g  | j        di ||                                 |                     |          z  }g | 	                                | 
                                |                                 |                                 |                                 R }|                    |           |s'|                    |                                            |g |                                 |                                 |                     |          |                                 |                     |          |                                 z  }|S )N	databasesr8   )_check_swappable_check_model_check_managersr^   r   r   _check_fields$_check_m2m_through_same_relationship_check_long_column_names_check_id_field_check_field_name_clashes#_check_model_name_db_lookup_clashes3_check_property_name_related_field_accessor_clashes_check_single_primary_keyr  _check_column_name_clashes_check_index_together_check_unique_together_check_indexes_check_ordering_check_constraints_check_default_pk)r   r   r  r  clash_errorss        r;   r  zModel.check  s   
!!##

 !S **6**

 y  	

;//52I "",,V,,99;; --i88 F
$$&&..00 88:: HHJJ	
 ..00 L MM,'''   @c<<>>??? **,,++-- ##I.. $$&&	
 ''	22 &&(( F r>   c                    | j         j        s| j         j        j        rt	          | j         j        t
                    r| j         j        j        j        spt          j	        d          s\| j         j
        rP| j         j
        j        s?t          j        dt          j         dd| j         j
        j        j         d| d          gS g S )NDEFAULT_AUTO_FIELDzPAuto-created primary key used when not defining a primary key type, by default 'ri   z0Configure the DEFAULT_AUTO_FIELD setting or the zh.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.zmodels.W042hintr   id)r^   r]   r  rr   rW   r!   r   rs   r   is_overriddenr   !_is_default_auto_field_overriddenr   Warningr/  r   rC   r   s    r;   r,  zModel._check_default_pk  s     	"		)	 39<77	 IL-9	 *+?@@	 	$	 I(J	 8 38 8 8O9/9FO O O
 $    	r>   c                    g }| j         j        r	 t          j        | j         j                   n# t          $ r9 |                    t          j        d| j         j        z  d                     Y nnt          $ rb | j         j        
                    d          \  }}|                    t          j        d| j         j        d|d|dd                     Y nw xY w|S )	z"Check if the swapped model exists.z-'%s' is not of the form 'app_label.app_name'.zmodels.E001r2  rE   'z' references 'z0', which has not been installed, or is abstract.zmodels.E002)r^   r   r   	get_modelr   r-  r   Error	swappableLookupErrorsplit)r   r  r_   r   s       r;   r  zModel._check_swappable%  s*    9 	sy01111   LG)-.(        	 	 	(+	(9(?(?(D(D%	:LL 9...			:::G )	      	 s   / A C1A(CCc                     g }| j         j        rI| j         j        s| j         j        r1|                    t          j        d| j        z  d                     |S )Nz'Proxy model '%s' contains model fields.zmodels.E017r7  )r^   r   r   r   r-  r   r:  rA   r   r  s     r;   r  zModel._check_model@  sj    9? 	y% )E LACLP(     r>   c                 h    g }| j         j        D ]"}|                     |j        di |           #|S )zPerform all manager checks.r8   )r^   r   r  r  )r   r   r  r   s       r;   r  zModel._check_managersM  sI     y) 	3 	3GMM-'-11&112222r>   c                     g }| j         j        D ]"}|                     |j        di |           #| j         j        D ]$}|                     |j        dd| i|           %|S )zPerform all field checks.
from_modelr8   )r^   r   r  r  r   )r   r   r  r   s       r;   r  zModel._check_fieldsU  s     Y+ 	1 	1EMM+%+////0000Y1 	A 	AEMM+%+?????@@@@r>   c                 ^   g }g }| j         j        }d |D             }d |D             }|D ]}|j        j        | |j        j        |j        j        f}||v rB|                    t          j        d|j        j        j         j	        z  | d                     l|                    |           |S )zBCheck if no relationship model is used by more than one m2m field.c              3   X   K   | ]%}t          |j        j        t                    !|V  &d S r   )rW   r   r   rT   rl   s     r;   re   z=Model._check_m2m_through_same_relationship.<locals>.<genexpr>i  s6      SSz!.2F	'R'RS!SSSSSSr>   c              3   X   K   | ]%}t          |j        j        t                    !|V  &d S r   )rW   r   r^  rT   rl   s     r;   re   z=Model._check_m2m_through_same_relationship.<locals>.<genexpr>l  s6      UUz!.2H)'T'TU!UUUUUUr>   zWThe model has two identical many-to-many relations through the intermediate model '%s'.zmodels.E003r   r2  )
r^   r   r   r   r^  through_fieldsr-  r   r:  r   )r   r  seen_intermediary_signaturesr   rm   	signatures         r;   r  z*Model._check_m2m_through_same_relationship_  s     ')$- TSVSSS VUVUUU 	? 	?A$&-	I 888L?.06<=  (      -33I>>>>r>   c                       fd j         j        D             }|r:|d         j        s- j         j        j        dk    rt          j        d d          gS g S )z%Check if `id` field is a primary key.c                 J    g | ]}|j         d k    |j        j        k    | S r7  )rG   r^   r  )rX   rm   r   s     r;   rZ   z)Model._check_id_field.<locals>.<listcomp>  s8     
 
 
4ADUDUADUDUDUr>   r   r2  zP'id' can only be used as a field name if the field also sets 'primary_key=True'.zmodels.E004rF  )r^   r   re  r  rG   r   r:  )r   r   s   ` r;   r!  zModel._check_id_field  s    
 
 
 
y-
 
 
  
	&)/ 
	CIL4E4M4M/$	    Ir>   c                    g }i }| j                                         D ]}|j         j        D ]}|                    |j                  p|                    |j                  pd}|rU|                    t          j        d|j        d|j	        j         d|j        d|j	        j         d	| d                     |||j        <   |||j        <   | j                                         D ],}|j         
                                D ]}||vr
|||j        <   -| j         j        D ]}|                    |j                  p|                    |j                  pd}|j        dk    o|o|j        dk    o
|j	        | k    }|rJ|sH|                    t          j        d|j        d|j        d	|j	        j         d|d
                     |||j        <   |||j        <   |S )z2Forbid field shadowing in multi-table inheritance.NzThe field 'z' from parent model 'z' clashes with the field 'ri   zmodels.E005rF  r2  z' from model 'zmodels.E006)r^   r  r   r   rG   r   r-  r   r:  r   
get_fields)r   r  used_fieldsr   rm   clashid_conflicts          r;   r"  zModel._check_field_name_clashes  sL     i//11 	+ 	+F\. + +#//U;??193M3MUQU 
MM  %zzz5;+<+<+<afffagmmmU !$,  	 	 	 '(AF#)*AI&&+& i//11 	, 	,F\,,.. , ,K''*+K', ' 	' 	'AOOAF++Q{qy/I/IQTE $V5VUZ4-?VEKSVDV   [ LL./fffejjj%+BSBSBSU(	     #$K%&K	""r>   c           
          g }g }| j         j        D ]l}|                                \  }}|r<||v r8|                    t	          j        d|j        d|dd| d                     W|                    |           m|S )NzField 'z' has column name 'z ' that is used by another field.z$Specify a 'db_column' for the field.zmodels.E007r0  )r^   r   get_attname_columnr-  r   r:  rG   )r   used_column_namesr  rm   r
  column_names         r;   r&  z Model._check_column_name_clashes  s     ' 	6 	6A1133NA{  6{.???LL,-FFFKKKAC(      "((5555r>   c                 4   g }| j         }|                    d          s|                    d          r.|                    t	          j        d|z  | d                     n6t          |v r-|                    t	          j        d|z  | d                     |S )Nr
  zgThe model name '%s' cannot start or end with an underscore as it collides with the query lookup syntax.zmodels.E023rF  zbThe model name '%s' cannot contain double underscores as it collides with the query lookup syntax.zmodels.E024)rA   
startswithendswithr-  r   r:  r   )r   r  r   s      r;   r#  z)Model._check_model_name_db_lookup_clashes  s    \
  %% 	)<)<S)A)A 	MMCEOP$	      :%%MM@BLM$	     r>   c                     g }| j         j        }d | j                             d          D             }|D ]3}||v r-|                    t	          j        d|z  | d                     4|S )Nc              3   Z   K   | ]&}|j         r|j        |                                V  'd S r   )rM  related_modelget_attnamerl   s     r;   re   zLModel._check_property_name_related_field_accessor_clashes.<locals>.<genexpr>  sJ       #
 #
}#
 "#!< MMOO!<!<!<!<#
 #
r>   Freversez8The property '%s' clashes with a related field accessor.zmodels.E025rF  )r^   r   _get_fieldsr-  r   r:  )r   r  r  related_field_accessorsaccessors        r;   r$  z9Model._check_property_name_related_field_accessor_clashes  s    2#
 #
Y**5*99#
 #
 #

 0 		 		H>))L$&./(	     r>   c                     g }t          d | j        j        D                       dk    r*|                    t	          j        d| d                     |S )Nc              3   (   K   | ]}|j         	d V  dS )r~  Nrz  rl   s     r;   re   z2Model._check_single_primary_key.<locals>.<genexpr>  s)      BBQAMBqBBBBBBr>   r~  zBThe model cannot have more than one field with 'primary_key=True'.zmodels.E026rF  )sumr^   r   r-  r   r:  r?  s     r;   r%  zModel._check_single_primary_key  sj    BB#)0BBBBBQFFMM*$	     r>   c                 l   t          | j        j        t          t          f          st          j        d| d          gS t          d | j        j        D                       rt          j        d| d          gS g }| j        j        D ]+}|                    | 	                    |d                     ,|S )z+Check the value of "index_together" option.z)'index_together' must be a list or tuple.zmodels.E008rF  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   rW   r   rK  rX   r   s     r;   re   z.Model._check_index_together.<locals>.<genexpr>-  sD       
 
6<
6E4=111
 
 
 
 
 
r>   z6All 'index_together' elements must be lists or tuples.zmodels.E009index_together)
rW   r^   rh  r   rK  r   r:  r   r  _check_local_fieldsr   r  r   s      r;   r'  zModel._check_index_together!  s     #)2UDMBB 	?$     
 
@C	@X
 
 
 
 
 	 L$    F)2 Q Qc55f>NOOPPPPMr>   c                 l   t          | j        j        t          t          f          st          j        d| d          gS t          d | j        j        D                       rt          j        d| d          gS g }| j        j        D ]+}|                    | 	                    |d                     ,|S )z,Check the value of "unique_together" option.z*'unique_together' must be a list or tuple.zmodels.E010rF  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   rf  rg  s     r;   re   z/Model._check_unique_together.<locals>.<genexpr>J  sG       
 
 6E4=111
 
 
 
 
 
r>   z7All 'unique_together' elements must be lists or tuples.zmodels.E011r  )
rW   r^   r  r   rK  r   r:  r   r  ri  rj  s      r;   r(  zModel._check_unique_together>  s     #)3eT]CC 	@$     
 
)3
 
 
 
 
 	
 M$    F)3 R Rc55f>OPPQQQQMr>   c           	         g }t                      }| j        j        D ]}|j        d         dk    s|j        d                                         r2|                    t          j        d|j        z  | d                     t          |j                  |j	        k    r9|                    t          j        d|j        |j	        fz  | d                     |j
        r<|j        D ]4}|                    d |                     |          D                        5|D ]v}t          j        ||           st           |         }|j        j        sdd	| j        j        v sVt)          d
 | j        j        D                       r3|                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt)          d | j        j        D                       r3|                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt)          d | j        j        D                       r3|                    t          j        d|j        z  d| d                     xd | j        j        D             }|d | j        j        D             z  }||z  }|                    |                     |d                     |S )z/Check fields, names, and conditions of indexes.r   r
  z@The index name '%s' cannot start with an underscore or a number.zmodels.E033rF  z8The index name '%s' cannot be longer than %d characters.zmodels.E034c              3   &   K   | ]}|d          V  dS )r   Nr8   )rX   refs     r;   re   z'Model._check_indexes.<locals>.<genexpr>x  s7       & &#&A& & & & & &r>   supports_partial_indexesc              3   (   K   | ]}|j         d uV  d S r   )	conditionrX   r   s     r;   re   z'Model._check_indexes.<locals>.<genexpr>  s)      QQeeoT1QQQQQQr>   z,%s does not support indexes with conditions.zLConditions will be ignored. Silence this warning if you don't care about it.zmodels.W037r0  supports_covering_indexesc              3   $   K   | ]}|j         V  d S r   includers  s     r;   re   z'Model._check_indexes.<locals>.<genexpr>  s$      CCemCCCCCCr>   z1%s does not support indexes with non-key columns.zQNon-key columns will be ignored. Silence this warning if you don't care about it.zmodels.W040supports_expression_indexesc              3   $   K   | ]}|j         V  d S r   )contains_expressionsrs  s     r;   re   z'Model._check_indexes.<locals>.<genexpr>  s%      PPUe0PPPPPPr>   z+%s does not support indexes on expressions.zKAn index won't be created. Silence this warning if you don't care about it.zmodels.W043c                 ,    g | ]}|j         D ]\  }}|S r8   )fields_orders)rX   r   r   r
  s       r;   rZ   z(Model._check_indexes.<locals>.<listcomp>  s@     
 
 
AT
 
5=UAE
 
 
 
r>   c                 &    g | ]}|j         D ]}|S r8   rv  )rX   r   rw  s      r;   rZ   z(Model._check_indexes.<locals>.<listcomp>  s'    WWWuWWg7WWWWr>   r   )r   r^   r   rG   isdigitr-  r   r:  r   max_name_lengthrz  expressionsr   _get_expr_referencesr   allow_migrate_modelr   r  rp  required_db_featuresr   r5  display_namert  rx  r  ri  )	r   r  r  
referencesr   
expressionr   r   r   s	            r;   r)  zModel._check_indexes\  s    UU
Y& 	 	E z!}##uz!}'<'<'>'>#L').4(	     5:!666L&).U5J(KL(	     ) "'"3  J%% & &*-*B*B:*N*N& & &      3	 3	B-b#66 $RJ#<-1OOOQQsy?PQQQQQ PNF$12:  (	 	 	   #=.#)2PPPCC1BCCCCC QNK$12B  (	 	 	   #?0CI4RRRPPci>OPPPPP SNE$12:  (	 	 	  
 
"y0
 
 
 	WW	(9WWWW*c--fi@@AAAr>   c                 t   ddl m} i }| j                            d          D ]&}|||j        <   t          |d          r
|||j        <   'g }|D ]}	 ||         }t          |j        |j	                  r5|
                    t          j        d|d|d|d	| d
                     Z|| j        j        vr?|
                    t          j        d|d|d| j        j        d	d| d                     # t          $ r4 |
                    t          j        d|d|d	| d                     Y w xY w|S )Nr   )modelsFr\  r   r8  z' refers to a ManyToManyField 'z.', but ManyToManyFields are not permitted in 'ri   zmodels.E013rF  z' refers to field 'z' which is not local to model 'z4This issue may be caused by multi-table inheritance.zmodels.E016r0  z#' refers to the nonexistent field 'zmodels.E012)	django.dbr  r^   r^  rG   rP   r   rW   r   ManyToManyRelr-  r   r:  r   r%  r   )r   r   optionr  forward_fields_mapr   r  rX  s           r;   ri  zModel._check_local_fields  s   $$$$$$  Y**5*99 	: 	:E-2uz*ui(( :49"5=1  '	 '	J&*:6 e0&2FGG MM !' *

 & !$,
 
 
    #)"888MM'-vvzzz39;P;P;PR!W #,    9    LL #FF&JJ
  (  
 
 
 
 
J s   C77;D54D5c           
         | j         j        rt          j        d| d          gS | j         j        s| j         j        sg S t          | j         j        t          t          f          st          j        d| d          gS g }| j         j        }d |D             }d |D             }g }g }|D ]6}t          |v r|
                    |           !|
                    |           7|}|D ]}| }d}|                    t                    D ]}		 |	d	k    r|j         j        }n|j                             |	          }|j        r|j        d
         j        j        }nd}R# t$          t&          f$ r\ |*|                    |	          B|                    |	          -|
                    t          j        d|z  | d                     Y w xY wd |D             }g }
| j         }t-          t/          j        d t/          |j        |j                  D                                 }|
                    ||z
             |
D ]/}|
                    t          j        d|z  | d                     0|S )ze
        Check "ordering" option -- is it a list of strings and do all fields
        exist?
        z?'ordering' and 'order_with_respect_to' cannot be used together.zmodels.E021rF  zQ'ordering' must be a tuple or list (even if you want to order by only one field).zmodels.E014c              3   P   K   | ]!}t          |t                    |d k    |V  "dS )?N)rW   r  rl   s     r;   re   z(Model._check_ordering.<locals>.<genexpr>  s5      GGz!S'9'9Ga3hh!hhhhGGr>   c              3   X   K   | ]%}|                     d           r
|dd         n|V  &dS )r  r~  N)rV  rl   s     r;   re   z(Model._check_ordering.<locals>.<genexpr>  s?      FF!ALL--41QRR551FFFFFFr>   Nr  zJ'ordering' refers to the nonexistent field, related field, or lookup '%s'.zmodels.E015c                     h | ]
}|d k    |S rE  r8   rl   s     r;   rn   z(Model._check_ordering.<locals>.<setcomp>;  s    111qDyy!yyyr>   c              3      K   | ]:}|j         r|j        r|j        |j        fn|j                                        fV  ;d S r   )rr   concreterG   r   r   related_query_namerl   s     r;   re   z(Model._check_ordering.<locals>.<genexpr>D  sk            5/0z5##g00224           r>   )r^   _ordering_clashr   r:  r   rg   rW   rK  r   r   r-  r=  r  r   rM  
path_infosto_optsr   r	   AttributeErrorget_transform
get_lookupr   r   from_iterabler   rP  r  )r   r  r   _fieldsrelated_fieldsrm   r   _clsfldpartinvalid_fieldsr   valid_fieldsinvalid_fields                 r;   r*  zModel._check_ordering  s*    9$ 	U$    9* 	#)2D 	I#),tUm<< 	'$	    # HGVGGG GFvFFF  	" 	"AQ%%a((((q!!!! $ 	 	EDCJ//  t||"jm"j22488 $"~b19?#)>:   {))$//7CNN4<P<P<X"L!ACH!I$'#0	    	4 21V111  y     t{D,@AA	       
 
 	f|3444+ 	 	MMM-/<=$	      s   AEA*GGc                 2   |sg S g }d}d}|D ]^}t          j        ||           st          |         }|j                                        }||j        j        rM||}|}T||k     r|}|}_||S | j        j        D ]j}|	                                \  }	}
|j
        J|
Ht          |
          |k    r5|                    t          j        d|
d|d|dd| d                     k| j        j        D ]}t!          |j        j        t&                    r"|j        j        j        j        D ]j}|	                                \  }	}|j
        J|Ht          |          |k    r5|                    t          j        d	|d|d|dd
| d                     k|S )z
        Check that any auto-generated column names are shorter than the limits
        for each database in which the model will be created.
        Nz.Autogenerated column name too long for field "z". Maximum length is "z" for database "z".z/Set the column name manually using 'db_column'.zmodels.E018r0  z2Autogenerated column name too long for M2M field "z\Use 'through' to create a separate model for M2M and then set column_name using 'db_column'.zmodels.E019)r   r  r   opsr  r  truncates_namesr^   r   rR  	db_columnr   r-  r   r:  r   rW   r   r^  r  )r   r  r  allowed_lendb_aliasr   r   r  rm   r
  rT  m2mrel_names                r;   r   zModel._check_long_column_namesY  s-     	I  	" 	"B-b#66 $RJ(n<<>>O&**=*M&&"1K!HH${22"1K!HM' 	 	A1133NA{
 #+$${22LL ';;XXX? O(  	 	 	 - 	 	A!.0#66  ~-3@  !44668M) ,H33MM  (xxhhh@!R !$,
 
 
  * r>   c              #   R  K   t          |t                    r|j        D ]|}t          |t                    rJ|\  }}t          |                    t
                              V  |                     |          E d {V  a|                     |          E d {V  }d S t          |t                    r0t          |j                            t
                              V  d S t          |d          r2|
                                D ]}|                     |          E d {V  d S d S )Nget_source_expressions)rW   r(   childrenr   r=  r   r  r'   rG   rP   r  )r   exprchildlookuprQ   src_exprs         r;   r  zModel._get_expr_references  sg     dA 	> ? ?eU++ ?$)MFEZ 8 899999"77>>>>>>>>>>"77>>>>>>>>>>? ? a   	>	
334444444T344 	> 7799 > >33H==========	> 	>> >r>   c                 "   g }|D ]}t          j        ||           st          |         }|j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d	|j        z  d| d
                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     t#          t%          j        d | j        j        D                                 }t#                      }| j        j        D ]}t)          |t*                    r|j        j        sd| j        j        vrGt)          |j        t.                    r-|                    |                     |j                             |j        j        sd| j        j        vr9|j        r2|j        D ]*}|                    |                     |                     +t)          |t8                    r|j        j        sd| j        j        vrt)          |j        t.                    r-|                    |                     |j                             t          d |j                                        D                       r4|	                    t          j        d|j        dd| d                     |D ]^}	}
|	dk    r|                     |	           |
s#	 |	dk    r| j        j!        }n| j        "                    |	          }|j#        r|j$        s|j%        rgn# tL          $ r Y tw xY w|
d         }tO          |d          r}tO          |d           rm|(                    |          X|)                    |          C|	                    t          j*        d!tW          j,        |	g|
z             z  | d"#                     |-                    | .                    |d$                     |S )%N supports_table_check_constraintsc              3   @   K   | ]}t          |t                    V  d S r   )rW   r   rX   r  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>  s@         :77     r>   z&%s does not support check constraints.zOA constraint won't be created. Silence this warning if you don't care about it.zmodels.W027r0  rp  c              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rW   r   rr  r  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>  sS          :'788 5(4     r>   z7%s does not support unique constraints with conditions.zmodels.W036&supports_deferrable_unique_constraintsc              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rW   r   
deferrabler  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>  sS          :'788 6)5     r>   z2%s does not support deferrable unique constraints.zmodels.W038rt  c              3   N   K   | ] }t          |t                    o|j        V  !d S r   )rW   r   rw  r  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>	  sI         :'788OZ=O     r>   z<%s does not support unique constraints with non-key columns.zmodels.W039rx  c              3   N   K   | ] }t          |t                    o|j        V  !d S r   )rW   r   rz  r  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>	  sN          :'788 43     r>   z6%s does not support unique constraints on expressions.zmodels.W044c              3   b   K   | ]*}t          |t                    g |j        |j        R V  +d S r   )rW   r   r   rw  r  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>'	  sZ       $ $"!*.>??$=j'=**<==$ $ $ $ $ $r>   c              3   @   K   | ]}t          |t                    V  d S r   )rW   r   )rX   r  s     r;   re   z+Model._check_constraints.<locals>.<genexpr>I	  s@         $ 'tV44     r>   zCheck constraint zS contains RawSQL() expression and won't be validated during the model full_clean().z0Silence this warning if you don't care about it.zmodels.W045r  r   r  r  z.'constraints' refers to the joined field '%s'.zmodels.E041rF  r  )/r   r  r   r  r  r^   r  r   r  r-  r   r5  r  rp  r  rt  rx  r   r   r  rW   r   rr  r(   r   r  rz  r  r   r  flattenrG   r   r  r   rM  many_to_manyone_to_manyr	   rP   r  r  r:  r   r   r  ri  )r   r  r  r   r   r   r  r  r  rX  lookupsr   first_lookups                r;   r+  zModel._check_constraints  s3    {	J {	JB-b#66 $RJ#D59WWW  "%)"7     X
 N@$12B  (	 	 	   #<-1OOO   #&)"7     P N&(2(?@B  (	 	 	   #J;912 2   #&)"7    2 NL$12B  (	 	 	   #=.#)2PPP  "%)"7     Q
 N#%/%<=B  (	 	 	   #?0CI4RRR   #&)"7     S N')3)@AB  (	 	 	   # $ $&)i&;$ $ $   F J!i3 + +
j*:;; *"+D5"y=> >$Z%91==> #))44Z5IJJ   #+GT8"y=> >$9> +5*@ T TJ&--c.F.Fz.R.RSSSS
O<< "+L="y=> > &j&6:: &-- # 8 89I J J     (2(8(@(@(B(B      #MM &%F
 %F %F %F). ),'4
!" 
!" 
!"   )3  $
W%%JJz*** !T)) #	 #	 3 3J ? ? , !0B !eFW ! !(   H  'qzE?33|44 ++L99A((66>MML(ozlW.DEEF #,	     MM#11&-HHIIIIs   9AR==
S
	S
r   )NN)FFNN)FFFNN)FNFFNNr  )NTT)CrA   rB   rC   r  classmethodr  r<   r@   r  r   r)  r"  r8  r:  r=  r   r  r@  rV  rY  r[  alters_datarg  rp  rq  r  r  rb  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r  r  r  r  r  r!  r"  r&  r#  r$  r%  r'  r(  r)  ri  r*  r   r  r+  r[   r   s   @r;   r   r     s}       p2 p2 p2 p2 p2d 
 
 [
< < <E E E! ! !  
1 1 1  "$ $ $,. . . .; ; ; 
+{	+	+B
 
 
A/ A/ A/ A/F, , ,$ QU<
 <
 <
 <
| D @ @ @ @D !I! ! !J X X X Xt, , ,8
 
 
4 4 4 4l	" 	" 	" 	" F
 
 
  *( ( (.
 
 
 
M M M  * * * * =* =* =* =*~/ / /b  >
 
 
"  @  * * * *"-* -* -* -*^* * * *2 " " ["H   [>   [4 
 
 [
   [   [ ! ! [!F   [$ 4 4 [4l   [0   [.   [(   [   [8   [: X X [Xt 4 4 [4l h h [hT P P [Pd > > [> ~ ~ [~ ~ ~ ~ ~r>   r   )	metaclassc                     j         j        }|                    |           } j                            |          j        di |                    fdt          |          D             dg           d S )Nc                 0    g | ]\  }} ||           S ))r  r}  r8   )rX   r  r  ordered_objs      r;   rZ   z$method_set_order.<locals>.<listcomp>	  s,    NNNieR5	)	)	)NNNr>   r}  r8   )r^   r   get_forward_related_filterr   rI  rJ  bulk_update	enumerate)r:   r  id_listrQ  	order_wrtr  s    `    r;   method_set_orderr  	  s    !7I66t<<K0K""5))0??;??KKNNNN9W;M;MNNN	
    r>   c                     |j         j        }|                    |           }|j         j        j        } |j        j        di |                    |d          S )NT)flatr8   )r^   r   r  r  rG   r   rJ  values_list)r:   r  r  r  pk_names        r;   method_get_orderr  	  s]    !7I66t<<K"'G%;%4444@@t@TTTr>   c                     t          |d| j                                        z  t          t          |                      t          |d| j                                        z  t          t
          |                      d S )Nzget_%s_orderzset_%s_order)r   rA   lowerr   r  r  )r   rZ  s     r;   r   r   	  s    --///&..  
 --///&..    r>   c                 x    t          | t                    rt          j        |  }n| }|                    |          S )z7Used to unpickle Model subclasses with deferred fields.)rW   r   r   r9  ry   )model_idr   s     r;   r&  r&  	  s;    (E"" ) ==r>   Tr   )Zru   rN   r4  	functoolsr   	itertoolsr   r#  django.appsr   django.confr   django.corer   django.core.exceptionsr   r	   r
   r   r   r   r  r   r   r   r   r   r   django.db.modelsr   r   r   r   r   django.db.models.constantsr   django.db.models.constraintsr   r   django.db.models.deletionr   r   django.db.models.expressionsr   django.db.models.fields.relatedr    r!   r"   r#   django.db.models.functionsr$   django.db.models.managerr%   django.db.models.optionsr&   django.db.models.queryr'   r(   django.db.models.signalsr)   r*   r+   r,   r-   django.db.models.utilsr.   django.utils.encodingr/   django.utils.hashabler0   django.utils.textr1   r2   django.utils.translationr3   r
  r5   r   rK   rR   rF   rT   r   r   r   r  r  r   r&  __safe_for_unpickle__r8   r>   r;   <module>r     s>      # # # # # #                                                              W V V V V V V V V V V V V V 1 1 1 1 1 1 J J J J J J J J 8 8 8 8 8 8 8 8 / / / / / /            0 / / / / / , , , , , , , , , , , , ' ' ' ' ' ' ' '              4 3 3 3 3 3 + + + + + + / / / / / / 5 5 5 5 5 5 5 5 6 6 6 6 6 6" " " " " " " " 8::  $P P P
X) X) X) X) X) X) X) X)v
       	5 	5 	5 	5 	5 	5 	5 	5r r r r ri r r r rx=   U U U
 
 
$      (, $ $ $r>   