
    <i                         S r SSKJrJr  SSKJrJr  SSKJrJ	r	J
r
JrJrJrJrJrJr  \
\\\	\4r\\\4rS rS rS r\\\\\\0rS rg	)
z@
Comparison utilities for STIX pattern observation expressions.
    )generic_cmpiter_lex_cmp)comparison_expression_cmpgeneric_constant_cmp)	AndObservationExpressionFollowedByObservationExpressionObservationExpressionOrObservationExpressionQualifiedObservationExpressionRepeatQualifierStartStopQualifierWithinQualifier_CompoundObservationExpressionc                 B    [        U R                  UR                  5      $ )z;
Compare REPEATS qualifiers.  This orders by repeat count.
)r   times_to_repeatqual1qual2s     h/home/james-whalen/.local/lib/python3.13/site-packages/stix2/equivalence/patterns/compare/observation.pyrepeats_cmpr      s       5 5u7L7LMM    c                 B    [        U R                  UR                  5      $ )z?
Compare WITHIN qualifiers.  This orders by number of seconds.
)r   number_of_secondsr   s     r   
within_cmpr   !   s"      !8!8 r   c                 |    [        U R                  U R                  4UR                  UR                  4[        5      $ )z^
Compare START/STOP qualifiers.  This lexicographically orders by start time,
then stop time.
)r   
start_time	stop_timer   r   s     r   startstop_cmpr   *   s8    
 			5??+			5??+ r   c                 2   [        U 5      n[        U5      n[        R                  U5      n[        R                  U5      nXE:w  a  [        XE5      nU$ U[        L a"  [        U R                  UR                  5      nU$ [        U [        5      (       a'  [        U R                  UR                  [        5      nU$ [        U R                  5      n[        UR                  5      n[        R                  U5      n	[        R                  U5      n
[        X5      nUS:X  aR  [        R                  U5      nU(       a  U" U R                  UR                  5      nO[!        SUR"                  -   5      eUS:X  a   [        U R$                  UR$                  5      nU$ )a  
Compare two observation expression ASTs.  This is sensitive to the order of
the expressions' sub-components.  To achieve an order-insensitive
comparison, the ASTs must be canonically ordered first.

:param expr1: The first observation expression
:param expr2: The second observation expression
:return: <0, 0, or >0 depending on whether the first arg is less, equal or
    greater than the second
r   zCan't compare qualifier type: )type"_OBSERVATION_EXPRESSION_TYPE_ORDERindexr   r	   r   operand
isinstancer   r   operandsobservation_expression_cmp	qualifier_QUALIFIER_TYPE_ORDER_QUALIFIER_COMPARATORSget	TypeError__name__observation_expression)expr1expr2type1type2	type1_idx	type2_idxresult
qual1_type
qual2_typequal1_type_idxqual2_type_idxqual_cmps               r   r&   r&   =   si    KEKE288?I288?IY2X MO 
'	'*MM5==
L ME 
E9	:	: NNENN,F
> M1 %//*
%//*
.44Z@.44Z@^<Q;-11*=H!%//5??C4z7J7JJ  Q;/,,e.J.JF Mr   N)__doc__"stix2.equivalence.patterns.comparer   r   -stix2.equivalence.patterns.compare.comparisonr   r   stix2.patternsr   r   r	   r
   r   r   r   r   r   r!   r(   r   r   r   r)   r&    r   r   <module>r?      s}    I   35L#%C& " _&8 
N	 [Z >r   