o 3a-@sdZddlmZddlmZmZmZmZddlm Z ddl m Z m Z gdZ GdddeZGd d d e e eZGd d d eZGd ddeZGdddeZGddde eZGddde eZGddde eZdS)z> Classes to represent the definitions of aggregate functions. ) FieldError)CaseFuncStarWhen) IntegerField)FixDurationInputMixinNumericOutputFieldMixin) AggregateAvgCountMaxMinStdDevSumVariancecseZdZdZdZdZdZdZdZdddfdd Z fd d Z fd d Z fd dZ dfdd Z eddZdddZfddZfddZZS)r z)%(function)s(%(distinct)s%(expressions)s)TNz%s FILTER (WHERE %%(filter)s)F)distinctfiltercs<|r |js td|jj||_||_tj|i|dS)Nz%s does not allow distinct.)allow_distinct TypeError __class____name__rrsuper__init__)selfrr expressionsextrar=/usr/lib/python3/dist-packages/django/db/models/aggregates.pyrs zAggregate.__init__csddtDS)NcSsg|]}|jqSr)_output_field_or_none).0errr !sz/Aggregate.get_source_fields..)rget_source_expressionsrrrrget_source_fieldsszAggregate.get_source_fieldscs t}|jr||jgS|SN)rr$r)rsource_expressionsrrrr$#s  z Aggregate.get_source_expressionscs|jo||_t|Sr')rpoprset_source_expressions)rexprsrrrr*)s z Aggregate.set_source_expressionsc st||||}|jo|j|||||_|sGtt|}t|D]#\}} | jrF||} t| dr8| jnt | } t d|j| | fq#|S)Nnamez-Cannot compute %s('%s'): '%s' is an aggregate) rresolve_expressionrr r$ enumeratecontains_aggregatehasattrr,reprr) rquery allow_joinsreuse summarizefor_savecrindexexprbefore_resolvedr,rrrr--s zAggregate.resolve_expressioncCsB|}t|dkrt|ddrd|dj|jfStd)Nrr,z%s__%sz$Complex expressions require an alias)r$lenr0r,lowerr)rrrrr default_alias<szAggregate.default_aliascCsgSr'r)raliasrrrget_group_by_colsCszAggregate.get_group_by_colsc  s|jrdnd|d<|jrh|jjr9|j||\}}|j|d|j}tj||f||d|\}}|||fS| } d| _| } t |j| dd} | t | g| ddtt| j||fi|Stj||fi|S) Nz DISTINCT rtemplate)rBrr)thenr;)rrfeatures supports_aggregate_filter_clauseas_sqlfilter_templategetrBrcopyr$rr*rr ) rcompiler connection extra_context filter_sql filter_paramsrBsqlparamsrIr( conditionrrrrFFs( zAggregate.as_sqlcs.t}|jr |j|d<|jr|j|d<|S)Nrr)r_get_repr_optionsrr)roptionsrrrrRZs   zAggregate._get_repr_options)NTNFFr')r __module__ __qualname__rBr/r,rGwindow_compatiblerrr&r$r*r-propertyr>r@rFrR __classcell__rrrrr s"      r c@eZdZdZdZdZdS)r AVGTNrrTrUfunctionr,rrrrrr cr cs8eZdZdZdZeZdZdfdd ZddZ Z S) r COUNTTNc sD|dkrt}t|tr|durtdtj|fd|i|dS)N*z8Star cannot be used with filter. Please specify a field.r)r isinstance ValueErrorrr)r expressionrrrrrros zCount.__init__cCs|durdS|S)Nrr)rvaluerbrKrrr convert_valuevszCount.convert_valuer') rrTrUr\r,r output_fieldrrrdrXrrrrr isr c@eZdZdZdZdS)r MAXNrrTrUr\r,rrrrr zr c@rf)rMINNrhrrrrrrirc.eZdZdZdfdd ZfddZZS)rFc &|rdnd|_tj|fi|dS)N STDDEV_SAMP STDDEV_POPr\rrrrbsamplerrrrrzStdDev.__init__citd|jdkiS)NrqrmrrRr\r%rrrrRzStdDev._get_repr_optionsFrrTrUr,rrRrXrrrrrrc@rY)rSUMTNr[rrrrrr]rcrk)rFc rl)NVAR_SAMPVAR_POProrprrrrrrzVariance.__init__crs)Nrqrzrtr%rrrrRruzVariance._get_repr_optionsrvrwrrrrrrxrN)__doc__django.core.exceptionsrdjango.db.models.expressionsrrrrdjango.db.models.fieldsr!django.db.models.functions.mixinsrr __all__r r r r rrrrrrrrs  S