Ë
    Ìi¿  ã                   óˆ   — d dl mZ d dl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mZmZmZmZmZ  G d„ dee   ee   «      Zy)	é    )Údefaultdict)ÚDefaultDictÚGenericÚListÚSequence)ÚSemanticManifestT)ÚSemanticModelReference)ÚFileContextÚSemanticManifestValidationRuleÚSemanticModelContextÚSemanticModelElementTypeÚValidationErrorÚValidationIssueÚvalidate_safelyc            
       ó|   — e Zd ZdZe ed¬«      dedee   fd„«       «       Z	edede
ee
eee   f   f   fd„«       Zy)	ÚElementConsistencyRuleaï  Checks that elements in semantic models with the same name are of the same element type across the model.

    This reduces the potential confusion that might arise from having an entity named `country` and a dimension
    named `country` while allowing for things like the `user` entity to exist in multiple semantic models. Note not
    all element types allow duplicates, and there are separate validation rules for those cases. See, for example,
    the SemanticModelMeasuresUniqueRule.
    z@running model validation ensuring model wide element consistency)Úwhats_being_doneÚsemantic_manifestÚreturnc                 ó  — g }t         j                  | ¬«      }|j                  «       D ��ci c]  \  }}t        |«      dkD  sŒ||“Œ }}}|j                  «       D ]˜  \  }}t	        d„ |j                  «       D «       «      D �cg c]  }t        |«      ‘Œ }	}|	D ]X  }
||
   }|D �ch c]  }|j                  j                  ’Œ }}|d   }|j                  t        |d|› d|› d|
› d|	› d	�	¬
«      «       ŒZ Œš |S c c}}w c c}w c c}w )N)r   é   c              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N)Úvalue)Ú.0Úks     úr/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt_semantic_interfaces/validations/element_const.pyú	<genexpr>z;ElementConsistencyRule.validate_manifest.<locals>.<genexpr>%   s   è ø€ ÒEnÐRSÀaÇgÅgÑEnùs   ‚r   zIn semantic models z, element `z` is of type z, but it is used as types z across the model.)ÚcontextÚmessage)r   Ú_get_element_name_to_typesÚitemsÚlenÚsortedÚkeysr   Úsemantic_modelÚsemantic_model_nameÚappendr   )r   ÚissuesÚelement_name_to_typesÚnameÚtype_mappingÚinvalid_elementsÚelement_nameÚtype_to_contextÚvÚ
types_usedÚelement_typeÚsemantic_model_contextsÚctxÚsemantic_model_namesÚsemantic_model_contexts                  r   Úvalidate_manifestz(ElementConsistencyRule.validate_manifest   sE  € ð ˆÜ 6× QÑ QÐduÐ QÓ vÐà9N×9TÑ9TÓ9V÷
Ù#5 4¨ÔZ]Ð^jÓZkÐnoÓZoˆD�,Ñð
Ðñ 
ð .>×-CÑ-CÓ-Eò 	Ñ)ˆL˜/ä?EÑEnÐWf×WkÑWkÓWmÔEnÓ?nÖo¸!Ô2°1Õ5ÐoˆJÐoØ *ò 
�Ø*9¸,Ñ*GÐ'ØZqÖ'rÐSV¨×(:Ñ(:×(NÓ(NÐ'rÐ$Ð'rØ)@ÀÑ)CÐ&Ø—‘Ü#Ø 6Ø"5Ð6JÐ5KÈ;ÐWcÐVdÐdqØ'˜.Ð(BÀ:À,ÐN`ð!bôõñ	
ð	ð ˆùó'
ùò pùò (ss   ¬C8ÁC8ÂC>Â%Dc                 óŒ  — t        d„ «      }| j                  D �]'  }t        t        j                  |j
                  ¬«      t        |j                  ¬«      ¬«      }|j                  r@|j                  D ]1  }||j                     t        j                     j                  |«       Œ3 |j                  r@|j                  D ]1  }||j                     t        j                     j                  |«       Œ3 |j                  sŒè|j                  D ]1  }||j                     t        j                     j                  |«       Œ3 �Œ* |S )zgCreate a mapping of element names in the semantic manifest to types with a list of associated contexts.c                  ó    — t        t        «      S r   )r   Úlist© ó    r   ú<lambda>zCElementConsistencyRule._get_element_name_to_types.<locals>.<lambda>;   s   € ¤¬DÓ 1€ r<   )Úmetadata)r'   )Úfile_contextr&   )r   Úsemantic_modelsr   r
   Úfrom_metadatar>   r	   r+   Úmeasuresr   ÚMEASUREr(   Ú
dimensionsÚ	DIMENSIONÚentitiesÚENTITY)r   Úelement_typesr&   r6   ÚmeasureÚ	dimensionÚentitys          r   r!   z1ElementConsistencyRule._get_element_name_to_types4   s.  € ô Ñ1Ó2ð 	ð 0×?Ñ?ó 	oˆNÜ%9Ü(×6Ñ6À×@WÑ@WÔXÜ5È.×J]ÑJ]Ô^ô&Ð"ð ×&Ò&Ø-×6Ñ6ò q�GØ! '§,¡,Ñ/Ô0H×0PÑ0PÑQ×XÑXÐYoÕpðqà×(Ò(Ø!/×!:Ñ!:ò u�IØ! )§.¡.Ñ1Ô2J×2TÑ2TÑU×\Ñ\Ð]sÕtðuà×&Ó&Ø,×5Ñ5ò o�FØ! &§+¡+Ñ.Ô/G×/NÑ/NÑO×VÑVÐWmÕnòoð	oð Ðr<   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r   r   r7   r   Ústrr   r   r   r!   r;   r<   r   r   r      s}   „ ñð ÙÐ&hÔiðÐ->ð À8ÈOÑC\ò ó jó ðð0 ðØ,ðà	�S˜+Ð&>ÀÐEYÑ@ZÐ&ZÑ[Ð[Ñ	\òó ñr<   r   N)Úcollectionsr   Útypingr   r   r   r   Ú!dbt_semantic_interfaces.protocolsr   Ú"dbt_semantic_interfaces.referencesr	   Ú5dbt_semantic_interfaces.validations.validator_helpersr
   r   r   r   r   r   r   r   r;   r<   r   ú<module>rW      s?   ðÝ #ß 7Ó 7å ?Ý E÷÷ ñ ô9Ð;Ð<MÑNÐPWÐXiÑPjõ 9r<   