
    j q                    P   U d Z ddlmZ ddlZddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ d
Zded<   dZded<   dZded<   dZded<   dZded<   ddddZded<   dZded<    ej2                  d      Zded<    ej2                  d      Zded <    ej2                  d!      Zded"<    ej2                  d#      Zded$<    ej2                  d%ej<                        Zded&<    ej2                  d'      Z ded(<   d)Z!d*ed+<    e"d,d-h      Z#d.ed/<    e"h d0      Z$d.ed1<    e"h d2       e"h d3       e"h d4       e"h d5       e"h d6       e"h d7      d8Z%d9ed:<   d;d<d=d>d?d@dAdBdBdBdC
Z&dDedE<    e"h dF      Z'd.edG<   dHdHdddIZ(dedJ<    e"h dK      Z)d.edL<    e"h dM      Z*d.edN<    e"dOdPh      Z+d.edQ<    e"dRdSh      Z,d.edT<    e"h dU      Z-d.edV<   ddddWZ.dedX<   dYdZd[d[dZd[d\Z/d]ed^<    e"h d_      Z0d.ed`<    edadab       G dc dd             Z1 edadab       G de df             Z2ddgZ3ddhZ4ddiZ5ddjZ6	 	 	 	 	 	 ddkZ7ddlZ8ddmZ9ddnZ:ddoZ;ddpZ<ddqZ=ddrZ>ddsZ?ddtZ@dduZAddvZB	 	 	 	 	 	 ddwZCddxZDddyZEddzZFdd{ZGdd|ZHdd}ZIdd~ZJddZKddZLy)zDSelect bounded, attributed coach knowledge for a finalized check-in.    )annotationsN)	dataclass)datetimetimezone)Path)Final)	normalize)urlparsezruntime-evidence.jsonz
Final[str]_MANIFEST_NAMEzlegacy-corpus-approved.json_APPROVED_MANIFEST_NAMEz1.0_SCHEMA_VERSION   z
Final[int]_MAX_EVIDENCE   _MAX_PER_TOPIC   )   훈련·수행   안전·의료·약물   시합·피크위크zFinal[dict[str, int]]_TOPIC_LIMITSiX  _MAX_TEXT_LENGTHu   [가-힣A-Za-z0-9]{2,}zFinal[re.Pattern[str]]_TOKENz ^[A-Za-z][A-Za-z0-9_.:-]{1,127}$_IDz^approved-[0-9a-f]{16}$_APPROVED_CLUSTER_IDz^safe-rewrite-[0-9a-f]{16}$_SAFE_REWRITE_IDz^(instagram|naver|youtube):\S+$
_SOURCE_IDu	   [가-힣]_HANGUL)u   으로u   에서u   에게u   처럼u   까지u   부터u   와u   과u   은u   는u   이u   가u   을u   를u   에u   의u   도u   로u   만zFinal[tuple[str, ...]]_KOREAN_SUFFIXESr   r   zFinal[frozenset[str]]_RUNTIME_EXCLUDED_TOPICS>      회복·수면r   r      소화·식단 반응   코칭 철학·기타r   _CURATED_ALLOWED_TOPICS>   fodmap   장   변비   복부   설사   소화   식욕>   	   린매스   벌크   증량>      잠   수면   숙면   피로   회복	   컨디션>      기술   볼륨   부하   성능   수행   운동   중량r2      훈련   가동범위   퍼포먼스>      상담   안전   의료   진료   부상   증상   통증>      대회   시합   피크위크)r!   u   증량·벌크r    r   r   r   z Final[dict[str, frozenset[str]]]_TOPIC_REQUIRED_TERMS)   체중u	   몸무게u	   체성분u	   체지방   감량r-   u   정체u	   플래토plateauu   수분u   글리코겐u   추세trendweight)	   칼로리u   열량u   섭취   식단   영양   탄수화물	   단백질   지방rJ   r,   r-   caloriekcal)	r)   r%   r'   r&   r(   r*   r$   u   음식rO   )r/   r.   r0   u   수면시간r2   r1   r3   sleep)r/   r.   r0   u   수면의 질r2   r1   r3   rV   )r3   r1   r2   r/   r8   r=   	readiness)rD   u   아픔u   관절rB   u   불편rC   r2   pain)r;   r9   r8   r=   r7   r5   r6   r:   r<   r4   r2   trainingperformance)

bodyweightcalories	digestionsleep_durationsleep_quality	conditionrX   training_plantraining_summaryworkout_qualityz!Final[dict[str, tuple[str, ...]]]_FIELD_TERMS>   optional_notera   rc   rb   _NO_FIELD_EXPANSION   )primary_source_extractedABC_EVIDENCE_GRADE_RANK>   recoverygeneral_traininggeneral_nutritiondigestive_observation_RUNTIME_SAFETY_CLASSES>   
title-onlyrawtitlependingfragment
quarantine
title_onlyquarantinedunavailablecontext_onlypending_reviewinsufficient_fragmentcontext-only_REJECTED_ROW_STATUSESauthor_viewpointgeneral_guidance_CURATED_CLAIM_TYPESindependent_reviewsemantic_extraction_CURATED_PROVENANCE_KINDS>	   all_safety_reviewedall_flagged_reviewedinput_rows_accountedsemantic_records_accountedapproved_quarantine_disjointraw_and_runtime_not_modifiedcanonical_identities_accounted%quarantined_originals_remain_excluded3safe_replacements_are_separate_from_source_approval_APPROVED_INVARIANTS)exact_source_excerptcurated_bounded_principleapproved_safe_rewrite_CURATED_KIND_PRIORITYrp   rm   rn   )r!   r    r   r"   r   r   zFinal[dict[str, str]]_CURATED_TOPIC_SAFETY>   raw_textraw_excerptr{   original_textoriginal_claimterminal_identityquarantined_originalr~   _FORBIDDEN_CURATED_KEYST)frozenslotsc                  d    e Zd ZU dZded<   ded<   ded<   ded<   dZded<   dZded	<   dZded
<   y)RetrievedKnowledgezCOne attributed, bounded evidence item selected for model reference.strsourcetopic
source_urltext evidence_idevidence_kind
confidenceN)__name__
__module____qualname____doc____annotations__r   r   r        p/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/knowledge_retrieval.pyr   r      s7    MKJO
IKM3Jr   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   y)_KnowledgeEntryr   canonical_source_idr   r   r   frozenset[str]source_platformsr   r   r   source_digestextracted_at_kstreviewed_at_kstevidence_gradesafety_classbool	truncatedr   intsource_prioritytokensN)r   r   r   r   r   r   r   r   r      sb    K$$JO
IOOr   r   c           
        t        t        |t              r|ni       }|syt        t	        | dz  t
        z        t        | dz  t        z              }|D cg c](  }t        ||      rt        ||j                  z        |f* c}g }i }t               t               }rGt        |      t        k  r4t              D 	cg c]X  \  }\  }	}|j                  |j                  d      t         j                  |j                  t"              k  rt%        |      |vr|Z }
}	}}|
s	 t5        |      S t'        |
fd      }j)                  |      \  }	}|j+                  t-        |             |j                  |j                  d      dz   ||j                  <   j/                  |j0                         |j3                  t%        |             rt        |      t        k  r4t5        |      S c c}w c c}}	}w )zCReturn bounded, relevant evidence from independent reviewed layers.r   	knowledger   c                "    t        |          S N)_selection_key)index	remainingselected_sourcess    r   <lambda>z&retrieve_for_checkin.<locals>.<lambda>   s    nYu-=?OPr   keyr   )_query_tokens
isinstancedict_merge_entry_layers_load_entriesr   _load_curated_entriesr   _is_relevantlenr   setr   	enumerategetr   r   r   _selection_dedupe_keyminpopappend_as_retrievedupdater   addtuple)profile_rootanswersquery_tokensentriesentryselectedselected_topicsselected_wordingsr   _eligible_indexes
best_indexr   r   s               @@r   retrieve_for_checkinr      s    Jw,E2NL!l[0>ABl[8;RRSG E|, 
\ELL(	)51I
 *,H&(O!$"%%
H5 &/y%9
%9!z5""5;;2]5F5Fu{{Tb5cc%e,4EE %9 	 
   ? P

 ==,5e,-'6':':5;;'JQ'N$ 6 673E:;# H5$ ?7
s   -G6AG;c           	         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                        S )N)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   s    r   r   r      sH    ||kk##ZZ%%))## r   c                (   g }| j                         D ]d  \  }}t        |t              st        |t              r-|t        vr%|j	                  t
        j                  |d             |j                  |       f t        dj                  |            S )z@Expand structured check-in fields into Korean coaching concepts.r    )
itemsr   r   rf   extendrd   r   r   
_token_setjoin)r   termsfieldvalues       r   r   r     st    Eu%%eS!e3F&FLL))%45U ( chhuo&&r   c                    || j                   z  sy| j                  dk(  r| j                  t        v ryt        j                  | j                        }|du xs t        ||z        S )zLRequire wording overlap and preserve stricter boundaries for exact excerpts.Fr   N)r   r   r   r   rH   r   r   )r   r   requireds      r   r   r     s]    %,,&44H`9`$((5Ht<tL8$;<<r   c                    | \  }}t        |j                  |z        }| |j                   t        |j                      |rdndt        |j                         t        |j                         |j                  fS )Nr   r   )	r   r   r   rl   r   _recency_scorer   r   r   )scored_entryr   	relevancer   source_seens        r   r   r     s     $Iuu--0@@AK	
				e22	33a	--	..	..	// r   c                   	 t        j                  | j                  d            }t        |t              sy|j                  d      t        k7  ry|j                  d      }|j                  d      }t        |t              r |j                         rt        |t              syi |D ]T  }t        |      }|j                  |j                        }|t        |      t        |      kD  sF||j                  <   V t!        fdt#              D              S # t        t        t         j
                  f$ r Y yw xY w)zNLoad only a valid, reviewed runtime manifest; never fall back to raw catalogs.utf-8encodingr   schema_versiongenerated_at_kstr   c              3  (   K   | ]	  }|     y wr   r   ).0canonical_idby_canonical_ids     r   	<genexpr>z _load_entries.<locals>.<genexpr>C  s     [CZ<.CZs   )jsonloads	read_textOSErrorUnicodeDecodeErrorJSONDecodeErrorr   r   r   r   r   striplist_parse_entryr   _entry_quality_keyr   sorted)pathpayloadgenerated_atraw_entriesrs   r   previousr  s          @r   r   r   ,  s   **T^^W^=> gt${{#$7;;12L++i(KlC(0B0B0DJWbdhLi24OS!="&&u'@'@A1%8;Mh;WW9>OE556  [6/CZ[[[' ')=)=> s   %D D>=D>c                z   	 t        j                  | j                  d            }t        |      sy|d   }g }|d   D ]"  }t        ||      }||j                  |       $ |d   D ]"  }t        ||      }||j                  |       $ t        |      S # t        t        t         j
                  f$ r Y yw xY w)zKLoad only approved bounded clusters and rewrites from the curated artifact.r   r   r   r  approved_clustersapproved_safe_replacements)r  r  r	  r
  r  r  _valid_approved_payload_parse_curated_clusterr   _parse_safe_replacement_deduplicate_entries)r  r  r  r   rs   r   s         r   r   r   F  s    **T^^W^=> #7+-.L%'G*+&sL9NN5! , 34'\:NN5! 5  (( ')=)=> s   %B B:9B:c                   t        | t              r| j                  d      t        k7  ry| j                  d      }| j                  d      }| j                  d      }| j                  d      t        |t              rX|j                         rHt        |t              r8t        |t              r(t        t              rt        fdt        D              rydt        |      fd	t        |      ffD ]@  \  }}| j                  |      }|t        |t              st        |t              r||k7  s@ y | j                  d
      }|t        |t              sy|j                  d      |j                  d      t        |      k7  ry|j                  d      |j                  d      t        |      k7  ry|j                  d      duryy)Nr   Fr  r  r  
invariantsc              3  D   K   | ]  }j                  |      d u  yw)TN)r   )r  namer  s     r   r  z*_valid_approved_payload.<locals>.<genexpr>i  s"     Q<PDz~~d#4/<Ps    approved_cluster_countapproved_safe_replacement_countsafe_replacement_accountingquarantined_original_countapproved_safe_rewrite_count"terminal_identity_counts_unchangedT)r   r   r   r   r   r  r  anyr   r   r   r   )	r  r  clustersreplacementsr   expectedr   
accountingr  s	           @r   r  r  \  s   gt$4D(E(X;;12L{{./H;;;<L\*J|S)!!#(D),-*d+Q<PQQ 
"3x=1	*C,=>X C *UD"9ESVAW[`dl[l :;J*d+NN78D;<L@QQNN89E<=\ARR>>>?tKr   c                   t        | t              rt        |       ry | j                  d      }t	        | j                  d            }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }	t        |t
              rt        j                  |j                               |t        |t
              r|j                         t        vspt        |t
              r`t        |t
              rPt        |t              r@t        |t              r0t        |      d	k(  s"t        |      t        |      k7  st        |	      sy |j                         }|j                         j                         }|t        vry |t        vry g }
|D ]V  }t        |t
              r#t         j                  |j                                y |
j#                  |j                                X g }|D ].  }t%        |      s y |j#                  |j                                0 t        t'        d
 |
D                    t        |
      k7  ry t        t'        d |D                    t        |      k7  ry t)        d |
D              }dj+                  t-        |            }t-        |t
        j                        d	   }t/        d#i d|j                         d|j                         ddd|d|d|d|d|ddd|j                         d|j                         ddd|dddd d!t0        d   d"t3        |      S )$N
cluster_idbounded_wording
claim_typer   r   member_source_idssource_urls
provenancer   c              3  <   K   | ]  }|j                           y wr   casefoldr  	source_ids     r   r  z)_parse_curated_cluster.<locals>.<genexpr>  s     H5G	y!!#5G   c              3  <   K   | ]  }|j                           y wr   r5  )r  urls     r   r  z)_parse_curated_cluster.<locals>.<genexpr>  s     9#s||~r9  c              3  b   K   | ]'  }|j                  d d      d   j                          ) yw):r   r   N)splitr6  r7  s     r   r  z)_parse_curated_cluster.<locals>.<genexpr>  s,      kXj9a!8!;!D!D!FXjs   -/,r   r   r   r   r   r   r   r   r   r   r   r   r   r   rk   r   Fr   curated_approvedr   r   r   )r   r   _has_forbidden_curated_fieldsr   _bounded_wordingr   r   	fullmatchr  r   r  r   _valid_provenancer6  r#   rq   r   r   _valid_http_urlr   	frozensetr   r  r   r   r   )rs   r  r.  r/  r0  r   r   r1  r2  r3  normalized_sourcesr8  normalized_urlsr   r   r   s                   r   r  r    sA   c4 $A#$F&J&sww/@'ABO&JGGGE77>*L 34''-(K&Jz3'))**:*:*<=E"*c*%99%%,,+T2+t, !Q& !S%55 ,KKME%%'002L++22$&&	)S)Z-A-A)//BS-T-\!!)//"34 ' "$O!
z*z//12 " 3H5GHHISQcMdd
3999:c/>RR  kXj kkXXf-./FS\\:1=J &,,.$$& 2 	
 *     &++- %**,  "  &  //JK!" /*# r   c                   t        | t              rt        |       ry | j                  d      }| j                  d      }t	        | j                  d            }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }	| j                  d	      }
t        |t
              rt        j                  |j                               t        |t
              rt        j                  |j                               |t        |t
              rt        |t
              r|j                         d
k7  srt        |t
              rb|j                         dk7  sOt        |      rDt        |	t
              r4|	j                         r$t        |
t              r|
rt        d |
D              sy |j                         }|t        vry | j                  d      }|5t        |t
              r$|j                         j                         t        vry t        |t
              r|j                         j                         nt         j                  |      }|t         j                  |      |d hvry |j                         j#                  dd      d   j                         }t%        d#i d|j                         d|j                         dd
d|dt'        |h      d|d|j                         d|ddd|j                         d|j                         ddd|dddd d!t(        d
   d"t+        |      S )$Nreplacement_idquarantined_canonical_source_idr/  r   r   approval_statusoriginal_claim_status	rationale	citationsr   ry   c              3  2   K   | ]  }t        |        y wr   _valid_citationr  citations     r   r  z*_parse_safe_replacement.<locals>.<genexpr>  s     GY?8,Y   r   r=  r   r   r   r   r   r   r   r   r   r   r   r   r   rk   r   Fr   safe_rewrite_approvedr   r   r   )r   r   rA  r   rB  r   r   rC  r  r   rE  r  allr#   r6  rq   r   r>  r   rF  r   r   )rs   r  rJ  original_idr/  r   r   rL  rM  rN  rO  provided_safetyr   source_platforms                 r   r  r    s2   c4 $A#$FWW-.N'';<K&sww/@'ABOGGGE&Jgg/0OGG$;<$I$I~s+%%n&:&:&<=E+s+ 1 1 34<"%%/3/  "&==/5 &&(M9z*)S) )T*GYGGKKME++ggn-O",0E0E0G0P0P0RZq0q os+ 	((*"&&u- 
 488?VZG[[!'')//Q7:CCEO *002"((* . 	
 #O#45  ##%   &++- %**,  "  +  //FG!" /*# r   c                    t        | t              sy dj                  | j                               }|rt	        |      t
        kD  ry |S )Nr   )r   r   r   r>  r   r   )r   compacts     r   rB  rB    s:    eS!hhu{{}%Gc'l%55Nr   c                n   t        | t              r| sy| D ]  t        t              s yj                  d      }t        |t              r|j                         t        vr yj                  d      }|$t        |t              rt        d |D              s y|j                         dk(  rt        |t              s y|j                         dk(  r3j                  d      }t        |t              r|j                         s y|j                         dk(  st        fdd	D              r y y
)NFkindrO  c              3  2   K   | ]  }t        |        y wr   rQ  rS  s     r   r  z$_valid_provenance.<locals>.<genexpr>*  s     KXx0rU  r   review_sourcer   c              3     K   | ]D  }t        j                  |      t              xr j                  |      j                          F y wr   )r   r   r   r  )r  r   items     r   r  z$_valid_provenance.<locals>.<genexpr>4  sA      0C 488C=#.H488C=3F3F3HH0s   A
A)batchclaim_idT)	r   r  r   r   r   r  r   rW  r(  )r   r^  rO  r`  rb  s       @r   rD  rD    s    eT"%$%xx$$

<U(UHH[)	 9d+KKK::<//
9d8S::<// HH_5MmS19L9L9N::<00 0  / 0 r   c                    t        | t              rt        | j                               S t        | t              r| syt        d | j                         D              sydD ]  }|| v st        | |         r y y)NFc              3  `   K   | ]&  }t        |t              xr |j                          ( y wr   r   r   r  )r  rb  s     r   r  z"_valid_citation.<locals>.<genexpr>A  s&     Q.$z$$55.   ,.)r;  r   T)r   r   r   r  r   r(  valuesrE  )r   r   s     r   rR  rR  <  sg    %EKKM""eT"%Q%,,.QQ$%<c
 ; % r   c                    t        | t              sy| j                         }|rt        d |D              ryt	        |      }|j
                  j                         dv xr t        |j                        S )NFc              3  <   K   | ]  }|j                           y wr   )isspace)r  	characters     r   r  z"_valid_http_url.<locals>.<genexpr>M  s     KII--/r9  >   httphttps)	r   r   r  r(  r
   schemelowerr   netloc)r   	candidateparseds      r   rE  rE  I  s^    eS!IKKKi F== $55M$v}}:MMr   c                4     t         fdt        D              S )Nc              3  &   K   | ]  }|v  
 y wr   r   )r  r   rs   s     r   r  z0_has_forbidden_curated_fields.<locals>.<genexpr>T  s     =%<cscz%<   )r(  r   )rs   s   `r   rA  rA  S  s    =%<===r   c                    i }| D ]F  }|j                  |j                        }|t        |      t        |      kD  s8|||j                  <   H t        t	        |j                         d             S )zUDeduplicate malformed repeated evidence IDs while retaining curated cluster identity.c                    | j                   S r   )r   r   s    r   r   z&_deduplicate_entries.<locals>.<lambda>^  s
    %:K:Kr   r   )r   r   r  r   r  ri  )r   by_idr   r  s       r   r  r  W  si    (*E99U../1%8;Mh;WW',E%##$  ,KLMMr   c                    | D ch c]  }|j                    c}| D ch c]  }t        |j                         c}g | fd|D        S c c}w c c}w )zJKeep exact runtime rows intact while collapsing redundant curated wording.c              3  l   K   | ]+  }|j                   vrt        |j                        vr| - y wr   r   _normalized_wordingr   )r  r   runtime_idsruntime_wordingss     r   r  z&_merge_entry_layers.<locals>.<genexpr>h  s9      

(  3#EJJ/7GG (s   14r}  )runtime_entriescurated_entriesr   r  r  s      @@r   r   r   _  sl    
 3BB/5$$/BKETU_E+EJJ7_U	

(

  CUs
   AAc                $   t        | t              sy| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d	      }| j                  d
      }	| j                  d      }
t        d |||||||||	|
f
D              sy| j                  d      dust        | j                  d      t              syt        |      syt        |       rydj                  |j                               }| j                  d      }t        |t              r#|dj                  |j                               k(  ryt        |	      }t        |
||      }||yt        |      }t        di d|j                         d|j                         ddd|j                         dt        |j                         j!                         h      d|j                         d|j                         d|dt"         d|j                         d|j                         d	|j                         d
|d|d| d   dddt$        d   d|S )zNAccept one fully attributed, safety-reviewed runtime row at the JSON boundary.Nr   r   r   r   r   r   r   r   r   r   c              3  `   K   | ]&  }t        |t              xr |j                          ( y wr   rg  )r  r   s     r   r  z_parse_entry.<locals>.<genexpr>  s1      
E 	5#05;;=0
rh  runtime_eligibleTr   r   rt   r   r   r   r   r   exact_digest_reviewedr   r   r   )r   r   r   rW  r   rE  _has_rejected_row_statusr   r>  r   _normalize_evidence_grade_normalize_safety_classr   r   r  rF  r6  r   r   )rs   r   r   r   r   r   r   r   r   r   r   r\  rt   normalized_gradenormalized_safetyr   s                   r   r  r  q  s   c4 ''"78WWXFGGGE&J776?DGGO,Mww12gg/0OWW-.N77>*L   
  
ww!"$.jAUW[6\:&$hhtzz|$GGGGE%'SXXekkm-D"D0@/eWM#4#< F /557'--/ - ||~	
 #FLLN$;$;$=#>? kkm ##% &&' $))+ *//1 (--/ ( ' k" +  //EF!" # r   c                    | j                  d      du rydD ]J  }| j                  |      }t        |t              s%|j                         j	                         t
        v sJ y y)zTReject catalog/enrichment placeholders even when a malformed row claims eligibility.	availableFT)statusavailabilitycontent_status)r   r   r   r  r6  r   )rs   r   r   s      r   r  r    sV    
ww{u$;eS!ekkm&<&<&>BX&X < r   c                    | j                         }|j                         dv ry|j                         dv r|j                         S y )N>   owner-reviewed-extractedrh   rh   >   ri   rj   rk   )r  r6  upper)r   
normalizeds     r   r  r    sE    J XX)_,!!r   c                
   | j                         j                         }|t        v r|S |dk7  ry | d| j                         t        fddD              ryt        fddD              ryt        fd	d
D              ryy)Ngeneralr   c              3  &   K   | ]  }|v  
 y wr   r   r  termcontexts     r   r  z*_normalize_safety_class.<locals>.<genexpr>  s     
k'jt47?'jrw  )r)   r%   r'   r&   r(   r*   r$   rp   c              3  &   K   | ]  }|v  
 y wr   r   r  s     r   r  z*_normalize_safety_class.<locals>.<genexpr>  s     
S'Rt47?'Rrw  )r/   r2   r1   r3   rm   c              3  &   K   | ]  }|v  
 y wr   r   r  s     r   r  z*_normalize_safety_class.<locals>.<genexpr>  s!       Y  (Xt47?  (Xrw  )
rN   rO   rP   rI   rJ   r-   r,   rQ   rR   rS   ro   rn   )r  r6  rq   r(  )r   r   r   r  r  s       @r   r  r    s    '')J,,Yq((*G

k'j
kk&

S'R
SS
  Y  (X  Y  Y"r   c           	        | j                   t        | j                     t        | j                        t        | j
                        | j                  j                         | j                  | j                  | j                  | j                  f	S )zEChoose duplicate rows without depending on manifest or catalog order.)r   rl   r   r   r   r   r   r6  r   r   r   r   r   s    r   r  r    sq     	U112u,,-u--.


 
r   c                b    | j                   dk(  r| j                  S t        | j                        S )Nr   )r   r   r~  r   r   s    r   r   r     s,    44   uzz**r   c                p    dj                  t        d|       j                               j                         S )Nr   NFKC)r   r	   r>  r6  )r   s    r   r~  r~    s*    88Ife,2245>>@@r   c           	     |   t               }t        j                  |       D ]  }|j                         }|j	                  |       t
        j                  |      :t        D ]N  }|j                  |      st        |      t        |      z
  dk\  s0|j	                  |d t        |                  t        |      S )Nr   )r   r   findallr6  r   r   searchr   endswithr   rF  )r   r   tokenr  suffixs        r   r   r     s    uF%^^%


:>>*%1*&&v.3z?S[3PTU3UJJz-CK<89 +	 & Vr   c                <   	 t        j                  |       }|j                   |j                  t        j                        }	 |j                         S # t        t        t        f$ r t        d      cY S w xY w# t        t        t        f$ r t        d      cY S w xY w)zSReturn a comparable timestamp while treating malformed nonempty metadata as oldest.z-inf)tzinfo)r   fromisoformat	TypeError
ValueErrorOverflowErrorfloatr  replacer   utc	timestampr
  )r   rt  s     r   r   r     s    ''. }}x||4!! z=1 V} 7J/ V}s#   A A9 A65A69BB)r   r   r   dict[str, str]returnztuple[RetrievedKnowledge, ...])r   r   r  r   )r   r  r  r   )r   r   r   r   r  r   )r   ztuple[int, _KnowledgeEntry]r   zset[str]r  z.tuple[float, int, int, int, float, float, str])r  r   r  tuple[_KnowledgeEntry, ...])r  objectr  r   )rs   r  r  r   r  _KnowledgeEntry | None)r   r  r  
str | None)r   r  r  r   )rs   zdict[object, object]r  r   )r   z3tuple[_KnowledgeEntry, ...] | list[_KnowledgeEntry]r  r  )r  r  r  r  r  r  )rs   r  r  r  )r   r   r  r  )r   r   r   r   r   r   r  r  )r   r   r  z6tuple[int, int, float, float, str, str, str, str, str])r   r   r  r   )r   r   r  r   )r   r   r  r   )r   r   r  r  )Mr   
__future__r   r  redataclassesr   r   r   pathlibr   typingr   unicodedatar	   urllib.parser
   r   r   r   r   r   r   r   r   compiler   r   r   r   
IGNORECASEr   r   r   rF  r   r#   rH   rd   rf   rl   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rB  rD  rR  rE  rA  r  r   r  r  r  r  r  r   r~  r   r   r   r   r   <module>r     s   J "  	 ! '   ! ! 5
 4&C  C# #z 
 ($ 
  # * "!+,E!F F(bjj)LM M/9rzz:T/U , U+52::6T+U ( U%/RZZ0RTVTaTa%b
" b","**\":	 :, (  3<= 3 /  2; < 2 .  ''jk AB \] !  ( )  &&JK; 7 A$3/ $J .7 8 . *  !"	
	
	
	/ +  2; < 2 .  1: ; 1 -  /89 / +  4=> 4 0  /8 
9 
/ + 
 !"1 -  5 (/(.0 ,  2; 	< 	2 . 	 $d#	 	 $	 $d#  $(%P		'=- 4"\4),)XEPBJ<
N>N00 !$@F +
A
r   