
    ni2                       S SK JrJr  S SKJs  Js  Js  Jr  S SK	Js  Js  Js  J
r  S SKJs  Js  Js  Jr  S SKJr  S SKrS SKJrJr  \R(                  R*                  r\R(                  R/                  \R(                  R*                  S5      r\R(                  R3                  \\R                  5      r\R(                  R3                  \\R                  5      r\R(                  R9                  \5      r\R(                  R9                  \5      r\R(                  R                  \R(                  R*                  \R                  \R(                  R9                  \R(                  R*                  5      45      r\R(                  R                  \R(                  R*                  \R(                  R*                  \R(                  R@                  45      r!\R(                  R                  \R(                  RD                  \\R                  \R                  \R(                  RF                  \R(                  RF                  45      r$\R(                  R                  \R(                  RD                  \\R                  \R                  \R(                  RF                  \R(                  RF                  45      r%\R(                  R                  \\R(                  R9                  \R(                  R9                  \R                  5      5      \R(                  R9                  \R(                  R9                  \5      5      \R(                  R9                  \R(                  R9                  \5      5      \R(                  R                  \R(                  R9                  \5      \R(                  R9                  \5      \R                  45      45      r&\R(                  R                  \\R(                  R9                  \R(                  R9                  \R                  5      5      \R(                  R9                  \R(                  R9                  \5      5      \R(                  R9                  \R(                  R9                  \5      5      \R(                  R                  \R(                  R9                  \5      \R(                  R9                  \5      \R                  45      45      r'\R(                  R                  \R(                  RD                  \\R                  \R                  \R(                  RF                  45      r(\R(                  R                  \R(                  RD                  \\R                  \R                  \R(                  RF                  45      r)\R(                  R                  \R(                  R9                  \R(                  R9                  \5      5      \R(                  R9                  \R(                  R9                  \5      5      \R(                  R*                  45      r*\R(                  R                  \R(                  R9                  \5      \R(                  R9                  \5      \R                  45      r+ " S S5      r,\RZ                  " SS	9S
 5       r.\RZ                  " SS	9S 5       r/\RZ                  " SS	9S 5       r0\RZ                  " SS	9S 5       r1\RZ                  " SS	9S 5       r2\RZ                  " SS	9S 5       r3\RZ                  " SS	9S 5       r4\RZ                  " SS	9S 5       r5\RZ                  " SS	9S 5       r6\RZ                  " SS	9S 5       r7\RZ                  " SS	9S/S j5       r8\RZ                  " SS	9S/S j5       r9\RZ                  " SS	9S 5       r:\RZ                  " SS	9S 5       r;\RZ                  " SS	9S 5       r<\RZ                  " SS	9S 5       r=\RZ                  " SS	9S 5       r>\RZ                  " SS	9S 5       r?\RZ                  " SS	9S 5       r@\RZ                  " SS	9S 5       rA\RZ                  " SS	9S 5       rB\RZ                  " SS	9S 5       rC\RZ                  " SS	9S  5       rD\RZ                  " SS	9S! 5       rE\RZ                  " SS	9S" 5       rF\RZ                  " SS	9S# 5       rG\RZ                  " SS	9S$ 5       rH\RZ                  " SS	9S% 5       rI\RZ                  " SS	9S& 5       rJ\RZ                  " SS	9S' 5       rK\RZ                  " SS	9S( 5       rL\RZ                  " SS	9S) 5       rM\RZ                  " SS	9S* 5       rN\RZ                  " SS	9S+ 5       rO\RZ                  " SS	9S, 5       rP\RZ                  " SS	9S- 5       rQ\RZ                  " SS	9S. 5       rRg)0    )UnionTupleN)InterpretationDict)objmodeprange   c                      \ rS rSr\R
                  R                  R                  \R                  \R                  R                  \5      S9r\R
                  R                  R                  \R                  \R                  R                  \5      S9rS r\\R$                  " SS9S 5       5       r\\R$                  " SS9S 5       5       r\\R$                  " SS9S 5       5       r\\R$                  " SS9S	 5       5       rSS jr\\R$                  " SS9S 5       5       rS r\\R$                  " SS
S9S 5       5       rS rS rS rS rS rS r SS\!\"\#\$\$4   4   4S jjr%Sr&g)Interpretation:   key_type
value_typec           
         Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        [        R                  R                  R                  [        R                   R"                  5      U l        U R$                  R'                  S5        SU l        [        R                  R                  SS/5      U l        [        R                  R                  R                  [,        5      U l        [        R                  R                  R                  [,        5      U l        [        R                  R                  R                  [        R                   R2                  5      U l        [        R                  R                  R                  [        R                   R2                  5      U l        [        R                  R                  R                  [8        5      U l        [        R                  R                  R                  [<        5      U l        [        R                  R                  R                  [@        5      U l!        [        R                  R                  R                  [D        5      U l#        [        R                  R                  R                  [        R                   RI                  [        R                   RK                  [L        5      [        R                   RK                  [L        5      [N        RP                  45      5      U l)        [        R                  R                  R                  [        R                   RI                  [        R                   RK                  [L        5      [        R                   RK                  [L        5      [N        RP                  45      5      U l*        [        R                  R                  R                  [        R                   RI                  [        R                   RK                  [        R                   RK                  [L        5      5      [        R                   RK                  [        R                   RK                  [V        5      5      [X        RZ                  [        R                   R2                  45      5      U l.        [        R                  R                  R                  [        R                   RI                  [        R                   RK                  [        R                   RK                  [L        5      5      [        R                   RK                  [        R                   RK                  [V        5      5      [X        RZ                  [        R                   R2                  45      5      U l/        [        R                  R                  R                  [        R                   RI                  [        R                   R`                  [        R                   R`                  [L        [N        RP                  [X        RZ                  45      5      U l1        [        R                  R                  R                  [        R                   RI                  [        R                   R`                  [        R                   R`                  [V        [N        RP                  [X        RZ                  45      5      U l2        [        R                  R                  R                  [L        5      U l3        [        R                  R                  R                  [V        5      U l4        U Rf                  Rk                  [        R                  R                  U R                   Rg                  5       5      5        U Rh                  Rk                  [        R                  R                  U R                   Ri                  5       5      5        U Rm                  U Rf                  U Rn                  5      u  U l8        U l9        U Ru                  U Rh                  U Rv                  5      u  U l<        U l=        [        R                  R|                  R                  [L        [        R                   RK                  [L        5      S9U l@        U R                   Rg                  5        Hw  n[        R                  R                  R                  [L        5      nU R                   R                  U5       Vs/ s H  oR'                  U5      PM       nXR                  U'   My     U R                  U R                  5      U lB        g s  snf )Nr   r   )Cgraphiplannotation_functionshead_functionsreverse_graph
atom_trace#save_graph_attributes_to_rule_trace
persistentinconsistency_checkstore_interpretation_changesupdate_modeallow_ground_rulesnumbatypedList
empty_listtypesint64num_gaappendtimeprev_reasoning_datarules_to_be_applied_trace_typerules_to_be_applied_node_tracerules_to_be_applied_edge_tracestringfacts_to_be_applied_node_tracefacts_to_be_applied_edge_tracerules_to_be_applied_node_typerules_to_be_applied_noderules_to_be_applied_edge_typerules_to_be_applied_edgefacts_to_be_applied_node_typefacts_to_be_applied_nodefacts_to_be_applied_edge_typefacts_to_be_applied_edger   ListType	node_typelabel
label_typeedges_to_be_added_node_ruleedges_to_be_added_edge_rule	edge_typeintervalinterval_typerule_trace_node_atomsrule_trace_edge_atomsuint16rule_trace_noderule_trace_edgenodesedgesextend_init_interpretations_nodespecific_node_labelsinterpretations_nodepredicate_map_node_init_interpretations_edgespecific_edge_labelsinterpretations_edgepredicate_map_edgeDictempty	neighbors_init_reverse_neighborsreverse_neighbors)selfr   r   r   r   r   r   r   r   r   r   r   r   nlneighs                   k/home/james-whalen/.local/lib/python3.13/site-packages/pyreason/scripts/interpretation/interpretation_fp.py__init__Interpretation.__init__>   s]   *(2&$/-P*/0&B# .   ++EKK,=,=>$+++Q $)"[[--q!f5$ ).(8(8(C(CDb(c$%(-(8(8(C(CDb(c$%(-(8(8(C(CEKKDVDV(W$%(-(8(8(C(CEKKDVDV(W$%"'++"2"2"="=>["\$"'++"2"2"="=>["\$"'++"2"2"="=>["\$"'++"2"2"="=>["\$%*[[%5%5%@%@ARARTYT_T_ThThirTsuz  vA  vA  vJ  vJ  KT  vU  W\  Wg  Wg  Th  Bi  &j$"%*[[%5%5%@%@ARARTYT_T_ThThirTsuz  vA  vA  vJ  vJ  KT  vU  W\  Wg  Wg  Th  Bi  &j$"  %{{//::5;;;L;LekkNbNbchcncncwcw  yB  dC  OD  FK  FQ  FQ  FZ  FZ  [`  [f  [f  [o  [o  py  [z  F{  }E  }S  }S  UZ  U`  U`  Ug  Ug  Nh  <i   j$${{//::5;;;L;LekkNbNbchcncncwcw  yB  dC  OD  FK  FQ  FQ  FZ  FZ  [`  [f  [f  [o  [o  py  [z  F{  }E  }S  }S  UZ  U`  U`  Ug  Ug  Nh  <i   j$))44U[[5F5FHZHZ\a\g\g\n\npy  |A  |L  |L  NV  Nd  Nd  He  6f  g$))44U[[5F5FHZHZ\a\g\g\n\npy  |A  |L  |L  NV  Nd  Nd  He  6f  g$ {{**95$*{{**95$***EKK$$TZZ%5%5%789**EKK$$TZZ%5%5%7897;7V7VW[WaWacgc|c|7}4$T47;7V7VW[WaWacgc|c|7}4$T4 ;;##))9I]I]^gIh)i$.::a{{""9-1!%!5!5a!89!8HHUO!89>>! 
  77G$ :s   eTcachec                    [         R                  R                  R                  [        [
        S9nU R                  5        H  u  p#U HG  nXA;   a  X!U   ;  a  X   R                  U5        M%  [         R                  R                  U/5      X'   MI     X!;  d  MY  [         R                  R                  R                  [        5      X'   M     U$ )Nr   )
r   r   rM   rN   r5   list_of_nodesitemsr#   r   r   )rO   rQ   rS   neighbor_nodesneighbor_nodes        rV   rP   &Interpretation._init_reverse_neighborsx   s     kk&&,,iM,Z$??,a&})a7W.W%,,Q/(-(8(8!(=%	 '   ;;++66yA - 
    c                    [         R                  R                  R                  [         R                  R
                  [        S9n[         R                  R                  R                  [        R                  [        S9n[         R                  R                  R                  [        [        R                  S9US'   UR                  5        H&  u  pE[         R                  R                  U5      X4'   M(     X#4$ Nr   r   )r   r   rM   rN   r    r!   node_to_world_typer6   r7   r\   r5   world
world_typer]   r   )rB   specific_labelsinterpretationspredicate_maprT   nss         rV   rE   )Interpretation._init_interpretations_node        KK$$**EKK4E4ERd*e/++""((%2B2B}(]- {{''--yUM]M]-^/! $$&eakk&&r*= ' 
	''ra   c                    [         R                  R                  R                  [         R                  R
                  [        S9n[         R                  R                  R                  [        R                  [        S9n[         R                  R                  R                  [        [        R                  S9US'   UR                  5        H&  u  pE[         R                  R                  U5      X4'   M(     X#4$ rc   )r   r   rM   rN   r    r!   edge_to_world_typer6   r7   list_of_edgesr:   re   rf   r]   r   )rC   rg   rh   ri   rT   ess         rV   rI   )Interpretation._init_interpretations_edge   rl   ra   c                 P    U S:X  a  US:X  a  SnSnX#4$ U S:X  a  SnUnX#4$ SnU nX#4$ )Nperfect_convergencer   delta_interpretationdelta_bound )convergence_bound_thresholdconvergence_thresholdconvergence_modeconvergence_deltas       rV   _init_convergence Interpretation._init_convergence   sc     !"$)>)B+ 
	,, #B&,, 
	,, $2		,,ra   Fc
           	         Xl         U R                  Xv5      u  U l        U l        U R	                  X#U R
                  U R                  U R                  U R                  U R                  5      n
U R                  XJXXU	5        g N)tmaxr|   _convergence_mode_convergence_delta_init_factsr1   r3   r*   r+   r   	_start_fp)rR   r   
facts_node
facts_edgerulesverbosery   rx   againrestartmax_facts_times              rV   start_fpInterpretation.start_fp   s    )484J4JKf4~1$$1##JD<Y<Y[_[x[xz~  {^  {^  `d  `C  `C  EI  ET  ET  U...@ra   c           
         SnU  H  n[        UR                  5       UR                  5       S-   5       H  n	[        Xy5      nUR	                  5       n
U
S:X  a  SOSnUR                  [        R                  R                  U	5      UR                  5       UR                  5       UR                  5       UR                  U45        U(       d  M  UR                  UR	                  5       5        M     M     U H  n[        UR                  5       UR                  5       S-   5       H  n	[        Xy5      nUR	                  5       n
U
S:X  a  SOSnUR                  [        R                  R                  U	5      UR                  5       UR                  5       UR                  5       UR                  U45        U(       d  M  UR                  UR	                  5       5        M     M     U$ )Nr      graph-attribute-factTF)rangeget_time_lowerget_time_uppermaxget_namer#   r   r    r?   get_component	get_label	get_boundstatic)r   r   r1   r3   r*   r+   r   max_timefacttnamegraph_attributes               rV   r   Interpretation._init_facts   s    (d$%%')<)<)>)BCq8H==?D"$::dO##U[[%7%7%:D<N<N<PRVR`R`Rbdhdrdrdtvz  wB  wB  DS  %T  Uz#**4==?; D  d$%%')<)<)>)BCq8H==?D"$::dO##U[[%7%7%:D<N<N<PRVR`R`Rbdhdrdrdtvz  wB  wB  DS  %T  Uz#**4==?; D  
/ra   c                 l   U(       a  U(       a  SU l         SU R                  S'   U R                  " / U R                  PU R                  PU R
                  PU R                  PU R                  PU R                  PUPU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                   PU R"                  PU R$                  PU R&                  PU R(                  PU R*                  PU R,                  PU R.                  PU R0                  PU R2                  PU R4                  PU R6                  PU R8                  PU R:                  PU R<                  PU R>                  PU R@                  PU RB                  PU RD                  PUPU RF                  PU RH                  PU RJ                  PU RL                  PUPUP76 u  pgUS-
  U l         XpR                  S'   X`R                  S'   U(       a  [O        SU5        g g )Nr   r   zFixed Point iterations:)(r$   r%   reasonrG   rK   rH   rL   r   rB   rC   rO   rQ   r-   r/   r8   r9   r'   r(   r1   r3   r*   r+   r   r@   rA   r=   r>   r   r   r   r   r   r   r   r   r   r   r   r   print)rR   r   r   r   r   r   fp_cntr   s           rV   r   Interpretation._start_fp   s[   
DI"#DQkk  y$33  yT5N5N  yPTPgPg  yim  jA  jA  y  CG  CL  CL  y  NR  Nf  Nf  y  hm  y  os  oy  oy  y  {  {E  {E  y  GK  GU  GU  y  W[  Wm  Wm  y  os  oL  oL  y  NR  Nk  Nk  y  mq  mM  mM  y  OS  Oo  Oo  y  qu  qT  qT  y  VZ  Vy  Vy  y  {  {X  {X  y  Z^  Zw  Zw  y  y}  y\  y\  y  ^b  ^A	  ^A	  y  C	G	  C	K	  C	K	  y  M	Q	  M	a	  M	a	  y  c	g	  c	w	  c	w	  y  y	}	  y	S
  y	S
  y  U
Y
  U
o
  U
o
  y  q
u
  q
C  q
C  y  EI  ET  ET  y  VZ  V~  V~  y  @D  @O  @O  y  QU  Qi  Qi  y  ko  kL  kL  y  NR  N^  N^  y  `d  `w  `w  y  yG  y  IM  Ib  Ib  y  dh  dw  dw  y  y}  yO  yO  y  QU  Qh  Qh  y  jq  y  sx  y)&!e$) !1 &1	"F+ ra   )rZ   parallelc)                  A   US   n)U)n*U)n+US   n,Sn-Sn.Sn/[         R                  R                  R                  [        5      n0[         R                  R                  R                  [
        5      n1[         R                  R                  R                  [         R                  R                  5      n2[         R                  R                  R                  [         R                  R                  5      n3[        5       n4U4R                  S5        U.(       Ga,  Sn5US   n)U/(       d  GOSn/U5(       Ga^  U)U:X  a  Sn5U'(       a  [        5          [        SU)SS9  S S S 5        U)U ;  d  U,S:X  a=  [         R                  R                  R                  [        [        R                   S9U U)'   U)S:  a  U(       a  U U)S-
     n6U6 H  n7U7U U)   ;  aQ  [        R"                  " [         R                  R                  R                  [$        R&                  5      5      U U)   U7'   U6U7   R                  n8U U)   U7   R                  n9U8 H'  n:U,S:X  d  U:U9;  d  M  U8U:   R)                  5       U9U:'   M)     M     OU)S:  a  U(       d  U U)S-
     n6U6 H  n7U7U U)   ;  aQ  [        R"                  " [         R                  R                  R                  [$        R&                  5      5      U U)   U7'   U6U7   R                  n8U U)   U7   R                  n9U8 HA  n:U8U:   R+                  5       (       d  M  U,S:X  d  U:U9;  d  M+  U8U:   R)                  5       U9U:'   MC     M     U)U;  d  U,S:X  a=  [         R                  R                  R                  [,        [        R                   S9UU)'   U)S:  a  U(       a  UU)S-
     n6U6 H  n;U;UU)   ;  aQ  [        R"                  " [         R                  R                  R                  [$        R&                  5      5      UU)   U;'   U6U;   R                  n8UU)   U;   R                  n9U8 H'  n:U,S:X  d  U:U9;  d  M  U8U:   R)                  5       U9U:'   M)     M     OU)S:  a  U(       d  UU)S-
     n6U6 H  n;U;UU)   ;  aQ  [        R"                  " [         R                  R                  R                  [$        R&                  5      5      UU)   U;'   U6U;   R                  n8UU)   U;   R                  n9U8 HA  n:U8U:   R+                  5       (       d  M  U,S:X  d  U:U9;  d  M+  U8U:   R)                  5       U9U:'   MC     M     Sn<Sn=Sn/U0R/                  5         U2R/                  5         [        U5      n>[1        [3        U5      5       GH  n?UU?   S   U):X  Ga  UU?   S   UU?   S	   UU?   S
   UU?   S   UU?   S   4u  n@n:nAnBnCU@U>;  a"  U>R                  W@5        [5        U@XXpU)   5        OW@U U)   ;  a  [7        W@U U)   5        U:U U)   W@   R                  ;   Ga  U U)   W@   R                  U:   R+                  5       (       Ga  U(       d  WC(       Gd  U(       Ga  UR9                  [         R                  R;                  U)5      [         R                  R;                  U,5      W@U:WA45        U(       a  [=        U[         R                  R                  R                  [         R                  R                  R                  [        5      5      [         R                  R                  R                  [         R                  R                  R                  [,        5      5      WAUU?   5        U GH  u  nDnEUDU::X  Ga9  UR9                  [         R                  R;                  U)5      [         R                  R;                  U,5      W@WEU U)   U@   R                  UE   45        U(       a  [=        U[         R                  R                  R                  [         R                  R                  R                  [        5      5      [         R                  R                  R                  [         R                  R                  R                  [,        5      5      U U)   W@   R                  WE   UU?   5        GMD  GMG  WEU::X  d  GMP  UR9                  [         R                  R;                  U)5      [         R                  R;                  U,5      W@WDU U)   U@   R                  UD   45        U(       d  GM  [=        U[         R                  R                  R                  [         R                  R                  R                  [        5      5      [         R                  R                  R                  [         R                  R                  R                  [,        5      5      U U)   W@   R                  WD   UU?   5        GM     GO[?        U U)   W@U:WA45      (       ao  WC(       a  SOSnFU S:X  a  SOSnG[A        U U)   UW@U:WA4UUU,U)WBU%UUUU?UUUWFUGS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        U=WI5      n=OU<WI-  n<OWC(       a  SOSnFU(       a  [E        U U)   W@U:WA4UU)U,U?UUUUUUWFS9  OY[A        U U)   UW@U:WA4UUU,U)WBU%UUUU?UUUWFSS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        U=WI5      n=OU<WI-  n<WB(       a^  U0R9                  [         R                  R;                  UU?   S   S-   5      W@U:WAWBWC45        U(       a  U2R9                  UU?   5        GM  GM  GM  U0R9                  UU?   5        U(       d  GM  U2R9                  UU?   5        GM     U0R)                  5       US S & U(       a  U2R)                  5       US S & U0R/                  5         U2R/                  5         U1R/                  5         U3R/                  5         [        U5      nJ[1        [3        U5      5       GHL  n?UU?   S   U):X  Ga	  UU?   S   UU?   S	   UU?   S
   UU?   S   UU?   S   4u  n@n:nAnBnCU@WJ;  aE  [G        W@S   U@S   XXx[$        RH                  " S5      U U)   UU)   UU)5        WJR                  U@5        OW@UU)   ;  a  [K        W@UU)   5        U:UU)   W@   R                  ;   Ga  UU)   W@   R                  U:   R+                  5       (       Ga  U(       d  WC(       Gd  U(       Ga  UR9                  [         R                  R;                  U)5      [         R                  R;                  U,5      W@U:UU)   U@   R                  U:   45        U(       a  [=        U[         R                  R                  R                  [         R                  R                  R                  [        5      5      [         R                  R                  R                  [         R                  R                  R                  [,        5      5      WAUU?   5        U GH  u  nDnEUDU::X  Ga9  UR9                  [         R                  R;                  U)5      [         R                  R;                  U,5      W@WEUU)   U@   R                  UE   45        U(       a  [=        U[         R                  R                  R                  [         R                  R                  R                  [        5      5      [         R                  R                  R                  [         R                  R                  R                  [,        5      5      UU)   W@   R                  WE   UU?   5        GMD  GMG  WEU::X  d  GMP  UR9                  [         R                  R;                  U)5      [         R                  R;                  U,5      W@WDUU)   U@   R                  UD   45        U(       d  GM  [=        U[         R                  R                  R                  [         R                  R                  R                  [        5      5      [         R                  R                  R                  [         R                  R                  R                  [,        5      5      UU)   W@   R                  WD   UU?   5        GM     GO[M        UU)   W@U:WA45      (       ao  WC(       a  SOSnFU S:X  a  SOSnG[O        UU)   UW@U:WA4UUU,U)WBU%UUUU?UUUWFUGS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        U=WI5      n=OU<WI-  n<OWC(       a  SOSnFU(       a  [Q        UU)   W@U:WA4UU)U,U?UUUUUUWFS9  OY[O        UU)   UW@U:WA4UUU,U)WBU%UUUU?UUUWFSS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        U=WI5      n=OU<WI-  n<WB(       a^  U1R9                  [         R                  R;                  UU?   S   S-   5      W@U:WAWBWC45        U(       a  U3R9                  UU?   5        GM  GM  GM  U1R9                  UU?   5        U(       d  GM8  U3R9                  UU?   5        GMO     U1R)                  5       US S & U(       a  U3R)                  5       US S & U1R/                  5         U3R/                  5         [         R                  R                  [1        [3        U5      5       VKs/ s H0  nK[         R                  R                  R                  [R        5      PM2     snK5      nL[         R                  R                  [1        [3        U5      5       VKs/ s H0  nK[         R                  R                  R                  [T        5      PM2     snK5      nMU(       a  [         R                  R                  [1        [3        U5      5       VKs/ s H0  nK[         R                  R                  R                  [V        5      PM2     snK5      nN[         R                  R                  [1        [3        U5      5       VKs/ s H0  nK[         R                  R                  R                  [V        5      PM2     snK5      nO[         R                  R                  [1        [3        U5      5       VKs/ s H0  nK[         R                  R                  R                  [X        5      PM2     snK5      nP[[        [3        U5      5       GH  n?UU?   nQUQR]                  5       nRU)UR-   U::  d  US:X  d	  U((       d  M1  [_        WQU U)   UU)   X#XxXUU!U)U$5      u  nSnTUS GH  nUUUu  n7nVnWnXnKSnYU7U U)   ;  a  SnYO_WQRa                  5       U U)   U7   R                  ;  a  SnYO8U U)   U7   R                  WQRa                  5          R+                  5       (       d  SnYWY(       d  M  [c        U#WQWVUQRe                  5       5      nA[g        [C        UAS   S5      S5      nZ[g        [C        UAS   S5      S5      n[[h        Rj                  " UZU[5      nA[C        U-U)WR-   5      n-WLU?   R9                  [         R                  R;                  U)UR-   5      U7UQRa                  5       UAUQRm                  5       45        U(       a%  WNU?   R9                  WWWXWQRo                  5       45        WRS:X  d  GM  Sn/GM     WT GH  nUUUu  n;nVnWnXn\SnYU;UU)   ;  a  SnYOt[3        W\S   5      S:  a  SnYO_WQRa                  5       UU)   U;   R                  ;  a  SnYO8UU)   U;   R                  WQRa                  5          R+                  5       (       d  SnYWY(       d  M  [c        U#WQWVUQRe                  5       5      nA[g        [C        UAS   S5      S5      nZ[g        [C        UAS   S5      S5      n[[h        Rj                  " UZU[5      nA[C        U-U)WR-   5      n-WPU?   R9                  W\5        WMU?   R9                  [         R                  R;                  U)UR-   5      U;UQRa                  5       UAUQRm                  5       45        U(       a%  WOU?   R9                  WWWXWQRo                  5       45        WRS:X  d  GM  Sn/GM     GM     [1        [3        U5      5       H  n?[3        WLU?   5      S:  a  URq                  WLU?   5        [3        WMU?   5      S:  a  URq                  WMU?   5        U(       aL  [3        WNU?   5      S:  a  URq                  WNU?   5        [3        WOU?   5      S:  a  URq                  WOU?   5        [3        WPU?   5      S:  d  M  URq                  WPU?   5        M     U)S-  n)[C        U*U)5      n*U5(       a  GM^  U4R/                  5         [s        U5       GHC  u  n]n?U?S   U?S   U?S	   U?S
   U?S   4u  n)n@n:nAn^U@U U)   ;  a  [7        W@U U)   5        [?        U U)   W@U:WA45      (       ad  U S:X  a  SOSnG[A        U U)   UW@U:WA4UUU,U)W^U%UUUW]UUUSUGS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        W=WI5      n=OW<WI-  n<O|U(       a  [E        U U)   W@U:WA4UU)U,W]UUUUUUSS9  OY[A        U U)   UW@U:WA4UUU,U)W^U%UUUW]UUUSSS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        W=WI5      n=OW<WI-  n<U4R                  W]5        GMF     [         R                  R                  [1        [3        U5      5       V?s/ s H  n?U?U4;  d  M  UU?   PM     sn?5      US S & [         R                  R                  [1        [3        U5      5       V?s/ s H  n?U?U4;  d  M  UU?   PM     sn?5      US S & U(       aP  [         R                  R                  [1        [3        U5      5       V?s/ s H  n?U?U4;  d  M  UU?   PM     sn?5      US S & U4R/                  5         [s        U5       GH  u  n]n?U?S   U?S   U?S	   U?S
   U?S   4u  n)n@n:nAn^UU]   u  n_n`na[u        U_U`XXxUaU U)   UU)   UU)5      u  nbnIW<UI-  n<UaRv                  S:w  Ga3  Wb GH*  n;UU)   U;   R                  Wa   R+                  5       (       a  M.  [M        UU)   U;WaWA45      (       af  U S:X  a  SOSnG[O        UU)   UU;WaWA4UUU,U)W^U%UUUW]UUUSUGS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        W=WI5      n=M  U<WI-  n<M  U(       a  [Q        UU)   U;WaWA4UU)U,W]UUUUUUSS9  M  [O        UU)   UU;WaWA4UUU,U)W^U%UUUW]UUUSSS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        W=WI5      n=GM%  U<WI-  n<GM-     GOW@UU)   ;  a  [K        W@UU)   5        [M        UU)   W@U:WA45      (       ad  U S:X  a  SOSnG[O        UU)   UW@U:WA4UUU,U)W^U%UUUW]UUUSUGS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        W=WI5      n=OU<WI-  n<O|U(       a  [Q        UU)   W@U:WA4UU)U,W]UUUUUUSS9  OY[O        UU)   UW@U:WA4UUU,U)W^U%UUUW]UUUSSS9u  nHnIUH=(       d    U/n/U/(       a  [C        U+U)5      n+U%S:X  a  [C        W=WI5      n=OU<WI-  n<U4R                  W]5        GM     [         R                  R                  [1        [3        U5      5       V?s/ s H  n?U?U4;  d  M  UU?   PM     sn?5      US S & [         R                  R                  [1        [3        U5      5       V?s/ s H  n?U?U4;  d  M  UU?   PM     sn?5      US S & U(       aP  [         R                  R                  [1        [3        U5      5       V?s/ s H  n?U?U4;  d  M  UU?   PM     sn?5      US S & U%S:X  a*  W<U&::  a#  U'(       a  [        SU) S[y        U<5       S35        OcOSU%S:X  a*  W=U&::  a#  U'(       a  [        SU) S[{        U=5       S35        O3O#U%S:X  a  U/(       d  U'(       a  [        SU, 35        OU,S-  n,U.(       a  GM,  U,U+S-   4$ ! , (       d  f       GN= fs  snKf s  snKf s  snKf s  snKf s  snKf s  sn?f s  sn?f s  sn?f s  sn?f s  sn?f s  sn?f )Nr   r   Trs   Fz	Timestep:)flushr   r            r   r   override)moder   rv   )r    ruleru   z
Converged at time: z with z) changes from the previous interpretationz= as the maximum bound change from the previous interpretationrt   z
Converged at fp: )>r   r   r   r   r0   r2   r    r)   setaddr   r   rM   rN   r5   re   rf   Worldr6   r7   copy	is_staticr:   clearr   len	_add_node_add_node_to_interpretationr#   r?   _update_rule_tracecheck_consistent_node_update_noder   resolve_inconsistency_node	_add_edgeLabel_add_edge_to_interpretationcheck_consistent_edge_update_edgeresolve_inconsistency_edger,   r.   r&   edges_to_be_added_typer   	get_delta_ground_rule
get_targetannotateget_weightsminr;   closedis_static_ruler   rD   	enumerate
_add_edgesvalueintfloat_to_str)crG   rK   rH   rL   r   r%   r   rB   rC   rO   rQ   r-   r/   r8   r9   r'   r(   r1   r3   r*   r+   r   r@   rA   r=   r>   r   r   r   r   r   r   r   r   r   r   r   rz   r{   r   r   r   max_tmax_t_changesr   max_rules_timefp_loopupdatefacts_to_be_applied_node_newfacts_to_be_applied_edge_new"facts_to_be_applied_node_trace_new"facts_to_be_applied_edge_trace_newrules_to_remove_idxtimestep_looplast_t_interprS   wnew_wrT   echanges_cntbound_delta	nodes_seticompbndr   r   p1p2r   r   uchanges	edges_set_#rules_to_be_applied_node_threadsafe#rules_to_be_applied_edge_threadsafe)rules_to_be_applied_node_trace_threadsafe)rules_to_be_applied_edge_trace_threadsafe&edges_to_be_added_edge_rule_threadsafer   delta_tapplicable_node_rulesapplicable_edge_rulesapplicable_ruleannotationsqualified_nodesqualified_edgesshould_apply_rulebnd_lbnd_uedges_to_addidx
set_staticsourcestargetsedge_ledges_addedsc                                                                                                      rV   r   Interpretation.reason   s'    !!
%-q!&.'&!&!1!1!<!<=Z![!&!1!1!<!<=Z![',{{'7'7'B'B5;;CUCU'V$',{{'7'7'B'B5;;CUCU'V$"=11
	6	$w]
)K$'  	$$!${{//55yUZUeUe5f!1u)!A#.]	
&q)	)$)KK0@0@0K0KEL\L\0]$^Aq!


 
 a"1%a(..e!
A+%Q499;a   
Qz)!A#.]	
&q)	)$)KK0@0@0K0KEL\L\0]$^Aq!


 
 a"1%a(..e!
A$..

Q;!5.aDIIKq	   	$$!${{//55yUZUeUe5f!1u)!A#.]	
&q)	)$)KK0@0@0K0KEL\L\0]$^Aq!


 
 a"1%a(..e!
A+%Q499;a   
Qz)!A#.]	
&q)	)$)KK0@0@0K0KEL\L\0]$^Aq!


 
 a"1%a(..e!
A$..

Q;!5.aDIIKq	   KKF !&&(&,,.E
I3/01 #A&!+.Fq.I!.LNfghNijkNl  oG  HI  oJ  KL  oM  Og  hi  Oj  kl  Om  oG  HI  oJ  KL  oM  /M+dAsFO	Y	}}TyUQR<ST+A.."4)=a)@A 
"1%d+11	16J16Md6S6Y6YZ[6\6f6f6h6h /oKg 2 21 5u{{7I7I&7QSWYZ\_`a	15;;3C3C3N3Nu{{O_O_OjOjktOu3vx}  yD  yD  yI  yI  yT  yT  UZ  U`  U`  Ue  Ue  Up  Up  qz  U{  y|  ~A  Ca  bc  Cd  
eFBE

 
 %++"4"4Q"79K9KF9SUY[]_stu_vw{_|  `C  `C  DF  `G  "H  I3U[[5E5E5P5PQVQ\Q\QaQaQlQlmvQw5xz  {F  {F  {K  {K  {V  {V  W\  Wb  Wb  Wg  Wg  Wr  Wr  s|  W}  {~  @T  UV  @W  X\  @]  @c  @c  df  @g  iG  HI  iJ  K !e

 
 %++"4"4Q"79K9KF9SUY[]_stu_vw{_|  `C  `C  DF  `G  "H  IZ3U[[5E5E5P5PQVQ\Q\QaQaQlQlmvQw5xz  {F  {F  {K  {K  {V  {V  W\  Wb  Wb  Wg  Wg  Wr  Wr  s|  W}  {~  @T  UV  @W  X\  @]  @c  @c  df  @g  iG  HI  iJ  K    4Q 73x
H
H)8%f&*44%!"6q"9;MtVWY\U]_bdsu{}~  AG  IY  [e  gJ  Lj  lm  oM  Od  fB  IM  X`  a
7f]A.]*;0		 *9%f	#$8$;TAs8SRSU[]^`jl{  ~S  Us  uS  Uq  x|  
}"#7#:<NPTWXZ]V^`cetv|~  BH  JZ  \f  hK  Mk  mn  pN  Pe  gC  JN  Y]  ^G+vmQ/-m+K1+

 +	#**EKK,>,>?WXY?Z[\?]^_?_,`bfhiknpv  yH  ,I  J
*112PQR2ST  
 #))*B1*EF	)001OPQ1RSK 2P #?"C"C"EQ)K)P)P)R#A& &&(&,,. !&&(&,,.E
I3/01 #A&!+.Fq.I!.LNfghNijkNl  oG  HI  oJ  KL  oM  Og  hi  Oj  kl  Om  oG  HI  oJ  KL  oM  /M+dAsFO	Y	a$q'9u{{[]`tuv`w  zN  OP  zQ  Se  gh  i}}T+A.."4)=a)@A 
"1%d+11	16J16Md6S6Y6YZ[6\6f6f6h6h.oKg 2 21 5u{{7I7I&7QSWYZ\pqr\stx\y\\  AB  ]C   D  	E	15;;3C3C3N3Nu{{O_O_OjOjktOu3vx}  yD  yD  yI  yI  yT  yT  UZ  U`  U`  Ue  Ue  Up  Up  qz  U{  y|  ~A  Ca  bc  Cd  
eFB!G

 
 %++"4"4Q"79K9KF9SUY[]_stu_vw{_|  `C  `C  DF  `G  "H  I3U[[5E5E5P5PQVQ\Q\QaQaQlQlmvQw5xz  {F  {F  {K  {K  {V  {V  W\  Wb  Wb  Wg  Wg  Wr  Wr  s|  W}  {~  @T  UV  @W  X\  @]  @c  @c  df  @g  iG  HI  iJ  K Ag

 
 %++"4"4Q"79K9KF9SUY[]_stu_vw{_|  `C  `C  DF  `G  "H  IZ3U[[5E5E5P5PQVQ\Q\QaQaQlQlmvQw5xz  {F  {F  {K  {K  {V  {V  W\  Wb  Wb  Wg  Wg  Wr  Wr  s|  W}  {~  @T  UV  @W  X\  @]  @c  @c  df  @g  iG  HI  iJ  K    4Q 73x
H
H)8%f&*44%!"6q"9;MtVWY\U]_bdsu{}~  AG  IY  [e  gJ  Lj  lm  oM  Od  fB  IM  X`  a
7f]A.},;0		 *9%f	#$8$;TAs8SRSU[]^`jl{  ~S  Us  uS  Uq  x|  
}"#7#:<NPTWXZ]V^`cetv|~  BH  JZ  \f  hK  Mk  mn  pN  Pe  gC  JN  Y]  ^G+vmQ/--K1+

 +	#**EKK,>,>?WXY?Z[\?]^_?_,`bfhiknpv  yH  ,I  J
*112PQR2ST  
 #))*B1*EF	)001OPQ1RSG 2L #?"C"C"EQ)K)P)P)R#A& &&(&,,. +0++*:*:  AF  GJ  KP  GQ  AR  <S  AR{|EKK<L<L<W<WXu<v  AR  <S  +T'*/++*:*:  AF  GJ  KP  GQ  AR  <S  AR{|EKK<L<L<W<WXu<v  AR  <S  +T'161A1A  IN  OR  SX  OY  IZ  C[  IZ  DE5;;CSCSC^C^_}C~  IZ  C[  2\.161A1A  IN  OR  SX  OY  IZ  C[  IZ  DE5;;CSCSC^C^_}C~  IZ  C[  2\.-2[[-=-=  }B  CF  GL  CM  }N  ?O  }Nwxu{{?O?O?Z?Z[q?r  }N  ?O  .P*CJ!HT ~~W	GttrzUU5A$H\]^H_auvwax  {M  ch  qz  OY  [m  op  r@  6A22 3/=L:q+ ! '*
*  OO%9!%<Q%?%E%EE  %Q'*001BCMMOO 

+T;@P@P@RSCANA&CANA&ooeU+^Q[9+A.55u{{7I7I!g+7VXY[_[j[j[lnqsw  tG  tG  tI  7J  	K	21	5	<	<o`d`m`m`o=p	q a<? 3B 3/HWEq+ ! '*
*  Q 1$  OO%9!%<Q%?%E%EE  %Q'*001BCMMOO 

+T;@P@P@RSCANA&CANA&ooeU+^QwY7.q188F+A.55u{{7I7I!G)7TVWY]YhYhYjloqu  rE  rE  rG  7H  	I	21	5	<	<o`d`m`m`o=p	q a<M 3U  f 3u:/23a7%%&I!&LM/23a7%%&I!&LM	6q9	:Q	>%,,-VWX-YZ	6q9	:Q	>%,,-VWX-YZ2156:!(()OPQ)RS  FAqMEI 
R 34vsA"#A$!adAaD!A$">AtQZ '** ';A'>? 1!4dQHEE#z1uX3A68JDSTVYRZ\_aprxz{  ~H  JZ  \f  hK  Mk  mp  rP  Rg  iE  LR  ]e  fZQk6V-+m-'W-kWk 	 !5a!8$C#qRXZ]_ikz  }R  Tr  tR  Tp  w}  ~ 4Q 79KTTUWZS[]`bqsy{|  I  K[  ]g  iL  Nl  nq  sQ  Sh  jF  MS  ^b  cja{Ff	=!,}	=	(g.{g{ C K 5P "'!1!1X]^abz^{X|  3^X|ST  AB  J]  A]3N3KA3NX|  3^  "_A$)KK$4$4^cdg  iD  eE  _F  6g  _FYZ  JK  Sf  Jf6T6QRS6T  _F  6g  %hq!(-(8(8ejkn  pN  lO  fP  :q  fP`a  TU  ]p  Tp:[:XYZ:[  fP  :q  )r"1% 34vsA"#A$!adAaD!A$">AtQZ:3?GWf%gw	V[dj  mA  BC  mD  FZ  [\  F]  _q  st  uK7K ||r	a	 	#	)	)&	1	;	;	=	=	3A6FC=	I	I%3$x !5a!8:LaRXZ]Q^`cetv|~  BL  N^  `j  lO  Qo  qt  vT  Vk  mI  PV  ai  jzq'Vv
M1-
M
)+w/w "#7#:A}cSTV\^acmo~  AV  Xv  xV  Xt  {A  	B!"6q"9;MqSY[^R_adfuw}  @A  CM  O_  ak  mP  Rp  ru  wU  Wl  nJ  QW  bf  g
7f]A.]*;0		; B 	(++!$(<Q(?@ 	215taXFF$
2h 4Q 79KTTUWZS[]`bqsy{|  I  K[  ]g  iL  Nl  nq  sQ  Sh  jF  MS  ^f  gja{Ff	=!,}	=	(g.{g{ 
!"6q"94!S3PQSY[^`jl{  ~S  Us  uS  Uq  x~   !5a!8:LdUVX[T\^acrtz|}  @J  L\  ^h  jM  Om  or  tR  Ti  kG  NT  _c  dzq'Vv
M1-
M
)+w/w C U 5Z "'!1!1X]^abz^{X|  3^X|ST  AB  J]  A]3N3KA3NX|  3^  "_A$)KK$4$4^cdg  iD  eE  _F  6g  _FYZ  JK  Sf  Jf6T6QRS6T  _F  6g  %hq!(-(8(8ejkn  pN  lO  fP  :q  fP`a  TU  ]p  Tp:[:XYZ:[  fP  :q  )r"1%
 00''#A3fS-=,>>ghi  ( 	M)''#A3f\+-F,G  HE  F  G  ( 	11!&*+  
Q;6_ 	d 
"	""Q )n <S <S C[ C[ ?Od 3^ 6g :qb 3^ 6g :qs   BAK47BAM!7BAO7BA#Q7BA(R/7BA-l
BA2l,	BA2m.
BA7m<	BA7o
BA<o	BA<{&
BB{4	BB|6
BB}	BB~
BB~	BBA
BAc                     [        US   US   U R                  U R                  U R                  U R                  X R
                  U R                  U R                  S5        g )Nr   r   rs   )r   rO   rQ   rB   rC   rG   rK   rL   )rR   edgerT   s      rV   add_edgeInterpretation.add_edge  sn    DGT!Wdnnd.D.DdjjRVR\R\^_azaz  }A  }V  }V  X\  Xo  Xo  qs  tra   c                 ,   XR                   ;  a  [        XR                  U R                  U R                   U R                  5        U HH  n[
        R                  " SS5      U R                  U   R                  [        R                  " U5      '   MJ     g g Nr   r   )
rB   r   rO   rQ   rG   r;   r   re   r6   r   )rR   nodelabelsrT   s       rV   add_nodeInterpretation.add_node  sk    	T>>4#9#94::tG`G`aq<DOOAq<QDd#))%++a.9  ra   c                     [        XR                  U R                  U R                  U R                  U R
                  5        g r   )_delete_edgerO   rQ   rC   rK   rL   )rR   r  s     rV   delete_edgeInterpretation.delete_edge  -    t^^T%;%;TZZIbIbdhd{d{|ra   c                     [        XR                  U R                  U R                  U R                  U R
                  5        g r   )_delete_noderO   rQ   rB   rG   rH   )rR   r  s     rV   delete_nodeInterpretation.delete_node  r  ra   c                 d   0 n[        U R                  S-   5       HK  n0 X'   U R                   H  n[        5       X   U'   M     U R                   H  n[        5       X   U'   M     MM     U R
                   H  nUu  pgp8n	U	R                  U	R                  4X   U   UR                  '   U R                  (       d  MF  [        US-   U R                  S-   5       H-  nU	R                  U	R                  4X   U   UR                  '   M/     M     U R                   H  nUu  pgpHn	U	R                  U	R                  4X   U   UR                  '   U R                  (       d  MF  [        US-   U R                  S-   5       H-  nU	R                  U	R                  4X   U   UR                  '   M/     M     U$ )Nr   )r   r$   rB   r   rC   r@   lowerupper_valuer   rA   )
rR   rh   r   r  r  changer$   r   rT   r   s
             rV   get_dictInterpretation.get_dict"  s   
 /1a?zzt13Ot zzt13Ot 	  $$f!4DS,/IIsyy+A?qxx( ooo46499Q;'+.99cii*@_ahh' ( % $$f"4DS,/IIsyy+A?qxx( ooo46499Q;'+.99cii*@_ahh' ( % 
ra   c                     SnU R                    H(  nU R                  U   R                   H  nUS-  nM
     M*     U R                   H(  nU R                  U   R                   H  nUS-  nM
     M*     U$ )z
This function returns the number of ground atoms after the reasoning process, for the final timestep
:return: int: Number of ground atoms in the interpretation after reasoning
r   r   )rB   rG   re   rC   rK   )rR   ga_cntr  rT   r  s        rV   get_final_num_ground_atoms)Interpretation.get_final_num_ground_atomsE  sv    
 &jjd%%d+11q
aKF 2  jjd%%d+11q
aKF 2  
-ra   returnc                    UR                  5       nUR                  5       nUR                  5       nUR                  5       nUS:X  a   U R                  S:  a  U R                  S-
  nOIU R                  S:X  a  SnO6US:  d  X R                  S-
  :  a  [        SU SU R                  S-
   35      eU[        R                  " SS5      :X  a  SOSnUS:X  a  XPR                  ;  a  U(       a  S	$ U$ OXPR                  ;  a  U(       a  S	$ U$ US:X  aV  U[        U R                  5      :  d1  XPR                  U   ;  d  X`R                  U   U   R                  ;  a  U(       a  S	$ U$ OUU[        U R                  5      :  d1  XPR                  U   ;  d  X`R                  U   U   R                  ;  a  U(       a  S	$ U$ US:X  a  U R                  U   U   R                  U   U;   a[  U(       a  S
$ U R                  U   U   R                  U   R                  U R                  U   U   R                  U   R                  4$ U(       a  S	$ S$ U R                  U   U   R                  U   U;   a[  U(       a  S
$ U R                  U   U   R                  U   R                  U R                  U   U   R                  U   R                  4$ U(       a  S	$ S$ )z
This function is used to query the graph after reasoning
:param query: A PyReason query object
:param t: The timestep to query at
:param return_bool: If True, returns boolean of query, else the bounds associated with it
:return: bool, or bounds
rs   r   r   z	Timestep z; is out of bounds. Current interpretation is between 0 and )r   r   )r   r   r  FT)get_component_typer   get_predicate
get_boundsr$   
ValueErrorr;   r   rB   rC   r   rG   re   rK   r  r  )	rR   queryr   return_bool	comp_type	componentpredr   
bnd_returns	            rV   r&  Interpretation.queryU  sd    &&()!!#)				$#"WQyy1}1yyA~11uIIM!	is"]^b^g^gjk^k]lm	nn1 55v6* &zz!5/Z/ " zz!5/Z/ &3t(())Y>W>WXY>Z-Z^b  kD  kD  EF  kG  HQ  kR  kX  kX  _X5/Z/ _X 3t(())Y>W>WXY>Z-Z^b  kD  kD  EF  kG  HQ  kR  kX  kX  _X5/Z/ &
"9-33D9S@4  [T%>%>q%A)%L%R%RSW%X%^%^`d`y`yz{`|  ~G  aH  aN  aN  OS  aT  aZ  aZ  %[  [5+V+
"9-33D9S@4  [T%>%>q%A)%L%R%RSW%X%^%^`d`y`yz{`|  ~G  aH  aN  aN  OS  aT  aZ  aZ  %[  [5+V+ra   )(r   r   r   r   r   rC   r9   r8   r3   r+   r1   r*   r   r   r   rK   rG   r   rO   rB   r"   r   rL   rH   r%   r   rQ   rA   r>   r@   r=   r/   r(   r-   r'   r   r   r$   r   r   N)FT)rs   T)'__name__
__module____qualname____firstlineno__r   r   rM   rN   r6   r7   r    r4   r5   rF   r:   rJ   rW   staticmethodnjitrP   rE   rI   r|   r   r   r   r   r  r
  r  r  r  r  r   boolr   floatr&  __static_attributes__rw   ra   rV   r
   r
   :   s   ((..8H8HUZU`U`UiUijsUt.u((..8H8HUZU`U`UiUijsUt.u8Ht **4   **4(  (( **4(  (( **4
-  
-A **4  (, **4%(`# ) `#DtR}}!F 1,5uUE\?R9R3S 1, 1,ra   r
   TrY   c                 2   U R                  5       nU R                  5       nU R                  5       nU R                  5       nU R	                  5       nU R                  5       nU R                  5       nU R                  5       nUS:X  a  US   nO
US   US   nn[        R                  R                  R                  [        5      n[        R                  R                  R                  [        5      n[        R                  R                  R                  [        R                   R"                  [$        S9n[        R                  R                  R                  [&        [(        S9n[        R                  R                  R                  [*        [$        S9n[        R                  R                  R                  [*        [$        S9n[-        U5      n[-        U5      nSn[/        U5       GHk  u  n n!U!S   n"U!S   n#U!S   n$U!S   n%U!S   n&U"S:X  Ga!  U$S   n'U
(       a'  U'U;   a!  [        R                  R                  U'/5      n(O[1        U'UUU#U5      n([3        UU(U#U%5      n)U)UU''   [-        U)5      n*U H  u  n+n,U+U':X  aE  [        R                  R                  UU+U,4    V-s/ s H  n-U-S   U*;   d  M  U-PM     sn-5      UU+U,4'   U,U':X  d  MY  [        R                  R                  UU+U,4    V-s/ s H  n-U-S   U*;   d  M  U-PM     sn-5      UU+U,4'   M     [5        UU(U)U#UU    5      =(       a    UnGOU"S	:X  Ga  U$S   U$S   n.n'U
(       a+  U'U.4U;   a#  [        R                  R                  U'U.4/5      n(O[7        U'U.UUXxUU#U5	      n([9        UU(U#U%5      n)[;        UU(U)U#UU    5      =(       a    Un[        R                  R                  R                  [*        5      UU''   [        R                  R                  R                  [*        5      UU.'   [-        UU'   5      n/[-        UU.   5      n0U) Hm  n-U-S   U/;  a+  UU'   R=                  U-S   5        U/R?                  U-S   5        U-S   U0;  d  MB  UU.   R=                  U-S   5        U0R?                  U-S   5        Mo     U)UU'U.4'   U'U;  a$  [        R                  R                  U./5      UU''   OU.UU'   ;  a  UU'   R=                  U.5        U.U;  a$  [        R                  R                  U'/5      UU.'   OU'UU.   ;  a  UU.   R=                  U'5        O U(       a  [A        U$UUUU5        U(       a  GMl    O   U(       GaZ  US:X  Ga  [C        UUUU5      u  n1n2U2(       a  U1UU'   UU;   n3S
n4U
(       a+  U3(       a$  [        R                  R                  U/5      UU'   O2UU;  a,  U3(       d  Sn4[        R                  R                  U/5      UU'   UU    GHm  n5[        R                  R                  R                  [        R                  R                  R                  [*        5      5      n6[        R                  R                  R                  [        R                  R                  R                  [&        5      5      n7[        R                  R                  R                  [        R                  R                  R                  [D        RF                  5      5      n8[        R                  R                  R                  [*        5      [        R                  R                  R                  [*        5      US   4n9[I        XUUUU5      nU(       d  GM  [/        U5       GH  u  n n!U!S   n"U!S   n#U!S   n$U"S:X  GaX  U$S   n'U	(       a  U'U:X  a0  U6R=                  [        R                  R                  U5/5      5        O1U6R=                  [        R                  R                  UU'   5      5        U7R=                  [        R                  R                  R                  [&        5      5        US:w  a  [        R                  R                  R                  [D        RF                  5      n:U'U:X  a"  U:R=                  UU5   RJ                  U#   5        O-UU'    H$  n;U:R=                  UU;   RJ                  U#   5        M&     U8R=                  U:5        GMr  GMu  U"S	:X  Ga6  U$S   U$S   n.n'U	(       Ga  U6R=                  [        R                  R                  R                  [*        5      5        U'U:X  aR  [        R                  R                  UU'U.4    V-s/ s H  n-U-S   U5:X  d  M  U-PM     sn-5      n<U7R=                  U<5        OU.U:X  aR  [        R                  R                  UU'U.4    V-s/ s H  n-U-S   U5:X  d  M  U-PM     sn-5      n<U7R=                  U<5        O3U7R=                  [        R                  R                  UU'U.4   5      5        US:w  a  [        R                  R                  R                  [D        RF                  5      n:U'U:X  a;  UU'U.4    H/  n-U-S   U5:X  d  M  U:R=                  UU-   RJ                  U#   5        M1     OpU.U:X  a;  UU'U.4    H/  n-U-S   U5:X  d  M  U:R=                  UU-   RJ                  U#   5        M1     O/UU'U.4    H$  n=U:R=                  UU=   RJ                  U#   5        M&     U8R=                  U:5        GM  GM  GM     U4(       a  [M        UXxXQ5        UR=                  U5U8U6U7U945        GMp     UU4$ US	:X  GaI  US   nUS   n[O        UUUU5      u  n1n2U2S   (       a  U1S   UU'   U2S   (       a  U1S   UU'   UU;   n3UU;   n>S
n?S
n@S
nAU
(       a*  U3(       a#  [        R                  R                  U/5      UU'   U
(       a*  U>(       a#  [        R                  R                  U/5      UU'   UU;  a,  U3(       d  Sn?[        R                  R                  U/5      UU'   UU;  a,  U>(       d  Sn@[        R                  R                  U/5      UU'   U3(       d	  U>(       d  SnAUU   nBUU   nCUu  nDnEnFUDS:w  a  WES:w  a  SOS
nG[        R                  R                  R                  [&        5      nHWB HE  nIWC H<  nJWG(       a  WHR=                  WIWJ45        M  WIWJ4U;   d  M)  WHR=                  WIWJ45        M>     MG     WH GH  nKUKS   UKS   nMnL[        R                  R                  R                  [        R                  R                  R                  [*        5      5      n6[        R                  R                  R                  [        R                  R                  R                  [&        5      5      n7[        R                  R                  R                  [        R                  R                  R                  [D        RF                  5      5      n8[        R                  R                  R                  [*        5      [        R                  R                  R                  [*        5      US   4n9URQ                  5       nNURQ                  5       nO[        R                  R                  UL/5      UNU'   [        R                  R                  UM/5      UNU'   UORS                  5        GH  u  n+n,U+U:X  aL  U,U:X  aF  [        R                  R                  WOU+U,4    V-s/ s H  n-U-WLWM4:X  d  M  U-PM     sn-5      WOU+U,4'   MY  U+U:X  aL  U,U:X  aF  [        R                  R                  WOU+U,4    V-s/ s H  n-U-WMWL4:X  d  M  U-PM     sn-5      WOU+U,4'   M  U+U:X  aG  [        R                  R                  WOU+U,4    V-s/ s H  n-U-S   WL:X  d  M  U-PM     sn-5      WOU+U,4'   M  U,U:X  aH  [        R                  R                  WOU+U,4    V-s/ s H  n-U-S   WL:X  d  M  U-PM     sn-5      WOU+U,4'   GMF  U+U:X  aH  [        R                  R                  WOU+U,4    V-s/ s H  n-U-S   WM:X  d  M  U-PM     sn-5      WOU+U,4'   GM  U,U:X  d  GM  [        R                  R                  WOU+U,4    V-s/ s H  n-U-S   WM:X  d  M  U-PM     sn-5      WOU+U,4'   GM     [A        UWNWOUU5        [I        XUUUNUO5      nU(       d  GM  WG(       a7  WDWE:w  a	  WLWM:X  a  GM  U9S   R=                  WL5        U9S   R=                  WM5        [/        U5       GH  u  n n!U!S   n"U!S   n#U!S   n$U"S:X  Ga  U$S   n'U	(       a  U'U:X  a0  U6R=                  [        R                  R                  WL/5      5        OgU'U:X  a0  U6R=                  [        R                  R                  WM/5      5        O1U6R=                  [        R                  R                  WNU'   5      5        U7R=                  [        R                  R                  R                  [&        5      5        US:w  a  [        R                  R                  R                  [D        RF                  5      n:U'U:X  a"  U:R=                  UWL   RJ                  U#   5        OUU'U:X  a"  U:R=                  UWM   RJ                  U#   5        O-WNU'    H$  n;U:R=                  UU;   RJ                  U#   5        M&     U8R=                  U:5        GM  GM  U"S	:X  d  GM  U$S   U$S   n.n'U	(       Ga  U6R=                  [        R                  R                  R                  [*        5      5        U'U:X  ad  U.U:X  a^  [        R                  R                  WOU'U.4    V-s/ s H  n-U-S   WL:X  d  M  U-S   WM:X  d  M  U-PM     sn-5      n<U7R=                  U<5        GOU'U:X  ad  U.U:X  a^  [        R                  R                  WOU'U.4    V-s/ s H  n-U-S   WM:X  d  M  U-S   WL:X  d  M  U-PM     sn-5      n<U7R=                  U<5        GOU'U:X  aS  [        R                  R                  WOU'U.4    V-s/ s H  n-U-S   WL:X  d  M  U-PM     sn-5      n<U7R=                  U<5        GO;U'U:X  aR  [        R                  R                  WOU'U.4    V-s/ s H  n-U-S   WM:X  d  M  U-PM     sn-5      n<U7R=                  U<5        OU.U:X  aR  [        R                  R                  WOU'U.4    V-s/ s H  n-U-S   WL:X  d  M  U-PM     sn-5      n<U7R=                  U<5        OU.U:X  aR  [        R                  R                  WOU'U.4    V-s/ s H  n-U-S   WM:X  d  M  U-PM     sn-5      n<U7R=                  U<5        O3U7R=                  [        R                  R                  WOU'U.4   5      5        US:w  d  GM  [        R                  R                  R                  [D        RF                  5      n:U'U:X  aM  U.U:X  aG  WOU'U.4    H:  n-U-S   WL:X  d  M  U-S   WM:X  d  M  U:R=                  UU-   RJ                  U#   5        M<     GOU'U:X  aM  U.U:X  aG  WOU'U.4    H:  n-U-S   WM:X  d  M  U-S   WL:X  d  M  U:R=                  UU-   RJ                  U#   5        M<     GO3U'U:X  a;  WOU'U.4    H/  n-U-S   WL:X  d  M  U:R=                  UU-   RJ                  U#   5        M1     OU'U:X  a;  WOU'U.4    H/  n-U-S   WM:X  d  M  U:R=                  UU-   RJ                  U#   5        M1     OU.U:X  a;  WOU'U.4    H/  n-U-S   WL:X  d  M  U:R=                  UU-   RJ                  U#   5        M1     OpU.U:X  a;  WOU'U.4    H/  n-U-S   WM:X  d  M  U:R=                  UU-   RJ                  U#   5        M1     O/WOU'U.4    H$  n=U:R=                  UU=   RJ                  U#   5        M&     U8R=                  U:5        GM     U?(       a  WLU:X  a  [M        UXxXQ5        W@(       a  WMU:X  a  [M        UXxXQ5        WA(       a/  UU4WLWM4:X  a%  [U        UUXxXV[V        RX                  " S5      XXK5        WLWM4n-UR=                  U-U8U6U7U945        GM     UU4$ s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f s  sn-f )Nr  r   r   r   Tr   r   r   r  Frs   r   )-get_typeget_head_variablesget_head_functionget_head_function_varsget_clausesget_thresholdsget_annotation_function	get_edgesr   r   r   r   node_applicable_rule_typeedge_applicable_rule_typerM   rN   r    r)   r\   r:   ro   r5   r   r   get_rule_node_clause_groundingget_qualified_node_groundings+check_node_grounding_threshold_satisfactionget_rule_edge_clause_groundingget_qualified_edge_groundings+check_edge_grounding_threshold_satisfactionr#   r   refine_groundings_determine_node_head_varsr;   r<   check_all_clause_satisfactionre   r   _determine_edge_head_varsr   keysr   r6   r   )Pr   rG   rK   rH   rL   rB   rC   rO   rQ   r   r   r   r   	rule_typehead_variableshead_fnshead_fns_varsclauses
thresholdsann_fn
rule_edges
head_var_1
head_var_2applicable_rules_nodeapplicable_rules_edge
groundingsgroundings_edgesdependency_graph_neighbors"dependency_graph_reverse_neighborsr   r   satisfactionr   clauseclause_typeclause_labelclause_variables
clause_bnd_clause_operatorclause_var_1	groundingqualified_groundingsqualified_groundings_setc1c2r   clause_var_2groundings_clause_1_setgroundings_clause_2_sethead_var_groundingsis_funchead_var_1_in_nodesadd_head_var_node_to_graphhead_groundingr   r   r   edges_to_be_addedaqnrp   qehead_var_2_in_nodesadd_head_var_1_node_to_graphadd_head_var_2_node_to_graphadd_head_edge_to_graphhead_var_1_groundingshead_var_2_groundingssourcetargetr   infer_edgesvalid_edge_groundingsg1g2valid_ehead_var_1_groundinghead_var_2_groundingtemp_groundingstemp_groundings_edgessP                                                                                   rV   r   r     s    ]]_))+""$,,.!!#

&
&
(nna *)!,nQ.?j* ))445NO))445NO kk$$ekk.@.@]$[KK$$**I-*X $kk..44iTa4b&+kk&6&6&<&<i\i&<&j#ZZG$YQq	+,AYay*AY F"1%< \Y6  ,0I.|ZI[]ikpqI 88LiYegqr2:l!"67!vr2	\"'++"2"2?OQSUWPX?Y3~?Y!]^_`]ae}]}A?Y3~"r2h	\"'++"2"2?OQSUWPX?Y3~?Y!]^_`]ae}]}A?Y3~"r2h	 " >>RT]_s  vB  DN  OP  DQ  R  c  Wc< f 0 35Ea5H< lL9YF  <">!?@I.|\:Wgir  HZ  \h  jo  pI 88LiYegqr >>RT]_s  vB  DN  OP  DQ  R  c  Wc< $kk..99)D:l#kk..99)D:l L!9: L!9: qt**$$QqT*  1&t**$$QqT*  1& ! 5I\<01 44/4{{/?/?/O|,6|DD|,33LA<<7<{{7G7G7W&|4>|LL&|4;;LI  %z3CE_  bD  E 
y %B  &
 #<HmU_ao"p0Jz $u, %0"[[--zl;Jz*$"&"[[--zl;Jz#J/~kk&&11%++2B2B2M2Mi2XYOkk&&11%++2B2B2M2Mi2XYO++""--ekk.>.>.I.I(J`J`.abK))44Y?AQAQA\A\]fAgistviwx 11E]dfpr|  O  PLw'	6!9[1I\q	v%a(l 

*
$u{{//0@ABu{{//
<0HIJekk..99)DE	2;;&&x'='=>q
*
$	%n5;;LIJ\*B	
&r*00>	? +! 
 
#3A#68H8KLl	ekk..99)DE
*
$[[*:L,;W*Xs*XQ\]^_\`dr\rq*Xstr"J&[[*:L,;W*Xs*XQ\]^_\`dr\rq*Xstr"u{{//0@,P\A]0^_`	2;;&&x'='=>q
*
$!<">?AaDN"
(('*00>
? @ J&!<">?AaDN"
(('*00>
? @ #L,#?@B	
&r*00>	? A! 
  q (v "z9U   .+P_ar!stU 0r 	444[ Fq!:q!: #<HmU_ao"paj03Jzaj03Jz $u,#u,"'"'!0"[[--zl;Jz0"[[--zl;Jz
"$(!"[[--zl;Jz
"$(!"[[--zl;Jz &9!%j1%j1!6612&B,E;
 !;;++66yA"r#""B8,
bY	##RH- $ # (w18WQZ.kk&&11%++2B2B2M2Mi2XYOkk&&11%++2B2B2M2Mi2XYO++""--ekk.>.>.I.I(J`J`.abK))44Y?AQAQA\A\]fAgistviwx !oo'O,113 #(++"2"24H3I"JOJ"'++"2"24H3I"JOJ',,.B
jR:-(-(8(8EZ\^`b[cEd  :[Edhi  oC  EY  nZ  iZ!Ed  :[  )\RH%


rZ/(-(8(8EZ\^`b[cEd  :[Edhi  oC  EY  nZ  iZ!Ed  :[  )\RH%


(-(8(8EZ\^`b[cEd  :FEdhijkhl  qE  iE!Ed  :F  )GRH%


(-(8(8EZ\^`b[cEd  :FEdhijkhl  qE  iE!Ed  :F  )GRH%


(-(8(8EZ\^`b[cEd  :FEdhijkhl  qE  iE!Ed  :F  )GRH%


(-(8(8EZ\^`b[cEd  :FEdhijkhl  qE  iE!Ed  :F  )GRH% / no7LNh  kM  N 11E]dfp  sB  DY  ZL&15IIq  !56q  !56w'	6!9[1I\q	v%a(l	
*
$u{{//1E0FGHJ&u{{//1E0FGHu{{//0MNOekk..99)DE	2;;&&x'='=>q
*
$	%&:;AA,OPJ&	%&:;AA,OP!,/B	
&r*00>	? 0! 
 
#3A#68H8KLl	
 ekk..99)DE
*
$)C[[*?|@\*]  `*]Qabcdaei}a}q  CD  EF  CG  K_  C_q*]  `  ar"J&<:+E[[*?|@\*]  `*]Qabcdaei}a}q  CD  EF  CG  K_  C_q*]  `  ar"J&[[*?|@\*]~*]Qabcdaei}a}q*]~r"J&[[*?|@\*]~*]Qabcdaei}a}q*]~r"J&[[*?|@\*]~*]Qabcdaei}a}q*]~r"J&[[*?|@\*]~*]Qabcdaei}a}q*]~r"u{{//0E|UaFb0cde 
2;;&&x'='=>q
*
$)C&l'CDAaD((QqT5I-I
(('*00>
? E J&<:+E&l'CDAaD((QqT5I-I
(('*00>
? E J&&l'CDAaD((
(('*00>
? E J&&l'CDAaD((
(('*00>
? E J&&l'CDAaD((
(('*00>
? E J&&l'CDAaD((
(('*00>
? E (|(DEB	
&r*00>	? F!q (v $(<
(Jz9U#(<
(Jz9U:z":?SUi>j"jz:yUSXS^S^_aSbdx  Qc  g
 
34A  ![/?Te!fgi (n 	444u 43~T t tL :[ :[ :F :F :F :Fp ` `    s  Ab>0Ab>,Ac=Ac2AcAc
AcAcAcAcAc/Ac+Ac<Ac@8Ac!A	Ac!BAc&BAc&CAc+C(Ac+OAc0OAc0O$Ac0P2Ac5QAc5QAc5RAc:R'Ac:S/Ac?T Ac?UAdUAdVAd	V0Ad	c           	      
   Sn[        U5       Hq  u  pxUS   n	US   n
US   nU	S:X  a%  US   n[        XU   XL   XU   5      =(       a    UnM?  U	S:X  d  MG  US   US   p[        XX4   X\U4   XU   5      =(       a    UnMs     U$ )NTr   r   r   r  r  )r   rC  rF  )rG   rK   rP  rQ  rX  rY  r\  r   r]  r^  r_  r`  rc  ri  s                 rV   rI  rI  E  s    G$YQq	+,AYF"1%<=>R_kTlnx  oG  IU  bc  Wd  e  v  jv<f 0 35Ea5H=>Rfr  fB  UC  EU  eq  Vr  Es  uA  NO  CP  Q  b  Vb< % 	ra   c           	         [         R                  R                  U 5      n[         R                  R                  U 5      n[         R                  R                  R                  [         R                  R
                  5      n[        U5      S:  GaA  U GH  nX;   a  X8    H  n	X(U	4   n
X   nX	 [         R                  R                  R                  [        5      X'   [         R                  R                  U
 Vs/ s H  oS   U;   d  M  UPM     sn5      n[        X   5      nU H8  nUS   U;  d  M  X   R                  US   5        UR                  US   5        M:     XX4'   X;  d  M  UR                  U	5        M     X;   d  M  XH    H  nUUU4   n
X   nUU	 [         R                  R                  R                  [        5      UU'   [         R                  R                  U
 Vs/ s H  oS   U;   d  M  UPM     sn5      n[        UU   5      nU H9  nUS   U;  d  M  UU   R                  US   5        UR                  US   5        M;     XUU4'   UU;  d  M  UR                  U5        M     GM     [         R                  R                  U5      nUR                  U5        UR                  5         [        U5      S:  a  GM@  g g s  snf s  snf r  )r   r   r   r   r    r)   r   r5   r   r#   r   rD   r   )r`  rX  rY  rZ  r[  all_variables_refinedvariables_just_refinednew_variables_refinedrefined_variableneighborold_edge_groundingsnew_node_groundingsr  re  groundings_neighbor_setr   reverse_neighborgroundings_reverse_neighbor_sets                     rV   rG  rG  X  s    ))*:;++**+;<))44U[[5G5GH
!"Q&04.@+x,HI%7 
	!KK,,77	BZ "KK,,?R-u?Rt[\V]atVtd?R-uv":#78"	
1,	,""1Q4(""1Q4( # 7K'23 	-""8,' A* <>P+-=?O,PQ%7 
$	%$)KK$4$4$?$?	$JZ ! "KK,,?R-u?Rt[\V]atVtd?R-uv'*:6F+G'H$"	
14	4"#**1Q40&**1Q40 # ?S')9:; 	 55""#34' Q3 1\ !;;++,AB45c !"Q&& .v, .vs   :K
K,K<Kc                     US   S   nUS:X  a  [        U5      nO1US:X  a+  [        [        XU[        R                  " SS5      5      5      n[        U5      n[	        WXt5      nU$ Nr   total	availabler   )r   rB  r;   r   _satisfies_threshold)	rG   rd  qualified_groundingr_  	thresholdthreshold_quantifier_type	neigh_lenqualified_neigh_lenr\  s	            rV   rC  rC    p    &q\!_()n)  ;./0DQ]_g_n_noprs_tuv)./$Y0COra   c                     US   S   nUS:X  a  [        U5      nO1US:X  a+  [        [        XU[        R                  " SS5      5      5      n[        U5      n[	        WXt5      nU$ r  )r   rE  r;   r   r  )	rK   rd  r  r_  r  r  r  r  r\  s	            rV   rF  rF    r  ra   c                 H    X2;   a  X;  a  X#   nU$ X   nU$ X;  a  UOX   nU$ r   rw   )rc  rX  ri   rT   rB   rd  s         rV   rA  rA    sJ     "."@m) 	 GQF^) 	 $5e:;S)ra   c	                    [         R                  R                  R                  [        5      n	X;  a  X;  a  Xv;   a  Xg   n	U	$ Un	 U	$ X;  aV  X;   aQ  X!    HG  n
[         R                  R                  XZ    Vs/ s H  oU
4PM     sn5      nU	R                  U5        MI     U	$ X;   aV  X;  aQ  X     HG  n
[         R                  R                  XJ    Vs/ s H  oU4PM     sn5      nU	R                  U5        MI     U	$ X4U;   a  X0U4   n	U	$ [        X!   5      nX     HN  n
[         R                  R                  XJ    Vs/ s H  oU;   d  M
  X4PM     sn5      nU	R                  U5        MP     U	$ s  snf s  snf s  snf r   )r   r   r   r   r:   rD   r   )rc  ri  rX  rY  rO   rQ   ri   rT   rC   edge_groundingsrS   nnrp   groundings_clause_var_2_sets                 rV   rD  rD    s    ;;##..y9 "|'E"%?> 	; ?: 	3 $)C#a,=,@A,@bq',@AB2" $0 	%  \%C#aIL9Lbb'L9:2" $" 	 !%55%\&BC? 	 "%Z%=!>$q			Y\_\rC^=^7A7\_	`B2 % 	/ B : `s   8E2
E7
 	E<
E<
c                     [         R                  R                  R                  [        5      nU H(  n[        XX#45      (       d  M  UR                  U5        M*     U$ r   )r   r   r   r   r5   is_satisfied_noder#   )rG   rd  clause_lra  re  rS   s         rV   rB  rB    P     ((33I>
Q+0FGGq!  	ra   c                     [         R                  R                  R                  [        5      nU H(  n[        XX#45      (       d  M  UR                  U5        M*     U$ r   )r   r   r   r   r:   is_satisfied_edger#   )rK   rd  r  ra  re  r   s         rV   rE  rE    r  ra   c                 ^   US   S   S:X  as  US   S:X  a  XS   :  a  SOSnU$ US   S:X  a  XS   :  a  SOSnU$ US   S	:X  a  XS   ::  a  SOSnU$ US   S
:X  a  XS   :  a  SOSnU$ US   S:X  a  XS   :X  a  SOSnW$ US   S   S:X  a  U S:X  a  SnU$ US   S:X  a  X-  US   S-  :  a  SnU$ SnU$ US   S:X  a  X-  US   S-  :  a  SnU$ SnU$ US   S	:X  a  X-  US   S-  ::  a  SnU$ SnU$ US   S
:X  a  X-  US   S-  :  a  SnU$ SnU$ US   S:X  a  X-  US   S-  :X  a  SOSnW$ )Nr   r   numbergreater_equalr   TFgreater
less_equallessequalpercentg{Gz?rw   )	num_neighnum_qualified_componentr  results       rV   r  r    s    aLOXq\?"+|;D60 	/ |Y+l:D6, 	+ |\!+|;D6( 	' |V+l:D6$ 	# |W+|;D6  	 l1oy \6 	 |_$+51d9JJD6 	 QV6 	 |Y+5	!T8IID6 	 PU6 	 |\!+51d9JJD6 	 QV6 	 |V+5	!T8IID6 		 PU6 	 |W+51d9JJDPU6ra   c                 
   SnX   nUu  nn[         R                  R                  R                  [        R
                  5      nUUR                  ;  ab  [        R                  " SS5      UR                  U'   UU;   a  UU   R                  U5        O#[         R                  R                  U/5      UU'   UR                  U   R                  5       nU(       a4  UR                  U   R                  UR                  UR                  5        OUR                  " UU5        UR                  U   R                  U5        UR                  U   U:w  Ga  SnUR                  UR                  U   5        U(       d  US:X  Gd_  U(       GaW  UR                  [         R                  R!                  U5      [         R                  R!                  U5      UUUR                  U   R                  5       45        U
(       a  US:X  d  US:X  a  [         R                  R                  R                  [         R                  R                  R                  ["        5      5      n[         R                  R                  R                  [         R                  R                  R                  [$        5      5      nX   n['        UUUUU5        OUS:X  a  X   u  nnn['        UUUUU5        U(       GaC  SnU GH:  u  nnUU:X  Ga  UUR                  ;  ab  [        R                  " SS5      UR                  U'   UU;   a  UU   R                  U5        O#[         R                  R                  U/5      UU'   U
(       a  ['        U[         R                  R                  R                  [         R                  R                  R                  ["        5      5      [         R                  R                  R                  [         R                  R                  R                  [$        5      5      UR                  U   SUR)                  5        35        [+        UR                  U   R                  SUR                  U   R                  -
  5      n[-        UR                  U   R                  SUR                  U   R                  -
  5      n UR                  U   R                  UU 5        UR                  U   R                  U5        US-  nUR                  UR                  U   5        U(       ae  UR                  [         R                  R!                  U5      [         R                  R!                  U5      UU[        R                  " UU 5      45        UU:X  d  GM  UUR                  ;  ab  [        R                  " SS5      UR                  U'   UU;   a  UU   R                  U5        O#[         R                  R                  U/5      UU'   U
(       a  ['        U[         R                  R                  R                  [         R                  R                  R                  ["        5      5      [         R                  R                  R                  [         R                  R                  R                  [$        5      5      UR                  U   SUR)                  5        35        [+        UR                  U   R                  SUR                  U   R                  -
  5      n[-        UR                  U   R                  SUR                  U   R                  -
  5      n UR                  U   R                  UU 5        UR                  U   R                  U5        US-  nUR                  UR                  U   5        U(       d  GM  UR                  [         R                  R!                  U5      [         R                  R!                  U5      UU[        R                  " UU 5      45        GM=     Sn!U(       a  UR                  U   n"[        R                  " UR                  U   R.                  UR                  U   R0                  5      n#U"U#:w  at  U	S	:X  ai  U H_  n$[3        U$R                  U#R                  -
  5      n%[3        U$R                  U#R                  -
  5      n&[+        U%U&5      n'[+        U!U'5      n!Ma     UU!4$ SW-   n!UU!4$ 
NFr   r   Tr   r   r   zIPL: rv   r   r   r   r   r;   r<   re   r   r#   r   set_lower_upperr  r  r   r   r    r?   r5   r:   r   	get_valuer   r   
prev_lower
prev_upperabs(rh   ri   r   nar   
rule_tracer   t_cntr   rz   r   r   rules_to_be_applied_tracer   facts_to_be_applied_tracerule_trace_atomsr   r   r   updatedre   rT   r   updated_bndsprev_bndrs  rt  r   ip_update_cntr   r   r  r  r  current_bnd
prev_t_bndr   lower_deltaupper_delta	max_deltas(                                           rV   r   r     s   		
C  ++H,B,BC U[[??1a(%++a.-4 kk&&v.= KKN! ++a.  CII6,,q#Q6"	KKNH'ekk!n% *7M1MSoekk((/1C1CF1KTSTV[VaVabcVdViViVklmV|t33
++


%
%ekk&6&6&A&A)&L
MR
++


%
%ekk&6&6&A&A)&L
MR%*T("b(DA	v-2\RT("b(DA -fb"Ag	q!,U[[_
mBt$++**D62mB(%++*:*:*E*EekkFVFVFaFabkFl*motozozoo  pK  pK  LQ  LW  LW  L\  L\  Lg  Lg  hq  Lr  ps  uz  u@  u@  AC  uD  HM  NO  NY  NY  N[  M\  F]  ^B%%q5;;r?+@+@'@AEB%%q5;;r?+@+@'@AE	KKO##E51	KKOv&QMB(#**515;;3E3Ef3MtUWYaYhYhinpuYvwxAg	q!,U[[_
mBt$++**D62mB(%++*:*:*E*EekkFVFVFaFabkFl*motozozoo  pK  pK  LQ  LW  LW  L\  L\  Lg  Lg  hq  Lr  ps  uz  u@  u@  AC  uD  HM  NO  NY  NY  N[  M\  F]  ^B%%q5;;r?+@+@'@AEB%%q5;;r?+@+@'@AE	KKO##E51	KKOv&QMB(##**515;;3E3Ef3MtUWYaYhYhinpuYvwxE J A+u{{1~88%++a.:S:ST*J%qwwz///0[qwwz///0[[+.Y&)$V	  
& F	&ra   c                 
   SnX   nUu  nn[         R                  R                  R                  [        R
                  5      nUUR                  ;  ab  [        R                  " SS5      UR                  U'   UU;   a  UU   R                  U5        O#[         R                  R                  U/5      UU'   UR                  U   R                  5       nU(       a4  UR                  U   R                  UR                  UR                  5        OUR                  " UU5        UR                  U   R                  U5        UR                  U   U:w  Ga  SnUR                  UR                  U   5        U(       d  US:X  Gd_  U(       GaW  UR                  [         R                  R!                  U5      [         R                  R!                  U5      UUUR                  U   R                  5       45        U
(       a  US:X  d  US:X  a  [         R                  R                  R                  [         R                  R                  R                  ["        5      5      n[         R                  R                  R                  [         R                  R                  R                  [$        5      5      nX   n['        UUUUU5        OUS:X  a  X   u  nnn['        UUUUU5        U(       GaC  SnU GH:  u  nnUU:X  Ga  UUR                  ;  ab  [        R                  " SS5      UR                  U'   UU;   a  UU   R                  U5        O#[         R                  R                  U/5      UU'   U
(       a  ['        U[         R                  R                  R                  [         R                  R                  R                  ["        5      5      [         R                  R                  R                  [         R                  R                  R                  [$        5      5      UR                  U   SUR)                  5        35        [+        UR                  U   R                  SUR                  U   R                  -
  5      n[-        UR                  U   R                  SUR                  U   R                  -
  5      n UR                  U   R                  UU 5        UR                  U   R                  U5        US-  nUR                  UR                  U   5        U(       ae  UR                  [         R                  R!                  U5      [         R                  R!                  U5      UU[        R                  " UU 5      45        UU:X  d  GM  UUR                  ;  ab  [        R                  " SS5      UR                  U'   UU;   a  UU   R                  U5        O#[         R                  R                  U/5      UU'   U
(       a  ['        U[         R                  R                  R                  [         R                  R                  R                  ["        5      5      [         R                  R                  R                  [         R                  R                  R                  [$        5      5      UR                  U   SUR)                  5        35        [+        UR                  U   R                  SUR                  U   R                  -
  5      n[-        UR                  U   R                  SUR                  U   R                  -
  5      n UR                  U   R                  UU 5        UR                  U   R                  U5        US-  nUR                  UR                  U   5        U(       d  GM  UR                  [         R                  R!                  U5      [         R                  R!                  U5      UU[        R                  " UU 5      45        GM=     Sn!U(       a  UR                  U   n"[        R                  " UR                  U   R.                  UR                  U   R0                  5      n#U"U#:w  at  U	S	:X  ai  U H_  n$[3        U$R                  U#R                  -
  5      n%[3        U$R                  U#R                  -
  5      n&[+        U%U&5      n'[+        U!U'5      n!Ma     UU!4$ SW-   n!UU!4$ r  r  r  s(                                           rV   r   r     s   		
C  ++H,B,BC U[[??1a(%++a.-4 kk&&v.= KKN! ++a.  CII6,,q#Q6"	KKNH'ekk!n% *7M1MSoekk((/1C1CF1KTSTV[VaVabcVdViViVklmV|t33
++


%
%ekk&6&6&A&A)&L
MR
++


%
%ekk&6&6&A&A)&L
MR%*T("b(DA	v-2\RT("b(DA -fb"Ag	q!,U[[_
mBt$++**D62mB(%++*:*:*E*EekkFVFVFaFabkFl*motozozoo  pK  pK  LQ  LW  LW  L\  L\  Lg  Lg  hq  Lr  ps  uz  u@  u@  AC  uD  HM  NO  NY  NY  N[  M\  F]  ^B%%q5;;r?+@+@'@AEB%%q5;;r?+@+@'@AE	KKO##E51	KKOv&QMB(#**515;;3E3Ef3MtUWYaYhYhinpuYvwxAg	q!,U[[_
mBt$++**D62mB(%++*:*:*E*EekkFVFVFaFabkFl*motozozoo  pK  pK  LQ  LW  LW  L\  L\  Lg  Lg  hq  Lr  ps  uz  u@  u@  AC  uD  HM  NO  NY  NY  N[  M\  F]  ^B%%q5;;r?+@+@'@AEB%%q5;;r?+@+@'@AE	KKO##E51	KKOv&QMB(##**515;;3E3Ef3MtUWYaYhYhinpuYvwxE J A+u{{1~88%++a.:S:ST*J%qwwz///0[qwwz///0[[+.Y&)$V	  
& F	&ra   c                 H    U R                  XUR                  5       U45        g r   )r#   r   )r  rs  rt  r  r   s        rV   r   r     s    BHMMOT23ra   c                 L    SnU H  u  pEU=(       a    [        XXE45      nM     U$ NT)r  rh   r   nasr  rT   r   s         rV   are_satisfied_noder    ,    
XaH'xH& ra   c                     SnUS   b&  US   b    X   nUR                   " US   US   5      nU$ SnU$ ! [         a    Sn U$ f = fNFr   r   Tis_satisfied	Exceptionrh   r   r  r  re   s        rV   r  r    o    
	A"Q%- 5r!ube,6
 	 &	 
 6 		   3 AAc                    SnSnUu  pVUR                   nUb  Ub   X   nUR                  R                  5        H  n	U	R                   n
Xz;   d  M  U
[        U5      S-   S  R	                  SS5      R	                  SS5      R                  5       (       d  M\  UR                  " XS   5      n[        U
[        U5      S-   S  5      n  O    X44$  X44$ SnX44$ ! [         a    Sn X44$ f = fNFr   r   .r   -T	r   re   rK  r   replaceisdigitr  str_to_floatr  rh   r   r  r  r  rT   r   l_strre   world_lworld_l_strs              rV   is_satisfied_node_comparisonr    	   


	
	
ck 5++""$w--KCJqLM : B B3 K S STWY[ \ d d f f  Q%0V;s5z!|}56V
 % 	  	 &	 
 6 		$   0C AC 0C C C'&C'c                 L    SnU H  u  pEU=(       a    [        XXE45      nM     U$ r  )r  r  s         rV   are_satisfied_edger    r  ra   c                     SnUS   b&  US   b    X   nUR                   " US   US   5      nU$ SnU$ ! [         a    Sn U$ f = fr  r  r  s        rV   r  r  '  r  r  c                    SnSnUu  pVUR                   nUb  Ub   X   nUR                  R                  5        H  n	U	R                   n
Xz;   d  M  U
[        U5      S-   S  R	                  SS5      R	                  SS5      R                  5       (       d  M\  UR                  " XS   5      n[        U
[        U5      S-   S  5      n  O    X44$  X44$ SnX44$ ! [         a    Sn X44$ f = fr  r  r  s              rV   is_satisfied_edge_comparisonr  6  r  r  c                 >   UR                  5       nUS:X  a4  UR                  5       R                  UR                  5       R                  4$ [        R
                  " SS9   U  H  nUR                  U:X  d  M  U" X#5      nM     S S S 5        W$ ! , (       d  f       W$ = f)Nr   zTuple((float64, float64)))
annotation)r=  get_bndr  r  r   r   r-  )r   r   r   weights	func_namefuncr  s          rV   r   r   Q  s    ))+O			t||~33	33}} ;<#t}}	!{,Z $ = 
	 =< 
s   B7B
Bc                     X   nUS   UR                   ;   a  UR                   US      nO[        R                  " SS5      nUS   R                  UR                  :  d  UR                  US   R                  :  a  ggNr   r   FTre   r;   r   r  r  rh   r   r  re   r   s        rV   r   r   ^  i    		qEU[[BqE#1#U[[399#))bekk"9		ra   c                     X   nUS   UR                   ;   a  UR                   US      nO[        R                  " SS5      nUS   R                  UR                  :  d  UR                  US   R                  :  a  ggr  r  r  s        rV   r   r   k  r  ra   c                 	   X   nU(       Gac  UR                  [        R                  R                  U5      [        R                  R                  U5      XS   [        R
                  " SS5      45        US:X  d  US:X  a  U(       a  X   nOUS:X  a  U(       a  X   S   nOSnU(       a  [        U	[        R                  R                  R                  [        R                  R                  R                  [        5      5      [        R                  R                  R                  [        R                  R                  R                  [        5      5      UR                  US      SU 35        UR                  US      R                  SS5        UR                  US      R                  S	5        U GH  u  nnUUS   :X  Gas  U(       a  [        U	[        R                  R                  R                  [        R                  R                  R                  [        5      5      [        R                  R                  R                  [        R                  R                  R                  [        5      5      UR                  U   SW 35        UR                  U   R                  SS5        UR                  U   R                  S	5        U(       ae  UR                  [        R                  R                  U5      [        R                  R                  U5      UU[        R
                  " SS5      45        UUS   :X  d  GM  U(       a  [        U	[        R                  R                  R                  [        R                  R                  R                  [        5      5      [        R                  R                  R                  [        R                  R                  R                  [        5      5      UR                  U   SW 35        UR                  U   R                  SS5        UR                  U   R                  S	5        U(       d  GM  UR                  [        R                  R                  U5      [        R                  R                  U5      UU[        R
                  " SS5      45        GM	     g 
Nr   r   r   r   r   r   r  zInconsistency due to Tr#   r   r    r?   r;   r   r   r   r   r   r5   r:   re   r  r   )rh   r   r  r   r  r   r   r   r  r  r  r  r   r   re   r   r   r   s                     rV   r   r   x  s   		 U[[''.0B0B60JDUVRWYaYhYhijklYmno	V^t55*
#
(4v~*
#
(
+4
4&(8(8(C(CEKKDTDTD_D_`iDj(kmrmxmxm}m}  nI  nI  JO  JU  JU  JZ  JZ  Je  Je  fo  Jp  nq  sx  s~  s~  A  BC  D  sE  I^  _c  ^d  Ge  fRU##Aq)RUt$VRAY')9)9)D)DU[[EUEUE`E`ajEk)lnsnynyn~n~  oJ  oJ  KP  KV  KV  K[  K[  Kf  Kf  gp  Kq  or  ty  t  t  @B  tC  G\  ]a  \b  Ec  d;;r?""1a(;;r?d#"u{{))%0%++2D2DV2LdTVX`XgXghijkXlmnAY')9)9)D)DU[[EUEUE`E`ajEk)lnsnynyn~n~  oJ  oJ  KP  KV  KV  K[  K[  Kf  Kf  gp  Kq  or  ty  t  t  @B  tC  G\  ]a  \b  Ec  d;;r?""1a(;;r?d#""u{{))%0%++2D2DV2LdTVX`XgXghijkXlmn ra   c                 	   X   nU(       Gac  UR                  [        R                  R                  U5      [        R                  R                  U5      XS   [        R
                  " SS5      45        US:X  d  US:X  a  U(       a  X   nOUS:X  a  U(       a  X   S   nOSnU(       a  [        U	[        R                  R                  R                  [        R                  R                  R                  [        5      5      [        R                  R                  R                  [        R                  R                  R                  [        5      5      UR                  US      SU 35        UR                  US      R                  SS5        UR                  US      R                  S	5        U GH  u  nnUUS   :X  Gas  U(       a  [        U	[        R                  R                  R                  [        R                  R                  R                  [        5      5      [        R                  R                  R                  [        R                  R                  R                  [        5      5      UR                  U   SW 35        UR                  U   R                  SS5        UR                  U   R                  S	5        U(       ae  UR                  [        R                  R                  U5      [        R                  R                  U5      UU[        R
                  " SS5      45        UUS   :X  d  GM  U(       a  [        U	[        R                  R                  R                  [        R                  R                  R                  [        5      5      [        R                  R                  R                  [        R                  R                  R                  [        5      5      UR                  U   SW 35        UR                  U   R                  SS5        UR                  U   R                  S	5        U(       d  GM  UR                  [        R                  R                  U5      [        R                  R                  U5      UU[        R
                  " SS5      45        GM	     g r  r  )rh   r   r  r   r  r   r   r   r  r  r  r  r   r   r   r   r   r   s                     rV   r   r     s    U[[''.0B0B60JDUVRWYaYhYhijklYmno	V^t55*
#
(4v~*
#
(
+4
4&(8(8(C(CEKKDTDTD_D_`iDj(kmrmxmxm}m}  nI  nI  JO  JU  JU  JZ  JZ  Je  Je  fo  Jp  nq  st  sz  sz  {}  ~  {@  sA  EZ  [_  Z`  Ca  bA1%A4 VRAY')9)9)D)DU[[EUEUE`E`ajEk)lnsnynyn~n~  oJ  oJ  KP  KV  KV  K[  K[  Kf  Kf  gp  Kq  or  tu  t{  t{  |~  t  CX  Y]  X^  A_  `772;q!$772;$"u{{))%0%++2D2DV2LdTVX`XgXghijkXlmnAY')9)9)D)DU[[EUEUE`E`ajEk)lnsnynyn~n~  oJ  oJ  KP  KV  KV  K[  K[  Kf  Kf  gp  Kq  or  tu  t{  t{  |~  t  CX  Y]  X^  A_  `772;q!$772;$""u{{))%0%++2D2DV2LdTVX`XgXghijkXlmn ra   c                    UR                  U 5        [        R                  R                  R	                  [
        5      X'   [        R                  R                  R	                  [
        5      X '   X;  aN  [        R                  " [        R                  R                  R	                  [        R                  5      5      X@'   g g r   )
r#   r   r   r   r   r5   re   r   r6   r7   )r  rO   rQ   rB   rG   s        rV   r   r     s    d;;##..y9 ;;++66yA$${{5;;+;+;+F+FuGWGW+XY %ra   c                     [         R                  " [        R                  R                  R                  [        R                  5      5      X'   g r   re   r   r   r   r   r   r6   r7   )r  rG   s     rV   r   r     /    #kk%++*:*:*E*EeFVFV*WXra   c                     [         R                  " [        R                  R                  R                  [        R                  5      5      X'   g r   r  )r  rK   s     rV   r   r     r  ra   c                    X;  a  [        XX4U5        X;  a  [        XX4U5        X4nSnX;  Ga  SnUR                  U5        X    R                  U5        X1   R                  U 5        UR                  S:w  az  X;  a6  [        R                  " [
        R                  R                  U/5      5      X'   Xi;   a  X   R                  U5        Os[
        R                  R                  U/5      X'    X4$ [        R                  " [
        R                  R                  R                  [        R                  5      5      X'   X4$ XhU   R                  ;  au  UR                  S:w  ae  Sn[        R                  " SS5      X   R                  U'   Xi;   a  X   R                  U5        X4$ [
        R                  R                  U/5      X'   X4$ )NFTr   r   r   )r   r#   r   re   r   r   r   r   r   r6   r7   r;   r   )r{  r|  rO   rQ   rB   rC   rT   rG   rK   ri   r   r  new_edges                rV   r   r     s    F09MN
F09MN
 
(,,t6"""6*WWb[
&!&U[[-=-=qc-B!CD!{{''/M 	 !&EKK,<,<,G,GHXHX,Y Z 	 4(...177B;8)1A)>##A&D! 	 {{''/Mra   c                     Sn[         R                  R                  R                  [        5      nU  H>  nU H5  n[        XX#XEXgXU
5      u  nnUR                  U5        U(       a  US-   OUnM7     M@     X4$ r  )r   r   r   r   r:   r   r#   )r   r   rO   rQ   rB   rC   rT   rG   rK   ri   r   r   r   r{  r|  r  r  s                    rV   r   r     s    {{**95VffiEZ[  tH  YZ  [>4d"WQY7  
 	ra   c                     U u  pgUR                  U 5        X@	 U H   nXU   ;   d  M  XX   R                  U 5        M"     X   R                  U5        X'   R                  U5        g r   )remove)	r  rO   rQ   rC   rK   ri   r{  r|  rT   s	            rV   r  r    se    d
Q	14   &!!!&)ra   c                 N   UR                  U 5        X@	 X	 X 	 U H   nXU   ;   d  M  XV   R                  U 5        M"     UR                  5        H   nXU   ;   d  M  X   R                  U 5        M"     UR                  5        H   nXU   ;   d  M  X'   R                  U 5        M"     g r   )r	  rK  )r  rO   rQ   rB   rG   ri   rT   rS   s           rV   r  r    s    d_
Q	14  
 ..
Q	q\<t  
 
 
"Q	q!!t$ #ra   c                 L    [        U 5      n[        U S-  S-  5      nU SU 3nU$ )Nr   i  r  )r   )r   r  decimal	float_strs       rV   r   r   $  s4    
e*uqy4 xq	"ra   c                     U R                  S5      nUS:w  a  [        XS-   S  5      nOSnU R                  SS5      n [        U 5      n U SU-  -  n U $ )Nr  rs   r   r   r   
   )findr   r  
str_to_int)r   decimal_posafter_decimal_lens      rV   r  r  ,  s`    zz#2%A/0	sB		E		&&	&ra   c                     U S   S:X  a  SnU R                  SS5      n OSn[        U 5      S-
  Sp2[        U 5       H  u  pEU[        U5      S-
  SX$-
  -  -  -  nM      U(       a  U* nU$ UnU$ )	Nr   r  Tr   Fr   0   r  )r  r   r   ord)r   negativefinal_indexr  r   vs         rV   r  r  9  s    	!HO(
--B
%(5zA~qfuTQSVb[RKO455& 6' $*ra   c                    [         R                  R                  R                  [        5      nSnU S   nUS   nUS:w  a  [        U5      S:  a  [         R                  R                  R                  [        5      nU HL  n	X;   a  UR                  X)   5        M  UR                  [         R                  R                  U	/5      5        MN     [        XhU5      nSnXE4$ )  
Determine the actual head groundings by applying head functions if needed.

Args:
        head_fns: List of function names for each head variable (empty string if no function)
        head_fns_vars: List of variable names that are arguments to each function
        groundings: Dictionary mapping variable names to their grounded node values
        head_functions: Tuple of available head functions

Returns:
        List of head groundings
Fr   r   T)	r   r   r   r   r5   r   r\   r#   _call_head_function)
rN  rO  rX  r   head_groundingsrm  fn_namefn_varsfn_arg_valuesfn_vars
             rV   rH  rH  G  s     ;;##..y9 A; rMc'lQ& ++""--m<-f+, ))6(34  (O/'  ra   c                     [         R                  R                  R                  [        5      nUR                  [         R                  R                  R                  [        5      5        UR                  [         R                  R                  R                  [        5      5        [         R                  R                  SS/5      n[        S5       H  nX   nX   nUS:w  d  M  [        U5      S:  d  M$  [         R                  R                  R                  [        5      n	U HL  n
X;   a  U	R                  X*   5        M  U	R                  [         R                  R                  U
/5      5        MN     [        XyU5      nXU'   SXV'   M     XE4$ )r  Fr   r   r   T)
r   r   r   r   r\   r#   r5   r   r   r  )rN  rO  rX  r   r  rm  r   r  r  r   r!  rp  s               rV   rJ  rJ  p  s5    ;;##..}=((33I>?((33I>?;;UEN+ (QK'' ]s7|a' ;;##..}==v*,- %++**F845  (O>&17:' * 	  ra   c                 *   [         R                  R                  R                  [        5      n[         R
                  " SS9   U H0  n[        US5      (       d  M  UR                  U :X  d  M(  U" U5      n  O   SSS5        U$ ! , (       d  f       U$ = f)a3  
Call a head function with the given arguments.

Args:
        fn_name: Name of the function to call
        fn_arg_values: List of arguments (each is a list of node strings)
        head_functions: Tuple of available head functions

Returns:
        Flattened list of node strings from the function result
z"types.ListType(types.unicode_type))func_resultr-  N)r   r   r   r   r5   r   hasattrr-  )r  r   r   r$  r  s        rV   r  r    sz     {{**95mm DEddJDMMW$<}%K	  F 	 FE 	s   BB-B
B)F)Stypingr   r   5pyreason.scripts.numba_wrapper.numba_types.world_typescriptsnumba_wrappernumba_typesrf   re   5pyreason.scripts.numba_wrapper.numba_types.label_typer7   r6   8pyreason.scripts.numba_wrapper.numba_types.interval_typer<   r;   3pyreason.scripts.interpretation.interpretation_dictr   r   r   r   r    r)   r5   UniTupler:   DictTyperd   rn   r4   r\   ro   clause_dataint8refine_datar?   booleanr0   r2   r?  r@  r,   r.   r&   r   r
   r2  r   rI  rG  rC  rF  rA  rD  rB  rE  r  r   r   r   r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r  r  r   r  r  rH  rJ  r  rw   ra   rV   <module>r4     s	    E E E E K K R  ! KK	KK  !3!3Q7	 [[)))U5E5EF [[)))U5E5EF  $$Y/$$Y/ kk!3!3U5E5Eu{{G[G[\a\g\g\n\nGo pq kk!3!3U[[5G5GIYIY Z[ !& 1 15;;3E3EyRWRbRbdldzdz  }B  }H  }H  }P  }P  RW  R]  R]  Re  Re  3f  !g  % 1 15;;3E3EyRWRbRbdldzdz  }B  }H  }H  }P  }P  RW  R]  R]  Re  Re  3f  !g  "KK--
ekk**8+A+ABCekk**956ekk**956EKK((3U[[5I5I)5TV[VfVfgh/   "KK--
ekk**8+A+ABCekk**956ekk**956EKK((3U[[5I5I)5TV[VfVfgh/   !& 1 15;;3E3EyRWRbRbdldzdz  }B  }H  }H  }P  }P  3Q  !R  % 1 15;;3E3EyRWRbRbdldzdz  }B  }H  }H  }P  }P  3Q  !R !&!2!2EKK4H4HI]I]^gIh4ikpkvkvkk  AF  AL  AL  AU  AU  V_  A`  la  ch  cn  cn  cu  cu  4v  "w **EKK,@,@,KU[[MaMabkMlnsn~n~+  A L, L,^ $x5 x5v $ $ $6  6 r $  $  $  $+ +\ $  $  $ > $a aH $` `F $4 4 $  $  $ 4 $  $  $ 4 $	 	 $	 	 $	 	 $o oD $o oB $Z Z $Y Y $Y Y $% %P $  $* * $% %$ $  $	 	 $
 
 $%! %!P $(! (!V $ ra   