
    <iB                     (   S r SSKrSSKrSSKJr  SSKJr  SSKJr	  SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SS	K7  SS
KJr  SSKJr  S rS r\R;                  S5      rS rS r  " S S5      r! " S S\!\5      r" " S S\!\5      r#SS\4S jr$g)z7STIX2 classes and methods to generate AST from patterns    N)ParseException)TerminalNode)STIXPatternParser)STIXPatternVisitor)Pattern   )*)_BooleanExpression)DEFAULT_VERSIONc                     / nU  H<  n[        U[        5      (       a  UR                  U5        M+  UR                  U5        M>     U$ N)
isinstancelistextendappend)listsresultcs      O/home/james-whalen/.local/lib/python3.13/site-packages/stix2/pattern_visitor.pycollapse_listsr      s=    FaMM!MM!	 
 M    c                 l    / nU  H+  n[        U[        5      (       a  M  UR                  U5        M-     U$ r   )r   r   r   )parse_tree_nodesvaluesxs      r   remove_terminal_nodesr   $   s1    F!\**MM!  Mr   z0\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6})?Zc                 ,    [         R                  U 5      $ r   )_TIMESTAMP_REmatch)timestamp_strings    r   check_for_valid_timetamp_syntaxr!   /   s    /00r   c                 &    XR                  5       :H  $ r   )getText)
current_opop_tokens     r   same_boolean_operatorr&   3   s    ))+++r   c                       \ rS rSr0 rS rS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S%r(g&)'STIXPatternVisitorForSTIX27   c                 R    U[         R                  ;   a  [         R                  U   $ g r   )r(   classes)self
class_names     r   	get_class$STIXPatternVisitorForSTIX2.get_class:   s%    3;;;-55jAAr   c                     S nU R                   (       a!  U R                  US-   U R                   -   5      nU(       d  [        5       U   nU" U6 $ )NFor)module_suffixr.   globals)r,   
klass_nameargsklass_to_instantiates       r   instantiate&STIXPatternVisitorForSTIX2.instantiate@   sK    ##'>>*u2DtGYGY2Y#Z ##*9Z#8 #T**r   c                 .    U R                  U5      nUS   $ Nr   visitChildrenr,   ctxchildrens      r   visitPattern'STIXPatternVisitorForSTIX2.visitPatternJ       %%c*{r   c                 r    U R                  U5      n[        U5      S:X  a  US   $ [        US   US   /5      $ )Nr   r      )r<   lenFollowedByObservationExpressionr=   s      r   visitObservationExpressions6STIXPatternVisitorForSTIX2.visitObservationExpressionsO   s@    %%c*x=AA;2HQK!3MNNr   c                     U R                  U5      n[        U5      S:X  a  US   $ U R                  SUS   US   /5      $ )Nr   r   OrObservationExpressionrD   r<   rE   r7   r=   s      r   visitObservationExpressionOr7STIXPatternVisitorForSTIX2.visitObservationExpressionOrW   sJ    %%c*x=AA;##$=XVW[?YZZr   c                     U R                  U5      n[        U5      S:X  a  US   $ U R                  SUS   US   /5      $ )Nr   r   AndObservationExpressionrD   rK   r=   s      r   visitObservationExpressionAnd8STIXPatternVisitorForSTIX2.visitObservationExpressionAnd_   sJ    %%c*x=AA;##$>!hWXk@Z[[r   c                 V    U R                  U5      nU R                  SUS   US   5      $ NQualifiedObservationExpressionr   r   r<   r7   r=   s      r   "visitObservationExpressionRepeated=STIXPatternVisitorForSTIX2.visitObservationExpressionRepeatedg   1    %%c* @(1+xXY{[[r   c                 N    U R                  U5      nU R                  SUS   5      $ )NObservationExpressionr   rU   r=   s      r    visitObservationExpressionSimple;STIXPatternVisitorForSTIX2.visitObservationExpressionSimplel   s*    %%c* 7!EEr   c                 
   U R                  U5      n[        US   [        5      (       aF  US   R                  R                  U R
                  R                  :X  a  U R                  SUS   5      $ U R                  SUS   5      $ )Nr   ParentheticalExpressionr   rZ   )r<   r   r   symboltypeparser_classLPARENr7   r=   s      r   "visitObservationExpressionCompound=STIXPatternVisitorForSTIX2.visitObservationExpressionCompoundq   sw    %%c*hqk<00Xa[5G5G5L5LPTPaPaPhPh5h##$=x{KK##$;Xa[IIr   c                 V    U R                  U5      nU R                  SUS   US   5      $ rS   rU   r=   s      r    visitObservationExpressionWithin;STIXPatternVisitorForSTIX2.visitObservationExpressionWithiny   rX   r   c                 V    U R                  U5      nU R                  SUS   US   5      $ rS   rU   r=   s      r   #visitObservationExpressionStartStop>STIXPatternVisitorForSTIX2.visitObservationExpressionStartStop~   rX   r   c                 >   U R                  U5      n[        U5      S:X  a  US   $ [        US   [        5      (       aG  [	        US   R
                  US   5      (       a&  US   R                  R                  US   5        US   $ U R                  SUS   US   /5      $ )Nr   r   rD   OrBooleanExpression)	r<   rE   r   r
   r&   operatoroperandsr   r7   r=   s      r   visitComparisonExpression4STIXPatternVisitorForSTIX2.visitComparisonExpression   s    %%c*x=AA;(1+'9::?TU]^_U`UiUikstukv?w?w$$++HQK8{"''(=XVW[?YZZr   c                     U R                  U5      n[        U5      S:X  a  US   $ [        US   [        5      (       a&  US   R                  R                  US   5        US   $ U R                  SUS   US   /5      $ )Nr   r   rD   AndBooleanExpression)r<   rE   r   r
   rn   r   r7   r=   s      r   visitComparisonExpressionAnd7STIXPatternVisitorForSTIX2.visitComparisonExpressionAnd   s    %%c*x=AA;(1+'9::$$++HQK8{"''(>!hWXk@Z[[r   c                     U R                  U5      nUS   R                  R                  nX0R                  R                  :g  nU R                  SUS   U[        U5      S:  a	  S   U5      $ S   U5      $ )Nr   EqualityComparisonExpressionr      rD   )r<   r_   r`   ra   EQr7   rE   )r,   r>   r?   rm   negateds        r   visitPropTestEqual-STIXPatternVisitorForSTIX2.visitPropTestEqual   s    %%c*A;%%**//222*HQKs8}WXGX!9`
 	
^_9`
 	
r   c                    U R                  U5      nUS   R                  R                  nX0R                  R                  :X  a2  U R                  SUS   U[        U5      S:  a	  S   S5      $ S   S5      $ X0R                  R                  :X  a2  U R                  SUS   U[        U5      S:  a	  S   S5      $ S   S5      $ X0R                  R                  :X  a2  U R                  SUS   U[        U5      S:  a	  S   S5      $ S   S5      $ X0R                  R                  :X  a2  U R                  S	US   U[        U5      S:  a	  S   S5      $ S   S5      $ g )
Nr   GreaterThanComparisonExpressionr   rw   rD   FLessThanComparisonExpression$GreaterThanEqualComparisonExpression!LessThanEqualComparisonExpression)
r<   r_   r`   ra   GTr7   rE   LTGELE)r,   r>   r?   rm   s       r   visitPropTestOrder-STIXPatternVisitorForSTIX2.visitPropTestOrder   s   %%c*A;%%**((+++##18A;c(ma/7 567  **---##.c(ma/7 567  **---##6c(ma/7 567  **---##3Xa[c(ma/7 567  .r   c                     U R                  U5      nU R                  SUS   U[        U5      S:  a	  S   S5      $ S   S5      $ )NInComparisonExpressionr   rw   rD   Fr<   r7   rE   r=   s      r   visitPropTestSet+STIXPatternVisitorForSTIX2.visitPropTestSet   sS    %%c* 8(1+xUXYaUbefUfPQGnpuvvlmGnpuvvr   c                     U R                  U5      nU R                  SUS   U[        U5      S:  a	  S   S5      $ S   S5      $ )NLikeComparisonExpressionr   rw   rD   Fr   r=   s      r   visitPropTestLike,STIXPatternVisitorForSTIX2.visitPropTestLike   sS    %%c* :HQKWZ[cWdghWhRSIprwxxnoIprwxxr   c                     U R                  U5      nU R                  SUS   U[        U5      S:  a	  S   S5      $ S   S5      $ )NMatchesComparisonExpressionr   rw   rD   Fr   r=   s      r   visitPropTestRegex-STIXPatternVisitorForSTIX2.visitPropTestRegex   sW    %%c*)8A;c(mVWFW8_
 	
]^8_
 	
r   c                     U R                  U5      nU R                  SUS   U[        U5      S:  a  S   5      $ S   5      $ )NIsSubsetComparisonExpressionr   rw   rD   r   r=   s      r   visitPropTestIsSubset0STIXPatternVisitorForSTIX2.visitPropTestIsSubset   sM    %%c* >X[^_g[hkl[lVWMtuursMtuur   c                     U R                  U5      nU R                  SUS   U[        U5      S:  a  S   5      $ S   5      $ )NIsSupersetComparisonExpressionr   rw   rD   r   r=   s      r   visitPropTestIsSuperset2STIXPatternVisitorForSTIX2.visitPropTestIsSuperset   sM    %%c* @(1+x]`ai]jmn]nXYOvwwtuOvwwr   c                 N    U R                  U5      nU R                  SUS   5      $ )Nr^   r   rU   r=   s      r   visitPropTestParen-STIXPatternVisitorForSTIX2.visitPropTestParen   s*    %%c* 98A;GGr   c                 H   U R                  U5      n[        US   [        5      (       a(  [        US   R                  5      (       d  [        S5      e[        US   [        5      (       a(  [        US   R                  5      (       d  [        S5      e[        US   US   5      $ )Nr   z#Start time is not a legal timestamprw   z"Stop time is not a legal timestamp)r<   r   StringConstantr!   value
ValueErrorStartStopQualifierr=   s      r   visitStartStopQualifier2STIXPatternVisitorForSTIX2.visitStartStopQualifier   s    %%c*hqk>2228A;3D3DEE!"GHIhqk>2228A;3D3DEE!"FGH!(1+x{;;r   c                 @    U R                  U5      n[        US   5      $ Nr   )r<   WithinQualifierr=   s      r   visitWithinQualifier/STIXPatternVisitorForSTIX2.visitWithinQualifier   !    %%c*x{++r   c                 @    U R                  U5      n[        US   5      $ r   )r<   RepeatQualifierr=   s      r   visitRepeatedQualifier1STIXPatternVisitorForSTIX2.visitRepeatedQualifier   r   r   c           	         U R                  U5      n[        USS  5      n/ nSnU[        U5      :  Ga  X5   nU[        U5      S-
  :X  a  UR                  U5        OX5S-      n[	        U[
        5      (       a@  UR                  U R                  SUR                  UR                  5       5      5        US-  nO[	        U[        5      (       a\  UR                  U R                  S[	        U[        5      (       a  UR                  O
[        U5      UR                  5      5        US-  nOUR                  U5        US-  nU[        U5      :  a  GM  U R                  SUS   R                  5       U5      $ )NrD   r   r   ListObjectPathComponent
ObjectPath)r<   r   rE   r   r   r   r7   property_namer#   IntegerConstantBasicObjectPathComponentstrr   )r,   r>   r?   	flat_listproperty_pathicurrentnexts           r   visitObjectPath*STIXPatternVisitorForSTIX2.visitObjectPath   sW   %%c*"8AB<0	#i. lGC	N1$$$$W-qS>D$--$$T%5%56OQXQfQfhlhththv%wxQD/22$$$$11;GE]1^1^--dghodp

 Q$$W-Q) #i. * hqk.A.A.C]SSr   c                 .    U R                  U5      nUS   $ r:   r;   r=   s      r   visitObjectType*STIXPatternVisitorForSTIX2.visitObjectType  rB   r   c                     U R                  U5      nUS   n[        U[        5      (       a  UR                  5       nO[	        U5      nU R                  SUS5      $ )Nr   r   F)r<   r   r   r#   r   r7   )r,   r>   r?   first_componentsteps        r   visitFirstPathComponent2STIXPatternVisitorForSTIX2.visitFirstPathComponent  sX    %%c*"1+o|44"**,D'D  :D%HHr   c                 .    U R                  U5      nUS   $ r   r;   r=   s      r   visitIndexPathStep-STIXPatternVisitorForSTIX2.visitIndexPathStep'  rB   r   c                 6    [        U R                  U5      5      $ r   )r   r<   )r,   r>   s     r   visitPathStep(STIXPatternVisitorForSTIX2.visitPathStep,  s    d00566r   c                     U R                  U5      n[        US   [        5      (       a  US   $ U R                  SUS   R	                  5       S5      $ )Nr   r   T)r<   r   r   r7   r#   r=   s      r   visitKeyPathStep+STIXPatternVisitorForSTIX2.visitKeyPathStep0  sQ    %%c*hqk>22A;##$>@S@S@UW[\\r   c                 Z    U R                  U5      nU R                  S[        U5      5      $ )NListConstant)r<   r7   r   r=   s      r   visitSetLiteral*STIXPatternVisitorForSTIX2.visitSetLiteral9  s+    %%c*0Eh0OPPr   c                 .    U R                  U5      nUS   $ r:   r;   r=   s      r   visitPrimitiveLiteral0STIXPatternVisitorForSTIX2.visitPrimitiveLiteral>  rB   r   c                 .    U R                  U5      nUS   $ r:   r;   r=   s      r   visitOrderableLiteral0STIXPatternVisitorForSTIX2.visitOrderableLiteralC  rB   r   c                 L   UR                   R                  U R                  R                  :X  d.  UR                   R                  U R                  R                  :X  a  [        UR                  5       5      $ UR                   R                  U R                  R                  :X  d.  UR                   R                  U R                  R                  :X  a  [        UR                  5       5      $ UR                   R                  U R                  R                  :X  a  [        UR                  5       SS9$ UR                   R                  U R                  R                  :X  a  [        UR                  5       SS9$ UR                   R                  U R                  R                  :X  aT  UR                  5       S   S:X  a2  UR                  5       S   S:X  a  [        UR                  5       SS SS9$ [!        S5      eUR                   R                  U R                  R"                  :X  a  [%        UR                  5       5      $ UR                   R                  U R                  R&                  :X  a6  UR                  5       nUR)                  S5      (       a  US	S n[+        U5      $ U$ )
NT)from_parse_treer   'r   z6The pattern does not start and end with a single quotetrD   )r_   r`   ra   IntPosLiteralIntNegLiteralr   r#   FloatPosLiteralFloatNegLiteralFloatConstant
HexLiteralHexConstantBinaryLiteralBinaryConstantStringLiteralr   r   BoolLiteralBooleanConstantTimestampLiteral
startswithTimestampConstant)r,   noder   s      r   visitTerminal(STIXPatternVisitorForSTIX2.visitTerminalG  s   ;;t00>>>$++BRBRVZVgVgVuVuBu"4<<>22[[!2!2!B!BBdkkFVFVZ^ZkZkZ{Z{F{ 00[[!2!2!=!==t||~tDD[[!2!2!@!@@!$,,.$GG[[!2!2!@!@@||~a C'DLLN2,>#,E%dllnQr&:DQQ$%]^^[[!2!2!>!>>"4<<>22[[!2!2!C!CCLLNE$$a$U++Kr   c                 N    U(       a  UR                  U5        U$ U(       a  U/nU$ r   )r   )r,   	aggregate
nextResults      r   aggregateResult*STIXPatternVisitorForSTIX2.aggregateResult`  s-    Z(  #Ir    N))__name__
__module____qualname____firstlineno__r+   r.   r7   r@   rG   rL   rP   rV   r[   rc   rf   ri   ro   rs   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r(   r(   7   s    G+
O[\\
F
J\
\
	[
\
2w
y

v
x
H

<,
,
T:
I
7]Q

2r   r(   c                   ,   ^  \ rS rSr0 rU 4S jrSrU =r$ )STIXPatternVisitorForSTIX21ih  c                 P  > U(       az  U(       as  Xl         [        R                  (       dW  [        R                  " U5      n[
        R                  " U[
        R                  5       H  u  pEU[        R                  U'   M     OS U l         [        U l	        [        [        U ]3  5         g r   )r2   r(   r+   	importlibimport_moduleinspect
getmembersisclassSTIXPatternParser21ra   superSTIXPatternVisitor21__init__r,   r2   module_namemodulekr   	__class__s         r   r  $STIXPatternVisitorForSTIX21.__init__k  w    [!.-55"00=#..vwGDA<=.66q9 H "&D/"D24r   r2   ra   r   r   r   r   r+   r  r   __classcell__r  s   @r   r   r   h      G
5 
5r   r   c                   ,   ^  \ rS rSr0 rU 4S jrSrU =r$ )STIXPatternVisitorForSTIX20ix  c                 P  > U(       az  U(       as  Xl         [        R                  (       dW  [        R                  " U5      n[
        R                  " U[
        R                  5       H  u  pEU[        R                  U'   M     OS U l         [        U l	        [        [        U ]3  5         g r   )r2   r(   r+   r   r   r   r  r  STIXPatternParser20ra   r  STIXPatternVisitor20r  r  s         r   r  $STIXPatternVisitorForSTIX20.__init__{  r  r   r  r  r  s   @r   r  r  x  r  r   r   c                     US:X  a  [         n[        nO[        n[        nU" U 5      nU" X5      nUR	                  U5      $ )z2
Create a STIX pattern AST from a pattern string.
z2.1)	Pattern21r   	Pattern20r  visit)patternr2   r  versionpattern_classvisitor_classpattern_objbuilders           r   create_pattern_objectr$    sE    
 %!3!3(KM7GW%%r   )%__doc__r   r   stix2patterns.exceptionsr   (stix2patterns.grammars.STIXPatternParserr   ,stix2patterns.v20.grammars.STIXPatternParserr   r  -stix2patterns.v20.grammars.STIXPatternVisitorr   r  stix2patterns.v20.patternr   r  ,stix2patterns.v21.grammars.STIXPatternParserr  -stix2patterns.v21.grammars.STIXPatternVisitorr  stix2patterns.v21.patternr  patternsr
   r  r   r   r   recompiler   r!   r&   r(   r   r  r$  r   r   r   <module>r1     s    =   3 A-/ :-/ :  ( $
 

NO1,n nb	5"<>R 5 5"<>R 5  24_ &r   