
    <i                     z    S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	  SSK
JrJrJrJrJr  SqS	 r\4S
 jr\4S jrg)zxPython APIs for STIX 2 Pattern Semantic Equivalence.

.. autosummary::
   :toctree: pattern

   compare
   transform

|
   )pattern_visitor)DEFAULT_VERSION   )observation_expression_cmp)ChainTransformerSettleTransformer)AbsorptionTransformerDNFTransformerFlattenTransformer)NormalizeComparisonExpressionsTransformerOrderDedupeTransformerNc                      [         (       dV  [        5       n [        5       n[        5       n[	        5       n[        XU5      n[        U5      n[        5       n[        U XVU5      q [         $ )zR
Get a normalization transformer for STIX patterns.

Returns:
    The transformer
)_pattern_normalizerr   r   r   r	   r   r   r
   )normalize_comp_exprobs_expr_flattenobs_expr_orderobs_expr_absorbobs_simplifyobs_settle_simplifyobs_dnfs          \/home/james-whalen/.local/lib/python3.13/site-packages/stix2/equivalence/pattern/__init__.py_get_pattern_normalizerr      sp     57 	 .//1/1'o
 0= ".*=

     c                     [         R                  " XS9n[         R                  " XS9n[        5       nUR                  U5      u  pgUR                  U5      u  p[	        Xh5      n	U	S:H  $ )at  
Determine whether two STIX patterns are semantically equivalent.

Args:
    pattern1: The first STIX pattern
    pattern2: The second STIX pattern
    stix_version: The STIX version to use for pattern parsing, as a string
        ("2.0", "2.1", etc).  Defaults to library-wide default version.

Returns:
    True if the patterns are semantically equivalent; False if not
version    r   create_pattern_objectr   	transformr   )
pattern1pattern2stix_version	patt_ast1	patt_ast2pattern_normalizer
norm_patt1_
norm_patt2results
             r   equivalent_patternsr+   <   so      55I  55I 12&00;MJ&00;MJ'
?FQ;r   c              #      #    [         R                  " XS9n[        5       nUR                  U5      u  pVU HA  n[         R                  " XrS9nUR                  U5      u  p[	        XY5      n
U
S:X  d  M=  Uv   MC     g7f)a  
Find patterns from a sequence which are equivalent to a given pattern.
This is more efficient than using equivalent_patterns() in a loop, because
it doesn't re-normalize the search pattern over and over.  This works
on an input iterable and is implemented as a generator of matches.  So you
can "stream" patterns in and matching patterns will be streamed out.

Args:
    search_pattern: A search pattern as a string
    patterns: An iterable over patterns as strings
    stix_version: The STIX version to use for pattern parsing, as a string
        ("2.0", "2.1", etc).  Defaults to library-wide default version.

Returns:
    A generator iterator producing the semantically equivalent patterns
r   r   Nr   )search_patternpatternsr#   search_pattern_astr&   norm_search_pattern_astr(   patternpattern_astnorm_pattern_astr*   s              r   find_equivalent_patternsr4   Y   s     & )>> 12!3!=!=" %;;
 1::;G+#
 Q;M s   A-A<3	A<)__doc__ r   r   r   compare.observationr   r    r   r   transform.observationr	   r
   r   r   r   r   r   r+   r4    r   r   <module>r:      sE   	   & ; :    F :I < ,;'r   