
    :j                         d Z ddlmZmZ ddlmZmZ ddlmZm	Z	m
Z
  G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Zy)zO
Interfaces for refine components to support dependency injection and testing.
    )ABCabstractmethod)ListTuple   )CharClassSegmentEnumerationStrategySegmentc                   0    e Zd ZdZededee   fd       Zy)IRegexParserz$Interface for regex pattern parsing.patternreturnc                      y)z"Parse regex pattern into segments.N )selfr   s     3/root/.openclaw/workspace/harvester/refine/types.pyparsezIRegexParser.parse        	    N)	__name__
__module____qualname____doc__r   strr   r
   r   r   r   r   r   r      s)    .S T']  r   r   c                   D    e Zd ZdZeddedee   dede	e
ef   fd       Zy)	ISplittabilityAnalyzerz-Interface for pattern splittability analysis.r   segmentscurrent_depthr   c                      y)z*Determine if pattern can be split further.Nr   )r   r   r   r   s       r   	can_splitz ISplittabilityAnalyzer.can_split   r   r   N)r   )r   r   r   r   r   r   r   r
   intr   boolr    r   r   r   r   r      sD    7 W c Z_`dfi`iZj  r   r   c                   2    e Zd ZdZeddee   defd       Zy)IEnumerationOptimizerz0Interface for enumeration strategy optimization.r   
partitionsc                      y)z1Optimize enumeration strategy for given segments.Nr   )r   r   r%   s      r   optimizezIEnumerationOptimizer.optimize#   r   r   N)
   )	r   r   r   r   r   r   r
   r!   r'   r   r   r   r$   r$       s)    :g C  r   r$   c                   z    e Zd ZdZedee   dee   fd       Zededefd       Z	edee   de
eef   fd       Zy)	IOptimizationStrategyz&Interface for optimization strategies.r   r   c                      y)z Select segments for enumeration.Nr   r   r   s     r   select_segmentsz%IOptimizationStrategy.select_segments,   r   r   segmentc                      y)z2Calculate optimal enumeration depth for a segment.Nr   )r   r.   s     r   calculate_depthz%IOptimizationStrategy.calculate_depth1   r   r   c                      y)z?Evaluate a combination of segments and return (queries, value).Nr   r,   s     r   evaluate_combinationz*IOptimizationStrategy.evaluate_combination6   r   r   N)r   r   r   r   r   r   r   r-   r!   r0   r   floatr2   r   r   r   r*   r*   )   s    0-=(> 4HXCY   '7 C   T2B-C cSXjHY  r   r*   c                   @    e Zd ZdZeddee   dededee	   fd       Z
y)	IQueryGeneratorzInterface for query generation.r   strategyr%   r   c                      y)z+Generate queries from enumeration strategy.Nr   )r   r   r6   r%   s       r   generatezIQueryGenerator.generate?   r   r   N))r   r   r   r   r   r   r
   r	   r!   r   r8   r   r   r   r5   r5   <   s@    )g :M [^ hlmphq  r   r5   c                   0    e Zd ZdZedee   defd       Zy)r$   z'Interface for enumeration optimization.r   r   c                      y)z/Find optimal enumeration strategy for segments.Nr   r,   s     r   r'   zIEnumerationOptimizer.optimizeH   r   r   N)	r   r   r   r   r   r   r
   r	   r'   r   r   r   r$   r$   E   s*    1g 3F  r   N)r   abcr   r   typingr   r   r.   r   r	   r
   r   r   r$   r*   r5   r   r   r   <module>r>      s`    $  C C3 S C C &c C r   