
    sgh                     "   d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZ g dZ G d d	e      Z G d
 deee      Z G d de      Z G d de      Z G d de      Z G d dee      Z G d dee      Z G d dee      Zy)z>
Classes to represent the definitions of aggregate functions.
    )
FieldErrorFullResultSet)CaseColPairsFuncStarValueWhen)IntegerField)Coalesce)FixDurationInputMixinNumericOutputFieldMixin)	AggregateAvgCountMaxMinStdDevSumVariancec                        e Zd ZdZdZdZdZdZdZdZ	dddd fd
Z
 fdZ fd	Z fd
Z	 d fd	Zed        Zd Z fdZ fdZ xZS )r   z)%(function)s(%(distinct)s%(expressions)s)TNz%s FILTER (WHERE %%(filter)s)F)distinctfilterdefaultc                   |r.| j                   s"t        d| j                  j                  z        |.| j                  "t        | j                  j                   d      || _        || _        || _        t        | $  |i | y )Nz%s does not allow distinct.z does not allow default.)
allow_distinct	TypeError	__class____name__empty_result_set_valuer   r   r   super__init__)selfr   r   r   expressionsextrar   s         _/var/www/enzed_healthcare/enzed_env/lib/python3.12/site-packages/django/db/models/aggregates.pyr"   zAggregate.__init__#   s     D//9DNN<S<SSTT4#>#>#Jt~~6677OPQQ +//    c                 Z    t         |          D cg c]  }|j                   c}S c c}w N)r!   get_source_expressions_output_field_or_none)r#   er   s     r&   get_source_fieldszAggregate.get_source_fields/   s%    161O1QRA''RRRs   (c                 @    t         |          }|| j                  gz   S r)   )r!   r*   r   )r#   source_expressionsr   s     r&   r*   z Aggregate.get_source_expressions3   s"    "W;=!T[[M11r'   c                 6    |^ }| _         t        | 	  |      S r)   )r   r!   set_source_expressions)r#   exprsr   s     r&   r1   z Aggregate.set_source_expressions7   s    #w-e44r'   c           
         t         |   ||||      }|rN|j                         D ]:  }|j                  |   j                  st        d|j                   d| d| d       n| j                  st         t        |#         }t        |      D ]f  \  }	}
|
j                  s| j                         |	   }t        |d      r|j                  n
t        |      }t        d|j                  d|d|d       |j                  x}|S t        |d      r2|j                  ||||      }|j                  (|j                  |_        nt!        ||j                        }d |_        t#        |||j                        }|j                  |_        |S )NzCannot compute z('z'): 'z' is an aggregatenameresolve_expression)output_field)r!   r5   get_refsannotations
is_summaryr   r4   r   r*   	enumeratecontains_aggregatehasattrreprr   r+   r6   r	   r   )r#   queryallow_joinsreuse	summarizefor_savecrefr$   indexexprbefore_resolvedr4   r   coalescer   s                  r&   r5   zAggregate.resolve_expression;   s    G&uk5)Lzz| $$S)44$)!&&C5cUBST 
   	1DFK(5 t**&*&A&A&CE&JO #?F; (,,!/2 
 %664/  yy G)H70100UIVG,,4'('>'>$GQ%<%<=G	AwQ5L5LMllr'   c                     | j                         D cg c]  }||	 }}t        |      dk(  r;t        |d   d      r,|d   j                  d| j                  j	                         S t        d      c c}w )N   r   r4   __z$Complex expressions require an alias)r*   lenr<   r4   lowerr   )r#   rF   r$   s      r&   default_aliaszAggregate.default_aliasd   sy     "88:
d>ND
 
 {q W[^V%D*1~22DIIOO4EFF>??
s
   A5A5c                     g S r)    )r#   s    r&   get_group_by_colszAggregate.get_group_by_colsm   s    	r'   c                 n   | j                   rdnd|d<   | j                  r|j                  j                  ri	 | j                  j	                  ||      \  }}| j
                  |j                  d| j                        z  }t        |   ||f||d|\  }}|g ||fS | j                         }	d |	_        |	j                         }
t        | j                  |
d         }|	j                  t        |      g|
dd  z          t        t        |	  ||fi |S t        |   ||fi |S # t        $ r Y w xY w)	Nz	DISTINCT  r   template)rT   r   r   )thenrJ   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrT   r!   r   copyr*   r
   r1   r   r   )r#   compiler
connectionextra_context
filter_sqlfilter_paramsrT   sqlparamsr[   r/   	conditionr   s               r&   rX   zAggregate.as_sqlp   sd   37==Kbj!;;""CC:040B0B8Z0X-J  $33m6G6G"DMM7  H #('. "# "*)	#
 (#KC  9& 9= 999yy{"%)%@%@%B" 3Ea3HI	++T)_,=@RSTSU@V,VWY4j,9  w~h
DmDD/ % s   D( (	D43D4c                     t         |          }| j                  r| j                  |d<   | j                  r| j                  |d<   |S )Nr   r   )r!   _get_repr_optionsr   r   )r#   optionsr   s     r&   re   zAggregate._get_repr_options   s?    '+-=="&--GJ;; $GHr'   )NTNFF)r   
__module____qualname__rT   r;   r4   rY   window_compatibler   r    r"   r-   r*   r1   r5   propertyrN   rQ   rX   re   __classcell__r   s   @r&   r   r      s    :HD5ON! &+4
0S25
 SX'R @ @E> r'   r   c                       e Zd ZdZd ZdZdZy)r   AVGTrJ   Nr   rg   rh   functionr4   r   arityrP   r'   r&   r   r          HDNEr'   r   c                   P     e Zd ZdZd Z e       ZdZdZdZ	dZ
d fd	Z fdZ xZS )r   COUNTTr   rJ   c                     |dk(  r
t               }t        |t               r|t        d      t        |   |fd|i| y )N*z8Star cannot be used with filter. Please specify a field.r   )r   
isinstance
ValueErrorr!   r"   )r#   
expressionr   r%   r   s       r&   r"   zCount.__init__   sD    Jj$'F,>WXX<F<e<r'   c                     t        |   |i |}|j                  d   }t        |t              rA| j
                  rt        d      |j                         }t        |d   |j                        S |S )Nr   z6COUNT(DISTINCT) doesn't support composite primary keys)r   )
r!   r5   r/   rw   r   r   rx   get_colsr   r   )r#   argskwargsresultrF   colsr   s         r&   r5   zCount.resolve_expression   sq    +T<V<((+ dH%}} L  ==?Da77r'   r)   )r   rg   rh   rp   r4   r   r6   r   r    rq   allows_composite_expressionsr"   r5   rk   rl   s   @r&   r   r      s9    HD>LNE#' = r'   r   c                       e Zd ZdZd ZdZy)r   MAXrJ   Nr   rg   rh   rp   r4   rq   rP   r'   r&   r   r          HDEr'   r   c                       e Zd ZdZd ZdZy)r   MINrJ   Nr   rP   r'   r&   r   r      r   r'   r   c                   2     e Zd Zd ZdZd fd	Z fdZ xZS )r   rJ   c                 <    |rdnd| _         t        |   |fi | y )NSTDDEV_SAMP
STDDEV_POPrp   r!   r"   r#   ry   sampler%   r   s       r&   r"   zStdDev.__init__   s     )/\-u-r'   c                 F    i t         |          d| j                  dk(  iS )Nr   r   r!   re   rp   r#   r   s    r&   re   zStdDev._get_repr_options   s&    X%'+-Xx-9WXXr'   Fr   rg   rh   r4   rq   r"   re   rk   rl   s   @r&   r   r      s    DE.Y Yr'   r   c                       e Zd ZdZd ZdZdZy)r   SUMTrJ   Nro   rP   r'   r&   r   r      rr   r'   r   c                   2     e Zd Zd ZdZd fd	Z fdZ xZS )r   rJ   c                 <    |rdnd| _         t        |   |fi | y )NVAR_SAMPVAR_POPr   r   s       r&   r"   zVariance.__init__   s     &,
)-u-r'   c                 F    i t         |          d| j                  dk(  iS )Nr   r   r   r   s    r&   re   zVariance._get_repr_options   s&    U%'+-Ux*9TUUr'   r   r   rl   s   @r&   r   r      s    DE.V Vr'   r   N)__doc__django.core.exceptionsr   r   django.db.models.expressionsr   r   r   r   r	   r
   django.db.models.fieldsr   django.db.models.functionsr   !django.db.models.functions.mixinsr   r   __all__r   r   r   r   r   r   r   r   rP   r'   r&   <module>r      s    = P P 0 /
	{ {|
!8) I B) ) 	Y$i 	Y
 	V&	 	Vr'   