
    4jI"                       d Z ddlmZ ddlZddlmc mZ ddl	Z
ddlZddlmZ ddlZ ee      j!                         j"                  d   Z ee      ej(                  vr"ej(                  j+                  d ee              ej,                  d      d        Z ej,                  d      d	        Zd
 Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(y)u  regression — task-2553+60 LIVE READ-ONLY OPERATIONAL PILOT.

9-stage 실 entrypoint 자동 결선을 *증명* 한다. 본 테스트는 실
entrypoint 를 직접 호출(mock-only/문서-only 금지)하며 read-only —
write 0, 실 dispatch 0, ledger byte-0 (do_write=False).

mock-only FAIL: 음성 케이스로 (i) 미매핑 goal_type fail-closed,
(ii) executor self key callback 구조적 차단, (iii) dead-man/fallback
진행 트리거 하드 FAIL, (iv) self-chain QUARANTINED 를 검증한다.
    )annotationsN)Path   module)scopec                 
   t         j                  j                  dt        dz        } g }| }| r| j                  }|}|sdddt        j                         v st        j                  |       rt        j                  |       ndiz  }|j                  |       | rlddt        j                         v st        j                  |       rt        j                  |       ndt        j                        dz  }|j                  |       t        j                  |d      i z  }d	d
|iz  }t        t        j                  |            d x}x}}t         j                  j                  |       }| j                  j                  |       |S )N
_p60_pilot+scripts/run_operational_pilot_2553plus60.py%(py2)spy2spec#%(py6)s
{%(py6)s = %(py4)s.loader
}py4py6r   assert %(py9)spy9)	importlibutilspec_from_file_locationROOTloader@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanationmodule_from_specexec_module)	r   @py_assert1@py_assert0@py_assert5@py_format3@py_format7@py_format8@py_format10mods	            I/home/jay/workspace/tests/regression/test_operational_pilot_2553plus60.pypilotr-      s    >>11dJJD  44DKKK444DDK
..
)
)$
/CKKC J    c                &    | j                  d      S )NF)do_write)	run_pilot)r-   s    r,   runr2   $   s     ??E?**r.   c                   | j                   }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}d	D ]  }| j                  }||v}|st        j                  d
|fd||f      dt        j                         v st        j
                  |      rt        j                  |      nddt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}} y)u=   §6 expected_files allowlist = 정확히 회장 명세 14종.))memory/events/task-2553+60.pilot-run.jsonz0memory/events/task-2553+60.selected-profile.jsonz2memory/events/task-2553+60.gate-hold-decision.jsonz0memory/events/task-2553+60.execution-result.jsonz<memory/events/task-2553+60.independent-collector-result.jsonz9memory/events/task-2553+60.runtime-event-loop-result.jsonz.memory/events/task-2553+60.enactor-result.json3memory/events/task-2553+60.consolidated-result.jsonr
   5tests/regression/test_operational_pilot_2553plus60.pyz(memory/events/task-2553+60.decision.json&memory/events/task-2553+60.result.jsonmemory/reports/task-2553+60.md)memory/events/callback_4tuple_index.jsonl==)z6%(py2)s
{%(py2)s = %(py0)s.EXPECTED_FILES
} == %(py5)sr-   py0r   py5assert %(py7)spy7N)r
   r6   r8   r9   )not in)z6%(py0)s not in %(py4)s
{%(py4)s = %(py2)s.EMIT_FILES
}static)r=   r   r   assert %(py6)sr   )
EXPECTED_FILESr   _call_reprcomparer   r   r   r   r    r!   
EMIT_FILES)	r-   r$   @py_assert4@py_assert3@py_format6r)   rB   @py_format5r(   s	            r,   #test_expected_files_allowlist_exactrK   *   sM     $  $    $                  $      " . #---v-----v-------v---v------U---U-----------.r.   c                J   | j                   }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}| j                  }d	}||k(  }|st        j                  d|fd
||f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}| j                   }| j                  }||k7  }|st        j                  d|fd||f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)uA   callback owner = 독립 ANU key; executor self key 절대 금지.c119085addb0f8b7r:   )z8%(py2)s
{%(py2)s = %(py0)s.ANU_CALLBACK_KEY
} == %(py5)sr-   r<   r?   r@   Na999e2ea4c06d2fb)z9%(py2)s
{%(py2)s = %(py0)s.EXECUTOR_SELF_KEY
} == %(py5)s!=)z_%(py2)s
{%(py2)s = %(py0)s.ANU_CALLBACK_KEY
} != %(py6)s
{%(py6)s = %(py4)s.EXECUTOR_SELF_KEY
})r=   r   r   r   zassert %(py8)spy8)
ANU_CALLBACK_KEYr   rE   r   r   r   r   r    r!   EXECUTOR_SELF_KEY)	r-   r$   rG   rH   rI   r)   r&   r(   @py_format9s	            r,   *test_callback_owner_is_independent_anu_keyrU   F   s   !!7%77!%77777!%777777757775777!777%77777777""8&88"&88888"&888888858885888"888&88888888!!<U%<%<<!%<<<<<!%<<<<<<<5<<<5<<<!<<<<<<U<<<U<<<%<<<<<<<<r.   c                   | d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|d
   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|d   j                         D ]  \  }}d}||u }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }
t        j                  | d      dz   d|
iz  }t        t        j                  |            d	x}	} y	)uA   9-stage 가 한 입력 short read-only goal 으로 자동 결선.
evaluationauto_chained_9_stageTisz%(py1)s is %(py4)spy1r   rC   r   N
all_passedchecks)z%(py0)s is %(py3)sokr=   py3z failedz
>assert %(py5)sr>   )
r   rE   r   r    r!   itemsr   r   r   _format_assertmsg)r2   evr%   rH   @py_assert2rJ   r(   namer`   r$   @py_format4rI   s               r,   test_nine_stage_auto_chainedri   M   s8   	\	B$%--%----%---%----------l#t#t####t######t#######xL&&( ,b+rTz+++rT++++++r+++r+++T+++dV7+++++++,r.   c                   | d   d   }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }|j
                  }d} ||      }d}	||	k7  }
|
st        j                  d|
fd||	f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d
x}x}x}x}x}
}	y
)uF   STAGE1 — 회장 미지정 gate/HOLD/allowed/forbidden 자동 산출.stagesstage1statusRESOLVEDr:   z%(py1)s == %(py4)sr\   rC   r   Nprofile_boundTrY   r[   unknown_goal_type_resolutionrO   )zJ%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.get
}(%(py5)s)
} != %(py10)s)r]   rb   r>   r@   py10zassert %(py12)spy12)r   rE   r   r    r!   get)r2   s1r%   rH   rf   rJ   r(   rG   @py_assert6@py_assert9@py_assert8@py_format11@py_format13s                r,   6test_stage1_profile_auto_resolved_without_chair_detailr{   V   sE   	Xx	 Bh<%:%<:%%%%<:%%%<%%%:%%%%%%%o&$&$&&&&$&&&&&&$&&&&&&&,-I-11I(I1(;IzI;zIIII;zIII-III1III(III;IIIzIIIIIIIIr.   c                   | d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uK   STAGE2 — self key callback 구조적 차단(CallbackRegistrationBlocked).rk   stage2anu_key_registration_allowedTrY   r[   r\   rC   r   Nself_key_registration_allowedF2self_key_assert_raised_CallbackRegistrationBlockedr   rE   r   r    r!   )r2   s2r%   rH   rf   rJ   r(   s          r,   %test_stage2_anu_key_contract_enforcedr   _   s	   	Xx	 B,-55-5555-555-5555555555-.7%7.%7777.%777.777%7777777BCKtKCtKKKKCtKKKCKKKtKKKKKKKr.   c                   | d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)u>   STAGE4 — executor self collector = SELF_COLLECTOR_FORBIDDEN.rk   stage4!executor_self_collector_forbiddenTrY   r[   r\   rC   r   Nindependent_anu_collector_okr   )r2   s4r%   rH   rf   rJ   r(   s          r,   -test_stage4_executor_self_collector_forbiddenr   g   s    	Xx	 B12:d:2d::::2d:::2:::d:::::::,-55-5555-555-5555555555r.   c                   | d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uD   STAGE5 — authoritative 는 독립 ANU 만; self-chain QUARANTINED.rk   stage5authoritative_passTrY   r[   r\   rC   r   Nself_chain_quarantinedexecutor_self_collectorFr   )r2   s5r%   rH   rf   rJ   r(   s          r,   @test_stage5_independent_anu_authoritative_self_chain_quarantinedr   n   s	   	Xx	 B"#+t+#t++++#t+++#+++t+++++++&'/4/'4////'4///'///4///////'(1E1(E1111(E111(111E1111111r.   c                    | d   d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}d}|d   d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}y)uu   STAGE5 — +58 기준 (b) NON_BLOCKING schema-valid·binding 일치 →
    OPERATIONAL_PASS (DUPLICATE-only 아님).rk   r   fallback_acceptancenon_blocking_mark_schema_validTrY   r[   r\   rC   r   Nnon_blocking_mark_errorsr:   ro   semantic_binding_okverdictOPERATIONAL_PASSbsatisfied_criterioninz%(py1)s in %(py4)sr   )r2   fbr%   rH   rf   rJ   r(   s          r,   7test_stage5_plus58_fallback_acceptance_operational_passr   v   s    
Xx	 !6	7B./747/47777/4777/77747777777()/R/)R////)R///)///R///////#$,,$,,,,$,,,$,,,,,,,,,,i=#9'99#'99999#'9999#999'999999996"Y- 56636666636666366666666666r.   c                   | d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uD   STAGE6 — +53 durable-success additive write-back (read-only eval).rk   stage6durable_successTrY   r[   r\   rC   r   Nwriteback_classification)DURABLE_SUCCESS_WRITTENWRITEBACK_IDEMPOTENT_SKIPr   r   write_performedFr   )r2   s6r%   rH   rf   rJ   r(   s          r,   (test_stage6_durable_success_writeback_53r      s;   	Xx	 B (D( D(((( D((( (((D(((((((()  . ) .   ) .    *   .        )E) E)))) E))) )))E)))))))r.   c                   | d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uP   STAGE7 — registry append 즉시 감지; dead-man 진행 트리거 하드 FAIL.rk   stage7detected_durable_successTrY   r[   r\   rC   r   Nforbidden_trigger_negative	hard_fail%dead_man_signal_observed_not_promotedr   )r2   s7r%   rH   rf   rJ   r(   negs           r,   0test_stage7_loop_detects_event_deadman_forbiddenr      s   	Xx	 B()1T1)T1111)T111)111T1111111
)
*C{#t#t####t######t#######67?4?74????74???7???4???????r.   c                   | d   d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|d   d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}y
)uJ   STAGE8 — proposal-only·additive; fallback 진행 트리거 하드 FAIL.rk   stage8actual_write_performedFrY   r[   r\   rC   r   Nauto_executedr   r   Tr   )r2   s8r%   rH   rf   rJ   r(   s          r,   4test_stage8_enactor_proposal_only_fallback_forbiddenr      s   	Xx	 B&'050'50000'5000'00050000000o'%'%''''%''''''%'''''''*+K8@D@8D@@@@8D@@@8@@@D@@@@@@@r.   c                    t        |       }|d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}d
}|d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)uQ   self-chain 산출은 영구 비권위 — authoritative 는 독립 ANU collector.r5   self_chain_authoritativeFrY   r[   r\   rC   r   N%DEFERRED_TO_INDEPENDENT_ANU_COLLECTORauthoritative_selectionr   r   _buildr   rE   r   r    r!   )r2   artcrr%   rH   rf   rJ   r(   s           r,   !test_self_chain_not_authoritativer      s    
+C	B	CB()2U2)U2222)U222)222U22222222 
$%2%  2%   3    	&      r.   c                6   t        |       }|d   }|d   }|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}d
}|d   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d   d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)uF   회장 §4(2) — team result contract + subagent usage ledger 강제.r7   subagent_usage_ledgersubagents_usedr:   ro   r\   rC   r   Nu   subagent 미사용declarationr   r   external_boundary_contractteam_result_contractTrY   r[   'executor_self_dispatch_delegation_countr   r   )	r2   r   resledr%   rH   rf   rJ   r(   s	            r,   "test_subagent_usage_ledger_presentr      s   
+C
6
7C
%
&C &B& B&&&& B&&& &&&B&&&&&&&53}#55#55555#5555555#55555555+,-CDLLDLLLLDLLLDLLLLLLLLLL()5	
 		
 	
 	
 	 
 		
 
  	   
   r.   c                   t        |       }|d   }|d   }|d   }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t	        t        j
                  |	            dx}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t	        t        j
                  |	            dx}x}}|d   d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t	        t        j
                  |	            dx}x}}|d   }
|
d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t	        t        j
                  |	            dx}x}}t        d |
d   D              }g d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}}y)uP   회장 §4(1~3) 필수 포함 — fallback 기준·subagent ledger·+58 backlog.r5   acceptance_required_inclusions 1_fallback_after_durable_successfallback_acceptance_verdictr   r:   ro   r\   rC   r   Nduplicate_only_is_not_passTrY   r[   &2_team_result_contract_subagent_ledgerr   3_plus58_codex_microfix_backlogblockingFc              3  &   K   | ]	  }|d      yw)severityN ).0is     r,   	<genexpr>z6test_acceptance_required_inclusions.<locals>.<genexpr>   s     41:4s   rc   )HIGHMEDIUMr   )z%(py0)s == %(py3)ssevra   zassert %(py5)sr>   )
r   r   rE   r   r    r!   sortedr   r   r   )r2   r   r   inca1r%   rH   rf   rJ   r(   blr   r$   rh   rI   s                  r,   #test_acceptance_required_inclusionsr      s   
+C	B	CB
-
.C	/	0B+,B0BB,0BBBBB,0BBBB,BBB0BBBBBBBB*+3t3+t3333+t333+333t3333333789IJPbPJbPPPPJbPPPJPPPbPPPPPPP	.	/Bj>"U">U"""">U""">"""U"""""""
474
4C..3.....3.......3...3...........r.   c                	   t        |      }|d   }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d
   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}t        dd      D ])  }	|d   d|	    d   }
g }d}||
v }|}|sd}||
v }|}|sd}||
v }|}|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }dd|iz  }|j                  |       |st        j                  dfd|
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }dd|iz  }|j                  |       |st        j                  dfd|
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }dd |iz  }|j                  |       t        j                  |d      i z  }d!d"|iz  }t	        t        j
                  |            d	x}x}x}x}x}x}x}}, | j                  }t        |t              }|sd#d$t        j                         v st        j                  t              rt        j                  t              nd$d%t        j                         v st        j                  |       rt        j                  |       nd%t        j                  |      d&t        j                         v st        j                  t              rt        j                  t              nd&t        j                  |      d'z  }t	        t        j
                  |            d	x}}y	)(uO   mock-only FAIL — 실 entrypoint 가 호출됨을 증명 (문서-only 금지).r4   	mock_onlyFrY   r[   r\   rC   r   Ndocumentation_only   	   rk   stagereal_entrypointanu_v3z	dispatch.zscripts.r   )z%(py3)s in %(py5)sep)rb   r>   z%(py7)sr@   )z%(py10)s in %(py12)s)rr   rs   z%(py14)spy14)z%(py17)s in %(py19)s)py17py19z%(py21)spy21zassert %(py24)spy24zXassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.MockOnlyError
}, %(py4)s)
}
issubclassr-   RuntimeError)r=   r]   rb   r   r   )r   r   rE   r   r    r!   ranger   r   r   r   r   MockOnlyErrorr   r   )r-   r2   r   prr%   rH   rf   rJ   r(   r   r   r$   rG   rw   @py_assert11@py_assert16@py_assert18rI   r)   rz   @py_format15@py_format20@py_format22@py_format23@py_format25r&   s                             r,   /test_mock_only_is_fail_real_entrypoint_requiredr      s   
+C	8	9Bk?#e#?e####?e###?###e#######"#,u,#u,,,,#u,,,#,,,u,,,,,,,1a[ G]U1#;'(9:FxFx2~FF!2FjFjB6FFFFFx2FFFxFFFFFF2FFF2FFFFFFFFFFFFFFFFFFFFFFFFFFFjBFFFjFFFFFFBFFFBFFFFFFFFFFFFFFFG ))8:)<88888888:888:888888e888e888)888888<888<8888888888r.   c                (   t         j                  j                  dt        dz        }g }|}|r|j                  }|}|sdddt        j                         v st        j                  |      rt        j                  |      ndiz  }|j                  |       |rlddt        j                         v st        j                  |      rt        j                  |      ndt        j                        dz  }|j                  |       t        j                  |d      i z  }d	d
|iz  }t        t        j                  |            d x}x}}t         j                  j                  |      }	|j                  j                  |	       |	j!                  |       S )N_p60_pilot_br
   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   _build_artifacts)
r2   r   r$   r%   r&   r'   r(   r)   r*   r+   s
             r,   r   r      s    >>11LLD  44DKKK444DDK
..
)
)$
/CKKC $$r.   ))__doc__
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   importlib.utilr   syspathlibr   pytest__file__resolveparentsr   strpathinsertfixturer-   r2   rK   rU   ri   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r,   <module>r     s   	 #     
  H~''*t9CHHHHOOAs4y! h   h+  +
.8=,JL627*@A /9%r.   