ó
     ­œjU  ã                   ól  • S SK r S SKrS SKrS SKJr  S SKr\" \5      R                  5       R                  S   r	\R                  R                  S \" \	5      5        S SKJr  \R                  " \	S-  R!                  SS95      rSS jr " S	 S
\R&                  5      r\S:X  a  \R,                  " SS9  gg)é    N)ÚPathé   )Úvalidate_packzCHECK_RULES.jsonúutf-8©Úencodingc                 óì   • [         R                  " [        S-  R                  SS95      nUR	                  S5      nUR	                  SS 5        X!S'   SU-   US'   S	S
U (       a  SS0OSSSSSS.S.US'   U$ )Núfixtures/baseline_fixture.jsonr   r   Ú
fixture_idÚrights_statusÚfixture_refú
fixture://Úevidence_refÚREADYz9TEST-SENTINEL: bounded decision from the visible fixture.Úreviewútarget changeszconsumer changeszrights disputedzdecisive evidence unavailablezmethod cannot satisfy target)r   Ú	migrationÚ
escalationÚstopÚpivot©Úfinal_stateÚ	rationaleÚtriggersÚdecision)ÚjsonÚloadsÚHEREÚ	read_textÚpop)Úone_triggerÚfixtureÚfids      Úh/mnt/data/d3d001_l6_build/MAKNOW_LESSON_D3D-001_v1.0.0/lab/D3D-001-LAB1/learner/tests/test_pack_rules.pyÚbaseline_packr%      s™   € Ü�JŠJœÐ=Ñ=×HÑHÐRYÐHÐZÓ[€GØ�‰�LÓ!€CØ‡K�K� Ô%ØˆMÑØ(¨Ñ,€GˆNÑàØOÞ3>�XÐ.Ñ/Ø%Ð2DÐRcð  lKð  TrñE
ñ€GˆJÑð €Nó    c                   ó¼   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSr g) ÚPackRuleTestsé   c                 óR   • [        U[        5       Vs1 s H  o"S   iM	     sn$ s  snf )NÚcode)r   ÚRULES)ÚselfÚpackÚes      r$   ÚcodesÚPackRuleTests.codes   s%   € Ü#0°´uÔ#=Ó>Ò#=˜a�&”	Ñ#=Ñ>Ð>ùÒ>s   “$c                 óD   • U R                  / [        U[        5      5        g ©N)ÚassertEqualr   r,   )r-   r.   s     r$   ÚassertNoErrorsÚPackRuleTests.assertNoErrors"   s   € Ø×Ñ˜œ]¨4´Ó7Õ8r&   c                 ó6   • U R                  [        5       5        g r3   )r5   r%   ©r-   s    r$   Ú<test_actual_baseline_fixture_can_be_bound_without_answer_keyÚJPackRuleTests.test_actual_baseline_fixture_can_be_bound_without_answer_key%   s   € Ø×ÑœM›OÕ,r&   c                 óV   • U R                  SU R                  [        5       5      5        g )NÚE_DECISION_TRIGGERS)ÚassertNotInr0   r%   r8   s    r$   Ú)test_one_applicable_trigger_is_sufficientÚ7PackRuleTests.test_one_applicable_trigger_is_sufficient(   s   € Ø×ÑÐ.°·
±
¼=»?Ó0KÕLr&   c                 ój   • [        5       n0 US   S'   U R                  SU R                  U5      5        g )Nr   r   r<   ©r%   ÚassertInr0   ©r-   Úps     r$   Ú%test_missing_all_triggers_is_reportedÚ3PackRuleTests.test_missing_all_triggers_is_reported+   s-   € Ü
‹/ˆ°R˜1˜Z™=¨Ñ4Ø�‰Ð+¨T¯Z©Z¸«]Õ;r&   c                 óp   • [        S5      nSUS'   SUS'   U R                  SU R                  U5      5        g )NFzDOES-NOT-EXISTr   zfixture://DOES-NOT-EXISTr   ÚE_FIXTURE_REFrA   rC   s     r$   Ú$test_unknown_fixture_ref_is_rejectedÚ2PackRuleTests.test_unknown_fixture_ref_is_rejected/   s6   € Ü
˜Ó
ˆÐ1A  -Ñ 0ÐUoÀ1À^ÑCTØ�‰�o t§z¡z°!£}Õ5r&   c                 óz   • [        S5      oS   S==   S-  ss'   U R                  SU R                  U5      5        g )NFÚgeometryÚtriangle_countr   ÚE_FIXTURE_BINDINGrA   rC   s     r$   Ú-test_bound_fixture_value_mismatch_is_rejectedÚ;PackRuleTests.test_bound_fixture_value_mismatch_is_rejected3   s5   € Ü
˜Ó
ˆ *¡Ð.>Ó ?ÀÑ BÓ ?Ø�‰Ð)¨4¯:©:°a«=Õ9r&   c                 óx   • [        S5      nSUS   S   S   S'   U R                  SU R                  U5      5        g )NFÚUNAPPLIED_NON_UNIFORMrL   Úobject_transform_stater   Úscale_stateÚE_NONUNIFORM_SCALErA   rC   s     r$   Ú1test_positive_rejects_unapplied_non_uniform_scaleÚ?PackRuleTests.test_positive_rejects_unapplied_non_uniform_scale7   s<   € Ü
˜Ó
ˆÐ\s  *¡Ð.FÑ GÈÑ JÈ=Ñ YØ�‰Ð*¨D¯J©J°q«MÕ:r&   c                 ól   • [        S5      nSUS   S'   U R                  SU R                  U5      5        g )NFÚINCONSISTENT_FLIPPEDrL   Únormal_stateÚE_NORMAL_STATErA   rC   s     r$   Ú%test_positive_rejects_flipped_normalsÚ3PackRuleTests.test_positive_rejects_flipped_normals;   s1   € Ü
˜Ó
ˆÐ@V  *¡¨nÑ =Ø�‰Ð&¨¯
©
°1«Õ6r&   c                 óz   • [        S5      nSUS   S   S'   U R                  SS1U R                  U5      -  5        g )NFép  ÚtargetÚgeometry_budget_policyÚmax_trianglesrN   ÚE_TRIANGLE_BUDGET©r%   Ú
assertTruer0   rC   s     r$   Ú-test_positive_rejects_triangle_budget_overrunÚ;PackRuleTests.test_positive_rejects_triangle_budget_overrun?   s@   € Ü
˜Ó
ˆÐY]  (¡Ð,DÑ EÀoÑ Và�‰Ð,Ð-@ÐAÀDÇJÁJÈqÃMÑQÕRr&   c                 ól   • [        S5      nSUS   S'   U R                  SU R                  U5      5        g )NFÚNOT_CHECKEDrL   Úmanifold_stateÚ
E_MANIFOLDrA   rC   s     r$   Ú test_required_manifold_must_passÚ.PackRuleTests.test_required_manifold_must_passD   s0   € Ü
˜Ó
ˆÀ-  *¡Ð.>Ñ ?Ø�‰�l D§J¡J¨q£MÕ2r&   c                 ól   • [        S5      n/ US   S'   U R                  SU R                  U5      5        g )NFÚnaming_contractÚdecisive_object_namesÚE_NAMINGrA   rC   s     r$   Ú&test_positive_requires_naming_contractÚ4PackRuleTests.test_positive_requires_naming_contractH   s3   € Ü
˜Ó
ˆÐPR Ð"3Ñ 4Ð5LÑ MØ�‰�j $§*¡*¨Q£-Õ0r&   c                 ól   • [        S5      nSUS   S'   U R                  SU R                  U5      5        g )NFTÚinteroperability_evidenceÚexport_only_proofÚE_INTEROP_EVIDENCErA   rC   s     r$   Ú.test_export_only_is_not_interoperability_proofÚ<PackRuleTests.test_export_only_is_not_interoperability_proofL   s4   € Ü
˜Ó
ˆÐVZ Ð"=Ñ >Ð?RÑ SØ�‰Ð*¨D¯J©J°q«MÕ:r&   c                 ó’   • [        S5      oS   R                  S5        SUS   S'   U R                  SU R                  U5      5        g )NFr`   Úreference_scaleÚEVIDENCE_INCOMPLETEr   r   ÚE_MISSING_CRITICAL_POSITIVE)r%   r    r=   r0   rC   s     r$   Ú7test_non_success_can_preserve_missing_decisive_evidenceÚEPackRuleTests.test_non_success_can_preserve_missing_decisive_evidenceP   sB   € Ü
˜Ó
ˆ (¡§¡Ð0AÔ BÐcxÀAÀjÁMÐR_ÑD`Ø×ÑÐ6¸¿
¹
À1»ÕFr&   c                 óª   • [        S5      oS   R                  S5        U R                  U5      nU R                  SU5        U R	                  SU5        g )NFr   r   ÚE_DECISION_REQUIREDÚEXPECTED_READY)r%   r    r0   rB   r=   ©r-   rD   r0   s      r$   Ú-test_checker_does_not_choose_missing_decisionÚ;PackRuleTests.test_checker_does_not_choose_missing_decisionT   sH   € Ü
˜Ó
ˆ *¡× 1Ñ 1°-Ô @Ø—
‘
˜1“ˆØ�‰Ð+¨UÔ3Ø×ÑÐ)¨5Õ1r&   c                 ó‚   • [        S5      oS   R                  S5        U R                  SU R                  U5      5        g )NFr`   Úmanifold_requirementr}   ©r%   r    rB   r0   rC   s     r$   Ú5test_positive_requires_manifold_requirement_dimensionÚCPackRuleTests.test_positive_requires_manifold_requirement_dimensionZ   s1   € Ü
˜Ó
ˆ (¡§¡Ð0FÔ GØ�‰Ð3°T·Z±ZÀ³]ÕCr&   c                 ó‚   • [        S5      oS   R                  S5        U R                  SU R                  U5      5        g )NFÚ	modifiersÚdestructive_step_logr}   rˆ   rC   s     r$   Ú5test_positive_requires_destructive_step_log_dimensionÚCPackRuleTests.test_positive_requires_destructive_step_log_dimension^   s3   € Ü
˜Ó
ˆ +¡× 2Ñ 2Ð3IÔ JØ�‰Ð3°T·Z±ZÀ³]ÕCr&   c                 ó|   • [        S5      oR                  S5        U R                  SU R                  U5      5        g )NFÚknown_limitationsr}   rˆ   rC   s     r$   Ú2test_positive_requires_known_limitations_dimensionÚ@PackRuleTests.test_positive_requires_known_limitations_dimensionb   s-   € Ü
˜Ó
ˆ§¡Ð&9Ô :Ø�‰Ð3°T·Z±ZÀ³]ÕCr&   c                 ó|   • [        S5      oR                  S5        U R                  SU R                  U5      5        g )NFr   r}   rˆ   rC   s     r$   Ú6test_positive_requires_explicit_evidence_ref_dimensionÚDPackRuleTests.test_positive_requires_explicit_evidence_ref_dimensionf   s,   € Ü
˜Ó
ˆ§¡ nÔ 5Ø�‰Ð3°T·Z±ZÀ³]ÕCr&   c                 óN  • [         R                  " [        S-  R                  SS95      nUR	                  S5      o!R	                  SS 5        X!S'   SU-   US'   S	S
SS0S.US'   U R                  SU R                  U5      5        U R                  SU R                  U5      5        g )Nztransfer/transfer_fixture.jsonr   r   r   r   r   r   r   ÚHOLDz+TEST-SENTINEL; resolver compatibility only.r   r   r   r   rH   rN   )r   r   r   r   r    r=   r0   )r-   Útrr#   s      r$   Ú2test_actual_shipped_transfer_fixture_is_resolvableÚ@PackRuleTests.test_actual_shipped_transfer_fixture_is_resolvablej   s¬   € Ü�:Š:”tÐ<Ñ<×GÑGÐQXÐGÐYÓZˆØ�F‰F�<Ó ˆ§&¡&¨¸Ô">ÐRUÀ=Ñ@QÐjvÐwzÑjzÐWYÐZhÑWiØ&,Ð9fÐs{ð  }Mð  sNñ  Oˆˆ:‰Ø×Ñ˜¨$¯*©*°R«.Ô9Ø×ÑÐ,¨d¯j©j¸«nÕ=r&   c                 óÞ   • [        S5      nSUS'   SUS'   SUS   S'   S	US   S
'   SUS   S   S'   SUS   S'   U R                  U5      nU R                  SU5        U R                  SU5        g )NFzD3D001-MUT-MOBILEr   zfixture://D3D001-MUT-MOBILEr   ÚREALTIME_MOBILE_PREVIEWr`   Ú
target_useÚCONSTRAINED_NAMED_TARGET_ONLYÚtarget_constraint_scoper_   ra   rb   ÚREWORK_REQUIREDr   r   rH   rN   )r%   r0   r=   rƒ   s      r$   Ú5test_actual_mutation_files_are_resolvable_and_appliedÚCPackRuleTests.test_actual_mutation_files_are_resolvable_and_appliedq   sµ   € ä
˜Ó
ˆØ,ˆˆ-ÑÐ@]¨a°Ñ.?Ø";ˆˆ(‰�LÑ!ð  eD¸Q¸x¹[ÐIbÑ=cð  }Að  FGð  HPñ  FQð  Rjñ  Fkð  l{ñ  F|Ø%6ˆˆ*‰�mÑ$Ø�j‰j˜‹mˆØ×Ñ˜¨%Ô0°$×2BÑ2BÐCVÐX]Õ2^r&   c                 ó   • [         R                  " [        5      oS    Vs/ s H  o"S   S:w  d  M  UPM     snUS'   U R                  S[	        [        S5      U5       Vs1 s H  o3S   iM	     sn5        g s  snf s  snf )NÚrulesÚidÚR10ÚE_VISIBLE_RULESET_INCOMPLETEFr+   )ÚcopyÚdeepcopyr,   rB   r   r%   )r-   ÚbadÚrr/   s       r$   Útest_visible_rules_are_consumedÚ-PackRuleTests.test_visible_rules_are_consumedz   sl   € Ü�MŠMœ%Ó ˆ¸wº<Ó/Zº<°aÈTÉ7ÐTYÉ>·¹<Ñ/Z # g¡,Ø�‰Ð4Ì-ÔXeÐfkÓXlÐmpÔJqÓ6rÒJqÀQ¸´yÑJqÑ6rÕsùò 0[ùÚ6rs   ¡A6±A6Á A;
c                 óf   • [        S5      n/ US'   U R                  U R                  U5      S5        g )NFr‘   z7READY must not accept omitted fixture-known limitationsrd   rC   s     r$   ÚDtest_positive_rejects_blank_known_limitations_when_fixture_has_valueÚRPackRuleTests.test_positive_rejects_blank_known_limitations_when_fixture_has_value~   s-   € Ü
˜Ó
ˆ°r Ð"5Ñ 6Ø�‰˜Ÿ
™
 1›Ð'`Õar&   c                 ól   • [        S5      n/ US   S'   U R                  U R                  U5      S5        g )NFrŒ   r�   z?READY must not accept omitted fixture-known destructive historyrd   rC   s     r$   ÚBtest_positive_rejects_blank_destructive_log_when_fixture_has_valueÚPPackRuleTests.test_positive_rejects_blank_destructive_log_when_fixture_has_value‚   s1   € Ü
˜Ó
ˆÀr  +¡Ð/EÑ FØ�‰˜Ÿ
™
 1›Ð'hÕir&   c                 ól   • [        S5      n0 US   S'   U R                  U R                  U5      S5        g )NFr`   ra   z4READY must not accept omitted target budget evidencerd   rC   s     r$   ÚBtest_positive_rejects_blank_geometry_budget_when_fixture_has_valueÚPPackRuleTests.test_positive_rejects_blank_geometry_budget_when_fixture_has_value†   s1   € Ü
˜Ó
ˆÀb  (¡Ð,DÑ EØ�‰˜Ÿ
™
 1›Ð']Õ^r&   c                 óˆ   • [        S5      oS   S   R                  S5        U R                  U R                  U5      S5        g )NFr`   r{   r   z5READY must not accept partially bound reference scale)r%   r    re   r0   rC   s     r$   ÚBtest_positive_rejects_reference_scale_without_fixture_evidence_refÚPPackRuleTests.test_positive_rejects_reference_scale_without_fixture_evidence_refŠ   s8   € Ü
˜Ó
ˆ (¡Ð,=Ñ >× BÑ BÀ>Ô RØ�‰˜Ÿ
™
 1›Ð'^Õ_r&   c                 óv  • [         R                  " [        S-  R                  SS95      n[         R                  " [        S-  R                  SS95      nU R	                  US   S   [
        5        U R                  SUS   5        [        S5      nS US   S'   U R                  SU R                  U5      5        g )	Nr
   r   r   z$evidence/evidence_pack.template.jsonrL   Úmaterial_slot_countFr}   )
r   r   r   r   ÚassertIsInstanceÚintrB   r%   r=   r0   )r-   r"   ÚtemplaterD   s       r$   Ú<test_material_slot_count_is_shipped_as_noncritical_knowledgeÚJPackRuleTests.test_material_slot_count_is_shipped_as_noncritical_knowledgeŽ   s¨   € Ü—
’
œDÐ!AÑA×LÑLÐV]ÐLÐ^Ó_ˆÜ—’œTÐ"HÑH×SÑSÐ]dÐSÐeÓfˆØ×Ñ˜g jÑ1Ð2GÑHÌ#ÔNØ�‰Ð+¨X°jÑ-AÔBÜ
˜Ó
ˆÀT  *¡Ð.CÑ DØ×ÑÐ6¸¿
¹
À1»ÕFr&   c                 óz   • [        S5      oS   S==   S-  ss'   U R                  SU R                  U5      5        g )NFrL   r¼   r   rN   rA   rC   s     r$   Ú:test_material_slot_count_is_bound_when_learner_supplies_itÚHPackRuleTests.test_material_slot_count_is_bound_when_learner_supplies_it–   s5   € Ü
˜Ó
ˆ *¡Ð.CÓ DÈÑ IÓ DØ�‰Ð)¨4¯:©:°a«=Õ9r&   © N)!Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r0   r5   r9   r>   rE   rI   rO   rV   r\   rf   rl   rr   rx   r~   r„   r‰   rŽ   r’   r•   rš   r¢   r­   r°   r³   r¶   r¹   rÀ   rÃ   Ú__static_attributes__rÅ   r&   r$   r(   r(      sœ   † ò?ò9ò-òMò<ò6ò:ò;ò7òSò
3ò1ò;òGò2òDòDòDòDò>ò_òtòbòjò_ò`òGõ:r&   r(   Ú__main__é   )Ú	verbosity)T)r©   r   ÚunittestÚpathlibr   ÚsysÚ__file__ÚresolveÚparentsr   ÚpathÚinsertÚstrÚ
pack_rulesr   r   r   r,   r%   ÚTestCaser(   rÆ   ÚmainrÅ   r&   r$   Ú<module>rÚ      sž   ðÛ Û Û Ý Û 
áˆHƒ~×ÑÓ×'Ñ'¨Ñ*€Ø ‡�‡��‘3�t“9Ô Ý $à�
Š
�DÐ-Ñ-×8Ñ8À'Ð8ÐJÓK€ôô z:�H×%Ñ%ô z:ðx ˆzÓ˜8Ÿ=š=°1Ó5Ðr&   