
    j                    h   U d Z ddlmZ ddl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mZ ddlmZmZ dd	lmZmZ dd
lmZmZmZmZmZmZ dZded<    ej>                  dej@                        Z!ded<   ddZ"ddZ#dd	 	 	 	 	 	 	 ddZ$ddZ%d dZ&d!dZ'dd	 	 	 	 	 	 	 d"dZ(d#dZ)d$dZ*y)%z2Prose-free historical event and view construction.    )annotationsN)defaultdict)date	timedelta)Path)FinalLiteral)HistoryBaselineParserSourceInventory)BaselineBaselineEntry)ContractCheckinContractStatusEvent	EventTypeImportManifest
ProvenancezT08:00:00+09:00z
Final[str]
KST_SUFFIXz^##\s+(D\+\d+\b[^\n]*)zFinal[re.Pattern[str]]HISTORY_HEADINGc                Z    t        t        j                  |             j                         S )zHVerify the approved source inventory then extract only permitted fields.)r
   r   from_manifestparse)manifest_paths    l/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/history_imports.pyparse_baseliner      s!     !>!>}!MNTTVV    c                     t        d t        j                   j                  d            D              }t         fd|D              S )zLProduce legacy heading-only provenance events without retaining source text.c              3  Z   K   | ]#  }|j                  d       j                          % yw   Ngroupstrip.0matchs     r   	<genexpr>z(legacy_history_events.<locals>.<genexpr>   $     u8tuEKKN((*8t   )+utf-8encodingc              3     K   | ]Z  }t        d t        |z         dd  t        j                  dt	        dt              |      t        j                         \ yw)history_N   1.0historical_markdownsource_type
source_refcontent_sha256section_anchor)event_id
event_typeschema_versionoccurred_at_kstrecorded_at_kst
provenancestatus)r   _digestr   HISTORY_IMPORTEDr   strr   ARCHIVED)r%   anchorrecorded_atsourcesource_sha256s     r   r'   z(legacy_history_events.<locals>.<genexpr>   s}       F 	(> ? DEF 11 ''!.CPSTZP[ly  KQ  R!**	
 	
 s   A A#)tupler   finditer	read_text)rD   rE   rC   anchorss   ``` r   legacy_history_eventsrJ      sJ    u8P8PQWQaQakrQaQs8tuuG    r   r0   r9   c               D    t        fd| j                  D              S )zHCreate deterministic archived events with only known historical metrics.c              3  :   K   | ]  }t        |         yw)rK   N)_baseline_event)r%   entryrC   r9   s     r   r'   z"baseline_events.<locals>.<genexpr>3   s!     raqX]NSSaqs   )rF   entries)baselinerC   r9   s    ``r   baseline_eventsrR   ,   s     raiaqaqrrrr   c                T    t        j                  | j                         dd      dz   S )z.Serialize audit coverage without source prose.FTensure_ascii	sort_keys
)jsondumpsto_storage_dict)rQ   s    r   baseline_reportr[   6   s%    ::h..0uPTUX\\\r   c                    t        d | D              }t        j                  |j                  j	                         |t        |      |j                  j	                         ddd      dz   S )zHRender dated historical measurements separately from live current state.c              3    K   | ]|  }|j                   t        j                  u r^|j                  R|j                  d d |j                  j
                  |j                  j                  |j                  j                  d ~ y w)N
   )r   	weight_kgsleep_hourscalories_kcal)r8   r   r?   check_inr:   body_weight_kgr`   ra   )r%   events     r   r'   z"historical_view.<locals>.<genexpr>=   sr      	 Ey999enn>X ))#2.66 >>55"^^99		
 s   BB)coverageobservationsweekly_weight_trendreconciliationFTrT   rW   )rF   rX   rY   re   rZ   _weekly_weight_trendrh   )eventsrQ   rf   s      r   historical_viewrk   ;   st     	 	 	L :: ))99;(#7#E&55EEG		
 	 		 	r   c                    t        d t        j                  | j                  d            D              }t	        j
                  t        |       |||ddd      dz   S )	zESerialize old heading import provenance without historical body text.c              3  Z   K   | ]#  }|j                  d       j                          % ywr   r!   r$   s     r   r'   z"legacy_manifest.<locals>.<genexpr>U   r(   r)   r*   r+   )source_pathsha256range_labelsection_anchorsFTrT   rW   )rF   r   rG   rH   rX   rY   r@   )rD   rE   rp   rI   s       r   legacy_manifestrr   S   ss    u8P8PQWQaQakrQaQs8tuuG::c&k][f  |C  D  SX  dh  i  lp  p  pr   c                  t        | j                  | j                  | j                  dj	                  | j
                        xs d | j                  dj	                  | j                        xs d       }|j                  d      }| j                  | j                  z   t        j                  |d      z   }|dk(  r||z   }dt        |      d d  }t        |t        j                   || j"                   t$         |t'        d	| j(                  | j                  | j                  
      t*        j,                  ||dk(  rt/        | j"                        	      S d 	      S )N,)rc   r`   ra   training_summarydigestion_summarypain_summaryT)exclude_none)rV   z2.0r.   r/   r1   r2   )observation_kst_day)	r7   r8   r9   r:   r;   r<   r=   rb   import_manifest)r   r_   r`   ra   jointraining_tokensdigestion_statuspain_tokens
model_dumprE   r6   rX   rY   r>   r   r   r?   recorded_dater   r   rn   r   rA   r   )rO   rC   r9   rb   payloadevent_identityr7   s          r   rN   rN   Y   sf    %%))%"7"78@D00XXe//08DH !!t!4G((5+?+??$**W`dBeeN'.8'.1#2678H--% ../
|<#*?EL]L]ns  oB  oB  SX  Sg  Sg  h&& & u/B/BC   r   c                b   t        t              }| D ]s  }|d   }|t        j                  t	        |d               }|t        |j                               z
  }||j                            j                  t        |             u t        d t        |j                               D              S )zFGroup observed weights by Monday without inventing missing-day values.r_   r   )daysc           	   3  ~   K   | ]5  \  }}|t        |      t        t        |      t        |      z  d       d 7 yw)   )
week_startsample_countaverage_weight_kgN)lenroundsum)r%   r   valuess      r   r'   z'_weekly_weight_trend.<locals>.<genexpr>   sD      "9J "3v;UZ[^_e[filmsit[tvwUxy"9s   ;=)r   listr   fromisoformatr@   r   weekday	isoformatappendfloatrF   sorteditems)rf   weightsobservationvalueobserved_dater   s         r   ri   ri   }   s    &1$&7G#K( ..s;v3F/GHM&8M8M8O)PPJJ((*+225<@ $  "("9  r   c                d    t        j                  | j                               j                         S )N)hashlibro   encode	hexdigest)r   s    r   r>   r>      s     >>%,,.)3355r   )r   r   returnr   )rD   r   rE   r@   rC   r@   r   tuple[Event, ...])rQ   r   rC   r@   r9   Literal['1.0', '2.0']r   r   )rQ   r   r   r@   )rj   r   rQ   r   r   r@   )rD   r   rE   r@   rp   r@   r   r@   )rO   r   rC   r@   r9   r   r   r   )rf   z/tuple[dict[str, str | float | int | None], ...]r   z(tuple[dict[str, str | float | int], ...])r   r@   r   r@   )+__doc__
__future__r   r   rX   recollectionsr   datetimer   r   pathlibr   typingr   r	   checkin_cli.history_baseliner
   r   checkin_cli.history_modelsr   r   checkin_cli.modelsr   r   r   r   r   r   r   __annotations__compile	MULTILINEr   r   rJ   rR   r[   rk   rr   rN   ri   r>    r   r   <module>r      s    8 "   	 # $  ! O > l l +
J **4"**5NPRP\P\*]' ]W
* -2	sss *	s
 s]
0p -2	!!! *	!
 !H6r   