
    3jm                       U d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
 ddlmZmZmZmZ dZded	<   d
Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<    G d d e      Zefee fe!fe"fe"e#fe$fd!Z%d"ed#<   dCd$Z&dDd%Z'dEd&Z(dFd'Z)ed(dGd)Z*ed(	 	 	 	 	 dHd*Z+eeed+	 	 	 	 	 	 	 	 	 dId,Z,dJd-Z-	 	 	 	 	 	 dKd.Z.e G d/ d0             Z/dLd1Z0dMd2Z1	 	 	 	 	 	 dNd3Z2d4Z3ded5<   dOd6Z4	 	 	 	 	 	 dPd7Z5ed(	 	 	 	 	 dQd8Z6ed(	 	 	 	 	 dQd9Z7	 	 	 	 	 	 dRd:Z8e G d; d<             Z9dd=	 	 	 	 	 	 	 	 	 	 	 	 	 dSd>Z:dd?	 	 	 	 	 	 	 dTd@Z;eeed+	 	 	 	 	 	 	 	 	 dUdAZ<g dBZ=y)Vug  anu_v3.policy_profile_engine — POLICY_PROFILE_ENGINE core (task-2553+33 / Track C1).

회장 GO Track C(POLICY_PROFILE_ENGINE_GENERALIZATION) sub-track C1 core.

목표 (회장 verbatim §1):
  goal_type + policy_profile + boundary 만으로 ANU 가 profile 을 로딩하고,
  gate / HOLD / allowed_actions / forbidden_actions / evidence schema /
  completion packet schema 를 **자동 산출**한다. 회장이 매번 풀어 쓰지 않는다.

본 모듈 한정 책임 (순수, 부작용 0 — GitHub API 0, token 접근 0, 파일 쓰기 0):
  - goal_request parser (정적 meta-schema 검증)
  - policy_profile loader (read-only; per-profile concrete + 정적 meta-schema 검증)
  - goal_type resolver
  - boundary resolver
  - gate / HOLD / allowed_actions / forbidden_actions expansion
  - completion packet schema resolver (정적 meta-schema 참조 + per-profile concrete in-memory)
  - evidence schema resolver (정적 meta-schema 참조 + per-profile concrete in-memory)
  - decision/result JSON 산출 (PolicyResolution.to_decision_dict)
  - batch coordinator 연결 어댑터 (순수 dict, coordinator import 0 — one-way isolation)

설계 invariant:
  - 신규 별도 모듈 (additive). 기존 anu_v3 tracked 파일 import / mutation 0.
  - 기존 단일 profile(test_only_hardening_pr_merge_v1) = read-only 입력, 의미 보존.
  - 정적 meta-schema 4종 = 참조·검증 대상. per-profile concrete 산출물은 런타임
    in-memory / decision JSON 내 표현만 (동적 schema 파일 생성·공유 schema mutation 0).
  - jsonschema 등 외부 의존성 0 — draft-07 subset validator 내장 (offline 100%).
    )annotationsN)asdict	dataclassfield)Path)AnyFinalMappingSequencezanu_v3.policy_profile_enginez
Final[str]ENGINE_MODULEztask-2553+33.C1.v1ENGINE_VERSIONschemasSCHEMA_DIR_DEFAULTz#goal_request_2553plus33.schema.jsonMETA_GOAL_REQUESTz%policy_profile_2553plus33.schema.jsonMETA_POLICY_PROFILEz(completion_packet_2553plus33.schema.jsonMETA_COMPLETION_PACKETzevidence_2553plus33.schema.jsonMETA_EVIDENCEzmemory/policy_profilesPROFILE_JSON_DIR_DEFAULTzschemas/policy_profilesPROFILE_SCHEMA_DIR_DEFAULT)	production_code_changepr_branch_main_writemerge_without_gate_passcredential_or_owner_pat_opfrozen_anchor_mutationcallback_mandatory_rule_weaken&runtime_checkpoint_as_primary_callback"batch_coordinator_original_destroydoc_or_memory_only_completionzFinal[tuple[str, ...]]UNIVERSAL_FORBIDDEN_ACTIONS)gate_evaluateevidence_collectcompletion_packet_emitUNIVERSAL_ALLOWED_ACTIONSc                  $     e Zd ZdZd fdZ xZS )PolicyEngineErroruQ   policy engine parse / load / 검증 실패. ``self.code`` = 실패 사유 코드.c                L    t         |   d| d|        || _        || _        y )N[z] )super__init__codemessage)selfr*   r+   	__class__s      3/home/jay/workspace/anu_v3/policy_profile_engine.pyr)   zPolicyEngineError.__init__P   s+    1TF"WI./	    )r*   strr+   r0   returnNone)__name__
__module____qualname____doc__r)   __classcell__)r-   s   @r.   r%   r%   M   s    [ r/   r%   )objectarraystringintegernumberbooleanz"Final[dict[str, tuple[type, ...]]]	_TYPE_MAPc                "   |dk(  r#t        | t              xr t        | t               S |dk(  r)t        | t        t        f      xr t        | t               S |dk(  rt        | t              S t        | t        j                  |t        f            S )Nr;   r<   r=   )
isinstanceintboolfloatr>   getr8   )value	json_types     r.   _type_okrG   e   s}    I%%Ej.E*EEH%#u.Nz%7N3NNI%&&eY]]9vi@AAr/   c           	        |j                  d      }t        |t              r:t        | |      s.|j	                  | d| dt        |       j                   d       y d|v r%| |d   k7  r|j	                  | d|d   d| d       d|v r$| |d   vr|j	                  | d| d	|d   d       t        | t              r|j                  d
      }|r0t        j                  ||       |j	                  | d| d| d       |j                  d      }t        |t              r%t        |       |k  r|j	                  | d| d       t        | t        t        f      rSt        | t              sC|j                  d      }t        |t        t        f      r| |k  r|j	                  | d| d       t        | t        t        f      r|j                  d      }t        |t              r%t        |       |k  r|j	                  | d| d       |j                  d      }	t        |	t              r%t        |       |	kD  r|j	                  | d|	 d       |j                  d      }
t        |
t              r't!        |       D ]  \  }}t#        ||
| d| d|        t        | t$              r|j                  di       xs i }|j                  dg       xs g D ]  }|| vs|j	                  | d| d         |j                  dd       }| j'                         D ]<  \  }}||v rt#        |||   | d!| |       !|d"u s&|j	                  | d#| d$       > y y )%Ntypeu   : type 불일치 (expected z, got )constu   : const 불일치 (expected enumu   : enum 밖 (z not in patternu   : pattern 불일치 (z !~ /z/)	minLengthz: minLength u    미만minimumz
: minimum minItemsz: minItems maxItemsz: maxItems u    초과itemsr'   ]
propertiesrequiredu   : 필수 key 'u   ' 누락additionalPropertiesT.Fu%   : additionalProperties false 인데 'u   ' 존재)rD   r@   r0   rG   appendrI   r3   researchrA   lenrC   rB   listtupler
   	enumerate	_validatedictrR   )rE   schemapatherrsjtpatmlmnmimxitem_schemaiitempropsreqapkvs                     r.   r_   r_   o   sD   	F	B"c8E2#6tf7t6$u+BVBVAWWXYZ&UfWo5tf88K6RWQZZ[\]E7tfL	&.9K1MN%jj#299S%(0KK4& 5eYeC5KLZZ$b#3u:?KK4&RD89%#u&z%/FZZ	"b3,'EBJKK4&
2$g67%$'ZZ
#b#3u:?KK4&B4w78ZZ
#b#3u:?KK4&B4w78jj)k7+$U+ C4$vQqc^TBC%#)::lB#?#E2::j"-3 	BC%tfN3%x@A	B ZZ.5KKM 	WDAqEz!U1X$q}d;utf$I!HUV		W r/   c                &    g }t        | |d|       |S )uE   instance 를 draft-07 subset meta-schema 로 검증. 빈 list = PASS.$)r_   )instancemeta_schemarc   s      r.   validate_against_metarv      s    DhS$/Kr/   c                :   	 | j                  d      }	 t        j                  |      }t        |t              st        |d|        |S # t        $ r}t        |d|  d|       |d }~ww xY w# t        j
                  $ r}t        |d|  d|       |d }~ww xY w)Nzutf-8)encodingu   파일 읽기 실패 z: u   JSON 파싱 실패 u   최상위 dict 아님 )	read_textOSErrorr%   jsonloadsJSONDecodeErrorr@   r`   )pr*   raweobjs        r.   
_read_jsonr      s    Okk7k+Mjjo c4 (>qc&BCCJ  O(=aS1#&FGQNO  M(;A3b&DE1LMs.   A A/ 	A,A''A,/BBB
schema_dirc               2    t        t        |      | z  d      S )u=   정적 meta-schema 로드 (참조 전용; 절대 mutation 0).meta_schema_load_fail)r   r   )namer   s     r.   load_meta_schemar      s    d:&-/FGGr/   c               H   t        | t              s"t        ddt        |       j                         t        t        |      }t        t        |       |      }|rt        ddj                  |            t        |       }t        |j                  d      xs g       |d<   |S )u   chair-supplied goal_request → 정적 meta-schema 검증된 dict (fail-closed).

    입력: {goal_id, goal_statement, boundary?, goal_type?, policy_profile{name}}.
    goal_request_not_mappingu   goal_request dict 아님: r   goal_request_schema_fail; boundary)r@   r
   r%   rI   r3   r   r   rv   r`   joinr\   rD   )r   r   metarc   outs        r.   parse_goal_requestr      s     c7# :>XY]^aYbYkYkXl<mnn-*ED cD1D :DIIdOLL
s)C377:.4"5C
OJr/   profile_json_dirprofile_schema_dirr   c                  | rt        | t              st        dd|       t        t	        |      |  dz  d      }t	        |      |  dz  }|j                         r5t        |d      }t        ||      }|rt        ddj                  |            t        t        |	      }t        ||      }	|	rt        d
dj                  |	            |S )uS  policy profile 을 이름만으로 로딩 (read-only, mutation 0).

    이중 검증:
      (a) per-profile concrete schema (schemas/policy_profiles/<name>.schema.json)
      (b) 엔진 generic 정적 meta-schema (policy_profile_2553plus33.schema.json)
    둘 다 통과해야 함 (fail-closed). 기존 단일 profile 의미 보존.
    profile_name_invalidu   profile name 무효: z.jsonprofile_load_failz.schema.json!profile_concrete_schema_load_failprofile_concrete_schema_failr   r   profile_generic_meta_fail)
r@   r0   r%   r   r   existsrv   r   r   r   )
r   r   r   r   profileconcrete_schema_pathconcreterc   genericgerrss
             r.   load_policy_profiler      s     z$, 6:OPTx8XYY./TF%.@BUVG 23l6KK""$24WX$Wh7#$BDIIdOTT2zJG!'73E ;TYYu=MNNNr/   c                    | j                  d      }t        |t              r |j                         r|j                         S t        |j                  dd            }d|v sd|v ryd|v ryy	)
uO   goal_type 산출. 우선순위: 명시 goal_type > profile_id 추론 > generic.	goal_type
profile_id pr_mergemergepr_merge_lifecycle	hardeninghardening_lifecyclegeneric_goal)rD   r@   r0   strip)goal_requestr   explicitpids       r.   resolve_goal_typer      sf    ,H(C X^^%5~~
gkk,+
,CSGsN#c$r/   c                N   | j                  d      xs g D cg c]  }t        |       }}|j                  d      xs i }|t        |j                  d      xs g       |j                  d      |j                  d      |j                  d      |j                  d      dS c c}w )	uH   chair boundary[] + profile scope_invariants → 정규화 boundary dict.r   scope_invariantsforbidden_paths_regexlive_ws_pathlive_ws_sanctioned_commitlive_ws_branchmerge_ops_isolation)r   r   r   r   r   ops_isolation)rD   r0   r\   )r   r   br   sis        r.   resolve_boundaryr     s     ".!1!1*!=!CE1AEHE	'	(	.BB!%bff-D&E&K!L~.%'VV,G%H&&!12 56  Fs   B"c                  "    e Zd ZU ded<   ded<   y)GateConditionr0   r   r   expectedN)r3   r4   r5   __annotations__ r/   r.   r   r     s    
IMr/   r   c                    | j                  d      }t        |t              s| j                  d      }t        |t              sg S |j                         D cg c]  \  }}t	        ||       c}}S c c}}w )u   profile AND-gate predicate → ordered GateCondition list.

    generic: ``gate_predicate`` 우선, 없으면 ``merge_ready_predicate``
    (기존 단일 profile 의미 보존). ALL true 여야 gate PASS.
    gate_predicatemerge_ready_predicate)r   r   )rD   r@   r
   rR   r   )r   predrp   rq   s       r.   expand_gater     s`     ;;'(DdG${{23dG$	:>**,G$!QMq1-GGGs   A3c                    | j                  d      xs i }t        |t              sg S |j                         D cg c]  \  }}|s	t	        |       c}}S c c}}w )uR   profile hold_conditions 중 truthy → HOLD trigger 이름 list. any true => HOLD.hold_conditions)rD   r@   r
   rR   r0   )r   hcrp   rq   s       r.   expand_holdr   *  sI    	&	'	-2Bb'"	!xxz/tq!QCF///s   
AAc                   | j                  d      }t        |t        t        f      r|D cg c]  }t	        |       c}S t        t
              }| j                  d      xs g D ]  }|j                  d|         | j                  d      xs i }t        |t              r(|j                  d      r|j                  d|d           | j                  d      xs i }t        |t              r3t        |j                  dd	      xs d	      d	kD  r|j                  d
       |j                  d|        t               }|D cg c]  }||v r|j                  |      r| c}S c c}w c c}w )uT   profile → allowed_actions. 명시 우선, 없으면 인식된 block 에서 파생.allowed_actionspost_merge_stepszpost_merge:merge_methoddefault_preferencezmerge_method:gemini_thread_resolvemax_resolve_callsr   zreview_thread_resolve:boundedz
goal_type:)rD   r@   r\   r]   r0   r#   rX   r
   rA   setadd)	r   r   r   ar   stepmmgtrseens	            r.   expand_allowed_actionsr   2  sC    {{,-H(T5M* ()1A))34C./52 )

['()	^	$	*B"g266*>#?

]2&:#;"<=>
++-
.
4"C#wC0CQ(G(L1$MPQ$Q

23JJI;'(UD=!19A== * >s   E(	E-E-!E-)zforbid:zno:zdeny:_BOUNDARY_DENY_PREFIXESc                    | j                         j                         }t        D ]E  }|j                  |      s| j                         t	        |      d j                         }|xs dc S  y)u  boundary deny 토큰을 bare action id 로 정규화.

    'forbid:completion_packet_emit' -> 'completion_packet_emit'.
    deny 접두사가 없으면 None (= deny 아님). Codex CRITICAL fix:
    raw 표현 mismatch 로 boundary 가 우회되지 않도록 한다.
    N)r   lowerr   
startswithr[   )tokenlowpfxbares       r.   normalize_boundary_denyr   K  sa     ++-


C&  >>#;;=S+113D<4  r/   c                   t        t              }| j                  d      }t        |t         t        f      r|j                  d |D               |j                  d      xs g D ]  }|j                  d|         |j                  d      xs g D ]=  }t        |      }t        |      }||j                  |       |j                  |       ? t               }|D 	cg c]  }	|	|v r|j                  |	      r|	 c}	S c c}	w )u  universal forbidden + profile/boundary 파생 forbidden.

    boundary deny 는 raw 토큰과 **정규화된 bare action id** 를 모두 등재해
    allowed_actions 와의 교집합 검사/가지치기에서 표현 mismatch 우회를
    차단한다 (Codex CRITICAL fix).
    forbidden_actionsc              3  2   K   | ]  }t        |        y w)N)r0   ).0r   s     r.   	<genexpr>z+expand_forbidden_actions.<locals>.<genexpr>f  s     ,a3q6,s   r   zwrite_path:r   )r\   r   rD   r@   r]   extendrX   r0   r   r   r   )
r   r   r   r   rgxr   bsr   r   r   s
             r.   expand_forbidden_actionsr   Z  s     56C{{./H(T5M*

,8,,||34: (

[&'(\\*%+ V&r*JJrNJJt UD=!19A===s    	D*D<Dc                  t        |      t        z  }t        t        |      }t        |j	                  d      xs g       }| j	                  d      }d| j	                  d      |t        |t              r|ndd}t        |      |dS )	u   completion packet schema resolver.

    반환: {meta_schema(정적 ref), concrete(per-profile in-memory spec)}.
    동적 schema 파일 생성 0 / 공유 schema mutation 0 (9-R.3).
    r   rU   completion_packetz1anu_v3.policy_profile_engine.completion_packet.v1r   N	schema_idr   required_fieldsprofile_declaredmeta_schema_refr   )r   r   r   r\   rD   r@   r
   r0   r   r   	meta_pathr   rU   declaredr   s          r.    resolve_completion_packet_schemar   v  s     Z #99I2zJDDHHZ(.B/H{{./HHkk,/#(28W(EH4	H  #9~8DDr/   c                  t        |      t        z  }t        t        |      }t        |j	                  d      xs g       }| j	                  d      }d| j	                  d      |t        |t              r|ndd}t        |      |dS )	uU   evidence schema resolver. 정적 meta-schema 참조 + per-profile concrete in-memory.r   rU   evidencez(anu_v3.policy_profile_engine.evidence.v1r   Nr   r   )r   r   r   r\   rD   r@   r
   r0   r   s          r.   resolve_evidence_schemar     s}     Z =0IMjADDHHZ(.B/H{{:&H?kk,/#(28W(EH4	H  #9~8DDr/   c                h    | D cg c]  }|j                  |      s| }}t        |      |fS c c}w )u2  런타임 HOLD 평가기 (순수). HOLD 의미를 명시적으로 구현.

    profile.hold_conditions 의 truthy 항목 = **enabled HOLD trigger 이름**
    (정의-시점 enablement, schema const:true). 실제 HOLD 는 그 trigger 가
    런타임에 *관측*될 때 발생한다. resolve-time status 는 contract 도출만
    반영하며 런타임 발생을 미리 단정하지 않는다 (Codex HIGH fix — 정의-시점
    enablement 와 런타임 발생 분리).

    반환: (hold: bool, fired: 발화된 trigger 이름 list). ANY fired => HOLD.
    )rD   rB   )hold_trigger_conditionsruntime_signalscfireds       r.   evaluate_holdr     s9     0J1?3F3Fq3IQJEJK Ks   //c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   d
ed<   ded<   ded<   dZded<   dZded<   eZded<   eZ	ded<    e
e      Zd
ed<   ddZddZy)PolicyResolutionr0   goal_idr   r   profile_versiondict[str, Any]r   list[GateCondition]gate	list[str]r   r   r   completion_packet_schemaevidence_schemaRESOLVEDstatusN
str | Nonehold_reasonengineengine_version)default_factorynotesc                6   i ddd| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  d	| j                  d
| j                  d| j                  d| j                  D cg c]  }t        |       c}dddt        | j                        dddt        | j                        dt        | j                        d| j                  | j                   t        | j"                        dS c c}w )Nra   z(anu_v3.policy_profile_engine.decision.v1r  r  r  r   r   r  r  r  r   r  gate_semanticsu)   AND — ALL conditions must hold for PASSr   hold_semanticsu   enabled HOLD triggers (definition-time enablement). ANY trigger OBSERVED at runtime => HOLD, action 0. resolve-time status reflects contract derivation only, not runtime occurrence — use evaluate_hold(hold_trigger_conditions, runtime_signals).r   r   r  )r	  r  )r  r  r  r   r   r  r  r  r   r  r   r\   r   r   r   r  r	  r  r,   gs     r.   to_decision_dictz!PolicyResolution.to_decision_dict  s_   
@
dkk
 d11
 t||	

 
 $//
 t33
 dkk
 4++
 
 		21VAY2
 I
 &tD,@,@'A
 O
( tD$8$89)
*  d&<&<!=+
, '(E(E-
.  $33$**%1
 	
 3s   	Dc                   | j                   | j                  | j                  | j                  | j                  D cg c]  }|j
                   c}t        | j                        t        | j                        t        | j                        | j                  j                  d      | j                  j                  d      d
S c c}w )u  batch coordinator 연결용 순수 dict 어댑터 (coordinator import 0).

        §2: batch coordinator 와 연결 가능해야 함 — coordinator 가 track 별
        gate/hold/allowed/forbidden 을 그대로 소비할 수 있는 평면 표현.
        r   )
r  r   r   r  gate_condition_namesr   r   r   completion_packet_meta_refevidence_meta_ref)r  r   r   r  r  r   r\   r   r   r   r  rD   r	  r  s     r.   to_coordinator_bindingz'PolicyResolution.to_coordinator_binding  s     ||//kk59YY$?QVV$?'+D,@,@'A#D$8$89!%d&<&<!=*.*G*G*K*KL]*^!%!5!5!9!9:K!L
 	

 %@s   C)r1   r  )r3   r4   r5   r   r  r  r   r  r   r  r   r\   r  r  r  r   r/   r.   r  r    s    LNO
  ,,##FC"K"FC(NC(T2E92
8
r/   r  )gate_resultc          
         | j                   d   d   || j                  | j                  |t        |xs i       t	        | j
                        ||d	S )u  resolution → completion packet instance skeleton.

    completion_packet_2553plus33.schema.json(정적 meta-schema)을 **충족**하는
    런타임 패킷 instance 를 생성한다. resolver 의 ``concrete`` 는 per-profile
    spec 기술자(instance 아님)이고, 이 함수가 meta-schema 가 검증하는 실제
    패킷 형태를 산출한다 (Codex HIGH fix — contract 가 만족 가능함을 입증).
    r   r   )	ra   task_idr   r  final_statusr  hold_evaluatedevidence_refgenerated_at_utc)r  r   r  r`   r\   r   )
resolutionr  r   r#  r"  r  s         r.    build_completion_packet_skeletonr%    sZ    " 55jA+N ++%%$K-2.z99:$,
 
r/   )fieldsc          
        |2| j                   D cg c]  }|j                  ddd }}|xs ddddg}| j                  d   d   | j                  | j                  ||D cg c]  }t        |       c}dS c c}w c c}w )	u   resolution → evidence instance skeleton (evidence meta-schema 충족).

    fields 미지정 시 gate 조건명을 required evidence field 로 도출 (gate 통과
    입증에 필요한 최소 evidence). (Codex HIGH fix — contract 만족 입증.)
    gate_observationT)r   kindrU   resolution_statusengine_stater   r   )ra   r   r  collected_at_utcr&  )r  r   r	  r   r  r`   )r$  r,  r&  r  derivedfs         r.   build_evidence_skeletonr/    s     ~  __
 VV%7TJ
 
  
(.dS
 ,,Z8E ++%%,$*+q47+ 
 ,s   A8!A=c                  t        | |      }|j                  d      xs i }t        |t              r|j                  d      nd}|st	        dd      t        ||||      }t        ||      }t        ||      }	t        |      }
t        |      }t        ||      }t        ||	      }t        |      }t        t        |      |z        }|D cg c]	  }||vs| }}|}t        ||      }t        ||      }g }d}d}|
sd	}d
}|rd	}d| }|j!                  d|        t#        t%        |j                  dd            |t%        |j                  dd            t%        |j                  dd            |	|
||||||||      S c c}w )u   END-TO-END core: goal_type + policy_profile + boundary 만으로
    gate / HOLD / allowed / forbidden / evidence schema / completion packet
    schema 자동 산출. 순수 함수 (부작용 0, profile mutation 0).
    r   policy_profiler   Npolicy_profile_name_missingu   policy_profile.name 누락r   r
  HOLD_FOR_CHAIRu`   profile 에 gate predicate(gate_predicate/merge_ready_predicate) 부재 — 자동 결정 불가u_   allowed_actions ∩ forbidden_actions 충돌(boundary/profile contract 모순, 정규화 후): u(   pruned from allowed (forbidden 우선): r  r   r   version)r  r   r   r  r   r  r   r   r   r  r	  r  r  r  )r   rD   r@   r
   r%   r   r   r   r   r   r   r   r   sortedr   r   rX   r  r0   )r   r   r   r   grppprofile_namer   r   r   r  holdallowed	forbiddenforbidden_setcontradictionr   pruned_allowedcpsevsr  r  r  s                          r.   resolve_policyrA  1  s    
LZ	@B	 	!	'RB%/G%<266&>$L =?[\\!)-	G ""g.IG,HwDwD$Wi8G((;I
 	NM3w<-78M!(CAA],BaCNCG
*7z
JC
!'j
ACEF"K !x !''4o7 	 	?OPBFF9b)*w{{<45GKK	267#!$ 3 Ds   	FF)r   r   r   r   r   r   r   r#   r%   r   r  rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r%  r/  rA  )rE   r   rF   r0   r1   rB   )
rE   r   ra   Mapping[str, Any]rb   r0   rc   r  r1   r2   )rt   r   ru   rB  r1   r  )r~   r   r*   r0   r1   r  )r   r0   r   
str | Pathr1   r  )r   r   r   rC  r1   r  )
r   r0   r   rC  r   rC  r   rC  r1   r  )r   rB  r   rB  r1   r0   )r   rB  r   rB  r1   r  )r   rB  r1   r  )r   rB  r1   r  )r   rB  r   r0   r1   r  )r   r0   r1   r  )r   rB  r   rB  r1   r  )r   rB  r   rC  r1   r  )r   zSequence[str]r   rB  r1   ztuple[bool, list[str]])r$  'PolicyResolution'r  r0   r   r0   r#  r0   r"  r0   r  zMapping[str, Any] | Noner1   r  )r$  rD  r,  r0   r&  z"Sequence[Mapping[str, Any]] | Noner1   r  )
r   r   r   rC  r   rC  r   rC  r1   r  )>r6   
__future__r   r{   rY   dataclassesr   r   r   pathlibr   typingr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r#   
ValueErrorr%   r`   r\   r]   r0   rA   rC   rB   r>   rG   r_   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r%  r/  rA  __all__r   r/   r.   <module>rK     s\  8 #  	 0 0  0 0:z :1
 1
 "+ J * E : E"I Z I%O 
 O=z = (@ * ?)B J B
7 3 
5 1 
  gE]fvElw1	- B)WX =O H +=	'0 $<%?/
 ! #	
  F
 #.?&   
H0>>+.>>, 3N / M>>*;>>> 0EE E 	E4 0EE E 	E, * &   $ ?
 ?
 ?
R -1"  	
   * B 26	"  /	
 > $<%?/LL !L #	L
 L L^r/   