Ë
    èlÖi|  ã                   óT  — 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
mZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d	Z' G d
„ de e   ee   «      Z( G d„ de e   ee   «      Z) G d„ de e   ee   «      Z* G d„ de e   ee   «      Z+y)é    )ÚDictÚGenericÚListÚOptionalÚSequenceÚSet)ÚPydanticMetric)ÚConversionTypeParamsÚ	DimensionÚMetricÚMetricInputMeasureÚMetricTimeWindowÚSemanticManifestÚSemanticManifestTÚSemanticModel)ÚDimensionReferenceÚMeasureReferenceÚMetricModelReferenceÚMetricReference)ÚAggregationTypeÚ
MetricTypeÚTimeGranularity)ÚUniqueAndValidNameRule)ÚFileContextÚMetricContextÚSemanticManifestValidationRuleÚValidationErrorÚValidationIssueÚValidationWarningÚvalidate_safely)ÚWhereFiltersAreParseablez:Custom granularities are not supported for this field yet.c                   ó~   — e Zd ZdZe ed¬«      dedee   fd„«       «       Z	e	 dde
ded	ee   d
edee   f
d„«       Zy)ÚCumulativeMetricRulez7Checks that cumulative metrics are configured properly.z>running model validation ensuring cumulative metrics are valid©Úwhats_being_doneÚsemantic_manifestÚreturnc                 óþ  — g }|j                   j                  D ��ch c]  }|j                  D ]  }|j                  ’Œ Œ! }}}t        D �ch c]  }|j
                  j                  «       ’Œ }}|j                  xs g D �]p  }|j                  t        j                  k7  rŒ"t        t        j                  |j                  ¬«      t        |j                  ¬«      ¬«      }	dD ]ž  }
t!        |j"                  |
«      }|j"                  j$                  r t!        |j"                  j$                  |
«      nd }|
dk(  sŒW|sŒZ|sŒ]||k7  sŒc|j'                  t)        |	d|
› d|j                  › d|
› d	|› d
|
› d	|› d|
› d�¬«      «       Œ  |j"                  j*                  }|j"                  j$                  r@|j"                  j$                  j*                  r |j"                  j$                  j*                  }|j"                  j,                  r |j"                  j,                  j
                  nd }|j"                  j$                  r@|j"                  j$                  j,                  r |j"                  j$                  j,                  }|r*||vr&|j'                  t)        |	d|› dt.        › �¬«      «       |r|r|j'                  t)        |	d¬«      «       |s�ŒN|j1                  | j3                  |	||¬«      «       �Œs |S c c}}w c c}w )N©Úmetadata©Úmetric_name©Úfile_contextÚmetric)ÚwindowÚgrain_to_dater0   zGot differing values for `z` on cumulative metric 'z'. In `type_params.z`, got 'z*'. In `type_params.cumulative_type_params.z-'. Please remove the value from `type_params.z`.©ÚcontextÚmessagez4Invalid time granularity found in `grain_to_date`: 'ú'. zUBoth window and grain_to_date set for cumulative metric. Please set one or the other.©Úmetric_contextr0   Úcustom_granularities)Úproject_configurationÚtime_spinesr8   Únamer   ÚvalueÚlowerÚmetricsÚtyper   Ú
CUMULATIVEr   r   Úfrom_metadatar*   r   ÚgetattrÚtype_paramsÚcumulative_type_paramsÚappendr   r0   r1   ÚTEMP_CUSTOM_GRAIN_MSGÚextendÚvalidate_metric_time_window)Úclsr&   ÚissuesÚ
time_spineÚgranularityÚcustom_granularity_namesÚitemÚstandard_granularitiesr/   r7   ÚfieldÚtype_params_field_valueÚ"cumulative_type_params_field_valuer0   r1   s                  úp/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/dbt_semantic_interfaces/validations/metrics.pyÚvalidate_manifestz&CumulativeMetricRule.validate_manifest/   sö  € ð )+ˆð 0×EÑE×QÑQ÷$
àØ)×>Ñ>ò$
ð ð ×Óð$
Øð$
Ð ñ $
ô
 BQÖ!Q¸ $§*¡*×"2Ñ"2Õ"4Ð!QÐÐ!Qà'×/Ñ/Ò5°2ó D	ˆFØ�{‰{œj×3Ñ3Ò3Øä*Ü(×6Ñ6ÀÇÁÔPÜ+¸¿¹ÔDôˆNð
 5ò �Ü*1°&×2DÑ2DÀeÓ*LÐ'ð
 ×)Ñ)×@Ò@ô ˜F×.Ñ.×EÑEÀuÔMàð 3ð ˜XÓ%Ú/Ú:Ø:Ð>UÓUà—M‘MÜ'Ø$2à"<¸U¸GÐC[Ð\b×\gÑ\gÐ[hð i0Ø05¨w°hÐ?VÐ>Wð XGØGLÀgð N$Ø$FÐ#Gð H0Ø05¨w°bð	!:ô	õðð8 ×'Ñ'×.Ñ.ˆFØ×!Ñ!×8Ò8¸V×=OÑ=O×=fÑ=f×=mÒ=mØ×+Ñ+×BÑB×IÑI�ØFL×FXÑFX×FfÒFf˜F×.Ñ.×<Ñ<×BÒBÐlpˆMØ×!Ñ!×8Ò8¸V×=OÑ=O×=fÑ=f×=tÒ=tØ &× 2Ñ 2× IÑ I× WÑ W�á Ð6LÑ!LØ—‘Ü#Ø .àRÐS`ÐRaÐadÜ4Ð5ð7ôôñ ™-Ø—‘Ü#Ø .Ø wôôó Ø—‘Ø×3Ñ3Ø'5¸fÐ[sð 4ó öðAD	ðL ˆùó[$
ùò
 "Rs   œ$K4Á!K:r7   r0   r8   Úallow_customc                 óˆ  — g }t         D �ch c]  }|j                  j                  «       ’Œ }}||z  }|j                  }	|	j	                  d«      r|	d d |v r|	d d }	d|	› d|j
                  › d�}
|	|vr|j                  t        ||
¬«      «       |S |s*|	|vr&|j                  t        ||
dz   t        z   ¬«      «       |S c c}w )NÚséÿÿÿÿzInvalid time granularity 'z' in window: 'ú'r2   ú )	r   r<   r=   rL   ÚendswithÚwindow_stringrE   r   rF   )rI   r7   r0   r8   rU   rJ   rN   rO   Úvalid_granularitiesÚwindow_granularityÚmsgs              rS   rH   z0CumulativeMetricRule.validate_metric_time_windowƒ   sô   € ð )+ˆäAPÖ!Q¸ $§*¡*×"2Ñ"2Õ"4Ð!QÐÐ!QØ2Ð5KÑKÐØ#×/Ñ/ÐØ×&Ñ& sÔ+Ð0BÀ3ÀBÐ0GÐK^Ñ0^à!3°C°RÐ!8Ðà*Ð+=Ð*>¸nÈV×MaÑMaÐLbÐbcÐdˆØÐ%8Ñ8Ø�M‰MÜØ*Øôôð ˆñ Ð#5Ð=SÑ#SØ�M‰MÜØ*Ø #™IÔ(=Ñ=ôôð ˆùò/ "Rs   ‹!B?N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr    r   r   r   rT   r   r   r   ÚstrÚboolrH   © ó    rS   r#   r#   ,   s’   „ ÙAàÙÐ&fÔgðPÐ2Cð PÈÐQ`ÑHaò Pó hó ðPðd ð #ñ à%ð ð !ð ð " #™hð	 ð
 ð ð 
�/Ñ	"ò ó ñ rh   r#   c            	       ó2  — e Zd ZdZe ed¬«      dedee   fd„«       «       Z	e ed¬«      de
dee   fd	„«       «       Ze ed
¬«      dedee   dee   fd„«       «       Ze ed¬«      dedee   fd„«       «       Ze ed¬«      dedee   fd„«       «       Zy)ÚDerivedMetricRulez4Checks that derived metrics are configured properly.z7checking that the alias set are not unique and distinctr$   r/   r'   c                 ód  — g }| j                   t        j                  k(  �r
t        t	        j
                  | j                  ¬«      t        | j                  ¬«      ¬«      }| j                  j                  xs g }|D �ch c]  }|j                  ’Œ }}|D ]“  }|j                  sŒ|t        j                  |j                  |«      z  }|j                  |v sŒB|j                  t        |d|j                  › d|j                  › d�¬«      «       |j!                  |j                  «       Œ• |S c c}w )Nr)   r+   r-   zAlias 'z' for input metric: 'z5' is already being used. Please choose another alias.r2   )r?   r   ÚDERIVEDr   r   rA   r*   r   r;   rC   r>   Úaliasr   Úcheck_valid_namerE   r   Úadd)r/   rJ   r7   Úinput_metricsÚinput_metricÚ
used_namess         rS   Ú_validate_alias_collisionz+DerivedMetricRule._validate_alias_collisionª   s  € ð )+ˆà�;‰;œ*×,Ñ,Ó,Ü*Ü(×6Ñ6ÀÇÁÔPÜ+¸¿¹ÔDôˆNð #×.Ñ.×6Ñ6Ò<¸"ˆMØ@MÖN°˜,×+Ó+ÐNˆJÐNØ -ò ;�Ø×%Ó%ØÔ4×EÑEÀl×FXÑFXÐZhÓiÑi�FØ#×)Ñ)¨ZÒ7ØŸ™Ü+Ø(6Ø*1°,×2DÑ2DÐ1EÐEZÐ[g×[lÑ[lÐZmð nSð )Sôôð #Ÿ™ |×'9Ñ'9Õ:ð;ð ˆùò Os   Á>D-z%checking that the input metrics existr&   c                 ó„  — g }| j                   D �ch c]  }|j                  ’Œ }}| j                   D �]  }t        t        j                  |j
                  ¬«      t        |j                  ¬«      ¬«      }|j                  t        j                  k(  sŒa|j                  j                   s*|j                  t        |d|j                  › d�¬«      «       |j                  j                   xs g D ]H  }|j                  |vsŒ|j                  t        |d|j                  › d|j                  › d	�¬«      «       ŒJ �Œ |S c c}w )
Nr)   r+   r-   z+No input metrics found for derived metric 'z-'. Please add metrics to type_params.metrics.r2   zFor metric: z, input metric: 'z5' does not exist as a configured metric in the model.)r>   r;   r   r   rA   r*   r   r?   r   rl   rC   rE   r   )r&   rJ   ÚmÚall_metricsr/   r7   rq   s          rS   Ú_validate_input_metrics_existz/DerivedMetricRule._validate_input_metrics_existÄ   s4  € ð )+ˆà'8×'@Ñ'@ÖA !�q—v“vÐAˆÐAØ'×/Ñ/ó 	ˆFÜ*Ü(×6Ñ6ÀÇÁÔPÜ+¸¿¹ÔDôˆNð �{‰{œj×0Ñ0Ó0Ø×)Ñ)×1Ò1Ø—M‘MÜ'Ø$2Ø&QÐRX×R]ÑR]ÐQ^ð _Ið %Iôôð %+×$6Ñ$6×$>Ñ$>Ò$DÀ"ò �LØ#×(Ñ(°Ò;ØŸ™Ü+Ø(6Ø*6°v·{±{°mÐCTÐUa×UfÑUfÐTgð hMð )Môõòð	ð. ˆùò1 Bs   ‘D=z7checking that input metric time offset params are validr8   c                 óÀ  — g }t         D �ch c]  }|j                  j                  «       ’Œ }}t        t	        j
                  | j                  ¬«      t        | j                  ¬«      ¬«      }| j                  j                  xs g D ]Ï  }|j                  r&|t        j                  ||j                  |d¬«      z  }|j                  r>|j                  |vr0|j                  t!        |d|j                  › dt"        › �¬«      «       |j                  sŒŒ|j                  sŒ™|j                  t!        |d	| j                  › d
|j                  › d�¬«      «       ŒÑ |S c c}w )Nr)   r+   r-   T)r7   r0   r8   rU   z6Invalid time granularity found in `offset_to_grain`: 'r5   r2   z?Both offset_window and offset_to_grain set for derived metric 'z' on input metric 'z'. Please set one or the other.)r   r<   r=   r   r   rA   r*   r   r;   rC   r>   Úoffset_windowr#   rH   Úoffset_to_grainrE   r   rF   )r/   r8   rJ   rN   rO   r7   rq   s          rS   Ú_validate_time_offset_paramsz.DerivedMetricRule._validate_time_offset_paramsã   s\  € ð )+ˆäAPÖ!Q¸ $§*¡*×"2Ñ"2Õ"4Ð!QÐÐ!Qä&Ü$×2Ñ2¸F¿O¹OÔLÜ'°F·K±KÔ@ô
ˆð #×.Ñ.×6Ñ6Ò<¸"ò 	ˆLØ×)Ò)ØÔ.×JÑJØ#1Ø'×5Ñ5Ø)=Ø!%ð	 Kó ñ �ð ×+Ò+°×0LÑ0LÐTjÑ0jØ—‘Ü#Ø .àTÐUa×UqÑUqÐTrÐruÜ4Ð5ð7ôôð ×)Ó)¨l×.JÓ.JØ—‘Ü#Ø .Ø"aÐbh×bmÑbmÐanð o)Ø)5×):Ñ):Ð(;Ð;Zð!\ôõð'	ð6 ˆùòC "Rs   ‹!Ez3checking that the expr field uses the input metricsc                 óê  — g }| j                   t        j                  k(  �rR| j                  j                  si|j                  t        t        t        j                  | j                  ¬«      t        | j                  ¬«      ¬«      d| j                  › d�¬«      «       |S | j                  j                  xs g D ]¶  }|j                  xs |j                  }|| j                  j                  vsŒ6|j                  t        t        t        j                  | j                  ¬«      t        | j                  ¬«      ¬«      d|› d| j                  j                  › d	| j                  › d
�¬«      «       Œ¸ |S )Nr)   r+   r-   z!No `expr` set for derived metric z9. Please add an `expr` that references all input metrics.r2   zInput metric 'z' is not used in `expr`: 'z' for derived metric 'z7'. Please update the `expr` or remove the input metric.)r?   r   rl   rC   ÚexprrE   r   r   r   rA   r*   r   r;   r>   rm   )r/   rJ   rq   r;   s       rS   Ú_validate_exprz DerivedMetricRule._validate_expr  sL  € ð )+ˆà�;‰;œ*×,Ñ,Ó,Ø×%Ñ%×*Ò*Ø—‘Ü%Ü -Ü)4×)BÑ)BÈFÏOÉOÔ)\Ü#7ÀFÇKÁKÔ#Pô!ð #DÀFÇKÁKÀ=ð QRð !Rôô	ð2 ˆð %+×$6Ñ$6×$>Ñ$>Ò$DÀ"ò �LØ'×-Ñ-ÒB°×1BÑ1B�DØ 6×#5Ñ#5×#:Ñ#:Ò:ØŸ™Ü-Ü(5Ü1<×1JÑ1JÐTZ×TcÑTcÔ1dÜ+?ÈFÏKÉKÔ+Xô)"ð +9¸¸Ð>XÐY_×YkÑYk×YpÑYpÐXqð r3Ø39·;±;°-Ð?vð)xôõ	ðð ˆrh   zTrunning model validation ensuring derived metrics properties are configured properlyc                 óŠ  — g }| j                   j                  D ��ch c]  }|j                  D ]  }|j                  ’Œ Œ! }}}|t        j                  | ¬«      z  }| j                  xs g D ]N  }|t        j                  |¬«      z  }|t        j                  ||¬«      z  }|t        j                  |¬«      z  }ŒP |S c c}}w )N)r&   )r/   )r/   r8   )
r9   r:   r8   r;   rj   rw   r>   rs   r{   r~   )r&   rJ   rK   rL   rM   r/   s         rS   rT   z#DerivedMetricRule.validate_manifest-  sò   € ð
 )+ˆð 0×EÑE×QÑQ÷$
àØ)×>Ñ>ò$
ð ð ×Óð$
Øð$
Ð ñ $
ð 	Ô#×AÑAÐTeÐAÓfÑfˆØ'×/Ñ/Ò5°2ò 	FˆFØÔ'×AÑAÈÐAÓPÑPˆFØÔ'×DÑDØÐ4Lð Eó ñ ˆFð Ô'×6Ñ6¸fÐ6ÓEÑE‰Fð	Fð ˆùó$
s   œ$B?N)r`   ra   rb   rc   Ústaticmethodr    r   r   r   rs   r   rw   r   re   r{   r~   r   rT   rg   rh   rS   rj   rj   §   s$  „ Ù>àÙÐ&_Ô`ð¨&ð °X¸oÑ5Nò ó aó ðð0 ÙÐ&MÔNðÐ9Ið ÈhÐWfÑNgò ó Oó ðð: ÙÐ&_Ô`ð$¨Vð $È3ÈsÉ8ð $ÐX`ÐapÑXqò $ó aó ð$ðL ÙÐ&[Ô\ð˜vð ¨(°?Ñ*Cò ó ]ó ðð@ ÙØoôðÐ->ð À8ÈOÑC\ò óó ñrh   rj   c                   óv  — e Zd ZdZe ed¬«      dededee	   de
e   fd„«       «       Ze ed	¬«      ded
e	dedede
e   f
d„«       «       Ze ed¬«      dededede
e   fd„«       «       Ze ed¬«      dededede
e   fd„«       «       Zedededee   fd„«       Ze ed¬«      dede
e   fd„«       «       Zy)ÚConversionMetricRulez7Checks that conversion metrics are configured properly.zIchecking that the params of metric are valid if it is a conversion metricr$   r/   Úconversion_type_paramsrM   r'   c           	      óÖ   — g }|j                   }|rX|t        j                  t        t	        j
                  | j                  ¬«      t        | j                  ¬«      ¬«      ||¬«      z  }|S )Nr)   r+   r-   r6   )	r0   r#   rH   r   r   rA   r*   r   r;   )r/   rƒ   rM   rJ   r0   s        rS   Ú_validate_type_paramsz*ConversionMetricRule._validate_type_paramsG  sj   € ð
 )+ˆà'×.Ñ.ˆÙØÔ*×FÑFÜ,Ü!,×!:Ñ!:ÀFÇOÁOÔ!TÜ/¸F¿K¹KÔHô ð Ø%=ð Gó ñ ˆFð ˆrh   zCchecks that the entity exists in the base/conversion semantic modelÚentityÚbase_semantic_modelÚconversion_semantic_modelc           
      ó^  — g }||j                   D �ch c]  }|j                  ’Œ c}vrj|j                  t        t	        t        j                  | j                  ¬«      t        | j                  ¬«      ¬«      d› d|j                  › d�¬«      «       |j                   D �ch c]  }|j                  ’Œ c}vrj|j                  t        t	        t        j                  | j                  ¬«      t        | j                  ¬«      ¬«      d› d|j                  › d�¬«      «       |S c c}w c c}w )	Nr)   r+   r-   zEntity: z# not found in base semantic model: ú.r2   z) not found in conversion semantic model: )	Úentitiesr;   rE   r   r   r   rA   r*   r   )r/   r†   r‡   rˆ   rJ   s        rS   Ú_validate_entity_existsz,ConversionMetricRule._validate_entity_exists[  s  € ð
 )+ˆàÐ4G×4PÑ4PÖQ¨&˜&Ÿ+›+ÒQÑQØ�M‰MÜÜ)Ü%0×%>Ñ%>ÈÏÉÔ%XÜ3ÀÇÁÔLôð ' v hÐ.QÐRe×RjÑRjÐQkÐklÐmôôð Ð4M×4VÑ4VÖW¨&˜&Ÿ+›+ÒWÑWØ�M‰MÜÜ)Ü%0×%>Ñ%>ÈÏÉÔ%XÜ3ÀÇÁÔLôð ' v hð /2Ø2K×2PÑ2PÐ1QÐQRðTôô	ð ˆùò+ Rùò Xs   ’D%Â"D*zBchecks that the provided measures are valid for conversion metricsc           	      óØ   ‡ ‡— g Š	 d
dt         dt        dt        dd fˆˆ fd„}‰ j                  j                  }|€J d«       ‚ ||j
                  |¬«        ||j                  |d¬	«       ‰S )NÚinput_measureÚsemantic_modelÚis_base_measurer'   c           
      óN  •— d }|j                   D ]  }|j                  | j                  k(  sŒ|} n |s"J dj                  › d|j                  › d�«       ‚|j                  t
        j                  k7  r¼|j                  t
        j                  k7  rŸ|j                  t
        j                  k7  s|j                  dk7  rs‰j                  t        t        t        j                  ‰j                  ¬«      t!        ‰j                  ¬«      ¬«      d|j                  › d	|j                  › �¬
«      «       | j"                  �k|sh‰j                  t%        t        t        j                  ‰j                  ¬«      t!        ‰j                  ¬«      ¬«      d|j                  › d�¬
«      «       y y y )Nz	Measure 'z"' wasn't found in semantic model 'rY   Ú1r)   r+   r-   zRFor conversion metrics, the measure must be COUNT/SUM(1)/COUNT_DISTINCT. Measure: z is agg type: r2   zMeasure input zj has a filter. For conversion metrics, filtering on a conversion input measure is not fully supported yet.)ÚmeasuresÚ	referenceÚmeasure_referencer;   Úaggr   ÚCOUNTÚCOUNT_DISTINCTÚSUMr}   rE   r   r   r   rA   r*   r   Úfilterr   )rŽ   r�   r�   ÚmeasureÚmodel_measurerJ   r/   s        €€rS   Ú_validate_measurezBConversionMetricRule._validate_measures.<locals>._validate_measure€  sq  ø€ ð ˆGØ!/×!8Ñ!8ò �Ø ×*Ñ*¨m×.MÑ.MÓMØ+�GÙðñ
 Ðt˜i¨×(:Ñ(:Ð';Ð;]Ð^l×^qÑ^qÐ]rÐrsÐtÓt�7ð —‘œ×4Ñ4Ò4Ø—K‘K¤?×#AÑ#AÒAØ—[‘[¤O×$7Ñ$7Ò7¸7¿<¹<È3Ò;Nà—‘Ü#Ü -Ü)4×)BÑ)BÈFÏOÉOÔ)\Ü#7ÀFÇKÁKÔ#Pô!ð#$Ø$+§L¡L >°ÀÇÁ¸}ð!Nôô	ð ×#Ñ#Ð/¹à—‘Ü%Ü -Ü)4×)BÑ)BÈFÏOÉOÔ)\Ü#7ÀFÇKÁKÔ#Pô!ð #1°·±°ð ?_ð !_ôõ	ð 9HÐ/rh   úGFor a conversion metric, type_params.conversion_type_params must exist.)rŽ   r�   F)rŽ   r�   r�   )T)r   r   rf   rC   rƒ   Úbase_measureÚconversion_measure)r/   r‡   rˆ   r�   rƒ   rJ   s   `    @rS   Ú_validate_measuresz'ConversionMetricRule._validate_measuresy  s—   ù€ ð
 )+ˆð gkñ&	Ü-ð&	Ü?Lð&	Ü_cð&	àö&	ðP "(×!3Ñ!3×!JÑ!JÐà"Ð.ð	UàTó	UØ.áØ0×=Ñ=Ø.õ	
ñ 	Ø0×CÑCØ4Ø!õ	
ð
 ˆrh   z6checks that the provided constant properties are validc                 óN  ‡ ‡	— g Š	dt         t           dt        dd fˆ	ˆ fd„}‰ j                  j                  }|€J d«       ‚|j
                  xs g }g }g }|D ]8  }|j                  |j                  «       |j                  |j                  «       Œ:  |||¬«        |||¬«       ‰	S )NÚ
referencesr�   r'   c                 ó–  •— |j                   D �cg c]  }|j                  ‘Œ c}|j                  D �cg c]  }|j                  ‘Œ c}z   }| D ]p  }||vsŒ‰j                  t	        t        t        j                  ‰j                  ¬«      t        ‰j                  ¬«      ¬«      d|› d|j                  › �¬«      «       Œr y c c}w c c}w )Nr)   r+   r-   z The provided constant property: z$, cannot be found in semantic model r2   )
r‹   r;   Ú
dimensionsrE   r   r   r   rA   r*   r   )r£   r�   r†   Ú	dimensionÚlinkable_elementsr”   rJ   r/   s         €€rS   Ú_elements_in_modelzNConversionMetricRule._validate_constant_properties.<locals>._elements_in_model¾  sÈ   ø€ Ø;I×;RÑ;RÖ S° §£Ò SØ0>×0IÑ0IöWØ#,�	—“òWñ !Ðð (ò �	ØÐ$5Ò5Ø—M‘MÜ'Ü$1Ü-8×-FÑ-FÐPV×P_ÑP_Ô-`Ü';ÈÏÉÔ'Tô%ð 'GÀyÀkð RAØAO×ATÑATÐ@Uð%Wôõ	ñùò !Tùò Ws
   �C³Crž   )r£   r�   )	r   re   r   rC   rƒ   Úconstant_propertiesrE   Úbase_propertyÚconversion_property)
r/   r‡   rˆ   r¨   rƒ   r©   Úbase_propertiesÚconversion_propertiesÚconstant_propertyrJ   s
   `        @rS   Ú_validate_constant_propertiesz2ConversionMetricRule._validate_constant_properties·  sË   ù€ ð
 )+ˆð	¬4´©9ð 	Ämð 	ÐX\ö 	ð" "(×!3Ñ!3×!JÑ!JÐà"Ð.ð	UàTó	UØ.à4×HÑHÒNÈBÐØˆØ "ÐØ!4ò 	PÐØ×"Ñ"Ð#4×#BÑ#BÔCØ!×(Ñ(Ð):×)NÑ)NÕOð	Pñ 	 oÐFYÕZÙÐ&;ÐLeÕfØˆrh   r•   r&   c                 óŒ   — d}|j                   D ]-  }| |j                  D �ch c]  }|j                  ’Œ c}v sŒ*|} |S  |S c c}w )z;Retrieve the semantic model from a given measure reference.N)Úsemantic_modelsr“   r”   )r•   r&   r�   Úmodelr›   s        rS   Ú _get_semantic_model_from_measurez5ConversionMetricRule._get_semantic_model_from_measureÞ  sW   € ð
 ˆØ&×6Ñ6ò 	ˆEØ ÀeÇnÁnÖ$U¸7 W×%6Ó%6Ò$UÒUØ!&�ØØÐð		ð Ðùò %Vs   ¡AzArunning manifest validation ensuring conversion metrics are validc                 óN  — g }| j                   j                  D ��ch c]  }|j                  D ]  }|j                  ’Œ Œ! }}}| j                  xs g D �]È  }|j
                  t        j                  k(  sŒ"|j                  j                  €J d«       ‚t        j                  |j                  j                  j                  j                  | ¬«      }t        j                  |j                  j                  j                  j                  | ¬«      }|�|€i|j                  t!        t#        t%        j&                  |j(                  ¬«      t+        |j                  ¬«      ¬«      d|j                  › d�¬«      «       �Œ*|t        j-                  ||j                  j                  j.                  ||¬	«      z  }|t        j1                  |||¬
«      z  }|t        j3                  ||j                  j                  |¬«      z  }|t        j5                  |||¬
«      z  }�ŒË |S c c}}w )Nrž   )r•   r&   r)   r+   r-   zFor metric 'z/', conversion measures specified was not found.r2   )r/   r†   r‡   rˆ   )r/   r‡   rˆ   )r/   rƒ   rM   )r9   r:   r8   r;   r>   r?   r   Ú
CONVERSIONrC   rƒ   r‚   r³   rŸ   r•   r    rE   r   r   r   rA   r*   r   rŒ   r†   r¡   r…   r¯   )r&   rJ   rK   rL   rM   r/   r‡   rˆ   s           rS   rT   z&ConversionMetricRule.validate_manifestê  sN  € ð )+ˆð 0×EÑE×QÑQ÷$
àØ)×>Ñ>ò$
ð ð ×Óð$
Øð$
Ð ñ $
ð (×/Ñ/Ò5°2ó 0	ˆFØ�{‰{œj×3Ñ3Ó3ð ×&Ñ&×=Ñ=ÐIð]à\ó]ØIô ';×&[Ñ&[Ø&,×&8Ñ&8×&OÑ&O×&\Ñ&\×&nÑ&nØ&7ð '\ó 'Ð#ô -A×,aÑ,aØ&,×&8Ñ&8×&OÑ&O×&bÑ&b×&tÑ&tØ&7ð -bó -Ð)ð 'Ð.Ð2KÐ2Sà—M‘MÜ'Ü$1Ü-8×-FÑ-FÐPV×P_ÑP_Ô-`Ü';ÈÏÉÔ'Tô%ð '3°6·;±;°-Ð?nÐ$oôôñ àÔ.×FÑFØ!Ø!×-Ñ-×DÑD×KÑKØ(;Ø.Gð	 Gó ñ �ð Ô.×AÑAØ!Ø(;Ø.Gð Bó ñ �ð
 Ô.×DÑDØ!Ø+1×+=Ñ+=×+TÑ+TØ-Eð Eó ñ �ð
 Ô.×LÑLØ!Ø(;Ø.Gð Mó ñ ’ðY0	ðb ˆùóo$
s   œ$H!N)r`   ra   rb   rc   r€   r    r   r
   r   re   r   r   r…   r   rŒ   r¡   r¯   r   r   r   r³   r   rT   rg   rh   rS   r‚   r‚   D  s›  „ ÙAàÙÐ&qÔrðØðØ0DðØ`cÐdgÑ`hðà	�/Ñ	"òó só ðð$ ÙÐ&kÔlðØðØ #ðØ:GðØdqðà	�/Ñ	"òó mó ðð8 ÙÐ&jÔkð:Øð:Ø-:ð:ØWdð:à	�/Ñ	"ò:ó ló ð:ðx ÙÐ&^Ô_ð#Øð#Ø-:ð#ØWdð#à	�/Ñ	"ò#ó `ó ð#ðJ ð	Ø+ð	Ø@Pð	à	�-Ñ	 ò	ó ð	ð ÙÐ&iÔjð:Ð->ð :À8ÈOÑC\ò :ó kó ñ:rh   r‚   c                   óä   — e Zd ZdZededeeef   deee	e
   f   de	e   fd„«       Ze ed¬«      dedeeef   deee	e
   f   dee   fd	„«       «       Ze ed
¬«      dedee   fd„«       «       Zy)ÚMetricTimeGranularityRulezIChecks that time_granularity set for metric is queryable for that metric.r/   Úmetric_indexÚmeasure_to_agg_time_dimensionr'   c                 ó  — d}t        j                  | |¬«      D ]o  }|j                  |«      }|s y|j                  r|j                  j                  nt
        j                  }|r"|j                  «       |j                  «       kD  sŒn|}Œq |S )zßGet the minimum time granularity this metric is allowed to be queried with.

        This should be the largest granularity that any of the metric's agg_time_dimensions is defined at.
        Defaults to DAY in the
        N)r/   r¸   )r	   Úall_input_measures_for_metricÚgetrC   Útime_granularityr   ÚDAYÚto_int)r/   r¸   r¹   Úmin_queryable_granularityr•   Úagg_time_dimensionÚdefined_time_granularitys          rS   Ú%_min_queryable_granularity_for_metricz?MetricTimeGranularityRule._min_queryable_granularity_for_metric,  s�   € ð @DÐ!Ü!/×!MÑ!MÐU[ÐjvÔ!wò 	EÐØ!>×!BÑ!BÐCTÓ!UÐÙ%áð &×1Ò1ð #×.Ñ.×?Ò?ä$×(Ñ(ð %ñ
 -Ð0H×0OÑ0OÓ0QÐTm×TtÑTtÓTvÓ0vØ,DÑ)ð	Eð )Ð(rh   zUrunning model validation ensuring a metric's time_granularity is valid for the metricr$   c                 óZ  — g }t        t        j                  | j                  ¬«      t	        | j
                  ¬«      ¬«      }| j                  rØt        j                  | ||¬«      }|s,|j                  t        |d| j
                  › d�¬«      «       |S t        D �cg c]/  }|j                  «       |j                  «       k\  r|j                  ‘Œ1 }}| j                  |vrF|j                  t        |d| j
                  › d	|j
                  › d
| j                  › d|› �¬«      «       |S c c}w )Nr)   r+   r-   ©r/   r¸   r¹   z2Unable to validate `time_granularity` for metric 'zG' due to misconfiguration with measures or related agg_time_dimensions.r2   z`time_granularity` for metric 'z' must be >= z{. Valid options are those that are >= the largest granularity defined for the metric's measures' agg_time_dimensions. Got: z. Valid options: )r   r   rA   r*   r   r;   r½   r·   rÃ   rE   r   r   r¿   r<   )r/   r¸   r¹   rJ   r3   rÀ   rL   r]   s           rS   Ú_validate_metricz*MetricTimeGranularityRule._validate_metricG  sI  € ð )+ˆÜÜ$×2Ñ2¸F¿O¹OÔLÜ'°F·K±KÔ@ô
ˆð
 ×"Ò"Ü(A×(gÑ(gØ¨LÐXuð )hó )Ð%ñ -Ø—‘Ü#Ø 'àPÐQW×Q\ÑQ\ÐP]ð ^]ð ]ôôð �ô $3ö#àØ×%Ñ%Ó'Ð+D×+KÑ+KÓ+MÒMð ×!Ó!ð#Ðð #ð
 ×&Ñ&Ð.AÑAØ—‘Ü#Ø 'à=¸f¿k¹k¸]È-Ø8×=Ñ=Ð>ð ?hà%×6Ñ6Ð7Ð7HÐI\ÐH]ð_ôô
ð ˆùò%#s   Â4D(zGrunning manifest validation ensuring metric time_granularitys are validr&   c                 ó  — g }i }| j                   D ]z  }|j                  D �ci c]  }t        |j                  «      |“Œ }}|j                  D ]<  }	 |j                  |j                  «      }||j                     }|||j                  <   Œ> Œ| | j                  D �	ci c]  }	t        |	j                  «      |	“Œ }
}	| j                  xs g D ]  }	|t        j                  |	|
|¬«      z  }Œ |S c c}w # t        t        f$ r d}Y ŒŠw xY wc c}	w )a˜  Validate that the time_granularity for each metric is queryable for that metric.

        TODO: figure out a more efficient way to reference other aspects of the model. This validation essentially
        requires parsing the entire model, which could be slow and likely is repeated work. The blocker is that the
        inputs to validations are protocols, which don't easily store parsed metadata.
        NrÅ   )r±   r¥   r   r;   r“   Ú&checked_agg_time_dimension_for_measurer”   Údimension_referenceÚAssertionErrorÚKeyErrorr>   r   r·   rÆ   )r&   rJ   r¹   r�   r¦   Údimension_indexr›   Úagg_time_dimension_refrÁ   r/   r¸   s              rS   rT   z+MetricTimeGranularityRule.validate_manifesty  sH  € ð )+ˆàUWÐ%Ø/×?Ñ?ò 	VˆNØ^l×^wÑ^wÖxÐQZÔ1°)·.±.ÓAÀ9ÑLÐxˆOÐxØ)×2Ñ2ò 
V�ð.Ø-;×-bÑ-bÐcj×ctÑctÓ-uÐ*Ø>MØ.×BÑBñ?Ð&ð DVÐ-¨g×.?Ñ.?Ò@ñ
Vð	Vð L]×KdÑKdÖeÀœ¨¯©Ó4°fÑ<ÐeˆÐeØ'×/Ñ/Ò5°2ò 	ˆFØÔ/×@Ñ@ØØ)Ø.Kð Aó ñ ‰Fð	ð ˆùò) yøô '¬Ð1ò .ð *.Ò&ð.üò fs   ¢C-Á*C2ÂD	Ã2DÄDN)r`   ra   rb   rc   r€   r   r   r   r   r   r   r   rÃ   r    r   r   rÆ   r   rT   rg   rh   rS   r·   r·   )  sù   „ ÙSàð)Øð)à˜?¨FÐ2Ñ3ð)ð (,Ð,<¸hÀyÑ>QÐ,QÑ'Rð)ð 
�/Ñ	"ò	)ó ð)ð4 ÙØpôð,Øð,à˜?¨FÐ2Ñ3ð,ð (,Ð,<¸hÀyÑ>QÐ,QÑ'Rð,ð 
�/Ñ	"ò	,óó ð,ð\ ÙÐ&oÔpðÐ->ð À8ÈOÑC\ò ó qó ñrh   r·   N),Útypingr   r   r   r   r   r   Ú.dbt_semantic_interfaces.implementations.metricr	   Ú!dbt_semantic_interfaces.protocolsr
   r   r   r   r   r   r   r   Ú"dbt_semantic_interfaces.referencesr   r   r   r   Ú"dbt_semantic_interfaces.type_enumsr   r   r   Ú5dbt_semantic_interfaces.validations.unique_valid_namer   Ú5dbt_semantic_interfaces.validations.validator_helpersr   r   r   r   r   r   r    Ú1dbt_semantic_interfaces.validations.where_filtersr!   rF   r#   rj   r‚   r·   rg   rh   rS   ú<module>rÖ      sÌ   ðß ?× ?å I÷	÷ 	ó 	÷ó ÷ñ õ
 Y÷÷ ñ õð UÐ ôxÐ9Ð:KÑLÈgÐVgÑNhô xôvZÐ6Ð7HÑIÈ7ÐSdÑKeô ZôzbÐ9Ð:KÑLÈgÐVgÑNhô bôJqÐ >Ð?PÑ QÐSZÐ[lÑSmõ qrh   