
    4j*              
      .   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ZddlZddlmZ ddlZ ee      j#                         j$                  j$                  j$                  Z ee      ej*                  v r!ej*                  j-                   ee             ej*                  j/                  d ee             ddlmZmZmZmZmZ ddlmZm Z m!Z!m"Z"m#Z# edz  Z$edz  d	z  Z%edz  d	z  Z&ed
z  dz  Z'e%dz  Z(edz  dz  dz  Z)e$dz  Z*dZ+dZ,dZ-dZ.d3dZ/d4dZ0d5dZ1 ejd                  d      d        Z3d Z4d Z5ejl                  jo                  ddddd id!d"fd#ddi d!d$fd%ddd&id!d'fg      d(        Z8d) Z9d* Z:d+ Z;d, Z<d- Z=d. Z>d/ Z?d0 Z@d1 ZAd2 ZBy)6u\  tests/regression/test_dispatch_profile_selection_2553plus38.py

task-2553+38 — TRACK A: profile engine → dispatch selection 연결 regression.

Spec: memory/tasks/task-2553+38.md
(sha256 643ae31b0d12d225603e9e81fcd961023dcbe4ced41d88908271f014d651c313).

§3 검증:
  1. 정상 selection (SELECTED, profile auto-bound, engine read-only 소비)
  2. profile 부재·mismatch → 안전 거부(SELECTION_REFUSED, 자동 적용 0)
  3. engine HOLD → HOLD_FOR_CHAIR 전파 (자동 적용 0, fail-closed)
  4. C1 engine byte-0 (anu_v3/policy_profile_engine.py sha256 무변)
  5. +33 정본 API(parse_goal_request / resolve_policy) 무회귀 (직접 호출)
  6. dispatch lifecycle 무파괴 (seam 순수 — 파일 write 0, profile mutation 0,
     예외 비전파, 멱등)
  7. seam 산출이 dispatch_profile_selection.schema.json 충족
  8. fixture 전 케이스 expect 일치
  9. live /home/jay/workspace git tracked HEAD/branch/ref 전후 assertEqual
     (§5 repo root 기준 — 신규 untracked 산물은 위반 아님)

모든 테스트 100% offline — network / git mutation / GitHub API 호출 0.
    )annotationsN)Path)SELECTION_SCHEMA_IDDispatchSelectionRequestbuild_selection_requestrun_dispatch_profile_selectionselect_profile_for_dispatch)PolicyEngineErrorPolicyResolutionparse_goal_requestresolve_policyvalidate_against_metaschemasmemorypolicy_profilesanu_v3zpolicy_profile_engine.pyz$test_only_hardening_pr_merge_v1.jsonfixturesztask-2553+38.cases.jsonz&dispatch_profile_selection.schema.json@2363e291a0a43884892f5e554f115481a077322bd5caa3000fb75bf5b72bc6be@7e161d7dd579aae025d9c2c202e9f226839dcbbfdea312cb55f624e4a6582a13(20456b5f83fc039f2fd6f50f4b94095c29b41bfbz%task/task-2553p1-f1-clean-replacementc                d    t        j                  | j                               j                         S )N)hashlibsha256
read_bytes	hexdigest)ps    R/home/jay/workspace/tests/regression/test_dispatch_profile_selection_2553plus38.py_sha256r   H   s     >>!,,.)3355    c                     t        j                  ddt        t              g| ddd      j                  j                         S )Ngit-CTcapture_outputtextcheck)
subprocessrunstr	WORKSPACEstdoutstrip)argss    r   _gitr.   L   s:    >>	c)n,t,$d fUUWr   c                 &    t         t        t        dS )N)profile_json_dirprofile_schema_dir
schema_dir)PROFILE_JSON_DIRPROFILE_SCHEMA_DIR
SCHEMA_DIR r   r   _dirsr7   S   s    ,0  r   module)scopec                 Z    t        j                  t        j                  d            d   S )Nutf-8encodingcases)jsonloadsFIXTURE	read_textr6   r   r   r>   r>   [   s$    ::g'''9:7CCr   c                 B   t        t        ddd      fi t               } | 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}||u }|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}||u }|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                  }|syddt        j                         v st	        j                  |       rt	        j                  |       ndt	        j                  |      dz  }t        t	        j                  |            d }| 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   }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}||k(  }	|	slt	        j
                  d|	fd||f      t	        j                  |      t	        j                  |      dz  }
dd|
iz  }t        t	        j                  |            d x}x}	}y )Nt1zconnect engine to dispatchtest_only_hardening_pr_merge_v1)goal_idgoal_statementpolicy_profile_nameSELECTED==z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)sselpy0py2py5assert %(py7)spy7Tis)z5%(py2)s
{%(py2)s = %(py0)s.profile_bound
} is %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.auto_apply
} is %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.profile_id
} == %(py5)sz8assert %(py2)s
{%(py2)s = %(py0)s.gate_condition_names
}rO   rP   none)zA%(py2)s
{%(py2)s = %(py0)s.dispatch_lifecycle_effect
} == %(py5)s
profile_idz%(py1)s == %(py4)spy1py4assert %(py6)spy6status)r	   r   r7   r_   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationprofile_bound
auto_applyrX   gate_condition_namesdispatch_lifecycle_effectselection_binding)rM   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_format3b@py_assert0@py_assert2@py_format5@py_format7s               r   #test_normal_selection_binds_profilerx   a   sQ   
% 7 A	
 'C ::##:####:######3###3###:##########$$$$$$$$$$$$3$$$3$$$$$$$$$$$$$>>!T!>T!!!!>T!!!!!!3!!!3!!!>!!!T!!!!!!!>>>>>>>>>>>>>>>>>>>3>>>3>>>>>>>>>>>>>>>#########3###3##########((2F2(F2222(F22222232223222(222F2222222A\???????????????????????????X;$*$;*$$$$;*$$$;$$$*$$$$$$$r   c                    ddddid} t        | fi t               }|j                         }t        | fi t               }|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   }||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   }||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   }||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   }||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   }||k(  }|slt	        j
                  d|fd	||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            dx}x}}y)ul   seam binding == engine 정본 어댑터(to_coordinator_binding) 동치
    (engine read-only 소비 증거).t2xnamerE   rF   rG   policy_profiler_   rI   rJ   rY   rZ   r]   r^   Nrj   hold_trigger_conditionsallowed_actionsforbidden_actionscompletion_packet_meta_ref)	r   r7   to_coordinator_bindingr   r`   ra   re   rf   rg   )	grresengrM   rt   ro   ru   rv   rw   s	            r   0test_selection_binding_matches_engine_resolutionr   u   sf    !#DE
B
 
'uw
'C

$
$
&C
(
7uw
7Cx=&J&=J&&&&=J&&&=&&&J&&&&&&&%&E#.D*EE&*EEEEE&*EEEE&EEE*EEEEEEEE()KS1J-KK)-KKKKK)-KKKK)KKK-KKKKKKKK !;S):%;;!%;;;;;!%;;;;!;;;%;;;;;;;;"#?s+>'??#'?????#'????#???'????????+,Q4P0QQ,0QQQQQ,0QQQQ,QQQ0QQQQQQQQr   zraw,codear{   r|   no_such_profile_xyzr}   profile_load_fail)*   selection_request_not_mapping%selection_policy_profile_name_missing rE   goal_request_schema_failc                z   t        | fi t               }|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	}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }||k(  }|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  }	t        t        j                  |	            d x}}|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 )Nr_   SELECTION_REFUSEDrJ   rY   rZ   r]   r^   rh   FrT   z%(py1)s is %(py4)sri   refusal_codez%(py1)s == %(py3)scoder[   py3assert %(py5)srQ   rk   rW   )
r   r7   r`   ra   re   rf   rg   rb   rc   rd   )
rawr   drt   ro   ru   rv   rw   @py_format4rp   s
             r   'test_absent_or_mismatch_is_safe_refusalr      s    	's6eg6AX;---;-----;----;-----------_&&&&&&&&&&&&&&&&&&&\?#e#?e####?e###?###e#######^$$$$$$$$$$$$$$$$$$$$$$$$()3V3)V3333)V333)333V3333333r   c                     	 t        ddddidfi t                y# t        $ r"} t        j                  d|        Y d} ~ yd} ~ ww xY w)uH   seam 은 engine 예외를 dispatch lifecycle 로 전파하지 않는다.r   r{   r|   r   r}   z%seam leaked exception into dispatch: N)r   r7   	Exceptionpytestfail)es    r   )test_refusal_does_not_raise_into_dispatchr      s[    C&s &(=>@	LCH7	L  C;A5ABBCs    	AAAc                 >   t        ddddidgdfi t               } | 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}||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}||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}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nh1z!boundary deny contradicts allowedr|   rE   zforbid:gate_evaluate)rF   rG   r~   boundaryr_   HOLD_FOR_CHAIRrJ   rY   rZ   r]   r^   rh   FrT   r   ri   r   engine_hold_for_chairengine_decision)r   r7   r`   ra   re   rf   rg   )r   rt   ro   ru   rv   rw   s         r   )test_engine_hold_propagated_no_auto_applyr      s   &A%'HI/0		
	 '	A X;***;*****;****;***********_&&&&&&&&&&&&&&&&&&&\?#e#?e####?e###?###e#######^7 77 77777 7777777 77777777)=-==)-=====)-====)===-========r   c                    t        t              } | t        k(  }|s7t        j                  d|fd| t        f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |       dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} }y )	NrJ   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr   	ENGINE_PYENGINE_SHA256_BASELINE)rO   r[   r   rQ   rR   rS   )r   r   r   r`   ra   rb   rc   rd   re   rf   rg   )ru   rn   rp   rq   s       r   test_engine_byte0_unchangedr      s    97!77777!77777777777777777797779777777777!7777!77777777r   c                    t        t              } t        d      D ]  }t        ddddidfi t	                 t        t              }|| k(  }| t
        k(  }|r|szt        j                  d||fd|| t
        f      d	t        j                         v st        j                  t               rt        j                  t               nd	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dt        j                         v st        j                  |       rt        j                  |       nddt        j                         v st        j                  t
              rt        j                  t
              nddz  }dd|iz  }t        t        j                  |            d x}x}}y )N   r   r{   r|   rE   r}   rK   rK   )0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sz%(py6)s == %(py7)sr   PROFILE_JSONbeforePROFILE_SHA256_BASELINE)rO   r[   r   r^   rS   zassert %(py9)spy9)r   r   ranger   r7   r   r`   ra   rb   rc   rd   re   rf   rg   )r   _ru   rn   @py_assert5rq   @py_format10s          r   +test_profile_json_unchanged_after_selectionr      s   \"F1X &s &(IJL	 g	
 < E FEEF.EEEEEE F.EEEEEEE7EEE7EEEEEE<EEE<EEE EEEEEEFEEEFEEEEEE.EEEE.EEEEEEEEr   c                    t        ddddidt              } | 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}}t        | fi t               }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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }|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}}t        j                   t"              5  t        ddddidfi t                d d d        y # 1 sw Y   y xY w)Nrr{   r|   rE   r}   )r2   rF   rJ   rY   rZ   r]   r^   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   r   )rO   r[   rP   r\   RESOLVEDrL   rN   rR   rS   r   )r   r5   r`   ra   re   rf   rg   r   r7   r   r   rb   rc   rd   r_   r   raisesr
   )r   rt   ro   ru   rv   rw   r   rm   rn   rp   rq   s              r   'test_canonical_engine_api_no_regressionr      s   	3"$EF	H
B
 i=C=C=C=C

'uw
'Cc+,,,,,,,,:,,,:,,,,,,c,,,c,,,,,,+,,,+,,,,,,,,,,::##:####:######3###3###:##########	(	) Ls &(=>@	LCH7	LL L Ls   -KKc                 Z   ddddid} t        | fi t               }t        | fi t               }||k(  }|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	d
z  }dd|iz  }t        t        j                  |            d }ddddi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 )Nir{   r|   rE   r}   rJ   )z%(py0)s == %(py2)sr   rs   rV   zassert %(py4)sr\   z%(py0)s == %(py3)sr   rO   r   r   rQ   )
r   r7   r`   ra   rb   rc   rd   re   rf   rg   )	r   r   rs   rm   rr   rv   ru   r   rp   s	            r    test_seam_is_pure_and_idempotentr      sF   S$&GHJC&s6eg6A&s6eg6A6MMM1MMMMMM1MMM1MMMMMMMMMMMMMMMM!S&,.O%PR R3 R R R@Q@QR3 R R RKQ6R R9Q9Q  R RHQ	  R RHQ	R R R R R>Q>QR Rr   c                 r   t        dddddgddid      } | 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dg}||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   }ddi}||k(  }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )Nnr{   z
  custom  r      r|   r   )rF   rG   	goal_typer   r~   customrJ   )z1%(py2)s
{%(py2)s = %(py0)s.goal_type
} == %(py5)sreqrN   rR   rS   1)z0%(py2)s
{%(py2)s = %(py0)s.boundary
} == %(py5)sr~   rY   rZ   r]   r^   )r   r   r`   ra   rb   rc   rd   re   rf   rg   r   to_goal_request)
r   rm   rn   ro   rp   rq   rt   ru   rv   rw   s
             r   'test_build_selection_request_normalizesr      sg   
!3\1X&#	@AC ==$H$=H$$$$=H$$$$$$3$$$3$$$=$$$H$$$$$$$<<%C:%<:%%%%<:%%%%%%3%%%3%%%<%%%:%%%%%%% !12CvsmC2mCCCC2mCCC2CCCmCCCCCCCr   c                D   t        j                  t        j                  d            }|d   d   }| D ]i  }t	        |d   fi t               }t        ||      }| }|st        j                  |d    d|       dz   d	d
t        j                         v st        j                  |      rt        j                  |      nd
iz  }t        t        j                  |            d }|d   }|t        k(  }	|	st        j                   d|	fd|t        f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }
dd|
iz  }t        t        j                  |            d x}}	l y )Nr;   r<   
properties	selectionrequestr|   z: schema errs z
>assert not %(py0)srO   errsschemarJ   r   r   r   r   rQ   )r?   r@   SELECTION_SCHEMArB   r   r7   r   r`   _format_assertmsgrb   rc   rd   re   rf   rg   r   ra   )r>   r   
sel_schemacr   r   rm   @py_format2rt   ru   r   rp   s               r   &test_selection_output_satisfies_schemar      s   ZZ(22G2DEF%k2J 2*1Y<C57C$Q
3x;x;;AfI;nTF;;;;;;;4;;;4;;;;;;{1{11111{1111{111111111111111111	2r   c                :   t        |       }d}||k(  }|st        j                  d|fd||f      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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| D ]  }t        |d	   fi t               }|d
   j                         D ]  \  }}	||   }
|
|	k(  }|st        j                  d|fd|
|	f      t        j                  |
      dt        j                         v st        j
                  |	      rt        j                  |	      nddz  }t        j                  |d    d| d||   d|	      dz   d|iz  }t        t        j                  |            d x}
}  y )N   rJ   )r   lenr>   )rO   r[   r   r^   zassert %(py8)spy8r   expectr   vr   r|   .z: z != 
>assert %(py5)srQ   )r   r`   ra   rb   rc   rd   re   rf   rg   r   r7   itemsr   )r>   ru   r   rn   rw   @py_format9r   r   kr   rt   r   rp   s                r   test_all_fixture_casesr      s[   u::?:33uu: D*1Y<C57ChK%%' 	DDAqQ4C419CCC41CCC4CCCCCC1CCC1CCCC61QCr!A$aUCCCCCCC	DDr   c            
        t        dd      } t        ddd      }t        ddddidfi t                d}d}t        ||      }|| k(  }| t        k(  }|r|sYt	        j
                  d	||fd
|| t        f      dt        j                         v st	        j                  t               rt	        j                  t               ndt	        j                  |      t	        j                  |      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }t        t	        j                  |            d x}x}x}x}}d}d}d}t        |||      }||k(  }	|t        k(  }
|	r|
smt	        j
                  d	|	|
fd||t        f      dt        j                         v st	        j                  t               rt	        j                  t               ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }t        t	        j                  |            d x}x}x}x}x}	}
t        j                  ddt        t               ddddgddd      j"                  j%                         }d}||k(  }|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 )'Nz	rev-parseHEADz--abbrev-refzr{   r|   rE   r}   r   )z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py9)sz%(py9)s == %(py10)sr.   head_beforeSANCTIONED_HEAD)rO   rP   r\   r^   r   py10zassert %(py12)spy12)zC%(py8)s
{%(py8)s = %(py0)s(%(py2)s, %(py4)s, %(py6)s)
} == %(py11)sz%(py11)s == %(py12)sbranch_beforeSANCTIONED_BRANCH)rO   rP   r\   r^   r   py11r   zassert %(py14)spy14r!   r"   zls-filesz$anu_v3/dispatch_profile_selection.pyz.schemas/dispatch_profile_selection.schema.jsonz>tests/regression/test_dispatch_profile_selection_2553plus38.pyTr#   r   rJ   r   trackedr   u$   seam 산물이 tracked 됨(위반): r   rQ   )r.   r   r7   r   r`   ra   rb   rc   rd   re   rf   rg   r   r'   r(   r)   r*   r+   r,   r   )r   r   rm   ro   r   @py_assert7@py_assert8@py_format11@py_format13@py_assert9@py_assert10@py_format15r   ru   r   rp   s                   r   (test_live_repo_head_branch_ref_unchangedr     s   {F+Knf=M"3"$EF	HTKP7T FVF4V$F$FFFFFFF$FFFFFF4FFF4FFFFFFV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FFFZ^ZVZ4^V4Z4ZZIZZZZZZ4IZZZZZZZ4ZZZ4ZZZZZZ^ZZZVZZZ4ZZZZZZZZZZZZZZZIZZZZIZZZZZZZZZnn	c)nj	/	9	I	K $d4
 5;F557  L7b=LLL7bLLLLLL7LLL7LLLbLLL@LLLLLLLr   )r   r   returnr)   )r-   r)   r   r)   )r   dict)C__doc__
__future__r   builtinsrb   _pytest.assertion.rewrite	assertionrewriter`   r   r?   r'   syspathlibr   r   __file__resolveparentr*   r)   pathremoveinsert!anu_v3.dispatch_profile_selectionr   r   r   r   r	   anu_v3.policy_profile_enginer
   r   r   r   r   r5   r3   r4   r   r   rA   r   r   r   r   r   r   r.   r7   fixturer>   rx   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r6   r   r   <module>r     s  , #      
  N""$++2299	y>SXXHHOOC	N# 3y> "   "
x'*;; *->>  #==	"HH
h

+.G
G HH  G  G  =; 6 hD  D
%(R( C#%:;
=>Q	S-C2	F	0	23#%FG
I	#	%	44C>$8FL"RD2DMr   