+
    ,il  c                   s8  a  R t/0 t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIH	t	 ^ RI
HtHt ^ RIt ^ RIt^ RIHtHtHt ^RIHtHtHtHt ^R	IH t H!t!H"t" Rt#] ^ k ] ! R R4      4       t$] ! R R4      4       t%]]%,          t&]]PN                  ](]PR                  ,          3,          t* ! R R
]PV                  4      t,] ! R R]PZ                  4      4       t.R#   ] d9   t]P,                  ! ]4      P1                  ]P2                   R24        RtALRtAii ; i)i    Ndefaultdict)Iterable)suppress)	dataclassInitVar)NetworkXErrorNetworkXNoPathNodeNotFoundz failed to import.)	exceptionmixins	policyrepquery)CriteriaDescriptorEdgeAttrDictEdgeAttrListDomainTransitionAnalysisDomainTransitionDomainEntrypointc                   sT   a  ] tR t^t o RtV 3R lR ltV 3R lR ltV 3R ltRtV t	R# )	r   zEntrypoint list entry.c                s$   < V ^8  d   QhRRRS[ /# )   otherr   returnboolformat__classdict__   "2/usr/lib64/python3.14/site-packages/setools/dta.py__annotate__DomainEntrypoint.__annotate__)   s     & &. &4 &    c                s4    V P                   VP                   8  # N)name)selfr      &&r   __lt__ZDomainEntrypoint.__lt__)   s    yy5::%%r   c                    < V ^8  d   QhRS[ /# r   r   strr   r   r   r   r   -   s          r   c                s   R V P                    R2R.pVP                  R \        V P                  4       4       4       VP	                  R4       VP                  R \        V P
                  4       4       4       V P                  '       d=   VP	                  R4       VP                  R \        V P                  4       4       4       RP                  V4      # )	z
Entrypoint Z:z	Domain entrypoint rule(s):c              3   ,   "   T F
  pR V 2x  K  	  R# 5iZ	N .0e   & r   	<genexpr>+DomainEntrypoint.__str__.<locals>.<genexpr>0   s     ?'>!r!X'>   z
	File execute rule(s):c              3   r)   r*   r+   r,   r/   r   r0   r1   3   s     <';!r!X';r2   z
	Type transition rule(s):c              3   r)   r*   r+   r-   tr/   r   r0   r1   7   s     H+Ga2aS+Gr2   
)r!   extendsorted
entrypointappendexecutetype_transitionjoin)r"   linesr/   r   __str__ZDomainEntrypoint.__str__-   s    +DII;a8:<?vdoo'>??01<vdll';<<LL78LLH6$2F2F+GHHyyr   c                s   < V ^8  d   Qh/ S[ P                  ;R&   S[S[ P                  ,          ;R&   S[S[ P                  ,          ;R&   S[S[ P                  ,          ;R&   # )r   r!   r8   r:   r;   )r   Typelist	AnyTERuler   r   r   r   r      s^     
 ..  Y(())  )%%&&  )--.. r   r+   N)
__name__
__module____qualname____firstlineno____doc__r$   r>   __annotate_func____static_attributes____classdictcell__r      @r   r   r      s%      !& &     r   c                   s`   a a ] tR t^<t oRtV3R lV 3R lltV3R lR ltV3R ltRtVt	V ;t
# )r   zTransition step output.c                s&   < V ^8  d   QhRS[ RS[ /# )r   specr   r'   r   r   r   r   DomainTransition.__annotate__I   s     ( (s (s (r   c                st  < V P                    R V P                   R2.pVR8X  Edt   V P                  '       d   VP                  R4       VP	                  R \        V P                  4       4       4       V P                  '       d=   VP                  R4       VP	                  R \        V P                  4       4       4       VP	                  R \        V P                  4       4       4       V P                  '       d   VP                  R4       VP	                  R	 \        V P                  4       4       4       VP                  R
4       VP	                  R \        V P                  4       4       4       VP                  R4       RP                  V4      # V'       g
   V^ ,          # \        SV `1  V4      # )z -> r5   fullzDomain transition rule(s):c              3   8   "   T F  p\        V4      x  K  	  R # 5ir    r'   r3   r/   r   r0   .DomainTransition.__format__.<locals>.<genexpr>N        E-DSVV-D   z
Set execution context rule(s):c              3   rO   r    r'   r-   sr/   r   r0   rP   R   s      F1EAQ1ErR   c              3   s*   "   T F	  q R 2x  K  	  R# 5i)r5   Nr+   r,   r/   r   r0   rP   T   s     H/G!s"X/Gs   zDynamic transition rule(s):c              3   rO   r    r'   )r-   dr/   r   r0   rP   X   s     H-GSVV-GrR   z%
Set current process context rule(s):c              3   rO   r    r'   rS   r/   r   r0   rP   [   rQ   rR    )sourcetarget
transitionr9   r6   r7   setexecentrypointsdyntransition
setcurrentr<   super
__format__)r"   rL   r=   	__class__s   && r   r_   ZDomainTransition.__format__I   s;   #{{m4}B?@6>9:EVDOO-DEE<<<LL!CDLL F1E FFHvd6F6F/GHH!!!:;HVD4F4F-GHHEFEVDOO-DEER 99U##8Ow!$''r   c                r%   r&   r'   r   r   r   r   rM   f   s     ' ' 'r   c                s$    V P                  R 4      # )rN   )r_   r"      &r   r>   ZDomainTransition.__str__f   s    v&&r   c                s6  < V ^8  d   Qh/ S[ P                  ;R&   S[ P                  ;R&   S[S[ P                  ,          ;R&   S[S[,          ;R&   S[S[ P                  ,          ;R&   S[S[ P                  ,          ;R&   S[S[ P                  ,          ;R&   # )r   rW   rX   rY   r[   rZ   r\   r]   )r   r?   r@   rA   r   r   r   r   r   rM   <   s     
 NN  NN  Y(())  &''  )%%&&  	++,,  Y(()) r   r+   )rB   rC   rD   rE   rF   r_   r>   rG   rH   rI   __classcell__r`   r      @@r   r   r   <   s&      "( (:' 'U  r   c                   s  a a ] tR t^qt oRt ! R R]P                  4      t]P                  ]P                  3t
]P                  ]P                  3t]]P                   ,          ! RR7      t]]P                   ,          ! RR7      t]P                  tRRRR	R
R	R]P                  R^RR	/V3R lV 3R lllt]V3R lR l4       t]P.                  V3R lR l4       t]V3R lR l4       t]P.                  V3R lR l4       t]V3R lR l4       t]P.                  V3R lR l4       tV3R lR ltV3R lR ltV3R  lR! lt]V3R" lR# l4       tV3R$ lR% ltV3R& lR' lt V3R( lR) lt!V3R* lR+ lt"V3R, lt#R-t$Vt%V ;t&# ).r   a_  
Domain transition analysis.

Parameters:
policy      The policy to analyze.

Keyword Parameters
source      The source type of the analysis.
target      The target type of the analysis.
mode        The analysis mode (see DomainTransitionAnalysis.Mode)
exclude     The types excluded from the domain transition analysis.
            (default is none)
c                   s*    ] tR t^tRtRtRtRtRtRt	R# )DomainTransitionAnalysis.Modez Domain transition analysis modeszAll shortest pathszAll paths up toz%Transitions out of the source domain.z#Transitions into the target domain.r+   N)
rB   rC   rD   rE   rF   ShortestPathsAllPathsTransitionsOutTransitionsInrH   r+   r   r   Moderf      s    .,$@=r   rk   lookup_type)Zlookup_functionreverseFrW   NrX   modedepth_limitexcludec                s  < V ^8  d   QhRS[ P                  RS[RS[ P                  S[,          R,          RS[ P                  S[,          R,          RS[RS[R,          RS[S[ P                  S[,          ,          R,          R	R/# )
r   policyrm   rW   NrX   rn   ro   rp   r   )r   ZSELinuxPolicyr   r?   r(   rk   intr   r   r   r   r   %DomainTransitionAnalysis.__annotate__   s      y66 "#-4 ##-4 	
 "Dj #9>>C#784? LPr   c         
     sR  < \         SV `  WW4VWgR 7       V  V  RV n        RV n         \        P
                  ! 4       V n        V P                  P                  4       V n        R#   \         d9    T P                  P                  R4       T P                  P                  R4       h i ; i))rm   rW   rX   rn   ro   rp   TzLNetworkX is not available.  This is required for Domain Transition Analysis.z2This is typically in the python3-networkx package.N)r^   __init__rebuildgraphrebuildsubgraphnxDiGraphGcopysubGZ	NameErrorlogZcritical)	r"   rq   rm   rW   rX   rn   ro   rp   r`   s	   ""$$$$$$r   rt   Z!DomainTransitionAnalysis.__init__   s     	UY%0 	 	C 	 #	ZZ\DFDI 	HH I JHHRS		s   9A# #AB&c                s.   < V ^8  d   QhRS[ R,          /# r   r   Nrr   r   r   r   r   rs      s     ! !S4Z !r   c                    V P                   # r    )_depth_limitra   rb   r   ro   $DomainTransitionAnalysis.depth_limit   s       r   c                s2   < V ^8  d   QhRS[ R,          RR/# )r   valueNr   r~   r   r   r   r   rs      s     " "t " "r   c                s>    Ve   V^8  d   \        R4      hWn        R # )Nz-Domain transition max depth must be positive.)
ValueErrorr   )r"   r   r#   r   ro   r      s     LMM!r   c                r%   r&   r   r   r   r   r   rs      s       r   c                r   r    )_reversera   rb   r   rm    DomainTransitionAnalysis.reverse       }}r   c                   < V ^8  d   QhRR/# r}   r+   r   r   r   r   rs      s     $ $D $r   c                s4    \        V4      V n        R V n        R# TN)r   r   rv   )r"   Z	directionr#   r   rm   r      s    Y#r   c                sD   < V ^8  d   QhRS[ S[P                  ,          /# r&   )r@   r   r?   r   r   r   r   rs      s      inn- r   c                r   r    )_excludera   rb   r   rp    DomainTransitionAnalysis.exclude   r   r   c                sf   < V ^8  d   QhRS[ S[P                  S[,          ,          R,          RR/# )r   typesNr   )r   r   r?   r(   r   r   r   r   rs      s.     $ $Xinns&:;dB $t $r   c                s    V'       d1   V Uu. uF  q P                   P                  V4      NK  	  upV n        M. V n        R V n        R# u upi r   )rq   rl   r   rv   )r"   r   r4   s   && r   rp   r      s=    AFGA[[44Q7GDMDM#	 Hs   #A	c                sP   < V ^8  d   QhRS[ S[,          S[ S[,          ,          /# r&   )r   DTAPathr   r   r   r   r   rs      s*     JL JL'*X6F-GG JLr   c              #  s*
  "   V P                   '       d   V P                  4        V P                  P                  R V P                   24       V P                  P                  RV P                  : 24       V P                  P                  RV P                  : 24       V P                  P                  RV P                  : RV P                  : 24       \        \        \        \        4      ;_uu_ 4        V P                  ;\        P                  P                   8X  d    \#        V P                  V P                  34      '       g   \%        R4      hV P                  P                  RV P                   RV P                   R24       \&        P(                  ! V P*                  V P                  V P                  4       F  pV P-                  V4      x  K  	  EM;\        P                  P.                  8X  d    \#        V P                  V P                  34      '       g   \%        R4      hV P                  P                  R	V P                   RV P                   R
V P                   R24       \&        P0                  ! V P*                  V P                  V P                  V P                  R7       F  pV P-                  V4      x  K  	  EM%;\        P                  P2                  8X  d    V P                  '       g   \%        R4      hV P                  P                  RV P                   24       \&        P4                  ! V P*                  V P                  V P                  R7       Fe  w  r#\7        V P*                  W#4      p\9        VVVP:                  V P=                  V4      VP>                  VP@                  VPB                  4      x  Kg  	  EM\        P                  PD                  8X  d   V P                  '       g   \%        R4      hV P                  P                  RV P                   24       \&        P4                  ! V P*                  V P                  RV P                  R7       Fe  w  r2\7        V P*                  W#4      p\9        VVVP:                  V P=                  V4      VP>                  VP@                  VPB                  4      x  Kg  	  M \%        RV P                   24      hRRR4       R#   + '       g   i     R# ; i5i)z*Generating domain transition results from self.source=self.target=
self.mode=, self.depth_limit=*Source and target types must be specified.z5Generating all shortest domain transition paths from  to ...,Generating all domain transition paths from , max length ZcutoffSource type must be specified.)Generating all domain transitions out of ro   Target type must be specified.'Generating all domain transitions into Trm   ro   Unknown analysis mode: N)#rv   _build_subgraphr|   inforq   debugrW   rX   rn   ro   r   r   r   r   r   rk   rg   allr   rw   all_shortest_pathsr{   _generate_stepsrh   all_simple_pathsri   Z	bfs_edgesEdger   rY   _generate_entrypointsrZ   r\   r]   rj   )r"   pathrW   rX   edges   &    r   resultsZ DomainTransitionAnalysis.results   s      "B4;;-PQ,$++(),$++()*$))%9(8(8':;<nlMBB))@-22@@T[[9::()UVVHHMM"Y%)[[Mdkk]##G H !# 5 5dii6:kk6:kk!C #22488	!C <-22;;T[[9::()UVVHHMM$PQUQ\Q\P] ^((,}M$BRBRASSV#X Y !# 3 3DII48KK48KK;?;K;K!M
 #22488!M B-22AA;;;()IJJHHMM$Mdkk]"[\*,,,tyy$++CGCSCS+U#DIIv>.v/5/3/3/I/I$/O/3||/3/A/A/3@ @	+U .22@@;;;()IJJHHMM$KDKK="YZ*,,,tyy$++W[CGCSCS+U#DIIv>.v/5/3/3/I/I$/O/3||/3/A/A/3@ @	+U $'>tyyk%JKKC CBBBs-   C5T7H
S?DS?C.S?5
T?T	
	Tc                r   )r   r   
nx.DiGraphr+   r   r   r   r   rs     s     GG GG< GGr   c           	     s	   V P                   '       d   V P                  4        V P                  P                  RV P                   24       V P                  P                  RV P                  : 24       V P                  P                  RV P                  : 24       V P                  P                  RV P                  : RV P                  : 24        V P                  ;\        P                  P                  8X  Ed
    \        V P                  V P                  34      '       g   \        R4      hV P                  P                  RV P                   RV P                   R	24       \        P                   ! V P"                  V P                  V P                  4      pV UUu. uF4  p\        P$                  P&                  P)                  V4       F  q3NK  	  K6  	  ppp\        P*                  ! 4       pVP-                  V4       V# ;\        P                  P.                  8X  Ed#    \        V P                  V P                  34      '       g   \        R4      hV P                  P                  R
V P                   RV P                   RV P                   R	24       \        P0                  ! V P"                  V P                  V P                  V P                  R7      pV UUu. uF4  p\        P$                  P&                  P)                  V4       F  q3NK  	  K6  	  ppp\        P*                  ! 4       pVP-                  V4       V# ;\        P                  P2                  8X  d    V P                  '       g   \        R4      hV P                  P                  RV P                   R24       \        P4                  ! V P"                  V P                  V P                  R7      # \        P                  P6                  8X  d   V P                  '       g   \        R4      hV P                  P                  RV P                   R24       \        P4                  ! V P"                  V P                  RV P                  R7      p\        P8                  ! VRR7      #  \        RV P                   24      hu uppi u uppi   \:         d    p\<        P>                  ! RT 24      ThRp?ii ; i)a  
Return the results of the analysis as a NetworkX directed graph.
Caller has the responsibility of converting the graph to a
visualization.

For example, to convert to a pygraphviz graph:
    pgv = nx.nx_agraph.to_agraph(g.graphical_results())
    pgv.layout(prog="dot")
z4Generating graphical domain transition results from r   r   r   r   r   z?Generating graphical all shortest domain transition paths from r   r   r   r   r   r   r   .r   r   r   Tr   Frz   r   z&Unable to generate graphical results: N) rv   r   r|   r   rq   r   rW   rX   rn   ro   r   rk   rg   r   r   rw   r   r{   utilsmiscpairwiserx   Zadd_edges_fromrh   r   ri   Zbfs_treerj   rm   Z	Exceptionr	   ZAnalysisException)r"   Zpathsr   ZpairedgesZoutZex   &      r   graphical_resultsZ*DomainTransitionAnalysis.graphical_results  s      "LT[[MZ[,$++(),$++()*$))%9(8(8':;<3	G))@-22@@T[[9::()UVVHHMM"c%)[[Mdkk]##G H11$))T[[$++VE.3]ed@V@VW[@\T@\TeE]**,C&&u-J;-22;;T[[9::()UVVHHMM$PQUQ\Q\P] ^((,}M$BRBRASSV#X Y//		4;;7;7G7GIE.3]ed@V@VW[@\T@\TeE]**,C&&u-JA-22AA;;;()IJJHHMM$Mdkk]Z["\];;tyy$++4K[K[\\-22@@;;;()IJJHHMM$KDKK=XY"Z[++diid262B2BDC ::c66$'>tyyk%JKKM ^ ^4  	G--8=?DFG	GsX   CS $:R5*S 	CS &:R; *S 1S =A*S (/S BS %S S+S&&S+c                r%   r&   r'   r   r   r   r   rs   b  s     # #3 #r   c                s   V P                   '       d   V P                  4        R\        P                  ! V P                  4      : R\        P
                  ! V P                  4      : R\        V P                  4      : R2# )z:
Get the domain transition graph statistics.

Return: str
znx.number_of_nodes(self.G)=z
nx.number_of_edges(self.G)=z
len(self.G)=r5   )ru   _build_graphrw   number_of_nodesry   number_of_edgesZlenra   rb   r   	get_statsZ"DomainTransitionAnalysis.get_statsb  sk     -"$$TVV,. /.$$TVV,. /dff+r# 	#r   c                s4   < V ^8  d   QhRRRS[ S[,          /# )r   r   r   r   )r@   r   r   r   r   r   rs   s  s!     * *F *t4D/E *r   c           
     s    V P                    Uu. uFC  p\        WP                   V,          V P                  V,          V P                  V,          4      NKE  	  up# u upi )aR  
Creates a list of entrypoint, execute, and
type_transition rules for each entrypoint.

Parameter:
data     The dictionary of entrypoints.

Return: list of tuple(type, entry, exec, trans)

type     The entrypoint type.
entry    The list of entrypoint rules.
exec     The list of execute rules.
trans    The list of type_transition rules.
)r8   r   r:   r;   )r   r.   r/   r   r   Z.DomainTransitionAnalysis._generate_entrypointsr  sS    " *(A !OOA$6QI]I]^_I`a(* 	* *s   A	Ac                sJ   < V ^8  d   QhRS[ S[P                  ,          RS[/# )r   r   r   )r@   r   r?   r   r   r   r   r   rs     s$     $4 $4D$8 $4W $4r   c           
   #  s^  "   \         P                  P                  P                  V4       F{  w  r#\	        V P
                  W#4      pV P                  '       d   Y2reMY#re\        WVVP                  V P                  V4      VP                  VP                  VP                  4      x  K}  	  R# 5i)a  
Generator which yields the source, target, and associated rules
for each domain transition.

Parameter:
path     A list of graph node names representing an information flow path.

Yield: tuple(source, target, transition, entrypoints,
             setexec, dyntransition, setcurrent)

source          The source type for this step of the domain transition.
target          The target type for this step of the domain transition.
transition      The list of transition rules.
entrypoints     Generator which yields entrypoint-related rules.
setexec         The list of setexec rules.
dyntranstion    The list of dynamic transition rules.
setcurrent      The list of setcurrent rules.
N)rw   r   r   r   r   r{   rm   r   rY   r   rZ   r\   r]   )r"   r   rW   rX   r   Zreal_sourceZreal_targets   &&     r   r   Z(DomainTransitionAnalysis._generate_steps  s     ( !hhmm44T:NF		62D
 |||+1[+1[";#'??#'#=#=d#C#'<<#'#5#5#'??4 4 ;s   B+B-c                r   r}   r+   r   r   r   r   rs     s     R5 R5d R5r   c           	     s   V P                   P                  4        R V P                   R2V P                   n        V P                  P                  RV P                   R24       \        \        4      p\        \        4      p\        R 4      p\        R 4      p\        R 4      pV P                  P                  4        EF  pVP                  \        P                  P                  8X  Ed   VP                  R9  d   KA  VP                  R8X  Ed   RVP                  9   d   \        P                   ! VP"                  P%                  4       VP&                  P%                  4       4       F@  w  rxWx8w  g   K  \)        V P                   WxR	R
7      p	V	P*                  P-                  V4       KB  	  RVP                  9   d   \        P                   ! VP"                  P%                  4       VP&                  P%                  4       4       F@  w  rxWx8w  g   K  \)        V P                   WxR	R
7      p
V
P.                  P-                  V4       KB  	  RVP                  9   d9   VP"                  P%                  4        F  pW,          P-                  V4       K  	  RVP                  9   d<   VP"                  P%                  4        F  pW',          P-                  V4       K  	  EK   EK#  RVP                  9   do   \        P                   ! VP"                  P%                  4       VP&                  P%                  4       4       F#  w  rxW7,          V,          P-                  V4       K%  	  RVP                  9   dr   \        P                   ! VP"                  P%                  4       VP&                  P%                  4       4       F#  w  rxWG,          V,          P-                  V4       K%  	  EK$  EK'  VP                  \        P                  P0                  8X  g   EKS  VP                  R8w  d   EKg  VP2                  p\        P                   ! VP"                  P%                  4       VP&                  P%                  4       4       F*  w  rxWW,          V,          V,          P-                  V4       K,  	  EK  	  . p. p. pV P                   P5                  4        EFF  w  rx\)        V P                   Wx4      p	RpRpV	P*                  '       Edw   \7        WH,          P9                  4       4      p\7        W7,          P9                  4       4      pVP;                  V4      pV'       g   R	pEMV F  pWq9   g   WW,          V,          '       dY   V	P<                  V;;,          WH,          V,          ,          uu&   V	P>                  V;;,          W7,          V,          ,          uu&   WW,          V,          V,          '       g   K  V	P0                  V;;,          WW,          V,          V,          ,          uu&   K  	  Wq9   d"   V	P@                  PC                  W,          4       V	P@                  '       g   V	P0                  '       g   R	pMR	pV	P.                  '       d,   Wr9   d#   V	PD                  PC                  W',          4       MR	pMR	pV'       d   V'       d   VP-                  V	4       EK  V'       d   VP-                  V	4       EK*  V'       g   EK5  VP-                  V	4       EKI  	  V P                   PG                  V4       V F  p	V	=V	=V	=V	=V	= K  	  V F  p	V	=V	="K	  	  RV n$        R	V n%        V P                  P                  R4       V P                  PM                  R\N        PP                  ! V P                   4       R\N        PR                  ! V P                   4       R24       R# )zDomain transition graph for r   z&Building domain transition graph from r   c                       \        \        4      # r    r   r@   r+   r   r   <lambda>7DomainTransitionAnalysis._build_graph.<locals>.<lambda>  s
    [Y]M^r   c                  r   r    r   r+   r   r   r   r     s    P[\`Par   c                  s    \        R  4      # )c                  r   r    r   r+   r   r   r   ZIDomainTransitionAnalysis._build_graph.<locals>.<lambda>.<locals>.<lambda>  s	    K4Er   r    r+   r   r   r   r     s
    ,E Fr   processrY   T)creater\   rZ   r]   r:   r8   Fz+Completed building domain transition graph.zGraph stats: nodes: 	, edges: N)r   Zfile)*ry   Zclearrq   r!   r|   r   r   r@   ZterulesZruletyper   Z
TERuletypeZallowZtclassZperms	itertoolsZproductrW   ZexpandrX   r   rY   r9   r\   r;   Zdefaultr   setZkeysZintersectionr8   r:   rZ   r6   r]   remove_edges_fromru   rv   r   rw   r   r   )r"   rZ   r]   r:   r8   Z
type_transZrulerT   r4   r   r.   rU   Zinvalid_edgeZclear_transitionZclear_dyntransitionZinvalid_transZinvalid_dyntransZentryZexeZmatchZms   &                    r   r   Z%DomainTransitionAnalysis._build_graph  s   4T[[MC>t{{m3OP (-*40

 :EE^9_<GHa<b
 FG 	 KK'')D}}	 4 4 : ::;;&99;;)+#tzz1$-$5$5dkk6H6H6JDKKL^L^L`$aDA  !v'+DFFA'F $ 6 6t < %b '$**4$-$5$5dkk6H6H6JDKKL^L^L`$aDA  !v$(d$C ! 6 6t < %b !DJJ.!%!3!3!5A#J--d3 "6 $tzz1!%!3!3!5A&M006 "6 2
 !DJJ.$-$5$5 $ 2 2 4 $ 2 2 4%6DA $JqM006%6
 $tzz1$-$5$5dkk6H6H6JDKKL^L^L`$aDA&M!,33D9 %b 2 )"6"6"F"FF;;)+LL%--dkk.@.@.BDKKDVDVDXYDAM!$Q'..t4 Z] *b $&')*,FFLLNDA%D!M$JM..01'*//+,**3/$(M #<:=+;+; OOA.*-2BB. LLOwz!}<O%=+A.. 003z}Q7G7JJ3 # |++GJ7<<<0D0D0D(, $!!!?OO**:=9'+$#'  !1##D) ''-!!#**40e #j 	  .$D $ % (D "	 ( "#CD"2#5#5dff#="> ?((014	5r   c                r   r}   r+   r   r   r   r   rs   u  s     3 3d 3r   c           	     s`   . pV P                   P                  4        F  w  r#\        V P                   W#4      p\        VP                  4      pVP                  V P                  4       V'       g   KU  V FJ  pVP                  V VP                  V \        \        4      ;_uu_ 4        VP                  V R R R 4       KL  	  VP                  '       d   K  VP                  '       d   K  VP                  V4       K  	  V P                   P                  V4       R #   + '       g   i     K  ; ir    )r{   r   r   r   r8   Zintersection_updaterp   r:   r   ZKeyErrorr;   r\   r9   r   )r"   Zinvalid_edgesrW   rX   r   r[   r.   r   r   _remove_excluded_entrypointsZ5DomainTransitionAnalysis._remove_excluded_entrypointsu  s    $&"iioo/NF		62Ddoo.K++DLL9   OOA&LLOh'',,Q/ (' ! ???4+=+=+=$$T*- 00 			##M2 (''s   (D	D-c                r   r}   r+   r   r   r   r   rs     s     8 8 8r   c                s"   V P                   '       d   V P                  4        V P                  P                  R 4       V P                  P	                  RV P
                  : RV P                  : 24       V P
                  '       d#   V P                  P                  RR7      V n        MV P                  P                  4       V n        V P                  '       d6   V P                  P                  V P                  4       V P                  4        RV n        V P                  P                  R4       V P                  P	                  R\        P                  ! V P                  4       R\        P                  ! V P                  4       R	24       R
# )z$Building domain transition subgraph.zself.reverse=z self.exclude=Tr   Fz.Completed building domain transition subgraph.zSubgraph stats: nodes: r   r   N)ru   r   r|   r   r   rm   rp   ry   r{   rz   Zremove_nodes_fromr   rv   rw   r   r   ra   rb   r   r   Z(DomainTransitionAnalysis._build_subgraph  s   <=-$,,$,,9: <<<D1DIDI<<<II''5 --/$FG%b&8&8&C%D E((34A7	8r   c                s   < V ^8  d   Qh/ S[ P                  S[S[R3,          ,          ;R&   S[ P                  S[S[R3,          ,          ;R&   # )r   .DIRECT_MODESTRANSITIVE_MODES)typingFinaltuplerk   r   r   r   r   rs   q   sC     2 ,,uT3Y/0\3 4 ll5s#34Z5 r   )ry   r   r   r   ru   rv   r{   )'rB   rC   rD   rE   rF   enumZEnumrk   rj   ri   r   rg   rh   r   r   r   r?   rW   rX   rn   rt   Zpropertyro   Zsetterrm   rp   r   r   r   Zstaticmethodr   r   r   r   r   rG   rH   rI   rc   rd   re   r   r   r   q   s    >tyy > 594F4FH[H[3\L8<8J8JDMM7Z	/NF	/NFD!&7; 8< #00	
 ,- CG 4 ! ! " "   ^^$ $   ^^$ $JL JLXGG GGR# #  * *$$4 $4xR5 R5h3 388 8A  r   c                   s   a  ] tR tRt o RtRt]! 4       t]! 4       t]! 4       t	]! 4       t
]! 4       t]! 4       t]! 4       tV 3R lR ltV 3R ltRtV tR# )	r   i  a/  
A graph edge.  Also used for returning domain transition steps.

Parameters:
graph       The NetworkX graph.
source      The source type of the edge.
target      The target type of the edge.

Keyword Parameters:
create      (T/F) create the edge if it does not exist.
            The default is False.
Fc                r   r}   r+   r   r   r   r   Edge.__annotate__  s     A At Ar   c                s^   V P                   P                  V P                  V P                  4      '       gw   V'       dd   V P                   P	                  V P                  V P                  4       R V n        R V n        R V n        R V n        R V n	        R V n
        R V n        R # \        R4      hR # )NzEdge does not exist in graph)ry   Zhas_edgerW   rX   Zadd_edgerY   r8   r:   r;   rZ   r\   r]   r   )r"   r   r#   r   __post_init__ZEdge.__post_init__  s    vvt{{DKK88T[[9"&"&#'+$#%)""& !?@@ 9r   c                s   < V ^8  d   Qh/ R;R&   S[ P                  ;R&   S[ P                  ;R&   S[S[,          ;R&   # )r   r   ry   rW   rX   r   )r   r?   r   r   r   r   r   r   r     sD       O! " NN# $ NN% & DM!' r   )r\   r8   r:   r]   rZ   rY   r;   N)rB   rC   rD   rE   rF   r   r   rY   rZ   r\   r]   r   r8   r:   r;   r   rG   rH   rI   rJ   rK   r   r   r     sU       "FJnG NMJJnG"nOA A9  r   r   c                s    V ^8  d   Qh/ ^ \         9   d,   \        P                  \        \        R3,          ,          ;R&   # )r   .__all__)__conditional_annotations__r   r   r   r(   )r   s   "r   r   r      s-    &5 5eCHo	& 5' r   )r   r   r   r   )0r   r   r   ZloggingZcollectionsr   Zcollections.abcr   Z
contextlibr   Zdataclassesr   r   r   Znetworkxrw   Znetworkx.exceptionr   r   r   ZImportErrorZiexZ	getLoggerrB   r   r!   rV   r	   r
   r   r   Zdescriptorsr   r   r   r   r   r   r   r?   r@   rA   ZRuleHashZDirectedGraphAnalysisr   ZNetworkXGraphEdger   r   )r   rK   r   <module>r      s      # $  * GNN
 2 1 G G*5 5      8 *' *' *'` #
$y~~tI,?,?'@@Ax8u:: x8v 'A6## 'A 'Au  Gh%%
2D&EFFGs   C D!.DD