§
    X›j)  ã                  óP  — d Z ddlmZ ddlmZ ddlmZmZ er	ddlm	Z	m
Z
 n	 ddlm	Z	m
Z
 n# e$ r	 eZ	dCd
„Z
Y nw xY w G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        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 G d„ d e	¦  «        Z eee¦  «        5  e                     ¦   «          d!d!d!¦  «         n# 1 swxY w Y    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  G d.„ d/e¦  «        Z! G d0„ d1e¦  «        Z" G d2„ d3e¦  «        Z#	 	 dDdEd;„Z$	 dFdEd<„Z%	 dFdEd=„Z&	 dFdEd>„Z'dGdB„Z(d!S )HzöTyped workout models for Garmin Connect workouts.

This module provides Pydantic models for creating type-safe workout definitions.
Pydantic is an optional dependency - install it with: pip install pydantic
or: pip install garminconnect[workout]
é    )Úannotations)Úsuppress)ÚTYPE_CHECKINGÚAny)Ú	BaseModelÚFieldÚ_argsr   Ú_kwargsÚreturnc                 ó   — dS )z:Placeholder Field function when pydantic is not installed.N© )r	   r
   s     úR/home/lighthouse/health/venv/lib/python3.11/site-packages/garminconnect/workout.pyr   r      s   € à�4ó    c                  ó2   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )Ú	SportTypezCommon Garmin sport type IDs.é   é   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRUNNINGÚCYCLINGÚSWIMMINGÚWALKINGÚMULTI_SPORTÚFITNESS_EQUIPMENTÚHIKINGÚOTHERr   r   r   r   r      s=   € € € € € Ø'Ð'à€GØ€GØ€HØ€GØ€KØÐØ€FØ€E€E€Er   r   c                  ó*   — e Zd ZdZdZdZdZdZdZdZ	dS )	ÚStepTypez$Common Garmin workout step type IDs.r   r   r   r   r   r   N)
r   r   r   r   ÚWARMUPÚCOOLDOWNÚINTERVALÚRECOVERYÚRESTÚREPEATr   r   r   r'   r'   *   s2   € € € € € Ø.Ð.à€FØ€HØ€HØ€HØ€DØ€F€F€Fr   r'   c                  ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚConditionTypez%Common Garmin end condition type IDs.r   r   r   r   r   r   r   N)r   r   r   r   ÚDISTANCEÚTIMEÚ
HEART_RATEÚCALORIESÚCADENCEÚPOWERÚ
ITERATIONSr   r   r   r/   r/   6   s7   € € € € € Ø/Ð/à€HØ€DØ€JØ€HØ€GØ€EØ€J€J€Jr   r/   c                  ó*   — e Zd ZdZdZdZdZdZdZdZ	dS )	Ú
TargetTypez&Common Garmin workout target type IDs.r   r   r   r   r   r   N)
r   r   r   r   Ú	NO_TARGETr5   r4   r2   ÚSPEEDÚOPENr   r   r   r8   r8   C   s2   € € € € € Ø0Ð0à€IØ€EØ€GØ€JØ€EØ€D€D€Dr   r8   c                  ó6   — e Zd ZU dZded<   ded<   dZded<   dS )	ÚSportTypeModelzSport type model.ÚintÚsportTypeIdÚstrÚsportTypeKeyr   ÚdisplayOrderN)r   r   r   r   Ú__annotations__rB   r   r   r   r=   r=   N   sA   € € € € € € ØÐàÐÐÑØÐÐÑØ€LÐÐÐÑÐÐr   r=   c                  ó@   — e Zd ZU dZded<   ded<   ded<   dZded	<   d
S )ÚEndConditionModelz&End condition model for workout steps.r>   ÚconditionTypeIdr@   ÚconditionTypeKeyrB   TÚboolÚdisplayableN)r   r   r   r   rC   rI   r   r   r   rE   rE   V   sM   € € € € € € Ø0Ð0àÐÐÑØÐÐÑØÐÐÑØ€KÐÐÐÑÐÐr   rE   c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )ÚTargetTypeModelz$Target type model for workout steps.r>   ÚworkoutTargetTypeIdr@   ÚworkoutTargetTypeKeyrB   N)r   r   r   r   rC   r   r   r   rK   rK   _   s<   € € € € € € Ø.Ð.àÐÐÑØÐÐÑØÐÐÑÐÐr   rK   c                  ó0   — e Zd ZU dZdZded<   dZded<   dS )ÚStrokeTypeModelz*Stroke type model (for swimming workouts).r   r>   ÚstrokeTypeIdrB   N)r   r   r   r   rP   rC   rB   r   r   r   rO   rO   g   s:   € € € € € € Ø4Ð4à€LÐÐÐÑØ€LÐÐÐÑÐÐr   rO   c                  ó0   — e Zd ZU dZdZded<   dZded<   dS )ÚEquipmentTypeModelzEquipment type model.r   r>   ÚequipmentTypeIdrB   N)r   r   r   r   rS   rC   rB   r   r   r   rR   rR   n   s:   € € € € € € ØÐà€OÐÐÐÑØ€LÐÐÐÑÐÐr   rR   c                  ó¨   — e Zd ZU dZdZded<   ded<   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Zded<   dZded<    G d„ d¦  «        ZdS )ÚExecutableStepzEExecutable workout step (warmup, interval, recovery, cooldown, etc.).ÚExecutableStepDTOr@   Útyper>   Ú	stepOrderNúdict[str, Any] | NoneÚstepTypeÚendConditionúfloat | NoneÚendConditionValueÚ
targetTypeÚ
strokeTypeÚequipmentTypeú
int | NoneÚchildStepIdc                  ó   — e Zd ZdZdZdS )úExecutableStep.ConfigúPydantic config.ÚallowN©r   r   r   r   Úextrar   r   r   ÚConfigrd   ‚   ó   € € € € € ØÐàˆˆˆr   ri   )r   r   r   r   rW   rC   rZ   r[   r]   r^   r_   r`   rb   ri   r   r   r   rU   rU   u   sÖ   € € € € € € ØOÐOà#€DÐ#Ð#Ð#Ñ#Ø€N€N�NØ&*€HÐ*Ð*Ð*Ñ*Ø*.€LÐ.Ð.Ð.Ñ.Ø&*ÐÐ*Ð*Ð*Ñ*Ø(,€JÐ,Ð,Ð,Ñ,Ø(,€JÐ,Ð,Ð,Ñ,Ø+/€MÐ/Ð/Ð/Ñ/Ø"€KÐ"Ð"Ð"Ñ"ðð ð ð ð ñ ô ð ð ð r   rU   c                  ó    — e Zd ZU dZdZded<   ded<   dZded	<   ded
<   ded<   dZded<   dZded<   dZ	ded<   dZ
ded<    G d„ d¦  «        ZdS )ÚRepeatGroupz)Repeat group for repeating workout steps.ÚRepeatGroupDTOr@   rW   r>   rX   NrY   rZ   ÚnumberOfIterationsú"list[ExecutableStep | RepeatGroup]ÚworkoutStepsr[   r\   r]   ra   rb   FrH   ÚsmartRepeatc                  ó   — e Zd ZdZdZdS )úRepeatGroup.Configre   rf   Nrg   r   r   r   ri   rs   •   rj   r   ri   )r   r   r   r   rW   rC   rZ   r[   r]   rb   rq   ri   r   r   r   rl   rl   ˆ   sÌ   € € € € € € Ø3Ð3à €DÐ Ð Ð Ñ Ø€N€N�NØ&*€HÐ*Ð*Ð*Ñ*ØÐÐÑØ4Ð4Ð4Ñ4Ø*.€LÐ.Ð.Ð.Ñ.Ø&*ÐÐ*Ð*Ð*Ñ*Ø"€KÐ"Ð"Ð"Ñ"Ø€KÐÐÐÑðð ð ð ð ñ ô ð ð ð r   rl   Nc                  óL   — e Zd ZU dZded<   ded<   ded<    G d„ d	¦  «        Zd
S )ÚWorkoutSegmentz)Workout segment containing workout steps.r>   ÚsegmentOrderúdict[str, Any]Ú	sportTypero   rp   c                  ó   — e Zd ZdZdZdS )úWorkoutSegment.Configre   rf   Nrg   r   r   r   ri   rz   §   rj   r   ri   N)r   r   r   r   rC   ri   r   r   r   ru   ru       sh   € € € € € € Ø3Ð3àÐÐÑØÐÐÑØ4Ð4Ð4Ñ4ðð ð ð ð ñ ô ð ð ð r   ru   c                  óŽ   — e Zd ZU dZded<   ded<   ded<   ded	<    ee¬
¦  «        Zded<   dZded<    G d„ d¦  «        Z	dd„Z
dS )ÚBaseWorkoutzBase workout model.r@   ÚworkoutNamerw   rx   r>   ÚestimatedDurationInSecszlist[WorkoutSegment]ÚworkoutSegments©Údefault_factoryÚauthorNz
str | NoneÚdescriptionc                  ó   — e Zd ZdZdZdS )úBaseWorkout.Configre   rf   Nrg   r   r   r   ri   r…   ·   rj   r   ri   r   c                ó0   — |                       dd¬¦  «        S )z-Convert workout to dictionary for API upload.TÚjson)Úexclude_noneÚmode)Ú
model_dump)Úselfs    r   Úto_dictzBaseWorkout.to_dict¼   s   € à�Š¨D°vˆÑ>Ô>Ð>r   )r   rw   )r   r   r   r   rC   r   Údictr‚   rƒ   ri   rŒ   r   r   r   r|   r|   ­   s·   € € € € € € ØÐàÐÐÑØÐÐÑØ Ð Ð Ñ Ø)Ð)Ð)Ñ)Ø"˜U°4Ð8Ñ8Ô8€FÐ8Ð8Ð8Ñ8Ø"€KÐ"Ð"Ð"Ñ"ðð ð ð ð ñ ô ð ð
?ð ?ð ?ð ?ð ?ð ?r   r|   c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚRunningWorkoutzRunning workout model.c                 ó"   — t           j        dddœS )NÚrunningr   ©r?   rA   rB   )r   r   r   r   r   ú<lambda>zRunningWorkout.<lambda>Å   ó   € Ý$Ô,Ø%Øð!
ð !
€ r   r€   rw   rx   N©r   r   r   r   r   rx   rC   r   r   r   r�   r�   Á   óP   € € € € € € Ø Ð à % ð
ð 
ð!ñ !ô !€Ið ð ð ñ ð ð r   r�   c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚCyclingWorkoutzCycling workout model.c                 ó"   — t           j        dddœS )NÚcyclingr   r’   )r   r   r   r   r   r“   zCyclingWorkout.<lambda>Ñ   r”   r   r€   rw   rx   Nr•   r   r   r   r˜   r˜   Í   r–   r   r˜   c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚSwimmingWorkoutzSwimming workout model.c                 ó"   — t           j        dddœS )NÚswimmingr   r’   )r   r    r   r   r   r“   zSwimmingWorkout.<lambda>Ý   s   € Ý$Ô-Ø&Øð!
ð !
€ r   r€   rw   rx   Nr•   r   r   r   rœ   rœ   Ù   sP   € € € € € € Ø!Ð!à % ð
ð 
ð!ñ !ô !€Ið ð ð ñ ð ð r   rœ   c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚWalkingWorkoutzWalking workout model.c                 ó"   — t           j        dddœS )NÚwalkingr   r’   )r   r!   r   r   r   r“   zWalkingWorkout.<lambda>é   r”   r   r€   rw   rx   Nr•   r   r   r   r    r    å   r–   r   r    c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚMultiSportWorkoutzMulti-sport workout model.c                 ó"   — t           j        dddœS )NÚmulti_sportr   r’   )r   r"   r   r   r   r“   zMultiSportWorkout.<lambda>õ   s   € Ý$Ô0Ø)Øð!
ð !
€ r   r€   rw   rx   Nr•   r   r   r   r¤   r¤   ñ   sP   € € € € € € Ø$Ð$à % ð
ð 
ð!ñ !ô !€Ið ð ð ñ ð ð r   r¤   c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚFitnessEquipmentWorkoutz Fitness equipment workout model.c                 ó"   — t           j        dddœS )NÚfitness_equipmentr   r’   )r   r#   r   r   r   r“   z FitnessEquipmentWorkout.<lambda>  s   € Ý$Ô6Ø/Øð!
ð !
€ r   r€   rw   rx   Nr•   r   r   r   r¨   r¨   ý   sP   € € € € € € Ø*Ð*à % ð
ð 
ð!ñ !ô !€Ið ð ð ñ ð ð r   r¨   c                  ó8   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dS )ÚHikingWorkoutzHiking workout model.c                 ó"   — t           j        dddœS )NÚhikingr   r’   )r   r$   r   r   r   r“   zHikingWorkout.<lambda>  s   € Ý$Ô+Ø$Øð!
ð !
€ r   r€   rw   rx   Nr•   r   r   r   r¬   r¬   	  sP   € € € € € € ØÐà % ð
ð 
ð!ñ !ô !€Ið ð ð ñ ð ð r   r¬   r   Úduration_secondsÚfloatÚ
step_orderr>   Útarget_typerY   c           
     ó„   — t          |t          j        dddœt          j        ddddœ| |pt
          j        ddd	œ¬
¦  «        S )zCreate a warmup step.Úwarmupr   ©Ú
stepTypeIdÚstepTypeKeyrB   Útimer   T©rF   rG   rB   rI   ú	no.target©rL   rM   rB   ©rX   rZ   r[   r]   r^   )rU   r'   r(   r/   r1   r8   r9   ©r¯   r±   r²   s      r   Úcreate_warmup_stepr¾     sq   € õ Øå"œ/Ø#Øð
ð 
õ  -Ô1Ø &ØØð	
ð 
ð +Øð 
å#-Ô#7Ø$/Øð
ð 
ðñ ô ð r   c           
     ó„   — t          |t          j        dddœt          j        ddddœ| |pt
          j        dd	d
œ¬¦  «        S )zCreate an interval step.Úintervalr   rµ   r¸   r   Tr¹   rº   r   r»   r¼   )rU   r'   r*   r/   r1   r8   r9   r½   s      r   Úcreate_interval_steprÁ   3  ór   € õ Øå"Ô+Ø%Øð
ð 
õ  -Ô1Ø &ØØð	
ð 
ð +Øð 
å#-Ô#7Ø$/Øð
ð 
ðñ ô ð r   c           
     ó„   — t          |t          j        dddœt          j        ddddœ| |pt
          j        dd	d
œ¬¦  «        S )zCreate a recovery step.Úrecoveryr   rµ   r¸   r   Tr¹   rº   r   r»   r¼   )rU   r'   r+   r/   r1   r8   r9   r½   s      r   Úcreate_recovery_steprÅ   P  rÂ   r   c           
     ó„   — t          |t          j        dddœt          j        ddddœ| |pt
          j        ddd	œ¬
¦  «        S )zCreate a cooldown step.Úcooldownr   rµ   r¸   Tr¹   rº   r   r»   r¼   )rU   r'   r)   r/   r1   r8   r9   r½   s      r   Úcreate_cooldown_steprÈ   m  rÂ   r   Ú
iterationsÚworkout_stepsro   c                ó€   — t          |t          j        dddœ| |t          j        ddddœt          | ¦  «        ¬¦  «        S )	zCreate a repeat group.Úrepeatr   rµ   rÉ   r   Fr¹   )rX   rZ   rn   rp   r[   r]   )rl   r'   r-   r/   r6   r°   )rÉ   rÊ   r±   s      r   Úcreate_repeat_grouprÍ   Š  sa   € õ Øå"œ/Ø#Øð
ð 
ð
 &Ø"å,Ô7Ø ,ØØ ð	
ð 
õ   
Ñ+Ô+ðñ ô ð r   )r	   r   r
   r   r   r   )r   N)r¯   r°   r±   r>   r²   rY   r   rU   )N)rÉ   r>   rÊ   ro   r±   r>   r   rl   ))r   Ú
__future__r   Ú
contextlibr   Útypingr   r   Úpydanticr   r   ÚImportErrorÚobjectr   r'   r/   r8   r=   rE   rK   rO   rR   rU   rl   ÚAttributeErrorÚ	TypeErrorÚmodel_rebuildru   r|   r�   r˜   rœ   r    r¤   r¨   r¬   r¾   rÁ   rÅ   rÈ   rÍ   r   r   r   ú<module>r×      s%  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %àð Ø)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ðØ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-øØð ð ð àˆ	ð	ð 	ð 	ð 	ð 	ð 	ð	øøøð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ðð ð ð ð ñ ô ð ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ðð ð ð ð ñ ô ð ðð ð ð ð �Yñ ô ð ðð ð ð ð ˜	ñ ô ð ðð ð ð ð �iñ ô ð ðð ð ð ð �iñ ô ð ðð ð ð ð ˜ñ ô ð ðð ð ð ð �Yñ ô ð ð&ð ð ð ð �)ñ ô ð ð( €Xˆn˜iÑ(Ô(ð  ð  Ø×ÒÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð
ð 
ð 
ð 
ð 
�Yñ 
ô 
ð 
ð?ð ?ð ?ð ?ð ?�)ñ ?ô ?ð ?ð(	ð 	ð 	ð 	ð 	�[ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�[ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�kñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�[ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜kñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�Kñ 	ô 	ð 	ð Ø)-ðð ð ð ð ð@ *.ðð ð ð ð ð@ *.ðð ð ð ð ð@ *.ðð ð ð ð ð:ð ð ð ð ð s   £, ¬:¹:ÃD Ä DÄD