
    j"                       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 ddl	m
Z
mZ ddlmZmZmZmZmZ ddlmZmZmZmZ d	Zd
ed<    e
d      Zd
ed<   eez  ez  e
z  dz  Zded<   eeeef   z  Zded<   ed   Zded<    G d de       Z! G d de      Z"e"Z# edd       G d d             Z$d#dZ%d$dZ&	 	 	 	 	 	 	 	 d%dZ'	 	 	 	 	 	 d&dZ(	 	 	 	 	 	 	 	 d'dZ)ed d!	 	 	 	 	 	 	 	 	 d(d"Z*e*Z+e*Z,e*Z-y))z3Canonical adherence evidence for weekly operations.    )annotationsN)Mapping)	dataclass)DecimalInvalidOperation)ClassVarFinalLiteral	TypeAlias	TypeGuard)	BaseModel
ConfigDictFieldmodel_validatorz1.0r	   ADHERENCE_SIGNAL_SCHEMA_VERSION10_DEFAULT_TOLERANCEr   MetricValueAdherenceValue)adequate
inadequatemissingcontradictoryAdherenceStatusc                      e Zd ZdZy)AdherenceSignalErrorz2Canonical adherence input or invariant is invalid.N)__name__
__module____qualname____doc__     /home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/weekly_operations_domain_adherence.pyr   r      s    <r"   r   c                     e Zd ZU dZ edd      Zded<   eZded<   d	Z	d
ed<    e
ddd      Zded<    e
ddd      Zded<    e
ddd      Zded<    e
ddd      Zded<    e
ddd      Zded<    e
ddd      Zded<    e
ddd      Zded<    e
ddd      Zded<    e
edd      Zded<   dZded <   dZd!ed"<   d#Zd$ed%<    e
dd&'      Zd(ed)<    ed*+      d/d,       Zed0d-       Zed0d.       Zy)1CanonicalAdherenceSignalzMVersioned immutable evidence derived from canonical target and actual values.Tforbid)frozenextrazClassVar[ConfigDict]model_configzLiteral['1.0']schema_versionr!   tuple[str, ...]source_event_idsNr   i0u  )defaultgele
int | Nonetarget_calories_kcalactual_calories_kcali  target_carbohydrate_gactual_carbohydrate_gi  target_protein_gactual_protein_gtarget_fat_gactual_fat_gd   r   tolerance_percentFboolcompletezbool | Noneadherentr   r   status   )r-   
max_length
str | Nonereasonaftermodec                   | j                   dv }|| j                  k7  rt        d      || j                  d uk7  rt        d      | j                  | j
                  | j                  | j                  f}| j                  | j                  | j                  | j                  f}t        d |D              rt        d      t        d t        ||d      D              r| j                   d	k7  rt        d
      | S )N   r   r   z*adherence status and completeness disagreez*adherence result and completeness disagreec              3  2   K   | ]  }|d uxr |dk    y wNr   r!   ).0targets     r#   	<genexpr>z;CanonicalAdherenceSignal.validate_signal.<locals>.<genexpr>C   s"     HfvT!1fk1s   z0adherence targets must be positive when suppliedc              3  4   K   | ]  \  }}|d u |d u k7    y wNr!   )rJ   rK   actuals      r#   rL   z;CanonicalAdherenceSignal.validate_signal.<locals>.<genexpr>F   s)      &HNFF 4Vt^4&Hs   T)strictr   z-partial adherence pairs must be contradictory)r>   r<   r   r=   r1   r3   r5   r7   r2   r4   r6   r8   anyzip)selfcomplete_statustargetsactualss       r#   validate_signalz(CanonicalAdherenceSignal.validate_signal0   s    ++)CCdmm+&'STTt}}D89&'STT%%&&!!	
 %%&&!!	
 HHH&'YZZ &)'74&H  .&'VWWr"   c                    | j                   S rN   )r*   )rS   s    r#   versionz CanonicalAdherenceSignal.versionO   s    """r"   c                    t        j                  | j                  d      ddd      }t        j                  |j                               j                         S )NjsonrD   FT),:)ensure_ascii	sort_keys
separators)r[   dumps
model_dumphashlibsha256encode	hexdigest)rS   encodeds     r#   digestzCanonicalAdherenceSignal.digestS   sH    **OOO(!	
 ~~gnn./99;;r"   )returnr%   )ri   str)r   r   r   r    r   r)   __annotations__r   r*   r,   r   r1   r2   r3   r4   r5   r6   r7   r8   r   r:   r<   r=   r>   rB   r   rW   propertyrY   rh   r!   r"   r#   r%   r%      sM   W)34x)PL&P%DNND(*o*',TaE'J*J',TaE'J*J(-dqT(J:J(-dqT(J:J#(!#EjE#(!#EjE$TaDAL*A$TaDAL*A!&/AaC!PwPHd Hk 'FO't<FJ<'" #< # # < <r"   r%   T)r'   slotsc                  r    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<   y)_SignalValuesr+   r,   r0   target_caloriesactual_caloriestarget_carbohydrateactual_carbohydratetarget_proteinactual_protein
target_fat
actual_fatr   	toleranceN)r   r   r   rk   r!   r"   r#   ro   ro   a   s>    %%####r"   ro   c                    | y 	 t        t        t        |                   }|dk\  r|S d S # t        t        t
        f$ r Y y w xY wrI   )intr   rj   r   
ValueErrorOverflowError)valueparseds     r#   _adherence_intr   o   sP    }WSZ() q[6*d* j-8 s   + AAc                "    t        | t              S rN   )
isinstancer   )r}   s    r#   _is_metric_mappingr   y   s    eW%%r"   c                    | i S | j                  |      }t        |      r|S | j                  |      }t        |      r|S | S rN   )getr   )sourceprimary	secondary	candidates       r#   _nested_valuesr   }   sJ    
 ~	

7#I)$

9%I*959A6Ar"   c                :    |D ]  }|| v st        | |         c S  y rN   )r   )r   namesnames      r#   _metric_valuer      s)     6>!&,//  r"   c                    |dv }|r|dk(  nd }t        t        | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  ||||      S )NrG   r   )r*   r,   r1   r2   r3   r4   r5   r6   r7   r8   r:   r<   r=   r>   rB   )r%   r   r,   rp   rq   rr   rs   rt   ru   rv   rw   rx   )valuesr>   rB   r<   r=   s        r#   _signalr      s     33H'/v#TH#600#33#33$88$88....&&&& ** r"   r!   )r:   r,   c                  	 t        t        |            dk  sdkD  rt	        d      t        | dd      }t        |dd      }d	d
ddd}|j                         D 	ci c]  \  }}	|t        ||	       c}	}|j                         D 	ci c]  \  }}	|t        ||	       c}	}t        fd|D              }
t        t        t        t        |                  d   d   d   d   d   d   d   d   
      }|
st        |dd      S t        fd|
D              rt        |dd      S g }|
D ]v  }|   }|   }||t	        d      |dk  rt        |dd      c S |j                  t        t        |      t        |      z
        t        |      z  t        d      z         x t!        fd|D              rdnd}t        ||d      S # t        t        f$ r}t	        d      |d}~ww xY wc c}	}w c c}	}w )zBDerive immutable evidence from canonical target and actual values.zadherence tolerance is invalidNr   r9   rK   check_in_targetrO   check_in)calories_kcalcaloriesr1   r2   )carbohydrate_gcarbs_gcarbsr3   r4   )	protein_gproteinr5   r6   )fat_gfatr7   r8   )r   carbohydrater   r   c              3  6   K   | ]  }|   |   |  y wrN   r!   rJ   r   rV   rU   s     r#   rL   z4derive_canonical_adherence_signal.<locals>.<genexpr>   s+       4=$(A 	s   r   r   r   r   r   adherence_evidence_requiredc              3  >   K   | ]  }|   d u xs |   d u   y wrN   r!   r   s     r#   rL   z4derive_canonical_adherence_signal.<locals>.<genexpr>   s,     
Led74=D 9GDMT$99es   r   target_actual_pair_requiredz,complete adherence pair narrowed incorrectlynon_positive_target100c              3  (   K   | ]	  }|k    y wrN   r!   )rJ   r}   rx   s     r#   rL   z4derive_canonical_adherence_signal.<locals>.<genexpr>   s     E*%9,*s   r   r   )r   rj   r   r{   r   r   itemsr   tuplero   sortedsetr   rQ   appendabsall)rK   rO   r:   r,   error
target_map
actual_mapaliasesr   r   pairsr   
deviationstarget_valueactual_valuer>   rV   rU   rx   s                   @@@r#   !derive_canonical_adherence_signalr      sP   PC 123	 1}	C"#CDD2CDJ*=J

 T?
G JQY+$t]:u55YGIPY+$t]:u55YG   E fS)*+,
WZ0!8	GI.	F vy*GHH

Le
LLv0MNN "Jt}t}<#7&'UVV16?4IJJ%(==>l#$en	
  E*EE
<  664((e j) P"#CD%OP" ZYs#   G "G=HG:)G55G:)r}   r   ri   r0   )r}   r   ri   z$TypeGuard[Mapping[str, MetricValue]])r   #Mapping[str, AdherenceValue] | Noner   rj   r   rj   ri   Mapping[str, AdherenceValue])r   r   r   r+   ri   r0   )r   ro   r>   r   rB   rA   ri   r%   )
rK   r   rO   r   r:   zDecimal | int | strr,   r+   ri   r%   ).r    
__future__r   rc   r[   collections.abcr   dataclassesr   decimalr   r   typingr   r	   r
   r   r   pydanticr   r   r   r   r   rk   r   rj   rz   floatr   r   r   r{   r   r%   AdherenceSignalro   r   r   r   r   r   r    build_canonical_adherence_signal#adherence_signal_from_target_actualderive_adherence_signalr!   r"   r#   <module>r      s   9 "   # ! - A A B B).  .#DM E )sU*W4t;Y ;''#{2B*CC	 C$8 
=: =@<y @<F + $d#
 
 $
+&B/BB B "	B(1@#2<F8 .@(*<)/<)/<) +	<)
 &<) <)~ $E  &G #; r"   