Ë
    èlÖi#  ã                   ó   — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZmZ d dlmZmZmZmZmZ  e j*                  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)é    N)Údefaultdict)Ú	dataclass)ÚDefaultDictÚDictÚGenericÚListÚSequence)ÚMetricÚSemanticManifestTÚSemanticModel)ÚFileContextÚSemanticManifestValidationRuleÚValidationErrorÚValidationIssueÚvalidate_safelyc            	       óŠ   — e Zd ZdZe ed«      dedeeef   de	e
   fd„«       «       Ze ed«      dede	e
   fd	„«       «       Zy
)ÚMetricLabelsRulez1Checks that the labels are unique across metrics.z)Checking that a metric has a unique labelÚmetricÚexisting_labelsÚreturnc           
      ó  — | j                   |v rVt        t        j                  | j                  «      d| j                   › d| j
                  › d|| j                      › d�¬«      fS | j                   �| j
                  || j                   <   y)NúCan't use label `z` for  metric `z#` as it's already used for metric `ú`©ÚcontextÚmessage© ©Úlabelr   r   Úfrom_metadataÚmetadataÚname©r   r   s     úo/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/dbt_semantic_interfaces/validations/labels.pyÚ_check_metriczMetricLabelsRule._check_metric   sˆ   € ð �<‰<˜?Ñ*äÜ'×5Ñ5°f·o±oÓFØ/°·±¨~¸_ÈVÏ[É[ÈMð Z8Ø8GÈÏÉÑ8UÐ7VÐVWðYôðð ð �\‰\Ð%Ø,2¯K©KˆO˜FŸL™LÑ)àó    z)Checking labels are unique across metricsÚsemantic_manifestc                 ód   — g }i }| j                   D ]  }|t        j                  ||¬«      z  }Œ |S )Nr#   )Úmetricsr   r%   )r'   ÚissuesÚlabels_to_metricsr   s       r$   Úvalidate_manifestz"MetricLabelsRule.validate_manifest%   sI   € ð )+ˆØ,.ÐØ'×/Ñ/ò 	gˆFØÔ&×4Ñ4¸FÐTeÐ4ÓfÑf‰Fð	gð ˆr&   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r
   r   Ústrr	   r   r%   r   r,   r   r&   r$   r   r      s€   „ Ù;àÙÐ@ÓAð˜fð °t¸CÀ¸H±~ð È(ÐSbÑJcò ó Bó ðð ÙÐ@ÓAðÐ->ð À8ÈOÑC\ò ó Bó ñr&   r   c            	       ó,  — e Zd ZdZe ed«      dedeeef   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e ed«      dede	e
   fd„«       «       Ze ed«      dede	e
   fd„«       «       Zy)ÚSemanticModelLabelsRulez9Checks that the labels are unique across semantic models.z1checking that a semantic model has a unique labelÚsemantic_modelr   r   c           
      ó  — | j                   |v rVt        t        j                  | j                  «      d| j                   › d| j
                  › d|| j                      › d�¬«      fS | j                   �| j
                  || j                   <   y)Nr   z` for  semantic model `z+` as it's already used for semantic model `r   r   r   r   ©r5   r   s     r$   Ú_check_semantic_modelz-SemanticModelLabelsRule._check_semantic_model3   sž   € ð
 ×Ñ ?Ñ2äÜ'×5Ñ5°n×6MÑ6MÓNØ/°×0DÑ0DÐ/EÐE\Ð]k×]pÑ]pÐ\qð r@Ø@OÐP^×PdÑPdÑ@eÐ?fÐfgðiôðð ð ×!Ñ!Ð-Ø4B×4GÑ4GˆO˜N×0Ñ0Ñ1àr&   zJchecking that a semantic model's dimension labels are unique within itselfc                 óp  — g }t        d„ «      }| j                  D ].  }|j                  €Œ||j                     dz   ||j                  <   Œ0 |j                  «       D ]W  \  }}|dkD  sŒ|j	                  t        t        j                  | j                  «      d|› d|› d| j                  › �¬«      «       ŒY |S )Nc                   ó   — y©Nr   r   r   r&   r$   ú<lambda>zJSemanticModelLabelsRule._check_semantic_model_dimensions.<locals>.<lambda>I   ó   � r&   é   zDDimension labels must be unique within a semantic model. The label `ú` was used for z dimensions on semantic model `r   )
r   Ú
dimensionsr   ÚitemsÚappendr   r   r    r!   r"   )r5   r*   Úlabel_countsÚ	dimensionr   Úcounts         r$   Ú _check_semantic_model_dimensionsz8SemanticModelLabelsRule._check_semantic_model_dimensionsE   sÍ   € ð )+ˆÜ.9¹)Ó.DˆØ'×2Ñ2ò 	RˆIØ�‰Ñ*Ø0<¸Y¿_¹_Ñ0MÐPQÑ0Q�˜YŸ_™_Ò-ð	Rð )×.Ñ.Ó0ò 	‰LˆE�5Ø�q‹yØ—‘Ü#Ü +× 9Ñ 9¸.×:QÑ:QÓ RØ"fÐglÐfmð n$Ø$) 7Ð*IÈ.×J]ÑJ]ÐI^ð!`ôõð	ð ˆr&   zGchecking that a semantic model's entity labels are unique within itselfc                 óp  — g }t        d„ «      }| j                  D ].  }|j                  €Œ||j                     dz   ||j                  <   Œ0 |j                  «       D ]W  \  }}|dkD  sŒ|j	                  t        t        j                  | j                  «      d|› d|› d| j                  › �¬«      «       ŒY |S )Nc                   ó   — yr;   r   r   r&   r$   r<   zHSemanticModelLabelsRule._check_semantic_model_entities.<locals>.<lambda>^   r=   r&   r>   zAEntity labels must be unique within a semantic model. The label `r?   z entities on semantic model `r   )
r   Úentitiesr   rA   rB   r   r   r    r!   r"   )r5   r*   rC   Úentityr   rE   s         r$   Ú_check_semantic_model_entitiesz6SemanticModelLabelsRule._check_semantic_model_entitiesZ   sÌ   € ð )+ˆÜ.9¹)Ó.DˆØ$×-Ñ-ò 	LˆFØ�|‰|Ñ'Ø-9¸&¿,¹,Ñ-GÈ!Ñ-K�˜VŸ\™\Ò*ð	Lð )×.Ñ.Ó0ò 	‰LˆE�5Ø�q‹yØ—‘Ü#Ü +× 9Ñ 9¸.×:QÑ:QÓ RØ"cÐdiÐcjð kØ$˜gÐ%BÀ>×CVÑCVÐBWð!Yôõð	ð ˆr&   zHchecking that a semantic model's measure labels are unique within itselfc                 óp  — g }t        d„ «      }| j                  D ].  }|j                  €Œ||j                     dz   ||j                  <   Œ0 |j                  «       D ]W  \  }}|dkD  sŒ|j	                  t        t        j                  | j                  «      d|› d|› d| j                  › �¬«      «       ŒY |S )Nc                   ó   — yr;   r   r   r&   r$   r<   zHSemanticModelLabelsRule._check_semantic_model_measures.<locals>.<lambda>s   r=   r&   r>   zBMeasure labels must be unique within a semantic model. The label `r?   z measures on semantic model `r   )
r   Úmeasuresr   rA   rB   r   r   r    r!   r"   )r5   r*   rC   Úmeasurer   rE   s         r$   Ú_check_semantic_model_measuresz6SemanticModelLabelsRule._check_semantic_model_measureso   sÌ   € ð )+ˆÜ.9¹)Ó.DˆØ%×.Ñ.ò 	NˆGØ�}‰}Ñ(Ø.:¸7¿=¹=Ñ.IÈAÑ.M�˜WŸ]™]Ò+ð	Nð )×.Ñ.Ó0ò 	‰LˆE�5Ø�q‹yØ—‘Ü#Ü +× 9Ñ 9¸.×:QÑ:QÓ RØ"dÐejÐdkð lØ$˜gÐ%BÀ>×CVÑCVÐBWð!Yôõð	ð ˆr&   z8checking labels on semantic models and their sub objectsr'   c                 óú   — g }i }| j                   D ]g  }|t        j                  ||¬«      z  }|t        j                  |¬«      z  }|t        j	                  |¬«      z  }|t        j                  |¬«      z  }Œi |S )Nr7   )r5   )Úsemantic_modelsr4   r8   rF   rK   rP   )r'   r*   Úlabels_to_semantic_modelsr5   s       r$   r,   z)SemanticModelLabelsRule.validate_manifest„   s¡   € ð )+ˆØ46Ð!Ø/×?Ñ?ò 	lˆNØÔ-×CÑCØ-Ð?Xð Dó ñ ˆFð Ô-×NÑNÐ^lÐNÓmÑmˆFØÔ-×LÑLÐ\jÐLÓkÑkˆFØÔ-×LÑLÐ\jÐLÓkÑk‰Fð	lð ˆr&   N)r-   r.   r/   r0   r1   r   r   r   r2   r	   r   r8   rF   rK   rP   r   r,   r   r&   r$   r4   r4   0   s'  „ ÙCàÙÐHÓIðØ%ðØ8<¸SÀ#¸X¹ðà	�/Ñ	"òó Jó ðð  ÙÐaÓbð¸ð È8ÐTcÑKdò ó có ðð& ÙÐ^Ó_ð°}ð ÈÐRaÑIbò ó `ó ðð& ÙÐ_Ó`ð°}ð ÈÐRaÑIbò ó aó ðð& ÙÐOÓPðÐ->ð À8ÈOÑC\ò ó Qó ñr&   r4   c            	       ó¨   — e Zd ZdZe G d„ d«      «       Ze ed«      dede	e
ef   dee   fd„«       «       Ze ed	«      d
edee   fd„«       «       Zy)ÚEntityLabelsRulezDChecks that the entity labels are consistent across semantic models.c                   ó&   — e Zd ZU dZeed<   eed<   y)úEntityLabelsRule.EntityInfozAClass used in validating of entity labels across semantic models.Úsemantic_model_namer   N)r-   r.   r/   r0   r2   Ú__annotations__r   r&   r$   Ú
EntityInforW   —   s   … áOà Ó ØŒ
r&   rZ   zNChecking entities of the same name have the same label (or None for the label)r5   r   r   c                 ó  — g }| j                   D ]ø  }|j                  €Œ|j                  |vr9t        j	                  | j                  |j                  ¬«      ||j                  <   ŒW||j                     j                  |j                  k7  sŒ~|j                  t        t        j                  | j                  «      d|j                  › d| j                  › d|j                  › d||j                     j                  › d�	¬«      «       Œú |S )N)rX   r   zZEntities with the same name must have the same label or the label must be `None`. Entity `z` on semantic model `z` has label `z)` but the same entity on semantic model `r   r   )rI   r   r"   rU   rZ   rB   r   r   r    r!   rX   )r5   r   r*   rJ   s       r$   rK   z/EntityLabelsRule._check_semantic_model_entitiesž   sý   € ð
 )+ˆØ$×-Ñ-ò 	ˆFØ�|‰|Ñ'Ø—;‘; oÑ5Ü3C×3NÑ3NØ,:×,?Ñ,?ÀvÇ|Á|ð 4Oó 4�O F§K¡KÒ0ð % V§[¡[Ñ1×7Ñ7¸6¿<¹<ÓGØ—M‘MÜ'Ü$/×$=Ñ$=¸n×>UÑ>UÓ$Vð%/Ø/5¯{©{¨mÐ;PÐQ_×QdÑQdÐPeð f Ø &§¡˜~ð . Ø /°·±Ñ <× PÑ PÐQÐQRð%Tôõð	ð" ˆr&   z<Checking entity labels are consistent across semantic modelsr'   c                 ód   — g }i }| j                   D ]  }|t        j                  ||¬«      z  }Œ |S )Nr7   )rR   rU   rK   )r'   r*   Úentity_label_mapr5   s       r$   r,   z"EntityLabelsRule.validate_manifest·   sO   € ð )+ˆØCEÐà/×?Ñ?ò 	ˆNØÔ&×EÑEØ-Ð?Oð Fó ñ ‰Fð	ð
 ˆr&   N)r-   r.   r/   r0   r   rZ   r1   r   r   r   r2   r	   r   rK   r   r,   r   r&   r$   rU   rU   ”   sœ   „ ÙNà÷ð ó ðð ÙÐeÓfðØ%ðØ8<¸SÀ*¸_Ñ8Mðà	�/Ñ	"òó gó ðð. ÙÐSÓTð	Ð->ð 	À8ÈOÑC\ò 	ó Uó ñ	r&   rU   )ÚloggingÚcollectionsr   Údataclassesr   Útypingr   r   r   r   r	   Ú!dbt_semantic_interfaces.protocolsr
   r   r   Ú5dbt_semantic_interfaces.validations.validator_helpersr   r   r   r   r   Ú	getLoggerr-   Úloggerr   r4   rU   r   r&   r$   ú<module>rf      s�   ðÛ Ý #Ý !ß =Õ =ç VÑ V÷õ ð 
ˆ×	Ñ	˜8Ó	$€ôÐ5Ð6GÑHÈ'ÐRcÑJdô ô<aÐ<Ð=NÑOÐQXÐYjÑQkô aôH.Ð5Ð6GÑHÈ'ÐRcÑJdõ .r&   