diff --git a/garmin_fit_sdk/__init__.py b/garmin_fit_sdk/__init__.py index b2ece0a..3d7bcd6 100644 --- a/garmin_fit_sdk/__init__.py +++ b/garmin_fit_sdk/__init__.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ @@ -23,4 +23,4 @@ from garmin_fit_sdk.stream import Stream from garmin_fit_sdk.util import FIT_EPOCH_S, convert_datetime_to_timestamp, convert_timestamp_to_datetime, BASE_TYPE_TO_FIELD_TYPE, FIELD_TYPE_TO_BASE_TYPE -__version__ = '21.208.0' +__version__ = '21.212.0' diff --git a/garmin_fit_sdk/__init__.pyi b/garmin_fit_sdk/__init__.pyi new file mode 100644 index 0000000..7a5a8b8 --- /dev/null +++ b/garmin_fit_sdk/__init__.pyi @@ -0,0 +1,30 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from .accumulator import Accumulator as Accumulator +from .bitstream import BitStream as BitStream +from .crc_calculator import CrcCalculator as CrcCalculator +from .decoder import Decoder as Decoder +from .encoder import Encoder as Encoder +from .fit import BASE_TYPE as BASE_TYPE, BASE_TYPE_DEFINITIONS as BASE_TYPE_DEFINITIONS +from .hr_mesg_utils import expand_heart_rates as expand_heart_rates +from .profile import Profile as Profile +from .stream import Stream as Stream +from .util import ( + FIT_EPOCH_S as FIT_EPOCH_S, + convert_datetime_to_timestamp as convert_datetime_to_timestamp, + convert_timestamp_to_datetime as convert_timestamp_to_datetime, + BASE_TYPE_TO_FIELD_TYPE as BASE_TYPE_TO_FIELD_TYPE, + FIELD_TYPE_TO_BASE_TYPE as FIELD_TYPE_TO_BASE_TYPE, +) + +__version__: str diff --git a/garmin_fit_sdk/accumulator.py b/garmin_fit_sdk/accumulator.py index cfdf503..f25c72c 100644 --- a/garmin_fit_sdk/accumulator.py +++ b/garmin_fit_sdk/accumulator.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/accumulator.pyi b/garmin_fit_sdk/accumulator.pyi new file mode 100644 index 0000000..2d051bf --- /dev/null +++ b/garmin_fit_sdk/accumulator.pyi @@ -0,0 +1,20 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +class AccumulatedField: + def __init__(self, value: int = 0) -> None: ... + def accumulate(self, value: int, bits: int) -> int: ... + +class Accumulator: + def __init__(self) -> None: ... + def createAccumulatedField(self, mesg_num: int, field_num: int, value: int) -> AccumulatedField: ... + def accumulate(self, mesg_num: int, field_num: int, value: int, bits: int) -> int: ... diff --git a/garmin_fit_sdk/bitstream.py b/garmin_fit_sdk/bitstream.py index b4ed9a9..0f4ee2e 100644 --- a/garmin_fit_sdk/bitstream.py +++ b/garmin_fit_sdk/bitstream.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/bitstream.pyi b/garmin_fit_sdk/bitstream.pyi new file mode 100644 index 0000000..5fcbaaa --- /dev/null +++ b/garmin_fit_sdk/bitstream.pyi @@ -0,0 +1,21 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import Any + +class BitStream: + def __init__(self, data: Any, base_type: int) -> None: ... + def bits_available(self) -> int: ... + def has_bits_available(self) -> bool: ... + def reset(self) -> None: ... + def read_bit(self) -> int: ... + def read_bits(self, num_bits: int) -> int: ... diff --git a/garmin_fit_sdk/crc_calculator.py b/garmin_fit_sdk/crc_calculator.py index fd37572..47d8129 100644 --- a/garmin_fit_sdk/crc_calculator.py +++ b/garmin_fit_sdk/crc_calculator.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/crc_calculator.pyi b/garmin_fit_sdk/crc_calculator.pyi new file mode 100644 index 0000000..7ca4100 --- /dev/null +++ b/garmin_fit_sdk/crc_calculator.pyi @@ -0,0 +1,20 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import Union + +class CrcCalculator: + def __init__(self) -> None: ... + def get_crc(self) -> int: ... + def add_bytes(self, buffer: Union[bytes, bytearray], start: int, end: int) -> int: ... + @staticmethod + def calculate_crc(buffer: Union[bytes, bytearray], start: int, end: int) -> int: ... diff --git a/garmin_fit_sdk/decoder.py b/garmin_fit_sdk/decoder.py index 96ccc72..afa0733 100644 --- a/garmin_fit_sdk/decoder.py +++ b/garmin_fit_sdk/decoder.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/decoder.pyi b/garmin_fit_sdk/decoder.pyi new file mode 100644 index 0000000..183e563 --- /dev/null +++ b/garmin_fit_sdk/decoder.pyi @@ -0,0 +1,57 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from enum import Enum +from typing import Any, Callable, Dict, List, Optional, Tuple + +from .stream import Stream +from .mesgs import FitMessages + +class DecodeMode(Enum): + NORMAL = 1 + SKIP_HEADER = 2 + DATA_ONLY = 3 + +MesgListener = Callable[[int, Dict[str, Any]], None] +MesgDefinitionListener = Callable[[Dict[str, Any]], None] +FieldDescriptionListener = Callable[[int, Dict[str, Any], Dict[str, Any]], None] + +class FileHeader: + header_size: int + protocol_version: int + profile_version: int + data_size: int + data_type: List[bytes] + header_crc: int + file_total_size: int + def get_dict(self) -> Dict[str, Any]: ... + +class Decoder: + def __init__(self, stream: Stream) -> None: ... + def is_fit(self) -> bool: ... + def check_integrity(self) -> bool: ... + def read( + self, + apply_scale_and_offset: bool = True, + convert_datetimes_to_dates: bool = True, + convert_types_to_strings: bool = True, + enable_crc_check: bool = True, + expand_sub_fields: bool = True, + expand_components: bool = True, + merge_heart_rates: bool = True, + mesg_listener: Optional[MesgListener] = None, + mesg_definition_listener: Optional[MesgDefinitionListener] = None, + field_description_listener: Optional[FieldDescriptionListener] = None, + decode_mode: DecodeMode = ..., + ) -> Tuple[FitMessages, List[Exception]]: ... + def read_file_header(self, reset: bool, decode_mode: DecodeMode = ...) -> FileHeader: ... + def get_num_messages(self) -> int: ... \ No newline at end of file diff --git a/garmin_fit_sdk/encoder.py b/garmin_fit_sdk/encoder.py index 5635e32..453f6ed 100644 --- a/garmin_fit_sdk/encoder.py +++ b/garmin_fit_sdk/encoder.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/encoder.pyi b/garmin_fit_sdk/encoder.pyi new file mode 100644 index 0000000..c4cf8e4 --- /dev/null +++ b/garmin_fit_sdk/encoder.pyi @@ -0,0 +1,32 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import Any, Dict, Optional, Union + +from .mesgs import DeveloperDataIdMesg, FieldDescriptionMesg + +FieldDescription = Dict[str, Union[DeveloperDataIdMesg, FieldDescriptionMesg]] + +class Encoder: + def __init__( + self, + field_descriptions: Optional[Dict[int, FieldDescription]] = None, + ) -> None: ... + def close(self) -> bytes: ... + def write_mesg(self, mesg: Dict[str, Any]) -> "Encoder": ... + def on_mesg(self, mesg_num: int, mesg: Dict[str, Any]) -> "Encoder": ... + def add_developer_field( + self, + key: int, + developer_data_id_mesg: DeveloperDataIdMesg, + field_description_mesg: FieldDescriptionMesg, + ) -> "Encoder": ... diff --git a/garmin_fit_sdk/fit.py b/garmin_fit_sdk/fit.py index 889d43c..4bb93e0 100644 --- a/garmin_fit_sdk/fit.py +++ b/garmin_fit_sdk/fit.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/fit.pyi b/garmin_fit_sdk/fit.pyi new file mode 100644 index 0000000..433424b --- /dev/null +++ b/garmin_fit_sdk/fit.pyi @@ -0,0 +1,40 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import Any, Dict, List + +BASE_TYPE: Dict[str, int] + +BASE_TYPE_DEFINITIONS: Dict[int, Dict[str, Any]] + +FIELD_TYPE_TO_BASE_TYPE: Dict[str, int] + +BASE_TYPE_TO_FIELD_TYPE: Dict[int, str] + +LOCAL_MESG_NUM_MASK: int +MESG_DEFINITION_MASK: int +DEV_DATA_MASK: int +ARCH_LITTLE_ENDIAN: int +MAX_FIELD_SIZE: int +FIELD_DEFAULT_SCALE: int +FIELD_DEFAULT_OFFSET: int +BASE_TYPE_MASK: int + +NUMERIC_FIELD_TYPES: List[str] + +def is_none(value: Any) -> bool: ... +def is_boolean(value: Any) -> bool: ... +def is_numeric(value: Any) -> bool: ... +def is_date(value: Any) -> bool: ... +def is_string(value: Any) -> bool: ... +def is_number_string_date_or_boolean(value: Any) -> bool: ... +def is_not_number_string_date_or_boolean(value: Any) -> bool: ... diff --git a/garmin_fit_sdk/hr_mesg_utils.py b/garmin_fit_sdk/hr_mesg_utils.py index a1cbf62..841ace4 100644 --- a/garmin_fit_sdk/hr_mesg_utils.py +++ b/garmin_fit_sdk/hr_mesg_utils.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/hr_mesg_utils.pyi b/garmin_fit_sdk/hr_mesg_utils.pyi new file mode 100644 index 0000000..55b5a42 --- /dev/null +++ b/garmin_fit_sdk/hr_mesg_utils.pyi @@ -0,0 +1,22 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import List + +from .mesgs import HrMesg, RecordMesg + +def merge_heart_rates( + hr_mesgs: List[HrMesg], + record_mesgs: List[RecordMesg], +) -> None: ... + +def expand_heart_rates(hr_mesgs: List[HrMesg]) -> List[RecordMesg]: ... diff --git a/garmin_fit_sdk/mesg_definition.py b/garmin_fit_sdk/mesg_definition.py index 8647e85..20c0c8b 100644 --- a/garmin_fit_sdk/mesg_definition.py +++ b/garmin_fit_sdk/mesg_definition.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/mesg_definition.pyi b/garmin_fit_sdk/mesg_definition.pyi new file mode 100644 index 0000000..ad68e25 --- /dev/null +++ b/garmin_fit_sdk/mesg_definition.pyi @@ -0,0 +1,31 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import Any, Dict, List, Optional + +from .encoder import FieldDescription +from .output_stream import _OutputStream + +class _MesgDefinition: + global_message_number: int + local_mesg_num: int + field_definitions: List[Dict[str, Any]] + developer_field_definitions: List[Dict[str, Any]] + + def __init__( + self, + mesg_num: int, + mesg: Dict[str, Any], + field_descriptions: Optional[Dict[int, FieldDescription]] = None, + ) -> None: ... + def write(self, output: _OutputStream) -> None: ... + def equals(self, other: "_MesgDefinition") -> bool: ... diff --git a/garmin_fit_sdk/mesgs.pyi b/garmin_fit_sdk/mesgs.pyi new file mode 100644 index 0000000..1101095 --- /dev/null +++ b/garmin_fit_sdk/mesgs.pyi @@ -0,0 +1,2733 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from datetime import datetime +from typing import Any, Dict, List, Optional, Union + +try: + from typing import TypedDict +except ImportError: + from typing_extensions import TypedDict # type: ignore[assignment] + +from .types import * + + +class FitMesg(TypedDict, total=False): + """Base TypedDict for all decoded FIT messages.""" + mesg_num: int + developer_fields: Dict[int, Any] + + + +# Must be first message in file. +class FileIdMesg(FitMesg, total=False): + type: File + manufacturer: Manufacturer + product: int + favero_product: FaveroProduct + garmin_product: GarminProduct + serial_number: int + # Only set for files that are can be created/erased. + time_created: Union[int, datetime] + # Only set for files that are not created/erased. + number: int + # Optional free form string to indicate the devices name or model + product_name: StringValue + + + +class FileCreatorMesg(FitMesg, total=False): + software_version: int + hardware_version: int + + + +class TimestampCorrelationMesg(FitMesg, total=False): + # Whole second part of UTC timestamp at the time the system timestamp was recorded. + timestamp: Union[int, datetime] + # Fractional part of the UTC timestamp at the time the system timestamp was recorded. + fractional_timestamp: float + # Whole second part of the system timestamp + system_timestamp: Union[int, datetime] + # Fractional part of the system timestamp + fractional_system_timestamp: float + # timestamp epoch expressed in local time used to convert timestamps to local time + local_timestamp: Union[int, datetime] + # Millisecond part of the UTC timestamp at the time the system timestamp was recorded. + timestamp_ms: int + # Millisecond part of the system timestamp + system_timestamp_ms: int + + + +class SoftwareMesg(FitMesg, total=False): + message_index: MessageIndex + version: float + part_number: StringValue + + + +class SlaveDeviceMesg(FitMesg, total=False): + manufacturer: Manufacturer + product: int + favero_product: FaveroProduct + garmin_product: GarminProduct + + + +class CapabilitiesMesg(FitMesg, total=False): + # Use language_bits_x types where x is index of array. + languages: Union[int, List[Optional[int]]] + # Use sport_bits_x types where x is index of array. + sports: Union[SportBits0, List[Optional[SportBits0]]] + workouts_supported: WorkoutCapabilities + connectivity_supported: ConnectivityCapabilities + + + +class FileCapabilitiesMesg(FitMesg, total=False): + message_index: MessageIndex + type: File + flags: FileFlags + directory: StringValue + max_count: int + max_size: int + + + +class MesgCapabilitiesMesg(FitMesg, total=False): + message_index: MessageIndex + file: File + mesg_num: MesgNum + count_type: MesgCount + count: int + num_per_file: int + max_per_file: int + max_per_file_type: int + + + +class FieldCapabilitiesMesg(FitMesg, total=False): + message_index: MessageIndex + file: File + mesg_num: MesgNum + field_num: int + count: int + + + +class DeviceSettingsMesg(FitMesg, total=False): + # Index into time zone arrays. + active_time_zone: int + # Offset from system time. Required to convert timestamp from system time to UTC. + utc_offset: int + # Offset from system time. + time_offset: Union[int, List[Optional[int]]] + # Display mode for the time + time_mode: Union[TimeMode, List[Optional[TimeMode]]] + # timezone offset in 1/4 hour increments + time_zone_offset: Union[float, List[Optional[float]]] + # Mode for backlight + backlight_mode: BacklightMode + # Enabled state of the activity tracker functionality + activity_tracker_enabled: bool + # UTC timestamp used to set the devices clock and date + clock_time: Union[int, datetime] + # Bitfield to configure enabled screens for each supported loop + pages_enabled: Union[int, List[Optional[int]]] + # Enabled state of the move alert + move_alert_enabled: bool + # Display mode for the date + date_mode: DateMode + display_orientation: DisplayOrientation + mounting_side: Side + # Bitfield to indicate one page as default for each supported loop + default_page: Union[int, List[Optional[int]]] + # Minimum steps before an autosync can occur + autosync_min_steps: int + # Minimum minutes before an autosync can occur + autosync_min_time: int + # Enable auto-detect setting for the lactate threshold feature. + lactate_threshold_autodetect_enabled: bool + # Automatically upload using BLE + ble_auto_upload_enabled: bool + # Helps to conserve battery by changing modes + auto_sync_frequency: AutoSyncFrequency + # Allows setting specific activities auto-activity detect enabled/disabled settings + auto_activity_detect: AutoActivityDetect + # Number of screens configured to display + number_of_screens: int + # Smart Notification display orientation + smart_notification_display_orientation: DisplayOrientation + tap_interface: Switch + # Used to hold the tap threshold setting + tap_sensitivity: TapSensitivity + + + +class UserProfileMesg(FitMesg, total=False): + message_index: MessageIndex + # Used for Morning Report greeting + friendly_name: StringValue + gender: Gender + age: int + height: float + weight: float + language: Language + elev_setting: DisplayMeasure + weight_setting: DisplayMeasure + resting_heart_rate: int + default_max_running_heart_rate: int + default_max_biking_heart_rate: int + default_max_heart_rate: int + hr_setting: DisplayHeart + speed_setting: DisplayMeasure + dist_setting: DisplayMeasure + power_setting: DisplayPower + activity_class: ActivityClass + position_setting: DisplayPosition + temperature_setting: DisplayMeasure + local_id: UserLocalId + global_id: Union[int, List[Optional[int]]] + # Typical wake time + wake_time: LocaltimeIntoDay + # Typical bed time + sleep_time: LocaltimeIntoDay + height_setting: DisplayMeasure + # User defined running step length set to 0 for auto length + user_running_step_length: float + # User defined walking step length set to 0 for auto length + user_walking_step_length: float + depth_setting: DisplayMeasure + dive_count: int + + + +class HrmProfileMesg(FitMesg, total=False): + message_index: MessageIndex + enabled: bool + hrm_ant_id: int + log_hrv: bool + hrm_ant_id_trans_type: int + + + +class SdmProfileMesg(FitMesg, total=False): + message_index: MessageIndex + enabled: bool + sdm_ant_id: int + sdm_cal_factor: float + odometer: float + # Use footpod for speed source instead of GPS + speed_source: bool + sdm_ant_id_trans_type: int + # Rollover counter that can be used to extend the odometer + odometer_rollover: int + + + +class BikeProfileMesg(FitMesg, total=False): + message_index: MessageIndex + name: StringValue + sport: Sport + sub_sport: SubSport + odometer: float + bike_spd_ant_id: int + bike_cad_ant_id: int + bike_spdcad_ant_id: int + bike_power_ant_id: int + custom_wheelsize: float + auto_wheelsize: float + bike_weight: float + power_cal_factor: float + auto_wheel_cal: bool + auto_power_zero: bool + id: int + spd_enabled: bool + cad_enabled: bool + spdcad_enabled: bool + power_enabled: bool + crank_length: float + enabled: bool + bike_spd_ant_id_trans_type: int + bike_cad_ant_id_trans_type: int + bike_spdcad_ant_id_trans_type: int + bike_power_ant_id_trans_type: int + # Rollover counter that can be used to extend the odometer + odometer_rollover: int + # Number of front gears + front_gear_num: int + # Number of teeth on each gear 0 is innermost + front_gear: Union[int, List[Optional[int]]] + # Number of rear gears + rear_gear_num: int + # Number of teeth on each gear 0 is innermost + rear_gear: Union[int, List[Optional[int]]] + shimano_di2_enabled: bool + + + +class ConnectivityMesg(FitMesg, total=False): + # Use Bluetooth for connectivity features + bluetooth_enabled: bool + # Use Bluetooth Low Energy for connectivity features + bluetooth_le_enabled: bool + # Use ANT for connectivity features + ant_enabled: bool + name: StringValue + live_tracking_enabled: bool + weather_conditions_enabled: bool + weather_alerts_enabled: bool + auto_activity_upload_enabled: bool + course_download_enabled: bool + workout_download_enabled: bool + gps_ephemeris_download_enabled: bool + incident_detection_enabled: bool + grouptrack_enabled: bool + + + +class WatchfaceSettingsMesg(FitMesg, total=False): + message_index: MessageIndex + mode: WatchfaceMode + layout: int + digital_layout: DigitalWatchfaceLayout + analog_layout: AnalogWatchfaceLayout + + + +class OhrSettingsMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + enabled: Switch + + + +class TimeInZoneMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + reference_mesg: MesgNum + reference_index: MessageIndex + time_in_hr_zone: Union[float, List[Optional[float]]] + time_in_speed_zone: Union[float, List[Optional[float]]] + time_in_cadence_zone: Union[float, List[Optional[float]]] + time_in_power_zone: Union[float, List[Optional[float]]] + hr_zone_high_boundary: Union[int, List[Optional[int]]] + speed_zone_high_boundary: Union[float, List[Optional[float]]] + cadence_zone_high_bondary: Union[int, List[Optional[int]]] + power_zone_high_boundary: Union[int, List[Optional[int]]] + hr_calc_type: HrZoneCalc + max_heart_rate: int + resting_heart_rate: int + threshold_heart_rate: int + pwr_calc_type: PwrZoneCalc + functional_threshold_power: int + + + +class ZonesTargetMesg(FitMesg, total=False): + max_heart_rate: int + threshold_heart_rate: int + functional_threshold_power: int + hr_calc_type: HrZoneCalc + pwr_calc_type: PwrZoneCalc + + + +class SportMesg(FitMesg, total=False): + sport: Sport + sub_sport: SubSport + name: StringValue + + + +class HrZoneMesg(FitMesg, total=False): + message_index: MessageIndex + high_bpm: int + name: StringValue + + + +class SpeedZoneMesg(FitMesg, total=False): + message_index: MessageIndex + high_value: float + name: StringValue + + + +class CadenceZoneMesg(FitMesg, total=False): + message_index: MessageIndex + high_value: int + name: StringValue + + + +class PowerZoneMesg(FitMesg, total=False): + message_index: MessageIndex + high_value: int + name: StringValue + + + +class MetZoneMesg(FitMesg, total=False): + message_index: MessageIndex + high_bpm: int + calories: float + fat_calories: float + + + +class TrainingSettingsMesg(FitMesg, total=False): + target_distance: float + target_speed: float + target_time: int + # A more precise target speed field + precise_target_speed: float + + + +class DiveSettingsMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + message_index: MessageIndex + name: StringValue + model: TissueModelType + gf_low: int + gf_high: int + water_type: WaterType + # Fresh water is usually 1000; salt water is usually 1025 + water_density: float + # Typically 1.40 + po2_warn: float + # Typically 1.60 + po2_critical: float + po2_deco: float + safety_stop_enabled: bool + bottom_depth: float + bottom_time: int + apnea_countdown_enabled: bool + apnea_countdown_time: int + backlight_mode: DiveBacklightMode + backlight_brightness: int + backlight_timeout: BacklightTimeout + # Time between surfacing and ending the activity + repeat_dive_interval: int + # Time at safety stop (if enabled) + safety_stop_time: int + heart_rate_source_type: SourceType + heart_rate_source: int + heart_rate_antplus_device_type: AntplusDeviceType + heart_rate_local_device_type: LocalDeviceType + # Index of travel dive_gas message + travel_gas: MessageIndex + # If low PO2 should be switched to automatically + ccr_low_setpoint_switch_mode: CcrSetpointSwitchMode + # Target PO2 when using low setpoint + ccr_low_setpoint: float + # Depth to switch to low setpoint in automatic mode + ccr_low_setpoint_depth: float + # If high PO2 should be switched to automatically + ccr_high_setpoint_switch_mode: CcrSetpointSwitchMode + # Target PO2 when using high setpoint + ccr_high_setpoint: float + # Depth to switch to high setpoint in automatic mode + ccr_high_setpoint_depth: float + # Type of gas consumption rate to display. Some values are only valid if tank volume is known. + gas_consumption_display: GasConsumptionRateType + # Indicates whether the up key is enabled during dives + up_key_enabled: bool + # Sounds and vibration enabled or disabled in-dive + dive_sounds: Tone + # Usually 1.0/1.5/2.0 representing 3/4.5/6m or 10/15/20ft + last_stop_multiple: float + # Indicates which guidelines to use for no-fly surface interval. + no_fly_time_mode: NoFlyTimeMode + + + +class DiveAlarmMesg(FitMesg, total=False): + # Index of the alarm + message_index: MessageIndex + # Depth setting (m) for depth type alarms + depth: float + # Time setting (s) for time type alarms + time: int + # Enablement flag + enabled: bool + # Alarm type setting + alarm_type: DiveAlarmType + # Tone and Vibe setting for the alarm + sound: Tone + # Dive types the alarm will trigger on + dive_types: Union[SubSport, List[Optional[SubSport]]] + # Alarm ID + id: int + # Show a visible pop-up for this alarm + popup_enabled: bool + # Trigger the alarm on descent + trigger_on_descent: bool + # Trigger the alarm on ascent + trigger_on_ascent: bool + # Repeat alarm each time threshold is crossed? + repeating: bool + # Ascent/descent rate (mps) setting for speed type alarms + speed: float + + + +class DiveApneaAlarmMesg(FitMesg, total=False): + # Index of the alarm + message_index: MessageIndex + # Depth setting (m) for depth type alarms + depth: float + # Time setting (s) for time type alarms + time: int + # Enablement flag + enabled: bool + # Alarm type setting + alarm_type: DiveAlarmType + # Tone and Vibe setting for the alarm. + sound: Tone + # Dive types the alarm will trigger on + dive_types: Union[SubSport, List[Optional[SubSport]]] + # Alarm ID + id: int + # Show a visible pop-up for this alarm + popup_enabled: bool + # Trigger the alarm on descent + trigger_on_descent: bool + # Trigger the alarm on ascent + trigger_on_ascent: bool + # Repeat alarm each time threshold is crossed? + repeating: bool + # Ascent/descent rate (mps) setting for speed type alarms + speed: float + + + +class DiveGasMesg(FitMesg, total=False): + message_index: MessageIndex + helium_content: int + oxygen_content: int + status: DiveGasStatus + mode: DiveGasMode + + + +class GoalMesg(FitMesg, total=False): + message_index: MessageIndex + sport: Sport + sub_sport: SubSport + start_date: Union[int, datetime] + end_date: Union[int, datetime] + type: Goal + value: int + repeat: bool + target_value: int + recurrence: GoalRecurrence + recurrence_value: int + enabled: bool + source: GoalSource + + + +class ActivityMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Exclude pauses + total_timer_time: float + num_sessions: int + type: Activity + event: Event + event_type: EventType + # timestamp epoch expressed in local time, used to convert activity timestamps to local time + local_timestamp: Union[int, datetime] + event_group: int + + + +class SessionMesg(FitMesg, total=False): + # Selected bit is set for the current session. + message_index: MessageIndex + timestamp: Union[int, datetime] + # session + event: Event + # stop + event_type: EventType + start_time: Union[int, datetime] + start_position_lat: int + start_position_long: int + sport: Sport + sub_sport: SubSport + # Time (includes pauses) + total_elapsed_time: float + # Timer Time (excludes pauses) + total_timer_time: float + total_distance: float + total_cycles: int + total_reps: int + total_strides: int + total_strokes: int + # total number of pushes in a session + total_pushes: int + total_calories: int + total_fat_calories: int + # total_distance / total_timer_time + avg_speed: float + max_speed: float + # average heart rate (excludes pause time) + avg_heart_rate: int + max_heart_rate: int + # total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time + avg_cadence: int + avg_running_cadence: int + max_cadence: int + max_running_cadence: int + # total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time + avg_power: int + max_power: int + total_ascent: int + total_descent: int + total_training_effect: float + first_lap_index: int + num_laps: int + event_group: int + trigger: SessionTrigger + # North east corner latitude + nec_lat: int + # North east corner longitude + nec_long: int + # South west corner latitude + swc_lat: int + # South west corner longitude + swc_long: int + # # of lengths of swim pool + num_lengths: int + normalized_power: int + training_stress_score: float + intensity_factor: float + left_right_balance: LeftRightBalance100 + end_position_lat: int + end_position_long: int + avg_stroke_count: float + avg_stroke_distance: float + swim_stroke: SwimStroke + pool_length: float + threshold_power: int + pool_length_unit: DisplayMeasure + # # of active lengths of swim pool + num_active_lengths: int + total_work: int + avg_altitude: float + max_altitude: float + gps_accuracy: int + avg_grade: float + avg_pos_grade: float + avg_neg_grade: float + max_pos_grade: float + max_neg_grade: float + avg_temperature: int + max_temperature: int + total_moving_time: float + avg_pos_vertical_speed: float + avg_neg_vertical_speed: float + max_pos_vertical_speed: float + max_neg_vertical_speed: float + min_heart_rate: int + time_in_hr_zone: Union[float, List[Optional[float]]] + time_in_speed_zone: Union[float, List[Optional[float]]] + time_in_cadence_zone: Union[float, List[Optional[float]]] + time_in_power_zone: Union[float, List[Optional[float]]] + avg_lap_time: float + best_lap_index: int + min_altitude: float + active_time: float + player_score: int + opponent_score: int + opponent_name: StringValue + # stroke_type enum used as the index + stroke_count: Union[int, List[Optional[int]]] + # zone number used as the index + zone_count: Union[int, List[Optional[int]]] + max_ball_speed: float + avg_ball_speed: float + avg_vertical_oscillation: float + avg_stance_time_percent: float + avg_stance_time: float + # fractional part of the avg_cadence + avg_fractional_cadence: float + # fractional part of the max_cadence + max_fractional_cadence: float + # fractional part of the total_cycles + total_fractional_cycles: float + # Avg saturated and unsaturated hemoglobin + avg_total_hemoglobin_conc: Union[float, List[Optional[float]]] + # Min saturated and unsaturated hemoglobin + min_total_hemoglobin_conc: Union[float, List[Optional[float]]] + # Max saturated and unsaturated hemoglobin + max_total_hemoglobin_conc: Union[float, List[Optional[float]]] + # Avg percentage of hemoglobin saturated with oxygen + avg_saturated_hemoglobin_percent: Union[float, List[Optional[float]]] + # Min percentage of hemoglobin saturated with oxygen + min_saturated_hemoglobin_percent: Union[float, List[Optional[float]]] + # Max percentage of hemoglobin saturated with oxygen + max_saturated_hemoglobin_percent: Union[float, List[Optional[float]]] + avg_left_torque_effectiveness: float + avg_right_torque_effectiveness: float + avg_left_pedal_smoothness: float + avg_right_pedal_smoothness: float + avg_combined_pedal_smoothness: float + # Sport name from associated sport mesg + sport_profile_name: StringValue + sport_index: int + # Total time spend in the standing position + time_standing: float + # Number of transitions to the standing state + stand_count: int + # Average platform center offset Left + avg_left_pco: int + # Average platform center offset Right + avg_right_pco: int + # Average left power phase angles. Indexes defined by power_phase_type. + avg_left_power_phase: Union[float, List[Optional[float]]] + # Average left power phase peak angles. Data value indexes defined by power_phase_type. + avg_left_power_phase_peak: Union[float, List[Optional[float]]] + # Average right power phase angles. Data value indexes defined by power_phase_type. + avg_right_power_phase: Union[float, List[Optional[float]]] + # Average right power phase peak angles data value indexes defined by power_phase_type. + avg_right_power_phase_peak: Union[float, List[Optional[float]]] + # Average power by position. Data value indexes defined by rider_position_type. + avg_power_position: Union[int, List[Optional[int]]] + # Maximum power by position. Data value indexes defined by rider_position_type. + max_power_position: Union[int, List[Optional[int]]] + # Average cadence by position. Data value indexes defined by rider_position_type. + avg_cadence_position: Union[int, List[Optional[int]]] + # Maximum cadence by position. Data value indexes defined by rider_position_type. + max_cadence_position: Union[int, List[Optional[int]]] + # total_distance / total_timer_time + enhanced_avg_speed: float + enhanced_max_speed: float + enhanced_avg_altitude: float + enhanced_min_altitude: float + enhanced_max_altitude: float + # lev average motor power during session + avg_lev_motor_power: int + # lev maximum motor power during session + max_lev_motor_power: int + # lev battery consumption during session + lev_battery_consumption: float + avg_vertical_ratio: float + avg_stance_time_balance: float + avg_step_length: float + total_anaerobic_training_effect: float + avg_vam: float + # 0 if above water + avg_depth: float + # 0 if above water + max_depth: float + # Time since end of last dive + surface_interval: int + start_cns: int + end_cns: int + start_n2: int + end_n2: int + avg_respiration_rate: int + max_respiration_rate: int + min_respiration_rate: int + min_temperature: int + o2_toxicity: int + dive_number: int + training_load_peak: float + enhanced_avg_respiration_rate: float + enhanced_max_respiration_rate: float + enhanced_min_respiration_rate: float + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + total_grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + total_flow: float + jump_count: int + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + avg_grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + avg_flow: float + # A 0-100 scale representing how a user felt while performing a workout. Low values are considered feeling bad, while high values are good. + workout_feel: int + # Common Borg CR10 / 0-10 RPE scale, multiplied 10x.. Aggregate score for all workouts in a single session. + workout_rpe: int + # Average SPO2 for the monitoring session + avg_spo2: int + # Average stress for the monitoring session + avg_stress: int + metabolic_calories: int + # Standard deviation of R-R interval (SDRR) - Heart rate variability measure most useful for wellness users. + sdrr_hrv: int + # Root mean square successive difference (RMSSD) - Heart rate variability measure most useful for athletes + rmssd_hrv: int + # fractional part of total_ascent + total_fractional_ascent: float + # fractional part of total_descent + total_fractional_descent: float + avg_core_temperature: float + min_core_temperature: float + max_core_temperature: float + + + +class LapMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + event: Event + event_type: EventType + start_time: Union[int, datetime] + start_position_lat: int + start_position_long: int + end_position_lat: int + end_position_long: int + # Time (includes pauses) + total_elapsed_time: float + # Timer Time (excludes pauses) + total_timer_time: float + total_distance: float + total_cycles: int + total_strides: int + total_strokes: int + total_calories: int + # If New Leaf + total_fat_calories: int + avg_speed: float + max_speed: float + avg_heart_rate: int + max_heart_rate: int + # total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time + avg_cadence: int + avg_running_cadence: int + max_cadence: int + max_running_cadence: int + # total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time + avg_power: int + max_power: int + total_ascent: int + total_descent: int + intensity: Intensity + lap_trigger: LapTrigger + sport: Sport + event_group: int + # # of lengths of swim pool + num_lengths: int + normalized_power: int + left_right_balance: LeftRightBalance100 + first_length_index: int + avg_stroke_distance: float + swim_stroke: SwimStroke + sub_sport: SubSport + # # of active lengths of swim pool + num_active_lengths: int + total_work: int + avg_altitude: float + max_altitude: float + gps_accuracy: int + avg_grade: float + avg_pos_grade: float + avg_neg_grade: float + max_pos_grade: float + max_neg_grade: float + avg_temperature: int + max_temperature: int + total_moving_time: float + avg_pos_vertical_speed: float + avg_neg_vertical_speed: float + max_pos_vertical_speed: float + max_neg_vertical_speed: float + time_in_hr_zone: Union[float, List[Optional[float]]] + time_in_speed_zone: Union[float, List[Optional[float]]] + time_in_cadence_zone: Union[float, List[Optional[float]]] + time_in_power_zone: Union[float, List[Optional[float]]] + repetition_num: int + min_altitude: float + min_heart_rate: int + active_time: float + wkt_step_index: MessageIndex + opponent_score: int + # stroke_type enum used as the index + stroke_count: Union[int, List[Optional[int]]] + # zone number used as the index + zone_count: Union[int, List[Optional[int]]] + avg_vertical_oscillation: float + avg_stance_time_percent: float + avg_stance_time: float + # fractional part of the avg_cadence + avg_fractional_cadence: float + # fractional part of the max_cadence + max_fractional_cadence: float + # fractional part of the total_cycles + total_fractional_cycles: float + player_score: int + # Avg saturated and unsaturated hemoglobin + avg_total_hemoglobin_conc: Union[float, List[Optional[float]]] + # Min saturated and unsaturated hemoglobin + min_total_hemoglobin_conc: Union[float, List[Optional[float]]] + # Max saturated and unsaturated hemoglobin + max_total_hemoglobin_conc: Union[float, List[Optional[float]]] + # Avg percentage of hemoglobin saturated with oxygen + avg_saturated_hemoglobin_percent: Union[float, List[Optional[float]]] + # Min percentage of hemoglobin saturated with oxygen + min_saturated_hemoglobin_percent: Union[float, List[Optional[float]]] + # Max percentage of hemoglobin saturated with oxygen + max_saturated_hemoglobin_percent: Union[float, List[Optional[float]]] + avg_left_torque_effectiveness: float + avg_right_torque_effectiveness: float + avg_left_pedal_smoothness: float + avg_right_pedal_smoothness: float + avg_combined_pedal_smoothness: float + # Total time spent in the standing position + time_standing: float + # Number of transitions to the standing state + stand_count: int + # Average left platform center offset + avg_left_pco: int + # Average right platform center offset + avg_right_pco: int + # Average left power phase angles. Data value indexes defined by power_phase_type. + avg_left_power_phase: Union[float, List[Optional[float]]] + # Average left power phase peak angles. Data value indexes defined by power_phase_type. + avg_left_power_phase_peak: Union[float, List[Optional[float]]] + # Average right power phase angles. Data value indexes defined by power_phase_type. + avg_right_power_phase: Union[float, List[Optional[float]]] + # Average right power phase peak angles. Data value indexes defined by power_phase_type. + avg_right_power_phase_peak: Union[float, List[Optional[float]]] + # Average power by position. Data value indexes defined by rider_position_type. + avg_power_position: Union[int, List[Optional[int]]] + # Maximum power by position. Data value indexes defined by rider_position_type. + max_power_position: Union[int, List[Optional[int]]] + # Average cadence by position. Data value indexes defined by rider_position_type. + avg_cadence_position: Union[int, List[Optional[int]]] + # Maximum cadence by position. Data value indexes defined by rider_position_type. + max_cadence_position: Union[int, List[Optional[int]]] + enhanced_avg_speed: float + enhanced_max_speed: float + enhanced_avg_altitude: float + enhanced_min_altitude: float + enhanced_max_altitude: float + # lev average motor power during lap + avg_lev_motor_power: int + # lev maximum motor power during lap + max_lev_motor_power: int + # lev battery consumption during lap + lev_battery_consumption: float + avg_vertical_ratio: float + avg_stance_time_balance: float + avg_step_length: float + avg_vam: float + # 0 if above water + avg_depth: float + # 0 if above water + max_depth: float + min_temperature: int + enhanced_avg_respiration_rate: float + enhanced_max_respiration_rate: float + avg_respiration_rate: int + max_respiration_rate: int + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + total_grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + total_flow: float + jump_count: int + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + avg_grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + avg_flow: float + # fractional part of total_ascent + total_fractional_ascent: float + # fractional part of total_descent + total_fractional_descent: float + avg_core_temperature: float + min_core_temperature: float + max_core_temperature: float + + + +class LengthMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + event: Event + event_type: EventType + start_time: Union[int, datetime] + total_elapsed_time: float + total_timer_time: float + total_strokes: int + avg_speed: float + swim_stroke: SwimStroke + avg_swimming_cadence: int + event_group: int + total_calories: int + length_type: LengthType + player_score: int + opponent_score: int + # stroke_type enum used as the index + stroke_count: Union[int, List[Optional[int]]] + # zone number used as the index + zone_count: Union[int, List[Optional[int]]] + enhanced_avg_respiration_rate: float + enhanced_max_respiration_rate: float + avg_respiration_rate: int + max_respiration_rate: int + + + +class RecordMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + position_lat: int + position_long: int + altitude: float + heart_rate: int + cadence: int + distance: float + speed: float + power: int + compressed_speed_distance: Union[int, List[Optional[int]]] + grade: float + # Relative. 0 is none 254 is Max. + resistance: int + time_from_course: float + cycle_length: float + temperature: int + # Speed at 1s intervals. Timestamp field indicates time of last array element. + speed_1s: Union[float, List[Optional[float]]] + cycles: int + total_cycles: int + compressed_accumulated_power: int + accumulated_power: int + left_right_balance: LeftRightBalance + gps_accuracy: int + vertical_speed: float + calories: int + vertical_oscillation: float + stance_time_percent: float + stance_time: float + activity_type: ActivityType + left_torque_effectiveness: float + right_torque_effectiveness: float + left_pedal_smoothness: float + right_pedal_smoothness: float + combined_pedal_smoothness: float + time128: float + stroke_type: StrokeType + zone: int + ball_speed: float + # Log cadence and fractional cadence for backwards compatability + cadence256: float + fractional_cadence: float + # Total saturated and unsaturated hemoglobin + total_hemoglobin_conc: float + # Min saturated and unsaturated hemoglobin + total_hemoglobin_conc_min: float + # Max saturated and unsaturated hemoglobin + total_hemoglobin_conc_max: float + # Percentage of hemoglobin saturated with oxygen + saturated_hemoglobin_percent: float + # Min percentage of hemoglobin saturated with oxygen + saturated_hemoglobin_percent_min: float + # Max percentage of hemoglobin saturated with oxygen + saturated_hemoglobin_percent_max: float + device_index: DeviceIndex + # Left platform center offset + left_pco: int + # Right platform center offset + right_pco: int + # Left power phase angles. Data value indexes defined by power_phase_type. + left_power_phase: Union[float, List[Optional[float]]] + # Left power phase peak angles. Data value indexes defined by power_phase_type. + left_power_phase_peak: Union[float, List[Optional[float]]] + # Right power phase angles. Data value indexes defined by power_phase_type. + right_power_phase: Union[float, List[Optional[float]]] + # Right power phase peak angles. Data value indexes defined by power_phase_type. + right_power_phase_peak: Union[float, List[Optional[float]]] + enhanced_speed: float + enhanced_altitude: float + # lev battery state of charge + battery_soc: float + # lev motor power + motor_power: int + vertical_ratio: float + stance_time_balance: float + step_length: float + # Supports larger cycle sizes needed for paddlesports. Max cycle size: 655.35 + cycle_length16: float + # Includes atmospheric pressure + absolute_pressure: int + # 0 if above water + depth: float + # 0 if above water + next_stop_depth: float + next_stop_time: int + time_to_surface: int + ndl_time: int + cns_load: int + n2_load: int + respiration_rate: int + enhanced_respiration_rate: float + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + flow: float + # Current Stress value + current_stress: float + ebike_travel_range: int + ebike_battery_level: int + ebike_assist_mode: int + ebike_assist_level_percent: int + air_time_remaining: int + # Pressure-based surface air consumption + pressure_sac: float + # Volumetric surface air consumption + volume_sac: float + # Respiratory minute volume + rmv: float + ascent_rate: float + # Current partial pressure of oxygen + po2: float + core_temperature: float + + + +class EventMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + event: Event + event_type: EventType + data16: int + data: int + timer_trigger: TimerTrigger + course_point_index: MessageIndex + battery_level: float + virtual_partner_speed: float + hr_high_alert: int + hr_low_alert: int + speed_high_alert: float + speed_low_alert: float + cad_high_alert: int + cad_low_alert: int + power_high_alert: int + power_low_alert: int + time_duration_alert: float + distance_duration_alert: float + calorie_duration_alert: int + fitness_equipment_state: FitnessEquipmentState + sport_point: int + gear_change_data: int + # Indicates the rider position value. + rider_position: RiderPositionType + comm_timeout: CommTimeoutType + dive_alert: DiveAlert + auto_activity_detect_duration: int + # The first byte is the radar_threat_level_max, the second byte is the radar_threat_count, third bytes is the average approach speed, and the 4th byte is the max approach speed + radar_threat_alert: int + event_group: int + # Do not populate directly. Autogenerated by decoder for sport_point subfield components + score: int + # Do not populate directly. Autogenerated by decoder for sport_point subfield components + opponent_score: int + # Do not populate directly. Autogenerated by decoder for gear_change subfield components. Front gear number. 1 is innermost. + front_gear_num: int + # Do not populate directly. Autogenerated by decoder for gear_change subfield components. Number of front teeth. + front_gear: int + # Do not populate directly. Autogenerated by decoder for gear_change subfield components. Rear gear number. 1 is innermost. + rear_gear_num: int + # Do not populate directly. Autogenerated by decoder for gear_change subfield components. Number of rear teeth. + rear_gear: int + device_index: DeviceIndex + # Activity Type associated with an auto_activity_detect event + activity_type: ActivityType + # Timestamp of when the event started + start_timestamp: Union[int, datetime] + # Auto Activity Detect Start Timestamp. + auto_activity_detect_start_timestamp: Union[int, datetime] + # Do not populate directly. Autogenerated by decoder for threat_alert subfield components. + radar_threat_level_max: RadarThreatLevelType + # Do not populate directly. Autogenerated by decoder for threat_alert subfield components. + radar_threat_count: int + # Do not populate directly. Autogenerated by decoder for radar_threat_alert subfield components + radar_threat_avg_approach_speed: float + # Do not populate directly. Autogenerated by decoder for radar_threat_alert subfield components + radar_threat_max_approach_speed: float + + + +class DeviceInfoMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + device_index: DeviceIndex + device_type: int + ble_device_type: BleDeviceType + antplus_device_type: AntplusDeviceType + ant_device_type: int + local_device_type: LocalDeviceType + manufacturer: Manufacturer + serial_number: int + product: int + favero_product: FaveroProduct + garmin_product: GarminProduct + software_version: float + hardware_version: int + # Reset by new battery or charge. + cum_operating_time: int + battery_voltage: float + battery_status: BatteryStatus + # Indicates the location of the sensor + sensor_position: BodyLocation + # Used to describe the sensor or location + descriptor: StringValue + ant_transmission_type: int + ant_device_number: int + ant_network: AntNetwork + source_type: SourceType + # Optional free form string to indicate the devices name or model + product_name: StringValue + battery_level: int + + + +class DeviceAuxBatteryInfoMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + device_index: DeviceIndex + battery_voltage: float + battery_status: BatteryStatus + battery_identifier: int + + + +# Corresponds to file_id of workout or course. +class TrainingFileMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + type: File + manufacturer: Manufacturer + product: int + favero_product: FaveroProduct + garmin_product: GarminProduct + serial_number: int + time_created: Union[int, datetime] + + + +class WeatherConditionsMesg(FitMesg, total=False): + # time of update for current conditions, else forecast time + timestamp: Union[int, datetime] + # Current or forecast + weather_report: WeatherReport + temperature: int + # Corresponds to GSC Response weatherIcon field + condition: WeatherStatus + wind_direction: int + wind_speed: float + # range 0-100 + precipitation_probability: int + # Heat Index if GCS heatIdx above or equal to 90F or wind chill if GCS windChill below or equal to 32F + temperature_feels_like: int + relative_humidity: int + # string corresponding to GCS response location string + location: StringValue + observed_at_time: Union[int, datetime] + observed_location_lat: int + observed_location_long: int + day_of_week: DayOfWeek + high_temperature: int + low_temperature: int + + + +class WeatherAlertMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Unique identifier from GCS report ID string, length is 12 + report_id: StringValue + # Time alert was issued + issue_time: Union[int, datetime] + # Time alert expires + expire_time: Union[int, datetime] + # Warning, Watch, Advisory, Statement + severity: WeatherSeverity + # Tornado, Severe Thunderstorm, etc. + type: WeatherSevereType + + + +class GpsMetadataMesg(FitMesg, total=False): + # Whole second part of the timestamp. + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + position_lat: int + position_long: int + enhanced_altitude: float + enhanced_speed: float + heading: float + # Used to correlate UTC to system time if the timestamp of the message is in system time. This UTC time is derived from the GPS data. + utc_timestamp: Union[int, datetime] + # velocity[0] is lon velocity. Velocity[1] is lat velocity. Velocity[2] is altitude velocity. + velocity: Union[float, List[Optional[float]]] + + + +class CameraEventMesg(FitMesg, total=False): + # Whole second part of the timestamp. + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + camera_event_type: CameraEventType + camera_file_uuid: StringValue + camera_orientation: CameraOrientationType + + + +class GyroscopeDataMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + # Each time in the array describes the time at which the gyro sample with the corrosponding index was taken. Limited to 30 samples in each message. The samples may span across seconds. Array size must match the number of samples in gyro_x and gyro_y and gyro_z + sample_time_offset: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + gyro_x: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + gyro_y: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + gyro_z: Union[int, List[Optional[int]]] + # Calibrated gyro reading + calibrated_gyro_x: Union[float, List[Optional[float]]] + # Calibrated gyro reading + calibrated_gyro_y: Union[float, List[Optional[float]]] + # Calibrated gyro reading + calibrated_gyro_z: Union[float, List[Optional[float]]] + + + +class AccelerometerDataMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + # Each time in the array describes the time at which the accelerometer sample with the corrosponding index was taken. Limited to 30 samples in each message. The samples may span across seconds. Array size must match the number of samples in accel_x and accel_y and accel_z + sample_time_offset: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + accel_x: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + accel_y: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + accel_z: Union[int, List[Optional[int]]] + # Calibrated accel reading + calibrated_accel_x: Union[float, List[Optional[float]]] + # Calibrated accel reading + calibrated_accel_y: Union[float, List[Optional[float]]] + # Calibrated accel reading + calibrated_accel_z: Union[float, List[Optional[float]]] + # Calibrated accel reading + compressed_calibrated_accel_x: Union[int, List[Optional[int]]] + # Calibrated accel reading + compressed_calibrated_accel_y: Union[int, List[Optional[int]]] + # Calibrated accel reading + compressed_calibrated_accel_z: Union[int, List[Optional[int]]] + + + +class MagnetometerDataMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + # Each time in the array describes the time at which the compass sample with the corrosponding index was taken. Limited to 30 samples in each message. The samples may span across seconds. Array size must match the number of samples in cmps_x and cmps_y and cmps_z + sample_time_offset: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + mag_x: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + mag_y: Union[int, List[Optional[int]]] + # These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples may span across seconds. A conversion will need to be done on this data once read. + mag_z: Union[int, List[Optional[int]]] + # Calibrated Magnetometer reading + calibrated_mag_x: Union[float, List[Optional[float]]] + # Calibrated Magnetometer reading + calibrated_mag_y: Union[float, List[Optional[float]]] + # Calibrated Magnetometer reading + calibrated_mag_z: Union[float, List[Optional[float]]] + + + +class BarometerDataMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + # Each time in the array describes the time at which the barometer sample with the corrosponding index was taken. The samples may span across seconds. Array size must match the number of samples in baro_cal + sample_time_offset: Union[int, List[Optional[int]]] + # These are the raw ADC reading. The samples may span across seconds. A conversion will need to be done on this data once read. + baro_pres: Union[int, List[Optional[int]]] + + + +class ThreeDSensorCalibrationMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Indicates which sensor the calibration is for + sensor_type: SensorType + # Calibration factor used to convert from raw ADC value to degrees, g, etc. + calibration_factor: int + # Accelerometer calibration factor + accel_cal_factor: int + # Gyro calibration factor + gyro_cal_factor: int + # Calibration factor divisor + calibration_divisor: int + # Level shift value used to shift the ADC value back into range + level_shift: int + # Internal calibration factors, one for each: xy, yx, zx + offset_cal: Union[int, List[Optional[int]]] + # 3 x 3 rotation matrix (row major) + orientation_matrix: Union[float, List[Optional[float]]] + + + +class OneDSensorCalibrationMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Indicates which sensor the calibration is for + sensor_type: SensorType + # Calibration factor used to convert from raw ADC value to degrees, g, etc. + calibration_factor: int + # Barometer calibration factor + baro_cal_factor: int + # Calibration factor divisor + calibration_divisor: int + # Level shift value used to shift the ADC value back into range + level_shift: int + # Internal Calibration factor + offset_cal: int + + + +class VideoFrameMesg(FitMesg, total=False): + # Whole second part of the timestamp + timestamp: Union[int, datetime] + # Millisecond part of the timestamp. + timestamp_ms: int + # Number of the frame that the timestamp and timestamp_ms correlate to + frame_number: int + + + +class ObdiiDataMesg(FitMesg, total=False): + # Timestamp message was output + timestamp: Union[int, datetime] + # Fractional part of timestamp, added to timestamp + timestamp_ms: int + # Offset of PID reading [i] from start_timestamp+start_timestamp_ms. Readings may span accross seconds. + time_offset: Union[int, List[Optional[int]]] + # Parameter ID + pid: int + # Raw parameter data + raw_data: Union[int, List[Optional[int]]] + # Optional, data size of PID[i]. If not specified refer to SAE J1979. + pid_data_size: Union[int, List[Optional[int]]] + # System time associated with sample expressed in ms, can be used instead of time_offset. There will be a system_time value for each raw_data element. For multibyte pids the system_time is repeated. + system_time: Union[int, List[Optional[int]]] + # Timestamp of first sample recorded in the message. Used with time_offset to generate time of each sample + start_timestamp: Union[int, datetime] + # Fractional part of start_timestamp + start_timestamp_ms: int + + + +class NmeaSentenceMesg(FitMesg, total=False): + # Timestamp message was output + timestamp: Union[int, datetime] + # Fractional part of timestamp, added to timestamp + timestamp_ms: int + # NMEA sentence + sentence: StringValue + + + +class AviationAttitudeMesg(FitMesg, total=False): + # Timestamp message was output + timestamp: Union[int, datetime] + # Fractional part of timestamp, added to timestamp + timestamp_ms: int + # System time associated with sample expressed in ms. + system_time: Union[int, List[Optional[int]]] + # Range -PI/2 to +PI/2 + pitch: Union[float, List[Optional[float]]] + # Range -PI to +PI + roll: Union[float, List[Optional[float]]] + # Range -78.4 to +78.4 (-8 Gs to 8 Gs) + accel_lateral: Union[float, List[Optional[float]]] + # Range -78.4 to +78.4 (-8 Gs to 8 Gs) + accel_normal: Union[float, List[Optional[float]]] + # Range -8.727 to +8.727 (-500 degs/sec to +500 degs/sec) + turn_rate: Union[float, List[Optional[float]]] + stage: Union[AttitudeStage, List[Optional[AttitudeStage]]] + # The percent complete of the current attitude stage. Set to 0 for attitude stages 0, 1 and 2 and to 100 for attitude stage 3 by AHRS modules that do not support it. Range - 100 + attitude_stage_complete: Union[int, List[Optional[int]]] + # Track Angle/Heading Range 0 - 2pi + track: Union[float, List[Optional[float]]] + validity: Union[AttitudeValidity, List[Optional[AttitudeValidity]]] + + + +class VideoMesg(FitMesg, total=False): + url: StringValue + hosting_provider: StringValue + # Playback time of video + duration: int + + + +class VideoTitleMesg(FitMesg, total=False): + # Long titles will be split into multiple parts + message_index: MessageIndex + # Total number of title parts + message_count: int + text: StringValue + + + +class VideoDescriptionMesg(FitMesg, total=False): + # Long descriptions will be split into multiple parts + message_index: MessageIndex + # Total number of description parts + message_count: int + text: StringValue + + + +class VideoClipMesg(FitMesg, total=False): + clip_number: int + start_timestamp: Union[int, datetime] + start_timestamp_ms: int + end_timestamp: Union[int, datetime] + end_timestamp_ms: int + # Start of clip in video time + clip_start: int + # End of clip in video time + clip_end: int + + + +class SetMesg(FitMesg, total=False): + # Timestamp of the set + timestamp: Union[int, datetime] + duration: float + # # of repitions of the movement + repetitions: int + # Amount of weight applied for the set + weight: float + set_type: SetType + # Start time of the set + start_time: Union[int, datetime] + category: Union[ExerciseCategory, List[Optional[ExerciseCategory]]] + # Based on the associated category, see [category]_exercise_names + category_subtype: Union[int, List[Optional[int]]] + weight_display_unit: FitBaseUnit + message_index: MessageIndex + wkt_step_index: MessageIndex + + + +class JumpMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + distance: float + height: float + rotations: int + hang_time: float + # A score for a jump calculated based on hang time, rotations, and distance. + score: float + position_lat: int + position_long: int + speed: float + enhanced_speed: float + + + +class SplitMesg(FitMesg, total=False): + message_index: MessageIndex + split_type: SplitType + total_elapsed_time: float + total_timer_time: float + total_distance: float + avg_speed: float + start_time: Union[int, datetime] + total_ascent: int + total_descent: int + start_position_lat: int + start_position_long: int + end_position_lat: int + end_position_long: int + max_speed: float + avg_vert_speed: float + end_time: Union[int, datetime] + total_calories: int + start_elevation: float + # Active time of split rounds + active_time: float + total_moving_time: float + + + +class SplitSummaryMesg(FitMesg, total=False): + message_index: MessageIndex + split_type: SplitType + num_splits: int + total_timer_time: float + total_distance: float + avg_speed: float + max_speed: float + total_ascent: int + total_descent: int + avg_heart_rate: int + max_heart_rate: int + avg_vert_speed: float + total_calories: int + # total active time in all split rounds + active_time: float + total_moving_time: float + + + +class ClimbProMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + position_lat: int + position_long: int + climb_pro_event: ClimbProEvent + climb_number: int + climb_category: int + current_dist: float + + + +# Must be logged before developer field is used +class FieldDescriptionMesg(FitMesg, total=False): + developer_data_index: int + field_definition_number: int + fit_base_type_id: FitBaseType + field_name: StringValue + array: int + components: StringValue + scale: int + offset: int + units: StringValue + bits: StringValue + accumulate: StringValue + fit_base_unit_id: FitBaseUnit + native_mesg_num: MesgNum + native_field_num: int + + + +# Must be logged before field description +class DeveloperDataIdMesg(FitMesg, total=False): + developer_id: Union[int, List[Optional[int]]] + application_id: Union[int, List[Optional[int]]] + manufacturer_id: Manufacturer + developer_data_index: int + application_version: int + + + +class CourseMesg(FitMesg, total=False): + sport: Sport + name: StringValue + capabilities: CourseCapabilities + sub_sport: SubSport + + + +class CoursePointMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + position_lat: int + position_long: int + distance: float + type: CoursePoint + name: StringValue + favorite: bool + + + +# Unique Identification data for a segment file +class SegmentIdMesg(FitMesg, total=False): + # Friendly name assigned to segment + name: StringValue + # UUID of the segment + uuid: StringValue + # Sport associated with the segment + sport: Sport + # Segment enabled for evaluation + enabled: bool + # Primary key of the user that created the segment + user_profile_primary_key: int + # ID of the device that created the segment + device_id: int + # Index for the Leader Board entry selected as the default race participant + default_race_leader: int + # Indicates if any segments should be deleted + delete_status: SegmentDeleteStatus + # Indicates how the segment was selected to be sent to the device + selection_type: SegmentSelectionType + + + +# Unique Identification data for an individual segment leader within a segment file +class SegmentLeaderboardEntryMesg(FitMesg, total=False): + message_index: MessageIndex + # Friendly name assigned to leader + name: StringValue + # Leader classification + type: SegmentLeaderboardType + # Primary user ID of this leader + group_primary_key: int + # ID of the activity associated with this leader time + activity_id: int + # Segment Time (includes pauses) + segment_time: float + # String version of the activity_id. 21 characters long, express in decimal + activity_id_string: StringValue + + + +# Navigation and race evaluation point for a segment decribing a point along the segment path and time it took each segment leader to reach that point +class SegmentPointMesg(FitMesg, total=False): + message_index: MessageIndex + position_lat: int + position_long: int + # Accumulated distance along the segment at the described point + distance: float + # Accumulated altitude along the segment at the described point + altitude: float + # Accumualted time each leader board member required to reach the described point. This value is zero for all leader board members at the starting point of the segment. + leader_time: Union[float, List[Optional[float]]] + # Accumulated altitude along the segment at the described point + enhanced_altitude: float + + + +class SegmentLapMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + event: Event + event_type: EventType + start_time: Union[int, datetime] + start_position_lat: int + start_position_long: int + end_position_lat: int + end_position_long: int + # Time (includes pauses) + total_elapsed_time: float + # Timer Time (excludes pauses) + total_timer_time: float + total_distance: float + total_cycles: int + total_strokes: int + total_calories: int + # If New Leaf + total_fat_calories: int + avg_speed: float + max_speed: float + avg_heart_rate: int + max_heart_rate: int + # total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time + avg_cadence: int + max_cadence: int + # total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time + avg_power: int + max_power: int + total_ascent: int + total_descent: int + sport: Sport + event_group: int + # North east corner latitude. + nec_lat: int + # North east corner longitude. + nec_long: int + # South west corner latitude. + swc_lat: int + # South west corner latitude. + swc_long: int + name: StringValue + normalized_power: int + left_right_balance: LeftRightBalance100 + sub_sport: SubSport + total_work: int + avg_altitude: float + max_altitude: float + gps_accuracy: int + avg_grade: float + avg_pos_grade: float + avg_neg_grade: float + max_pos_grade: float + max_neg_grade: float + avg_temperature: int + max_temperature: int + total_moving_time: float + avg_pos_vertical_speed: float + avg_neg_vertical_speed: float + max_pos_vertical_speed: float + max_neg_vertical_speed: float + time_in_hr_zone: Union[float, List[Optional[float]]] + time_in_speed_zone: Union[float, List[Optional[float]]] + time_in_cadence_zone: Union[float, List[Optional[float]]] + time_in_power_zone: Union[float, List[Optional[float]]] + repetition_num: int + min_altitude: float + min_heart_rate: int + active_time: float + wkt_step_index: MessageIndex + sport_event: SportEvent + avg_left_torque_effectiveness: float + avg_right_torque_effectiveness: float + avg_left_pedal_smoothness: float + avg_right_pedal_smoothness: float + avg_combined_pedal_smoothness: float + status: SegmentLapStatus + uuid: StringValue + # fractional part of the avg_cadence + avg_fractional_cadence: float + # fractional part of the max_cadence + max_fractional_cadence: float + # fractional part of the total_cycles + total_fractional_cycles: float + front_gear_shift_count: int + rear_gear_shift_count: int + # Total time spent in the standing position + time_standing: float + # Number of transitions to the standing state + stand_count: int + # Average left platform center offset + avg_left_pco: int + # Average right platform center offset + avg_right_pco: int + # Average left power phase angles. Data value indexes defined by power_phase_type. + avg_left_power_phase: Union[float, List[Optional[float]]] + # Average left power phase peak angles. Data value indexes defined by power_phase_type. + avg_left_power_phase_peak: Union[float, List[Optional[float]]] + # Average right power phase angles. Data value indexes defined by power_phase_type. + avg_right_power_phase: Union[float, List[Optional[float]]] + # Average right power phase peak angles. Data value indexes defined by power_phase_type. + avg_right_power_phase_peak: Union[float, List[Optional[float]]] + # Average power by position. Data value indexes defined by rider_position_type. + avg_power_position: Union[int, List[Optional[int]]] + # Maximum power by position. Data value indexes defined by rider_position_type. + max_power_position: Union[int, List[Optional[int]]] + # Average cadence by position. Data value indexes defined by rider_position_type. + avg_cadence_position: Union[int, List[Optional[int]]] + # Maximum cadence by position. Data value indexes defined by rider_position_type. + max_cadence_position: Union[int, List[Optional[int]]] + # Manufacturer that produced the segment + manufacturer: Manufacturer + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + total_grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + total_flow: float + # The grit score estimates how challenging a route could be for a cyclist in terms of time spent going over sharp turns or large grade slopes. + avg_grit: float + # The flow score estimates how long distance wise a cyclist deaccelerates over intervals where deacceleration is unnecessary such as smooth turns or small grade angle intervals. + avg_flow: float + # fractional part of total_ascent + total_fractional_ascent: float + # fractional part of total_descent + total_fractional_descent: float + enhanced_avg_altitude: float + enhanced_max_altitude: float + enhanced_min_altitude: float + + + +# Summary of the unique segment and leaderboard information associated with a segment file. This message is used to compile a segment list file describing all segment files on a device. The segment list file is used when refreshing the contents of a segment file with the latest available leaderboard information. +class SegmentFileMesg(FitMesg, total=False): + message_index: MessageIndex + # UUID of the segment file + file_uuid: StringValue + # Enabled state of the segment file + enabled: bool + # Primary key of the user that created the segment file + user_profile_primary_key: int + # Leader type of each leader in the segment file + leader_type: Union[SegmentLeaderboardType, List[Optional[SegmentLeaderboardType]]] + # Group primary key of each leader in the segment file + leader_group_primary_key: Union[int, List[Optional[int]]] + # Activity ID of each leader in the segment file + leader_activity_id: Union[int, List[Optional[int]]] + # String version of the activity ID of each leader in the segment file. 21 characters long for each ID, express in decimal + leader_activity_id_string: StringValue + # Index for the Leader Board entry selected as the default race participant + default_race_leader: int + + + +class WorkoutMesg(FitMesg, total=False): + message_index: MessageIndex + sport: Sport + capabilities: WorkoutCapabilities + # number of valid steps + num_valid_steps: int + wkt_name: StringValue + sub_sport: SubSport + pool_length: float + pool_length_unit: DisplayMeasure + # Description of the workout + wkt_description: StringValue + + + +class WorkoutSessionMesg(FitMesg, total=False): + message_index: MessageIndex + sport: Sport + sub_sport: SubSport + num_valid_steps: int + first_step_index: int + pool_length: float + pool_length_unit: DisplayMeasure + + + +class WorkoutStepMesg(FitMesg, total=False): + message_index: MessageIndex + wkt_step_name: StringValue + duration_type: WktStepDuration + duration_value: int + duration_time: float + duration_distance: float + duration_hr: WorkoutHr + duration_calories: int + # message_index of step to loop back to. Steps are assumed to be in the order by message_index. custom_name and intensity members are undefined for this duration type. + duration_step: int + duration_power: WorkoutPower + duration_reps: int + target_type: WktStepTarget + target_value: int + # speed zone (1-10);Custom =0; + target_speed_zone: int + # hr zone (1-5);Custom =0; + target_hr_zone: int + # Zone (1-?); Custom = 0; + target_cadence_zone: int + # Power Zone ( 1-7); Custom = 0; + target_power_zone: int + # # of repetitions + repeat_steps: int + repeat_time: float + repeat_distance: float + repeat_calories: int + repeat_hr: WorkoutHr + repeat_power: WorkoutPower + target_stroke_type: SwimStroke + custom_target_value_low: int + custom_target_speed_low: float + custom_target_heart_rate_low: WorkoutHr + custom_target_cadence_low: int + custom_target_power_low: WorkoutPower + custom_target_value_high: int + custom_target_speed_high: float + custom_target_heart_rate_high: WorkoutHr + custom_target_cadence_high: int + custom_target_power_high: WorkoutPower + intensity: Intensity + notes: StringValue + equipment: WorkoutEquipment + exercise_category: ExerciseCategory + exercise_name: int + exercise_weight: float + weight_display_unit: FitBaseUnit + secondary_target_type: WktStepTarget + secondary_target_value: int + # speed zone (1-10);Custom =0; + secondary_target_speed_zone: int + # hr zone (1-5);Custom =0; + secondary_target_hr_zone: int + # Zone (1-?); Custom = 0; + secondary_target_cadence_zone: int + # Power Zone ( 1-7); Custom = 0; + secondary_target_power_zone: int + secondary_target_stroke_type: SwimStroke + secondary_custom_target_value_low: int + secondary_custom_target_speed_low: float + secondary_custom_target_heart_rate_low: WorkoutHr + secondary_custom_target_cadence_low: int + secondary_custom_target_power_low: WorkoutPower + secondary_custom_target_value_high: int + secondary_custom_target_speed_high: float + secondary_custom_target_heart_rate_high: WorkoutHr + secondary_custom_target_cadence_high: int + secondary_custom_target_power_high: WorkoutPower + + + +class ExerciseTitleMesg(FitMesg, total=False): + message_index: MessageIndex + exercise_category: ExerciseCategory + exercise_name: int + wkt_step_name: StringValue + + + +class ScheduleMesg(FitMesg, total=False): + # Corresponds to file_id of scheduled workout / course. + manufacturer: Manufacturer + # Corresponds to file_id of scheduled workout / course. + product: int + favero_product: FaveroProduct + garmin_product: GarminProduct + # Corresponds to file_id of scheduled workout / course. + serial_number: int + # Corresponds to file_id of scheduled workout / course. + time_created: Union[int, datetime] + # TRUE if this activity has been started + completed: bool + type: Schedule + scheduled_time: Union[int, datetime] + + + +class TotalsMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + # Excludes pauses + timer_time: int + distance: int + calories: int + sport: Sport + # Includes pauses + elapsed_time: int + sessions: int + active_time: int + sport_index: int + + + +class WeightScaleMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + weight: float + percent_fat: float + percent_hydration: float + visceral_fat_mass: float + bone_mass: float + muscle_mass: float + basal_met: float + physique_rating: int + # ~4kJ per kcal, 0.25 allows max 16384 kcal + active_met: float + metabolic_age: int + visceral_fat_rating: int + # Associates this weight scale message to a user. This corresponds to the index of the user profile message in the weight scale file. + user_profile_index: MessageIndex + bmi: float + + + +class BloodPressureMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + systolic_pressure: int + diastolic_pressure: int + mean_arterial_pressure: int + map_3_sample_mean: int + map_morning_values: int + map_evening_values: int + heart_rate: int + heart_rate_type: HrType + status: BpStatus + # Associates this blood pressure message to a user. This corresponds to the index of the user profile message in the blood pressure file. + user_profile_index: MessageIndex + + + +class MonitoringInfoMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Use to convert activity timestamps to local time if device does not support time zone and daylight savings time correction. + local_timestamp: Union[int, datetime] + activity_type: Union[ActivityType, List[Optional[ActivityType]]] + # Indexed by activity_type + cycles_to_distance: Union[float, List[Optional[float]]] + # Indexed by activity_type + cycles_to_calories: Union[float, List[Optional[float]]] + resting_metabolic_rate: int + + + +class MonitoringMesg(FitMesg, total=False): + # Must align to logging interval, for example, time must be 00:00:00 for daily log. + timestamp: Union[int, datetime] + # Associates this data to device_info message. Not required for file with single device (sensor). + device_index: DeviceIndex + # Accumulated total calories. Maintained by MonitoringReader for each activity_type. See SDK documentation + calories: int + # Accumulated distance. Maintained by MonitoringReader for each activity_type. See SDK documentation. + distance: float + # Accumulated cycles. Maintained by MonitoringReader for each activity_type. See SDK documentation. + cycles: float + steps: int + strokes: float + active_time: float + activity_type: ActivityType + activity_subtype: ActivitySubtype + activity_level: ActivityLevel + distance_16: int + cycles_16: int + active_time_16: int + # Must align to logging interval, for example, time must be 00:00:00 for daily log. + local_timestamp: Union[int, datetime] + # Avg temperature during the logging interval ended at timestamp + temperature: float + # Min temperature during the logging interval ended at timestamp + temperature_min: float + # Max temperature during the logging interval ended at timestamp + temperature_max: float + # Indexed using minute_activity_level enum + activity_time: Union[int, List[Optional[int]]] + active_calories: int + # Indicates single type / intensity for duration since last monitoring message. + current_activity_type_intensity: int + timestamp_min_8: int + timestamp_16: int + heart_rate: int + intensity: float + duration_min: int + duration: int + ascent: float + descent: float + moderate_activity_minutes: int + vigorous_activity_minutes: int + # Wheelchair Pushes + pushes: int + + + +class MonitoringHrDataMesg(FitMesg, total=False): + # Must align to logging interval, for example, time must be 00:00:00 for daily log. + timestamp: Union[int, datetime] + # 7-day rolling average + resting_heart_rate: int + # RHR for today only. (Feeds into 7-day average) + current_day_resting_heart_rate: int + + + +class Spo2DataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + reading_spo2: int + reading_confidence: int + # Mode when data was captured + mode: Spo2MeasurementType + + + +class HrMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + fractional_timestamp: float + time256: float + filtered_bpm: Union[int, List[Optional[int]]] + event_timestamp: Union[float, List[Optional[float]]] + event_timestamp_12: Union[int, List[Optional[int]]] + + + +# Value from 1 to 100 calculated by FirstBeat +class StressLevelMesg(FitMesg, total=False): + stress_level_value: int + # Time stress score was calculated + stress_level_time: Union[int, datetime] + + + +class MaxMetDataMesg(FitMesg, total=False): + # Time maxMET and vo2 were calculated + update_time: Union[int, datetime] + vo2_max: float + sport: Sport + sub_sport: SubSport + max_met_category: MaxMetCategory + # Indicates if calibrated data was used in the calculation + calibrated_data: bool + # Indicates if the estimate was obtained using a chest strap or wrist heart rate + hr_source: MaxMetHeartRateSource + # Indidcates if the estimate was obtained using onboard GPS or connected GPS + speed_source: MaxMetSpeedSource + + + +# Body battery data used for HSA custom data logging +class HsaBodyBatteryDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds + processing_interval: int + # Body battery level: [0,100] Blank: -16 + level: Union[int, List[Optional[int]]] + # Body battery charged value + charged: Union[int, List[Optional[int]]] + # Body battery uncharged value + uncharged: Union[int, List[Optional[int]]] + + + +# HSA events +class HsaEventMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Event ID. Health SDK use only + event_id: int + + + +# Raw accelerometer data used for HSA custom data logging +class HsaAccelerometerDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Millisecond resolution of the timestamp + timestamp_ms: int + # Sampling Interval in Milliseconds + sampling_interval: int + # X-Axis Measurement + accel_x: Union[float, List[Optional[float]]] + # Y-Axis Measurement + accel_y: Union[float, List[Optional[float]]] + # Z-Axis Measurement + accel_z: Union[float, List[Optional[float]]] + # 32 kHz timestamp + timestamp_32k: int + + + +class HsaGyroscopeDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Millisecond resolution of the timestamp + timestamp_ms: int + # Sampling Interval in 32 kHz timescale + sampling_interval: int + # X-Axis Measurement + gyro_x: Union[float, List[Optional[float]]] + # Y-Axis Measurement + gyro_y: Union[float, List[Optional[float]]] + # Z-Axis Measurement + gyro_z: Union[float, List[Optional[float]]] + # 32 kHz timestamp + timestamp_32k: int + + + +# User's current daily step data used for HSA custom data logging +class HsaStepDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds. File start: 0xFFFFFFEF File stop: 0xFFFFFFEE + processing_interval: int + # Total step sum + steps: Union[int, List[Optional[int]]] + + + +# User's current SpO2 data used for HSA custom data logging +class HsaSpo2DataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds + processing_interval: int + # SpO2 Reading: [70,100] Blank: 240 + reading_spo2: Union[int, List[Optional[int]]] + # SpO2 Confidence: [0,254] + confidence: Union[int, List[Optional[int]]] + + + +# User's current stress data used for HSA custom data logging +class HsaStressDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds + processing_interval: int + # Stress Level: [0,100] Off wrist: -1 Excess motion: -2 Not enough data: -3 Recovering from exercise: -4 Unidentified: -5 Blank: -16 + stress_level: Union[int, List[Optional[int]]] + + + +# User's current respiration data used for HSA custom data logging +class HsaRespirationDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds + processing_interval: int + # Breaths / min: [1,100] Invalid: 255 Excess motion: 254 Off wrist: 253 Not available: 252 Blank: 2.4 + respiration_rate: Union[float, List[Optional[float]]] + + + +# User's current heart rate data used for HSA custom data logging +class HsaHeartRateDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds + processing_interval: int + # Status of measurements in buffer - 0 indicates SEARCHING 1 indicates LOCKED + status: int + # Beats / min. Blank: 0 + heart_rate: Union[int, List[Optional[int]]] + + + +# Configuration data for HSA custom data logging +class HsaConfigurationDataMesg(FitMesg, total=False): + # Encoded configuration data + timestamp: Union[int, datetime] + # Encoded configuration data. Health SDK use only + data: Union[int, List[Optional[int]]] + # Size in bytes of data field + data_size: int + + + +# Wrist temperature data used for HSA custom data logging +class HsaWristTemperatureDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Processing interval length in seconds + processing_interval: int + # Wrist temperature reading + value: Union[float, List[Optional[float]]] + + + +class MemoGlobMesg(FitMesg, total=False): + # Sequence number of memo blocks + part_index: int + # Deprecated. Use data field. + memo: Union[int, List[Optional[int]]] + # Message Number of the parent message + mesg_num: MesgNum + # Index of mesg that this glob is associated with. + parent_index: MessageIndex + # Field within the parent that this glob is associated with + field_num: int + # Block of utf8 bytes. Note, mutltibyte characters may be split across adjoining memo_glob messages. + data: Union[int, List[Optional[int]]] + + + +class SleepLevelMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + sleep_level: SleepLevel + + + +class AntChannelIdMesg(FitMesg, total=False): + channel_number: int + device_type: int + device_number: int + transmission_type: int + device_index: DeviceIndex + + + +class AntRxMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + fractional_timestamp: float + mesg_id: int + mesg_data: Union[int, List[Optional[int]]] + channel_number: int + data: Union[int, List[Optional[int]]] + + + +class AntTxMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + fractional_timestamp: float + mesg_id: int + mesg_data: Union[int, List[Optional[int]]] + channel_number: int + data: Union[int, List[Optional[int]]] + + + +class ExdScreenConfigurationMesg(FitMesg, total=False): + screen_index: int + # number of fields in screen + field_count: int + layout: ExdLayout + screen_enabled: bool + + + +class ExdDataFieldConfigurationMesg(FitMesg, total=False): + screen_index: int + concept_field: int + field_id: int + concept_count: int + display_type: ExdDisplayType + title: StringValue + + + +class ExdDataConceptConfigurationMesg(FitMesg, total=False): + screen_index: int + concept_field: int + field_id: int + concept_index: int + data_page: int + concept_key: int + scaling: int + data_units: ExdDataUnits + qualifier: ExdQualifiers + descriptor: ExdDescriptors + is_signed: bool + + + +class DiveSummaryMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + reference_mesg: MesgNum + reference_index: MessageIndex + # 0 if above water + avg_depth: float + # 0 if above water + max_depth: float + # Time since end of last dive + surface_interval: int + start_cns: int + end_cns: int + start_n2: int + end_n2: int + o2_toxicity: int + dive_number: int + bottom_time: float + # Average pressure-based surface air consumption + avg_pressure_sac: float + # Average volumetric surface air consumption + avg_volume_sac: float + # Average respiratory minute volume + avg_rmv: float + # Time to reach deepest level stop + descent_time: float + # Time after leaving bottom until reaching surface + ascent_time: float + # Average ascent rate, not including descents or stops + avg_ascent_rate: float + # Average descent rate, not including ascents or stops + avg_descent_rate: float + # Maximum ascent rate + max_ascent_rate: float + # Maximum descent rate + max_descent_rate: float + # Time spent neither ascending nor descending + hang_time: float + + + +# Number of acclerometer zero crossings summed over the specified time interval +class AadAccelFeaturesMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Time interval length in seconds + time: int + # Total accelerometer energy in the interval + energy_total: int + # Count of zero crossings + zero_cross_cnt: int + # Instance ID of zero crossing algorithm + instance: int + # Total accelerometer time above threshold in the interval + time_above_threshold: float + + + +# Heart rate variability +class HrvMesg(FitMesg, total=False): + # Time between beats + time: Union[float, List[Optional[float]]] + + + +# Array of heart beat intervals +class BeatIntervalsMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Milliseconds past date_time + timestamp_ms: int + # Array of millisecond times between beats + time: Union[int, List[Optional[int]]] + + + +class HrvStatusSummaryMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # 7 day RMSSD average over sleep + weekly_average: float + # Last night RMSSD average over sleep + last_night_average: float + # 5 minute high RMSSD value over sleep + last_night_5_min_high: float + # 3 week baseline, upper boundary of low HRV status + baseline_low_upper: float + # 3 week baseline, lower boundary of balanced HRV status + baseline_balanced_lower: float + # 3 week baseline, upper boundary of balanced HRV status + baseline_balanced_upper: float + status: HrvStatus + + + +class HrvValueMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # 5 minute RMSSD + value: float + + + +# Raw Beat-to-Beat Interval values +class RawBbiMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Millisecond resolution of the timestamp + timestamp_ms: int + # 1 bit for gap indicator, 1 bit for quality indicator, and 14 bits for Beat-to-Beat interval values in whole-integer millisecond resolution + data: Union[int, List[Optional[int]]] + # Array of millisecond times between beats + time: Union[int, List[Optional[int]]] + # 1 = high confidence. 0 = low confidence. N/A when gap = 1 + quality: Union[int, List[Optional[int]]] + # 1 = gap (time represents ms gap length). 0 = BBI data + gap: Union[int, List[Optional[int]]] + + + +class RespirationRateMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + # Breaths * 100 /min, -300 indicates invalid, -200 indicates large motion, -100 indicates off wrist + respiration_rate: float + + + +# Specifically used for XERO products. +class ChronoShotSessionMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + min_speed: float + max_speed: float + avg_speed: float + shot_count: int + projectile_type: ProjectileType + grain_weight: float + standard_deviation: float + + + +# Specifically used for XERO products. +class ChronoShotDataMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + shot_speed: float + shot_num: int + + + +class TankUpdateMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + sensor: AntChannelId + pressure: float + + + +class TankSummaryMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + sensor: AntChannelId + start_pressure: float + end_pressure: float + volume_used: float + + + +class SleepAssessmentMesg(FitMesg, total=False): + # Average of awake_time_score and awakenings_count_score. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + combined_awake_score: int + # Score that evaluates the total time spent awake between sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + awake_time_score: int + # Score that evaluates the number of awakenings that interrupt sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + awakenings_count_score: int + # Score that evaluates the amount of deep sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + deep_sleep_score: int + # Score that evaluates the quality of sleep based on sleep stages, heart-rate variability and possible awakenings during the night. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + sleep_duration_score: int + # Score that evaluates the amount of light sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + light_sleep_score: int + # Total score that summarizes the overall quality of sleep, combining sleep duration and quality. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + overall_sleep_score: int + # Score that evaluates the quality of sleep based on sleep stages, heart-rate variability and possible awakenings during the night. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + sleep_quality_score: int + # Score that evaluates stress and recovery during sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + sleep_recovery_score: int + # Score that evaluates the amount of REM sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + rem_sleep_score: int + # Score that evaluates the amount of restlessness during sleep. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + sleep_restlessness_score: int + # The number of awakenings during sleep. + awakenings_count: int + # Score that evaluates the sleep interruptions. If valid: 0 (worst) to 100 (best). If unknown: FIT_UINT8_INVALID. + interruptions_score: int + # Excludes stress during awake periods in the sleep window + average_stress_during_sleep: float + + + +class SleepDisruptionSeverityPeriodMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + severity: SleepDisruptionSeverity + + + +class SleepDisruptionOvernightSeverityMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + severity: SleepDisruptionSeverity + + + +class NapEventMesg(FitMesg, total=False): + message_index: MessageIndex + timestamp: Union[int, datetime] + start_time: Union[int, datetime] + start_timezone_offset: int + end_time: Union[int, datetime] + end_timezone_offset: int + feedback: NapPeriodFeedback + is_deleted: bool + source: NapSource + # The timestamp representing when this nap event was last updated + update_timestamp: Union[int, datetime] + + + +class SkinTempOvernightMesg(FitMesg, total=False): + timestamp: Union[int, datetime] + local_timestamp: Union[int, datetime] + # The average overnight deviation from baseline temperature in degrees C + average_deviation: float + # The average 7 day overnight deviation from baseline temperature in degrees C + average_7_day_deviation: float + # Final overnight temperature value + nightly_value: float + + + +class PadMesg(FitMesg, total=False): + pass + + + +class FitMessages(TypedDict, total=False): + """TypedDict containing all possible decoded FIT message lists, keyed by message type.""" + + file_id_mesgs: List[FileIdMesg] + file_creator_mesgs: List[FileCreatorMesg] + timestamp_correlation_mesgs: List[TimestampCorrelationMesg] + software_mesgs: List[SoftwareMesg] + slave_device_mesgs: List[SlaveDeviceMesg] + capabilities_mesgs: List[CapabilitiesMesg] + file_capabilities_mesgs: List[FileCapabilitiesMesg] + mesg_capabilities_mesgs: List[MesgCapabilitiesMesg] + field_capabilities_mesgs: List[FieldCapabilitiesMesg] + device_settings_mesgs: List[DeviceSettingsMesg] + user_profile_mesgs: List[UserProfileMesg] + hrm_profile_mesgs: List[HrmProfileMesg] + sdm_profile_mesgs: List[SdmProfileMesg] + bike_profile_mesgs: List[BikeProfileMesg] + connectivity_mesgs: List[ConnectivityMesg] + watchface_settings_mesgs: List[WatchfaceSettingsMesg] + ohr_settings_mesgs: List[OhrSettingsMesg] + time_in_zone_mesgs: List[TimeInZoneMesg] + zones_target_mesgs: List[ZonesTargetMesg] + sport_mesgs: List[SportMesg] + hr_zone_mesgs: List[HrZoneMesg] + speed_zone_mesgs: List[SpeedZoneMesg] + cadence_zone_mesgs: List[CadenceZoneMesg] + power_zone_mesgs: List[PowerZoneMesg] + met_zone_mesgs: List[MetZoneMesg] + training_settings_mesgs: List[TrainingSettingsMesg] + dive_settings_mesgs: List[DiveSettingsMesg] + dive_alarm_mesgs: List[DiveAlarmMesg] + dive_apnea_alarm_mesgs: List[DiveApneaAlarmMesg] + dive_gas_mesgs: List[DiveGasMesg] + goal_mesgs: List[GoalMesg] + activity_mesgs: List[ActivityMesg] + session_mesgs: List[SessionMesg] + lap_mesgs: List[LapMesg] + length_mesgs: List[LengthMesg] + record_mesgs: List[RecordMesg] + event_mesgs: List[EventMesg] + device_info_mesgs: List[DeviceInfoMesg] + device_aux_battery_info_mesgs: List[DeviceAuxBatteryInfoMesg] + training_file_mesgs: List[TrainingFileMesg] + weather_conditions_mesgs: List[WeatherConditionsMesg] + weather_alert_mesgs: List[WeatherAlertMesg] + gps_metadata_mesgs: List[GpsMetadataMesg] + camera_event_mesgs: List[CameraEventMesg] + gyroscope_data_mesgs: List[GyroscopeDataMesg] + accelerometer_data_mesgs: List[AccelerometerDataMesg] + magnetometer_data_mesgs: List[MagnetometerDataMesg] + barometer_data_mesgs: List[BarometerDataMesg] + three_d_sensor_calibration_mesgs: List[ThreeDSensorCalibrationMesg] + one_d_sensor_calibration_mesgs: List[OneDSensorCalibrationMesg] + video_frame_mesgs: List[VideoFrameMesg] + obdii_data_mesgs: List[ObdiiDataMesg] + nmea_sentence_mesgs: List[NmeaSentenceMesg] + aviation_attitude_mesgs: List[AviationAttitudeMesg] + video_mesgs: List[VideoMesg] + video_title_mesgs: List[VideoTitleMesg] + video_description_mesgs: List[VideoDescriptionMesg] + video_clip_mesgs: List[VideoClipMesg] + set_mesgs: List[SetMesg] + jump_mesgs: List[JumpMesg] + split_mesgs: List[SplitMesg] + split_summary_mesgs: List[SplitSummaryMesg] + climb_pro_mesgs: List[ClimbProMesg] + field_description_mesgs: List[FieldDescriptionMesg] + developer_data_id_mesgs: List[DeveloperDataIdMesg] + course_mesgs: List[CourseMesg] + course_point_mesgs: List[CoursePointMesg] + segment_id_mesgs: List[SegmentIdMesg] + segment_leaderboard_entry_mesgs: List[SegmentLeaderboardEntryMesg] + segment_point_mesgs: List[SegmentPointMesg] + segment_lap_mesgs: List[SegmentLapMesg] + segment_file_mesgs: List[SegmentFileMesg] + workout_mesgs: List[WorkoutMesg] + workout_session_mesgs: List[WorkoutSessionMesg] + workout_step_mesgs: List[WorkoutStepMesg] + exercise_title_mesgs: List[ExerciseTitleMesg] + schedule_mesgs: List[ScheduleMesg] + totals_mesgs: List[TotalsMesg] + weight_scale_mesgs: List[WeightScaleMesg] + blood_pressure_mesgs: List[BloodPressureMesg] + monitoring_info_mesgs: List[MonitoringInfoMesg] + monitoring_mesgs: List[MonitoringMesg] + monitoring_hr_data_mesgs: List[MonitoringHrDataMesg] + spo2_data_mesgs: List[Spo2DataMesg] + hr_mesgs: List[HrMesg] + stress_level_mesgs: List[StressLevelMesg] + max_met_data_mesgs: List[MaxMetDataMesg] + hsa_body_battery_data_mesgs: List[HsaBodyBatteryDataMesg] + hsa_event_mesgs: List[HsaEventMesg] + hsa_accelerometer_data_mesgs: List[HsaAccelerometerDataMesg] + hsa_gyroscope_data_mesgs: List[HsaGyroscopeDataMesg] + hsa_step_data_mesgs: List[HsaStepDataMesg] + hsa_spo2_data_mesgs: List[HsaSpo2DataMesg] + hsa_stress_data_mesgs: List[HsaStressDataMesg] + hsa_respiration_data_mesgs: List[HsaRespirationDataMesg] + hsa_heart_rate_data_mesgs: List[HsaHeartRateDataMesg] + hsa_configuration_data_mesgs: List[HsaConfigurationDataMesg] + hsa_wrist_temperature_data_mesgs: List[HsaWristTemperatureDataMesg] + memo_glob_mesgs: List[MemoGlobMesg] + sleep_level_mesgs: List[SleepLevelMesg] + ant_channel_id_mesgs: List[AntChannelIdMesg] + ant_rx_mesgs: List[AntRxMesg] + ant_tx_mesgs: List[AntTxMesg] + exd_screen_configuration_mesgs: List[ExdScreenConfigurationMesg] + exd_data_field_configuration_mesgs: List[ExdDataFieldConfigurationMesg] + exd_data_concept_configuration_mesgs: List[ExdDataConceptConfigurationMesg] + dive_summary_mesgs: List[DiveSummaryMesg] + aad_accel_features_mesgs: List[AadAccelFeaturesMesg] + hrv_mesgs: List[HrvMesg] + beat_intervals_mesgs: List[BeatIntervalsMesg] + hrv_status_summary_mesgs: List[HrvStatusSummaryMesg] + hrv_value_mesgs: List[HrvValueMesg] + raw_bbi_mesgs: List[RawBbiMesg] + respiration_rate_mesgs: List[RespirationRateMesg] + chrono_shot_session_mesgs: List[ChronoShotSessionMesg] + chrono_shot_data_mesgs: List[ChronoShotDataMesg] + tank_update_mesgs: List[TankUpdateMesg] + tank_summary_mesgs: List[TankSummaryMesg] + sleep_assessment_mesgs: List[SleepAssessmentMesg] + sleep_disruption_severity_period_mesgs: List[SleepDisruptionSeverityPeriodMesg] + sleep_disruption_overnight_severity_mesgs: List[SleepDisruptionOvernightSeverityMesg] + nap_event_mesgs: List[NapEventMesg] + skin_temp_overnight_mesgs: List[SkinTempOvernightMesg] + pad_mesgs: List[PadMesg] diff --git a/garmin_fit_sdk/output_stream.py b/garmin_fit_sdk/output_stream.py index 94c90b6..67b0251 100644 --- a/garmin_fit_sdk/output_stream.py +++ b/garmin_fit_sdk/output_stream.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/profile.py b/garmin_fit_sdk/profile.py index a4f66cf..7d8f753 100644 --- a/garmin_fit_sdk/profile.py +++ b/garmin_fit_sdk/profile.py @@ -5,15 +5,15 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ Profile = { 'version': { 'major': 21, - 'minor': 208, + 'minor': 212, 'patch': 0, 'type': "Release" }, @@ -4941,6 +4941,21 @@ 'is_accumulated': False, 'has_components': False, 'sub_fields': [{ + 'name': "total_reps", + 'type': "uint32", + 'array': "", + 'scale': [1], + 'offset': [0], + 'units': ["reps"], + 'bits': [], + 'components': [], + 'has_components': False, + 'map':[ + { 'num': 6, 'name': "sub_sport", 'raw_value': 20, 'value_name': "strength_training" }, + { 'num': 5, 'name': "sport", 'raw_value': 62, 'value_name': "hiit" }, + ], + }, + { 'name': "total_strides", 'type': "uint32", 'array': "", @@ -4972,6 +4987,21 @@ { 'num': 5, 'name': "sport", 'raw_value': 37, 'value_name': "stand_up_paddleboarding" }, ], }, + { + 'name': "total_pushes", # total number of pushes in a session + 'type': "uint32", + 'array': "", + 'scale': [1], + 'offset': [0], + 'units': ["pushes"], + 'bits': [], + 'components': [], + 'has_components': False, + 'map':[ + { 'num': 5, 'name': "sport", 'raw_value': 66, 'value_name': "wheelchair_push_run" }, + { 'num': 5, 'name': "sport", 'raw_value': 65, 'value_name': "wheelchair_push_walk" }, + ], + }, ] }, 11: { @@ -19840,6 +19870,21 @@ 'has_components': False, 'sub_fields': [] }, + 41: { + 'num': 41, # Wheelchair Pushes + 'name': "pushes", + 'type': "uint32", + 'base_type': "uint32", + 'array': "false", + 'scale': [1], + 'offset': [0], + 'units': "", + 'bits': [], + 'components': [], + 'is_accumulated': False, + 'has_components': False, + 'sub_fields': [] + }, }, }, 211: { @@ -24061,7 +24106,7 @@ 79: 'duathlon', # Multisport 80: 'brick', # Multisport 81: 'swim_run', # Multisport - 82: 'adventure_race', # Multisport + 82: 'adventure_race', # Multisport/Running 83: 'trucker_workout', # DEZL trucker workout training sport 84: 'pickleball', # Racket 85: 'padel', # Racket @@ -24642,6 +24687,7 @@ 348: 'huawei', 349: 'gotoes', 350: 'cadence_app', + 351: 'una_watch', 5759: 'actigraphcorp', }, 'garmin_product': { @@ -25088,6 +25134,7 @@ 4586: 'instinct3_amoled_45mm', 4587: 'instinct3_amoled_50mm', 4588: 'descent_g2', + 4595: 'fenix7_pro_solar_no_wifi', 4603: 'venu_x1', 4606: 'hrm_200', 4625: 'vivoactive6', @@ -25111,6 +25158,7 @@ 4916: 'fr70_2026', 4678: 'instinct_crossover_amoled', 4944: 'd2_air_x15', + 5019: 'cirqa_smart_band', 5056: 'd2_mach2_pro', 10007: 'sdm4', # SDM4 footpod 10014: 'edge_remote', @@ -25245,6 +25293,7 @@ 5: 'swimming', 6: 'walking', 8: 'sedentary', + 13: 'wheelchair_pushing', 254: 'all', # All is for goals only to include all sports. }, 'activity_subtype': { diff --git a/garmin_fit_sdk/profile.pyi b/garmin_fit_sdk/profile.pyi new file mode 100644 index 0000000..e51ae86 --- /dev/null +++ b/garmin_fit_sdk/profile.pyi @@ -0,0 +1,26 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from typing import Any, Dict + +class _ProfileVersion: + major: int + minor: int + patch: int + type: str + +class _ProfileCommonFields: + part_index: int + timestamp: int + message_index: int + +Profile: Dict[str, Any] diff --git a/garmin_fit_sdk/py.typed b/garmin_fit_sdk/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/garmin_fit_sdk/stream.py b/garmin_fit_sdk/stream.py index 4e6082d..fca1d06 100644 --- a/garmin_fit_sdk/stream.py +++ b/garmin_fit_sdk/stream.py @@ -11,8 +11,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/stream.pyi b/garmin_fit_sdk/stream.pyi new file mode 100644 index 0000000..470d14b --- /dev/null +++ b/garmin_fit_sdk/stream.pyi @@ -0,0 +1,49 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 9.0.7Garmin +# Tag = production/akw/10.00.07-398-g58c0d5b5-dirty +############################################################################################ + + +from enum import Enum +from io import BufferedReader, BytesIO +from typing import List, Optional, Union + +from .crc_calculator import CrcCalculator + +class Endianness(str, Enum): + LITTLE: str + BIG: str + +class Stream: + @staticmethod + def from_file(filename: str) -> "Stream": ... + @staticmethod + def from_byte_array(byte_array: bytearray, stream_length: Optional[int] = None) -> "Stream": ... + @staticmethod + def from_bytes_io(bytes_io: BytesIO, length: Optional[int] = None) -> "Stream": ... + @staticmethod + def from_buffered_reader(buffered_reader: BufferedReader, length: Optional[int] = None) -> "Stream": ... + def __init__(self, buffered_reader: BufferedReader, stream_length: int) -> None: ... + def close(self) -> None: ... + def get_buffered_reader(self) -> BufferedReader: ... + def peek_byte(self) -> int: ... + def peek_bytes(self, num_bytes: int) -> bytes: ... + def slice(self, start: int, end: int) -> bytes: ... + def seek(self, position: int) -> None: ... + def reset(self) -> None: ... + def position(self) -> int: ... + def get_length(self) -> int: ... + def read_byte(self) -> int: ... + def read_bytes(self, num_bytes: int) -> bytes: ... + def read_unint_16(self, endianness: Union[Endianness, str] = Endianness.LITTLE) -> int: ... + def read_unint_32(self, endianness: Union[Endianness, str] = Endianness.LITTLE) -> int: ... + def read_string(self, string_length: int) -> List[bytes]: ... + def read_and_unpack(self, size: int, struct_format_string: str) -> List[object]: ... + def get_crc_caclulator(self) -> Optional[CrcCalculator]: ... + def set_crc_calculator(self, crc_calculator: Optional[CrcCalculator]) -> None: ... \ No newline at end of file diff --git a/garmin_fit_sdk/types.pyi b/garmin_fit_sdk/types.pyi new file mode 100644 index 0000000..fc64ce1 --- /dev/null +++ b/garmin_fit_sdk/types.pyi @@ -0,0 +1,478 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from datetime import datetime +from typing import List, Union +try: + from typing import Literal +except ImportError: + from typing_extensions import Literal # type: ignore[assignment] + +FieldValue = Union[int, float, bool, str, list] +"""A FIT field value — a scalar or list of one of the primitive FIT base types.""" + +StringValue = Union[str, List[str]] +"""A decoded FIT string field — a single string, or a list of strings when the raw bytes contain multiple null-separated parts.""" + +Enum = int + +Sint8 = int + +Uint8 = int + +Sint16 = int + +Uint16 = int + +Sint32 = int + +Uint32 = int + +String = StringValue + +Float32 = float + +Float64 = float + +Uint8z = int + +Uint16z = int + +Uint32z = int + +Byte = int + +Sint64 = int + +Uint64 = int + +Uint64z = int + +Bool = bool + +File = Union[int, Literal["device"], Literal["settings"], Literal["sport"], Literal["activity"], Literal["workout"], Literal["course"], Literal["schedules"], Literal["weight"], Literal["totals"], Literal["goals"], Literal["bloodPressure"], Literal["monitoringA"], Literal["activitySummary"], Literal["monitoringDaily"], Literal["monitoringB"], Literal["segment"], Literal["segmentList"], Literal["exdConfiguration"], Literal["mfgRangeMin"], Literal["mfgRangeMax"]] + +MesgNum = Union[int, Literal["fileId"], Literal["capabilities"], Literal["deviceSettings"], Literal["userProfile"], Literal["hrmProfile"], Literal["sdmProfile"], Literal["bikeProfile"], Literal["zonesTarget"], Literal["hrZone"], Literal["powerZone"], Literal["metZone"], Literal["sport"], Literal["trainingSettings"], Literal["goal"], Literal["session"], Literal["lap"], Literal["record"], Literal["event"], Literal["deviceInfo"], Literal["workout"], Literal["workoutStep"], Literal["schedule"], Literal["weightScale"], Literal["course"], Literal["coursePoint"], Literal["totals"], Literal["activity"], Literal["software"], Literal["fileCapabilities"], Literal["mesgCapabilities"], Literal["fieldCapabilities"], Literal["fileCreator"], Literal["bloodPressure"], Literal["speedZone"], Literal["monitoring"], Literal["trainingFile"], Literal["hrv"], Literal["antRx"], Literal["antTx"], Literal["antChannelId"], Literal["length"], Literal["monitoringInfo"], Literal["pad"], Literal["slaveDevice"], Literal["connectivity"], Literal["weatherConditions"], Literal["weatherAlert"], Literal["cadenceZone"], Literal["hr"], Literal["segmentLap"], Literal["memoGlob"], Literal["segmentId"], Literal["segmentLeaderboardEntry"], Literal["segmentPoint"], Literal["segmentFile"], Literal["workoutSession"], Literal["watchfaceSettings"], Literal["gpsMetadata"], Literal["cameraEvent"], Literal["timestampCorrelation"], Literal["gyroscopeData"], Literal["accelerometerData"], Literal["threeDSensorCalibration"], Literal["videoFrame"], Literal["obdiiData"], Literal["nmeaSentence"], Literal["aviationAttitude"], Literal["video"], Literal["videoTitle"], Literal["videoDescription"], Literal["videoClip"], Literal["ohrSettings"], Literal["exdScreenConfiguration"], Literal["exdDataFieldConfiguration"], Literal["exdDataConceptConfiguration"], Literal["fieldDescription"], Literal["developerDataId"], Literal["magnetometerData"], Literal["barometerData"], Literal["oneDSensorCalibration"], Literal["monitoringHrData"], Literal["timeInZone"], Literal["set"], Literal["stressLevel"], Literal["maxMetData"], Literal["diveSettings"], Literal["diveGas"], Literal["diveAlarm"], Literal["exerciseTitle"], Literal["diveSummary"], Literal["spo2Data"], Literal["sleepLevel"], Literal["jump"], Literal["aadAccelFeatures"], Literal["beatIntervals"], Literal["respirationRate"], Literal["hsaAccelerometerData"], Literal["hsaStepData"], Literal["hsaSpo2Data"], Literal["hsaStressData"], Literal["hsaRespirationData"], Literal["hsaHeartRateData"], Literal["split"], Literal["splitSummary"], Literal["hsaBodyBatteryData"], Literal["hsaEvent"], Literal["climbPro"], Literal["tankUpdate"], Literal["tankSummary"], Literal["sleepAssessment"], Literal["hrvStatusSummary"], Literal["hrvValue"], Literal["rawBbi"], Literal["deviceAuxBatteryInfo"], Literal["hsaGyroscopeData"], Literal["chronoShotSession"], Literal["chronoShotData"], Literal["hsaConfigurationData"], Literal["diveApneaAlarm"], Literal["skinTempOvernight"], Literal["hsaWristTemperatureData"], Literal["napEvent"], Literal["sleepDisruptionSeverityPeriod"], Literal["sleepDisruptionOvernightSeverity"], Literal["mfgRangeMin"], Literal["mfgRangeMax"]] + +Checksum = Union[int, Literal["clear"], Literal["ok"]] + +FileFlags = Union[int, Literal["read"], Literal["write"], Literal["erase"]] + +MesgCount = Union[int, Literal["numPerFile"], Literal["maxPerFile"], Literal["maxPerFileType"]] + +# seconds since UTC 00:00 Dec 31 1989 +DateTime = Union[int, datetime, Literal["min"]] + +# seconds since 00:00 Dec 31 1989 in local time zone +LocalDateTime = Union[int, datetime, Literal["min"]] + +MessageIndex = Union[int, Literal["selected"], Literal["reserved"], Literal["mask"]] + +DeviceIndex = Union[int, Literal["creator"]] + +Gender = Union[int, Literal["female"], Literal["male"]] + +Language = Union[int, Literal["english"], Literal["french"], Literal["italian"], Literal["german"], Literal["spanish"], Literal["croatian"], Literal["czech"], Literal["danish"], Literal["dutch"], Literal["finnish"], Literal["greek"], Literal["hungarian"], Literal["norwegian"], Literal["polish"], Literal["portuguese"], Literal["slovakian"], Literal["slovenian"], Literal["swedish"], Literal["russian"], Literal["turkish"], Literal["latvian"], Literal["ukrainian"], Literal["arabic"], Literal["farsi"], Literal["bulgarian"], Literal["romanian"], Literal["chinese"], Literal["japanese"], Literal["korean"], Literal["taiwanese"], Literal["thai"], Literal["hebrew"], Literal["brazilianPortuguese"], Literal["indonesian"], Literal["malaysian"], Literal["vietnamese"], Literal["burmese"], Literal["mongolian"], Literal["custom"]] + +# Bit field corresponding to language enum type (1 << language). +LanguageBits0 = Union[int, Literal["english"], Literal["french"], Literal["italian"], Literal["german"], Literal["spanish"], Literal["croatian"], Literal["czech"], Literal["danish"]] + +LanguageBits1 = Union[int, Literal["dutch"], Literal["finnish"], Literal["greek"], Literal["hungarian"], Literal["norwegian"], Literal["polish"], Literal["portuguese"], Literal["slovakian"]] + +LanguageBits2 = Union[int, Literal["slovenian"], Literal["swedish"], Literal["russian"], Literal["turkish"], Literal["latvian"], Literal["ukrainian"], Literal["arabic"], Literal["farsi"]] + +LanguageBits3 = Union[int, Literal["bulgarian"], Literal["romanian"], Literal["chinese"], Literal["japanese"], Literal["korean"], Literal["taiwanese"], Literal["thai"], Literal["hebrew"]] + +LanguageBits4 = Union[int, Literal["brazilianPortuguese"], Literal["indonesian"], Literal["malaysian"], Literal["vietnamese"], Literal["burmese"], Literal["mongolian"]] + +TimeZone = Union[int, Literal["almaty"], Literal["bangkok"], Literal["bombay"], Literal["brasilia"], Literal["cairo"], Literal["capeVerdeIs"], Literal["darwin"], Literal["eniwetok"], Literal["fiji"], Literal["hongKong"], Literal["islamabad"], Literal["kabul"], Literal["magadan"], Literal["midAtlantic"], Literal["moscow"], Literal["muscat"], Literal["newfoundland"], Literal["samoa"], Literal["sydney"], Literal["tehran"], Literal["tokyo"], Literal["usAlaska"], Literal["usAtlantic"], Literal["usCentral"], Literal["usEastern"], Literal["usHawaii"], Literal["usMountain"], Literal["usPacific"], Literal["other"], Literal["auckland"], Literal["kathmandu"], Literal["europeWesternWet"], Literal["europeCentralCet"], Literal["europeEasternEet"], Literal["jakarta"], Literal["perth"], Literal["adelaide"], Literal["brisbane"], Literal["tasmania"], Literal["iceland"], Literal["amsterdam"], Literal["athens"], Literal["barcelona"], Literal["berlin"], Literal["brussels"], Literal["budapest"], Literal["copenhagen"], Literal["dublin"], Literal["helsinki"], Literal["lisbon"], Literal["london"], Literal["madrid"], Literal["munich"], Literal["oslo"], Literal["paris"], Literal["prague"], Literal["reykjavik"], Literal["rome"], Literal["stockholm"], Literal["vienna"], Literal["warsaw"], Literal["zurich"], Literal["quebec"], Literal["ontario"], Literal["manitoba"], Literal["saskatchewan"], Literal["alberta"], Literal["britishColumbia"], Literal["boise"], Literal["boston"], Literal["chicago"], Literal["dallas"], Literal["denver"], Literal["kansasCity"], Literal["lasVegas"], Literal["losAngeles"], Literal["miami"], Literal["minneapolis"], Literal["newYork"], Literal["newOrleans"], Literal["phoenix"], Literal["santaFe"], Literal["seattle"], Literal["washingtonDc"], Literal["usArizona"], Literal["chita"], Literal["ekaterinburg"], Literal["irkutsk"], Literal["kaliningrad"], Literal["krasnoyarsk"], Literal["novosibirsk"], Literal["petropavlovskKamchatskiy"], Literal["samara"], Literal["vladivostok"], Literal["mexicoCentral"], Literal["mexicoMountain"], Literal["mexicoPacific"], Literal["capeTown"], Literal["winkhoek"], Literal["lagos"], Literal["riyahd"], Literal["venezuela"], Literal["australiaLh"], Literal["santiago"], Literal["manual"], Literal["automatic"]] + +DisplayMeasure = Union[int, Literal["metric"], Literal["statute"], Literal["nautical"]] + +DisplayHeart = Union[int, Literal["bpm"], Literal["max"], Literal["reserve"]] + +DisplayPower = Union[int, Literal["watts"], Literal["percentFtp"]] + +DisplayPosition = Union[int, Literal["degree"], Literal["degreeMinute"], Literal["degreeMinuteSecond"], Literal["austrianGrid"], Literal["britishGrid"], Literal["dutchGrid"], Literal["hungarianGrid"], Literal["finnishGrid"], Literal["germanGrid"], Literal["icelandicGrid"], Literal["indonesianEquatorial"], Literal["indonesianIrian"], Literal["indonesianSouthern"], Literal["indiaZone0"], Literal["indiaZoneIA"], Literal["indiaZoneIB"], Literal["indiaZoneIIA"], Literal["indiaZoneIIB"], Literal["indiaZoneIIIA"], Literal["indiaZoneIIIB"], Literal["indiaZoneIVA"], Literal["indiaZoneIVB"], Literal["irishTransverse"], Literal["irishGrid"], Literal["loran"], Literal["maidenheadGrid"], Literal["mgrsGrid"], Literal["newZealandGrid"], Literal["newZealandTransverse"], Literal["qatarGrid"], Literal["modifiedSwedishGrid"], Literal["swedishGrid"], Literal["southAfricanGrid"], Literal["swissGrid"], Literal["taiwanGrid"], Literal["unitedStatesGrid"], Literal["utmUpsGrid"], Literal["westMalayan"], Literal["borneoRso"], Literal["estonianGrid"], Literal["latvianGrid"], Literal["swedishRef99Grid"]] + +Switch = Union[int, Literal["off"], Literal["on"], Literal["auto"]] + +Sport = Union[int, Literal["generic"], Literal["running"], Literal["cycling"], Literal["transition"], Literal["fitnessEquipment"], Literal["swimming"], Literal["basketball"], Literal["soccer"], Literal["tennis"], Literal["americanFootball"], Literal["training"], Literal["walking"], Literal["crossCountrySkiing"], Literal["alpineSkiing"], Literal["snowboarding"], Literal["rowing"], Literal["mountaineering"], Literal["hiking"], Literal["multisport"], Literal["paddling"], Literal["flying"], Literal["eBiking"], Literal["motorcycling"], Literal["boating"], Literal["driving"], Literal["golf"], Literal["hangGliding"], Literal["horsebackRiding"], Literal["hunting"], Literal["fishing"], Literal["inlineSkating"], Literal["rockClimbing"], Literal["sailing"], Literal["iceSkating"], Literal["skyDiving"], Literal["snowshoeing"], Literal["snowmobiling"], Literal["standUpPaddleboarding"], Literal["surfing"], Literal["wakeboarding"], Literal["waterSkiing"], Literal["kayaking"], Literal["rafting"], Literal["windsurfing"], Literal["kitesurfing"], Literal["tactical"], Literal["jumpmaster"], Literal["boxing"], Literal["floorClimbing"], Literal["baseball"], Literal["diving"], Literal["shooting"], Literal["winterSport"], Literal["grinding"], Literal["hiit"], Literal["videoGaming"], Literal["racket"], Literal["wheelchairPushWalk"], Literal["wheelchairPushRun"], Literal["meditation"], Literal["paraSport"], Literal["discGolf"], Literal["teamSport"], Literal["cricket"], Literal["rugby"], Literal["hockey"], Literal["lacrosse"], Literal["volleyball"], Literal["waterTubing"], Literal["wakesurfing"], Literal["waterSport"], Literal["archery"], Literal["mixedMartialArts"], Literal["motorSports"], Literal["snorkeling"], Literal["dance"], Literal["jumpRope"], Literal["poolApnea"], Literal["mobility"], Literal["geocaching"], Literal["canoeing"], Literal["all"]] + +# Bit field corresponding to sport enum type (1 << sport). +SportBits0 = Union[int, Literal["generic"], Literal["running"], Literal["cycling"], Literal["transition"], Literal["fitnessEquipment"], Literal["swimming"], Literal["basketball"], Literal["soccer"]] + +# Bit field corresponding to sport enum type (1 << (sport-8)). +SportBits1 = Union[int, Literal["tennis"], Literal["americanFootball"], Literal["training"], Literal["walking"], Literal["crossCountrySkiing"], Literal["alpineSkiing"], Literal["snowboarding"], Literal["rowing"]] + +# Bit field corresponding to sport enum type (1 << (sport-16)). +SportBits2 = Union[int, Literal["mountaineering"], Literal["hiking"], Literal["multisport"], Literal["paddling"], Literal["flying"], Literal["eBiking"], Literal["motorcycling"], Literal["boating"]] + +# Bit field corresponding to sport enum type (1 << (sport-24)). +SportBits3 = Union[int, Literal["driving"], Literal["golf"], Literal["hangGliding"], Literal["horsebackRiding"], Literal["hunting"], Literal["fishing"], Literal["inlineSkating"], Literal["rockClimbing"]] + +# Bit field corresponding to sport enum type (1 << (sport-32)). +SportBits4 = Union[int, Literal["sailing"], Literal["iceSkating"], Literal["skyDiving"], Literal["snowshoeing"], Literal["snowmobiling"], Literal["standUpPaddleboarding"], Literal["surfing"], Literal["wakeboarding"]] + +# Bit field corresponding to sport enum type (1 << (sport-40)). +SportBits5 = Union[int, Literal["waterSkiing"], Literal["kayaking"], Literal["rafting"], Literal["windsurfing"], Literal["kitesurfing"], Literal["tactical"], Literal["jumpmaster"], Literal["boxing"]] + +# Bit field corresponding to sport enum type (1 << (sport-48)). +SportBits6 = Union[int, Literal["floorClimbing"]] + +SubSport = Union[int, Literal["generic"], Literal["treadmill"], Literal["street"], Literal["trail"], Literal["track"], Literal["spin"], Literal["indoorCycling"], Literal["road"], Literal["mountain"], Literal["downhill"], Literal["recumbent"], Literal["cyclocross"], Literal["handCycling"], Literal["trackCycling"], Literal["indoorRowing"], Literal["elliptical"], Literal["stairClimbing"], Literal["lapSwimming"], Literal["openWater"], Literal["flexibilityTraining"], Literal["strengthTraining"], Literal["warmUp"], Literal["match"], Literal["exercise"], Literal["challenge"], Literal["indoorSkiing"], Literal["cardioTraining"], Literal["indoorWalking"], Literal["eBikeFitness"], Literal["bmx"], Literal["casualWalking"], Literal["speedWalking"], Literal["bikeToRunTransition"], Literal["runToBikeTransition"], Literal["swimToBikeTransition"], Literal["atv"], Literal["motocross"], Literal["backcountry"], Literal["resort"], Literal["rcDrone"], Literal["wingsuit"], Literal["whitewater"], Literal["skateSkiing"], Literal["yoga"], Literal["pilates"], Literal["indoorRunning"], Literal["gravelCycling"], Literal["eBikeMountain"], Literal["commuting"], Literal["mixedSurface"], Literal["navigate"], Literal["trackMe"], Literal["map"], Literal["singleGasDiving"], Literal["multiGasDiving"], Literal["gaugeDiving"], Literal["apneaDiving"], Literal["apneaHunting"], Literal["virtualActivity"], Literal["obstacle"], Literal["breathing"], Literal["ccrDiving"], Literal["sailRace"], Literal["expedition"], Literal["ultra"], Literal["indoorClimbing"], Literal["bouldering"], Literal["hiit"], Literal["indoorGrinding"], Literal["huntingWithDogs"], Literal["amrap"], Literal["emom"], Literal["tabata"], Literal["esport"], Literal["triathlon"], Literal["duathlon"], Literal["brick"], Literal["swimRun"], Literal["adventureRace"], Literal["truckerWorkout"], Literal["pickleball"], Literal["padel"], Literal["indoorWheelchairWalk"], Literal["indoorWheelchairRun"], Literal["indoorHandCycling"], Literal["field"], Literal["ice"], Literal["ultimate"], Literal["platform"], Literal["squash"], Literal["badminton"], Literal["racquetball"], Literal["tableTennis"], Literal["overland"], Literal["trollingMotor"], Literal["flyCanopy"], Literal["flyParaglide"], Literal["flyParamotor"], Literal["flyPressurized"], Literal["flyNavigate"], Literal["flyTimer"], Literal["flyAltimeter"], Literal["flyWx"], Literal["flyVfr"], Literal["flyIfr"], Literal["dynamicApnea"], Literal["enduro"], Literal["rucking"], Literal["rally"], Literal["poolTriathlon"], Literal["eBikeEnduro"], Literal["all"]] + +SportEvent = Union[int, Literal["uncategorized"], Literal["geocaching"], Literal["fitness"], Literal["recreation"], Literal["race"], Literal["specialEvent"], Literal["training"], Literal["transportation"], Literal["touring"]] + +Activity = Union[int, Literal["manual"], Literal["autoMultiSport"]] + +Intensity = Union[int, Literal["active"], Literal["rest"], Literal["warmup"], Literal["cooldown"], Literal["recovery"], Literal["interval"], Literal["other"]] + +SessionTrigger = Union[int, Literal["activityEnd"], Literal["manual"], Literal["autoMultiSport"], Literal["fitnessEquipment"]] + +AutolapTrigger = Union[int, Literal["time"], Literal["distance"], Literal["positionStart"], Literal["positionLap"], Literal["positionWaypoint"], Literal["positionMarked"], Literal["off"], Literal["autoSelect"]] + +LapTrigger = Union[int, Literal["manual"], Literal["time"], Literal["distance"], Literal["positionStart"], Literal["positionLap"], Literal["positionWaypoint"], Literal["positionMarked"], Literal["sessionEnd"], Literal["fitnessEquipment"]] + +TimeMode = Union[int, Literal["hour12"], Literal["hour24"], Literal["military"], Literal["hour12WithSeconds"], Literal["hour24WithSeconds"], Literal["utc"]] + +BacklightMode = Union[int, Literal["off"], Literal["manual"], Literal["keyAndMessages"], Literal["autoBrightness"], Literal["smartNotifications"], Literal["keyAndMessagesNight"], Literal["keyAndMessagesAndSmartNotifications"]] + +DateMode = Union[int, Literal["dayMonth"], Literal["monthDay"]] + +# Timeout in seconds. +BacklightTimeout = Union[int, Literal["infinite"]] + +Event = Union[int, Literal["timer"], Literal["workout"], Literal["workoutStep"], Literal["powerDown"], Literal["powerUp"], Literal["offCourse"], Literal["session"], Literal["lap"], Literal["coursePoint"], Literal["battery"], Literal["virtualPartnerPace"], Literal["hrHighAlert"], Literal["hrLowAlert"], Literal["speedHighAlert"], Literal["speedLowAlert"], Literal["cadHighAlert"], Literal["cadLowAlert"], Literal["powerHighAlert"], Literal["powerLowAlert"], Literal["recoveryHr"], Literal["batteryLow"], Literal["timeDurationAlert"], Literal["distanceDurationAlert"], Literal["calorieDurationAlert"], Literal["activity"], Literal["fitnessEquipment"], Literal["length"], Literal["userMarker"], Literal["sportPoint"], Literal["calibration"], Literal["frontGearChange"], Literal["rearGearChange"], Literal["riderPositionChange"], Literal["elevHighAlert"], Literal["elevLowAlert"], Literal["commTimeout"], Literal["autoActivityDetect"], Literal["diveAlert"], Literal["diveGasSwitched"], Literal["tankPressureReserve"], Literal["tankPressureCritical"], Literal["tankLost"], Literal["radarThreatAlert"], Literal["tankBatteryLow"], Literal["tankPodConnected"], Literal["tankPodDisconnected"]] + +EventType = Union[int, Literal["start"], Literal["stop"], Literal["consecutiveDepreciated"], Literal["marker"], Literal["stopAll"], Literal["beginDepreciated"], Literal["endDepreciated"], Literal["endAllDepreciated"], Literal["stopDisable"], Literal["stopDisableAll"]] + +# timer event data +TimerTrigger = Union[int, Literal["manual"], Literal["auto"], Literal["fitnessEquipment"]] + +# fitness equipment event data +FitnessEquipmentState = Union[int, Literal["ready"], Literal["inUse"], Literal["paused"], Literal["unknown"]] + +Tone = Union[int, Literal["off"], Literal["tone"], Literal["vibrate"], Literal["toneAndVibrate"]] + +Autoscroll = Union[int, Literal["none"], Literal["slow"], Literal["medium"], Literal["fast"]] + +ActivityClass = Union[int, Literal["level"], Literal["levelMax"], Literal["athlete"]] + +HrZoneCalc = Union[int, Literal["custom"], Literal["percentMaxHr"], Literal["percentHrr"], Literal["percentLthr"]] + +PwrZoneCalc = Union[int, Literal["custom"], Literal["percentFtp"]] + +WktStepDuration = Union[int, Literal["time"], Literal["distance"], Literal["hrLessThan"], Literal["hrGreaterThan"], Literal["calories"], Literal["open"], Literal["repeatUntilStepsCmplt"], Literal["repeatUntilTime"], Literal["repeatUntilDistance"], Literal["repeatUntilCalories"], Literal["repeatUntilHrLessThan"], Literal["repeatUntilHrGreaterThan"], Literal["repeatUntilPowerLessThan"], Literal["repeatUntilPowerGreaterThan"], Literal["powerLessThan"], Literal["powerGreaterThan"], Literal["trainingPeaksTss"], Literal["repeatUntilPowerLastLapLessThan"], Literal["repeatUntilMaxPowerLastLapLessThan"], Literal["power3sLessThan"], Literal["power10sLessThan"], Literal["power30sLessThan"], Literal["power3sGreaterThan"], Literal["power10sGreaterThan"], Literal["power30sGreaterThan"], Literal["powerLapLessThan"], Literal["powerLapGreaterThan"], Literal["repeatUntilTrainingPeaksTss"], Literal["repetitionTime"], Literal["reps"], Literal["timeOnly"]] + +WktStepTarget = Union[int, Literal["speed"], Literal["heartRate"], Literal["open"], Literal["cadence"], Literal["power"], Literal["grade"], Literal["resistance"], Literal["power3s"], Literal["power10s"], Literal["power30s"], Literal["powerLap"], Literal["swimStroke"], Literal["speedLap"], Literal["heartRateLap"]] + +Goal = Union[int, Literal["time"], Literal["distance"], Literal["calories"], Literal["frequency"], Literal["steps"], Literal["ascent"], Literal["activeMinutes"]] + +GoalRecurrence = Union[int, Literal["off"], Literal["daily"], Literal["weekly"], Literal["monthly"], Literal["yearly"], Literal["custom"]] + +GoalSource = Union[int, Literal["auto"], Literal["community"], Literal["user"]] + +Schedule = Union[int, Literal["workout"], Literal["course"]] + +CoursePoint = Union[int, Literal["generic"], Literal["summit"], Literal["valley"], Literal["water"], Literal["food"], Literal["danger"], Literal["left"], Literal["right"], Literal["straight"], Literal["firstAid"], Literal["fourthCategory"], Literal["thirdCategory"], Literal["secondCategory"], Literal["firstCategory"], Literal["horsCategory"], Literal["sprint"], Literal["leftFork"], Literal["rightFork"], Literal["middleFork"], Literal["slightLeft"], Literal["sharpLeft"], Literal["slightRight"], Literal["sharpRight"], Literal["uTurn"], Literal["segmentStart"], Literal["segmentEnd"], Literal["campsite"], Literal["aidStation"], Literal["restArea"], Literal["generalDistance"], Literal["service"], Literal["energyGel"], Literal["sportsDrink"], Literal["mileMarker"], Literal["checkpoint"], Literal["shelter"], Literal["meetingSpot"], Literal["overlook"], Literal["toilet"], Literal["shower"], Literal["gear"], Literal["sharpCurve"], Literal["steepIncline"], Literal["tunnel"], Literal["bridge"], Literal["obstacle"], Literal["crossing"], Literal["store"], Literal["transition"], Literal["navaid"], Literal["transport"], Literal["alert"], Literal["info"]] + +Manufacturer = Union[int, Literal["garmin"], Literal["garminFr405Antfs"], Literal["zephyr"], Literal["dayton"], Literal["idt"], Literal["srm"], Literal["quarq"], Literal["ibike"], Literal["saris"], Literal["sparkHk"], Literal["tanita"], Literal["echowell"], Literal["dynastreamOem"], Literal["nautilus"], Literal["dynastream"], Literal["timex"], Literal["metrigear"], Literal["xelic"], Literal["beurer"], Literal["cardiosport"], Literal["aAndD"], Literal["hmm"], Literal["suunto"], Literal["thitaElektronik"], Literal["gpulse"], Literal["cleanMobile"], Literal["pedalBrain"], Literal["peaksware"], Literal["saxonar"], Literal["lemondFitness"], Literal["dexcom"], Literal["wahooFitness"], Literal["octaneFitness"], Literal["archinoetics"], Literal["theHurtBox"], Literal["citizenSystems"], Literal["magellan"], Literal["osynce"], Literal["holux"], Literal["concept2"], Literal["shimano"], Literal["oneGiantLeap"], Literal["aceSensor"], Literal["brimBrothers"], Literal["xplova"], Literal["perceptionDigital"], Literal["bf1systems"], Literal["pioneer"], Literal["spantec"], Literal["metalogics"], Literal["4iiiis"], Literal["seikoEpson"], Literal["seikoEpsonOem"], Literal["iforPowell"], Literal["maxwellGuider"], Literal["starTrac"], Literal["breakaway"], Literal["alatechTechnologyLtd"], Literal["mioTechnologyEurope"], Literal["rotor"], Literal["geonaute"], Literal["idBike"], Literal["specialized"], Literal["wtek"], Literal["physicalEnterprises"], Literal["northPoleEngineering"], Literal["bkool"], Literal["cateye"], Literal["stagesCycling"], Literal["sigmasport"], Literal["tomtom"], Literal["peripedal"], Literal["wattbike"], Literal["moxy"], Literal["ciclosport"], Literal["powerbahn"], Literal["acornProjectsAps"], Literal["lifebeam"], Literal["bontrager"], Literal["wellgo"], Literal["scosche"], Literal["magura"], Literal["woodway"], Literal["elite"], Literal["nielsenKellerman"], Literal["dkCity"], Literal["tacx"], Literal["directionTechnology"], Literal["magtonic"], Literal["1partcarbon"], Literal["insideRideTechnologies"], Literal["soundOfMotion"], Literal["stryd"], Literal["icg"], Literal["miPulse"], Literal["bsxAthletics"], Literal["look"], Literal["campagnoloSrl"], Literal["bodyBikeSmart"], Literal["praxisworks"], Literal["limitsTechnology"], Literal["topactionTechnology"], Literal["cosinuss"], Literal["fitcare"], Literal["magene"], Literal["giantManufacturingCo"], Literal["tigrasport"], Literal["salutron"], Literal["technogym"], Literal["brytonSensors"], Literal["latitudeLimited"], Literal["soaringTechnology"], Literal["igpsport"], Literal["thinkrider"], Literal["gopherSport"], Literal["waterrower"], Literal["orangetheory"], Literal["inpeak"], Literal["kinetic"], Literal["johnsonHealthTech"], Literal["polarElectro"], Literal["seesense"], Literal["nciTechnology"], Literal["iqsquare"], Literal["leomo"], Literal["ifitCom"], Literal["corosByte"], Literal["versaDesign"], Literal["chileaf"], Literal["cycplus"], Literal["gravaaByte"], Literal["sigeyi"], Literal["coospo"], Literal["geoid"], Literal["bosch"], Literal["kyto"], Literal["kineticSports"], Literal["decathlonByte"], Literal["tqSystems"], Literal["tagHeuer"], Literal["keiserFitness"], Literal["zwiftByte"], Literal["porscheEp"], Literal["blackbird"], Literal["meilanByte"], Literal["ezon"], Literal["laisi"], Literal["myzone"], Literal["abawo"], Literal["bafang"], Literal["luhongTechnology"], Literal["development"], Literal["healthandlife"], Literal["lezyne"], Literal["scribeLabs"], Literal["zwift"], Literal["watteam"], Literal["recon"], Literal["faveroElectronics"], Literal["dynovelo"], Literal["strava"], Literal["precor"], Literal["bryton"], Literal["sram"], Literal["navman"], Literal["cobi"], Literal["spivi"], Literal["mioMagellan"], Literal["evesports"], Literal["sensitivusGauge"], Literal["podoon"], Literal["lifeTimeFitness"], Literal["falcoEMotors"], Literal["minoura"], Literal["cycliq"], Literal["luxottica"], Literal["trainerRoad"], Literal["theSufferfest"], Literal["fullspeedahead"], Literal["virtualtraining"], Literal["feedbacksports"], Literal["omata"], Literal["vdo"], Literal["magneticdays"], Literal["hammerhead"], Literal["kineticByKurt"], Literal["shapelog"], Literal["dabuziduo"], Literal["jetblack"], Literal["coros"], Literal["virtugo"], Literal["velosense"], Literal["cycligentinc"], Literal["trailforks"], Literal["mahleEbikemotion"], Literal["nurvv"], Literal["microprogram"], Literal["zone5cloud"], Literal["greenteg"], Literal["yamahaMotors"], Literal["whoop"], Literal["gravaa"], Literal["onelap"], Literal["monarkExercise"], Literal["form"], Literal["decathlon"], Literal["syncros"], Literal["heatup"], Literal["cannondale"], Literal["trueFitness"], Literal["rGTCycling"], Literal["vasa"], Literal["raceRepublic"], Literal["fazua"], Literal["orekaTraining"], Literal["lsec"], Literal["lululemonStudio"], Literal["shanyue"], Literal["spinningMda"], Literal["hilldating"], Literal["aeroSensor"], Literal["nike"], Literal["magicshine"], Literal["ictrainer"], Literal["absoluteCycling"], Literal["eoSwimbetter"], Literal["mywhoosh"], Literal["ravemen"], Literal["tektroRacingProducts"], Literal["daradInnovationCorporation"], Literal["cycloptim"], Literal["runna"], Literal["zepp"], Literal["peloton"], Literal["carv"], Literal["tissot"], Literal["realVelo"], Literal["wetech"], Literal["jespr"], Literal["huawei"], Literal["gotoes"], Literal["cadenceApp"], Literal["unaWatch"], Literal["actigraphcorp"]] + +GarminProduct = Union[int, Literal["hrm1"], Literal["axh01"], Literal["axb01"], Literal["axb02"], Literal["hrm2ss"], Literal["dsiAlf02"], Literal["hrm3ss"], Literal["hrmRunSingleByteProductId"], Literal["bsm"], Literal["bcm"], Literal["axs01"], Literal["hrmTriSingleByteProductId"], Literal["hrm4RunSingleByteProductId"], Literal["fr225SingleByteProductId"], Literal["gen3BsmSingleByteProductId"], Literal["gen3BcmSingleByteProductId"], Literal["hrmFitSingleByteProductId"], Literal["oHR"], Literal["fr301China"], Literal["fr301Japan"], Literal["fr301Korea"], Literal["fr301Taiwan"], Literal["fr405"], Literal["fr50"], Literal["fr405Japan"], Literal["fr60"], Literal["dsiAlf01"], Literal["fr310xt"], Literal["edge500"], Literal["fr110"], Literal["edge800"], Literal["edge500Taiwan"], Literal["edge500Japan"], Literal["chirp"], Literal["fr110Japan"], Literal["edge200"], Literal["fr910xt"], Literal["edge800Taiwan"], Literal["edge800Japan"], Literal["alf04"], Literal["fr610"], Literal["fr210Japan"], Literal["vectorSs"], Literal["vectorCp"], Literal["edge800China"], Literal["edge500China"], Literal["approachG10"], Literal["fr610Japan"], Literal["edge500Korea"], Literal["fr70"], Literal["fr310xt4t"], Literal["amx"], Literal["fr10"], Literal["edge800Korea"], Literal["swim"], Literal["fr910xtChina"], Literal["fenix"], Literal["edge200Taiwan"], Literal["edge510"], Literal["edge810"], Literal["tempe"], Literal["fr910xtJapan"], Literal["fr620"], Literal["fr220"], Literal["fr910xtKorea"], Literal["fr10Japan"], Literal["edge810Japan"], Literal["virbElite"], Literal["edgeTouring"], Literal["edge510Japan"], Literal["hrmTri"], Literal["hrmRun"], Literal["fr920xt"], Literal["edge510Asia"], Literal["edge810China"], Literal["edge810Taiwan"], Literal["edge1000"], Literal["vivoFit"], Literal["virbRemote"], Literal["vivoKi"], Literal["fr15"], Literal["vivoActive"], Literal["edge510Korea"], Literal["fr620Japan"], Literal["fr620China"], Literal["fr220Japan"], Literal["fr220China"], Literal["approachS6"], Literal["vivoSmart"], Literal["fenix2"], Literal["epix"], Literal["fenix3"], Literal["edge1000Taiwan"], Literal["edge1000Japan"], Literal["fr15Japan"], Literal["edge520"], Literal["edge1000China"], Literal["fr620Russia"], Literal["fr220Russia"], Literal["vectorS"], Literal["edge1000Korea"], Literal["fr920xtTaiwan"], Literal["fr920xtChina"], Literal["fr920xtJapan"], Literal["virbx"], Literal["vivoSmartApac"], Literal["etrexTouch"], Literal["edge25"], Literal["fr25"], Literal["vivoFit2"], Literal["fr225"], Literal["fr630"], Literal["fr230"], Literal["fr735xt"], Literal["vivoActiveApac"], Literal["vector2"], Literal["vector2s"], Literal["virbxe"], Literal["fr620Taiwan"], Literal["fr220Taiwan"], Literal["truswing"], Literal["d2airvenu"], Literal["fenix3China"], Literal["fenix3Twn"], Literal["variaHeadlight"], Literal["variaTaillightOld"], Literal["edgeExplore1000"], Literal["fr225Asia"], Literal["variaRadarTaillight"], Literal["variaRadarDisplay"], Literal["edge20"], Literal["edge520Asia"], Literal["edge520Japan"], Literal["d2Bravo"], Literal["approachS20"], Literal["vivoSmart2"], Literal["edge1000Thai"], Literal["variaRemote"], Literal["edge25Asia"], Literal["edge25Jpn"], Literal["edge20Asia"], Literal["approachX40"], Literal["fenix3Japan"], Literal["vivoSmartEmea"], Literal["fr630Asia"], Literal["fr630Jpn"], Literal["fr230Jpn"], Literal["hrm4Run"], Literal["epixJapan"], Literal["vivoActiveHr"], Literal["vivoSmartGpsHr"], Literal["vivoSmartHr"], Literal["vivoSmartHrAsia"], Literal["vivoSmartGpsHrAsia"], Literal["vivoMove"], Literal["variaTaillight"], Literal["fr235Asia"], Literal["fr235Japan"], Literal["variaVision"], Literal["vivoFit3"], Literal["fenix3Korea"], Literal["fenix3Sea"], Literal["fenix3Hr"], Literal["virbUltra30"], Literal["indexSmartScale"], Literal["fr235"], Literal["fenix3Chronos"], Literal["oregon7xx"], Literal["rino7xx"], Literal["epixKorea"], Literal["fenix3HrChn"], Literal["fenix3HrTwn"], Literal["fenix3HrJpn"], Literal["fenix3HrSea"], Literal["fenix3HrKor"], Literal["nautix"], Literal["vivoActiveHrApac"], Literal["fr35"], Literal["oregon7xxWw"], Literal["edge820"], Literal["edgeExplore820"], Literal["fr735xtApac"], Literal["fr735xtJapan"], Literal["fenix5s"], Literal["d2BravoTitanium"], Literal["variaUt800"], Literal["runningDynamicsPod"], Literal["edge820China"], Literal["edge820Japan"], Literal["fenix5x"], Literal["vivoFitJr"], Literal["vivoSmart3"], Literal["vivoSport"], Literal["edge820Taiwan"], Literal["edge820Korea"], Literal["edge820Sea"], Literal["fr35Hebrew"], Literal["approachS60"], Literal["fr35Apac"], Literal["fr35Japan"], Literal["fenix3ChronosAsia"], Literal["virb360"], Literal["fr935"], Literal["fenix5"], Literal["vivoactive3"], Literal["fr235ChinaNfc"], Literal["foretrex601_701"], Literal["vivoMoveHr"], Literal["edge1030"], Literal["fr35Sea"], Literal["vector3"], Literal["fenix5Asia"], Literal["fenix5sAsia"], Literal["fenix5xAsia"], Literal["approachZ80"], Literal["fr35Korea"], Literal["d2charlie"], Literal["vivoSmart3Apac"], Literal["vivoSportApac"], Literal["fr935Asia"], Literal["descent"], Literal["vivoFit4"], Literal["fr645"], Literal["fr645m"], Literal["fr30"], Literal["fenix5sPlus"], Literal["edge130"], Literal["edge1030Asia"], Literal["vivosmart4"], Literal["vivoMoveHrAsia"], Literal["approachX10"], Literal["fr30Asia"], Literal["vivoactive3mW"], Literal["fr645Asia"], Literal["fr645mAsia"], Literal["edgeExplore"], Literal["gpsmap66"], Literal["approachS10"], Literal["vivoactive3mL"], Literal["fr245"], Literal["fr245Music"], Literal["approachG80"], Literal["edge130Asia"], Literal["edge1030Bontrager"], Literal["fenix5Plus"], Literal["fenix5xPlus"], Literal["edge520Plus"], Literal["fr945"], Literal["edge530"], Literal["edge830"], Literal["instinctEsports"], Literal["fenix5sPlusApac"], Literal["fenix5xPlusApac"], Literal["edge520PlusApac"], Literal["descentT1"], Literal["fr235lAsia"], Literal["fr245Asia"], Literal["vivoActive3mApac"], Literal["gen3Bsm"], Literal["gen3Bcm"], Literal["vivoSmart4Asia"], Literal["vivoactive4Small"], Literal["vivoactive4Large"], Literal["venu"], Literal["marqDriver"], Literal["marqAviator"], Literal["marqCaptain"], Literal["marqCommander"], Literal["marqExpedition"], Literal["marqAthlete"], Literal["descentMk2"], Literal["fr45"], Literal["gpsmap66i"], Literal["fenix6SSport"], Literal["fenix6S"], Literal["fenix6Sport"], Literal["fenix6"], Literal["fenix6x"], Literal["hrmDual"], Literal["hrmPro"], Literal["vivoMove3Premium"], Literal["approachS40"], Literal["fr245mAsia"], Literal["edge530Apac"], Literal["edge830Apac"], Literal["vivoMove3"], Literal["vivoActive4SmallAsia"], Literal["vivoActive4LargeAsia"], Literal["vivoActive4OledAsia"], Literal["swim2"], Literal["marqDriverAsia"], Literal["marqAviatorAsia"], Literal["vivoMove3Asia"], Literal["fr945Asia"], Literal["vivoActive3tChn"], Literal["marqCaptainAsia"], Literal["marqCommanderAsia"], Literal["marqExpeditionAsia"], Literal["marqAthleteAsia"], Literal["indexSmartScale2"], Literal["instinctSolar"], Literal["fr45Asia"], Literal["vivoactive3Daimler"], Literal["legacyRey"], Literal["legacyDarthVader"], Literal["legacyCaptainMarvel"], Literal["legacyFirstAvenger"], Literal["fenix6sSportAsia"], Literal["fenix6sAsia"], Literal["fenix6SportAsia"], Literal["fenix6Asia"], Literal["fenix6xAsia"], Literal["legacyCaptainMarvelAsia"], Literal["legacyFirstAvengerAsia"], Literal["legacyReyAsia"], Literal["legacyDarthVaderAsia"], Literal["descentMk2s"], Literal["edge130Plus"], Literal["edge1030Plus"], Literal["rally200"], Literal["fr745"], Literal["venusqMusic"], Literal["venusqMusicV2"], Literal["venusq"], Literal["lily"], Literal["marqAdventurer"], Literal["enduro"], Literal["swim2Apac"], Literal["marqAdventurerAsia"], Literal["fr945Lte"], Literal["descentMk2Asia"], Literal["venu2"], Literal["venu2s"], Literal["venuDaimlerAsia"], Literal["marqGolfer"], Literal["venuDaimler"], Literal["fr745Asia"], Literal["variaRct715"], Literal["lilyAsia"], Literal["edge1030PlusAsia"], Literal["edge130PlusAsia"], Literal["approachS12"], Literal["enduroAsia"], Literal["venusqAsia"], Literal["edge1040"], Literal["marqGolferAsia"], Literal["venu2Plus"], Literal["gnss"], Literal["fr55"], Literal["instinct2"], Literal["instinct2s"], Literal["fenix7s"], Literal["fenix7"], Literal["fenix7x"], Literal["fenix7sApac"], Literal["fenix7Apac"], Literal["fenix7xApac"], Literal["approachG12"], Literal["descentMk2sAsia"], Literal["approachS42"], Literal["epixGen2"], Literal["epixGen2Apac"], Literal["venu2sAsia"], Literal["venu2Asia"], Literal["fr945LteAsia"], Literal["vivoMoveSport"], Literal["vivomoveTrend"], Literal["approachS12Asia"], Literal["fr255Music"], Literal["fr255SmallMusic"], Literal["fr255"], Literal["fr255Small"], Literal["approachG12Asia"], Literal["approachS42Asia"], Literal["descentG1"], Literal["venu2PlusAsia"], Literal["fr955"], Literal["fr55Asia"], Literal["edge540"], Literal["edge840"], Literal["vivosmart5"], Literal["instinct2Asia"], Literal["marqGen2"], Literal["venusq2"], Literal["venusq2music"], Literal["marqGen2Aviator"], Literal["d2AirX10"], Literal["hrmProPlus"], Literal["descentG1Asia"], Literal["tactix7"], Literal["instinctCrossover"], Literal["edgeExplore2"], Literal["descentMk3"], Literal["descentMk3i"], Literal["approachS70"], Literal["fr265Large"], Literal["fr265Small"], Literal["venu3"], Literal["venu3s"], Literal["tacxNeoSmart"], Literal["tacxNeo2Smart"], Literal["tacxNeo2TSmart"], Literal["tacxNeoSmartBike"], Literal["tacxSatoriSmart"], Literal["tacxFlowSmart"], Literal["tacxVortexSmart"], Literal["tacxBushidoSmart"], Literal["tacxGeniusSmart"], Literal["tacxFluxFluxSSmart"], Literal["tacxFlux2Smart"], Literal["tacxMagnum"], Literal["edge1040Asia"], Literal["epixGen2Pro42"], Literal["epixGen2Pro47"], Literal["epixGen2Pro51"], Literal["fr965"], Literal["enduro2"], Literal["fenix7sProSolar"], Literal["fenix7ProSolar"], Literal["fenix7xProSolar"], Literal["lily2"], Literal["instinct2x"], Literal["vivoactive5"], Literal["fr165"], Literal["fr165Music"], Literal["edge1050"], Literal["descentT2"], Literal["hrmFit"], Literal["marqGen2Commander"], Literal["lilyAthlete"], Literal["rallyX10"], Literal["fenix8Solar"], Literal["fenix8SolarLarge"], Literal["fenix8Small"], Literal["fenix8"], Literal["d2Mach1Pro"], Literal["enduro3"], Literal["instinctE40mm"], Literal["instinctE45mm"], Literal["instinct3Solar45mm"], Literal["instinct3Amoled45mm"], Literal["instinct3Amoled50mm"], Literal["descentG2"], Literal["fenix7ProSolarNoWifi"], Literal["venuX1"], Literal["hrm200"], Literal["vivoactive6"], Literal["fenix8Pro"], Literal["edge550"], Literal["edge850"], Literal["venu4"], Literal["venu4s"], Literal["approachS44"], Literal["edgeMtb"], Literal["approachS50"], Literal["fenixE"], Literal["bounce2"], Literal["instinct3Solar50mm"], Literal["tactix8Amoled"], Literal["tactix8Solar"], Literal["fr170Music"], Literal["fr170"], Literal["approachJ1"], Literal["d2Mach2"], Literal["fr702026"], Literal["instinctCrossoverAmoled"], Literal["d2AirX15"], Literal["cirqaSmartBand"], Literal["d2Mach2Pro"], Literal["sdm4"], Literal["edgeRemote"], Literal["tacxTrainingAppWin"], Literal["tacxTrainingAppMac"], Literal["tacxTrainingAppMacCatalyst"], Literal["trainingCenter"], Literal["tacxTrainingAppAndroid"], Literal["tacxTrainingAppIos"], Literal["tacxTrainingAppLegacy"], Literal["connectiqSimulator"], Literal["androidAntplusPlugin"], Literal["connect"]] + +AntplusDeviceType = Union[int, Literal["antfs"], Literal["bikePower"], Literal["environmentSensorLegacy"], Literal["multiSportSpeedDistance"], Literal["control"], Literal["fitnessEquipment"], Literal["bloodPressure"], Literal["geocacheNode"], Literal["lightElectricVehicle"], Literal["envSensor"], Literal["racquet"], Literal["controlHub"], Literal["muscleOxygen"], Literal["shifting"], Literal["bikeLightMain"], Literal["bikeLightShared"], Literal["exd"], Literal["bikeRadar"], Literal["bikeAero"], Literal["weightScale"], Literal["heartRate"], Literal["bikeSpeedCadence"], Literal["bikeCadence"], Literal["bikeSpeed"], Literal["strideSpeedDistance"]] + +AntNetwork = Union[int, Literal["public"], Literal["antplus"], Literal["antfs"], Literal["private"]] + +WorkoutCapabilities = Union[int, Literal["interval"], Literal["custom"], Literal["fitnessEquipment"], Literal["firstbeat"], Literal["newLeaf"], Literal["tcx"], Literal["speed"], Literal["heartRate"], Literal["distance"], Literal["cadence"], Literal["power"], Literal["grade"], Literal["resistance"], Literal["protected"]] + +BatteryStatus = Union[int, Literal["new"], Literal["good"], Literal["ok"], Literal["low"], Literal["critical"], Literal["charging"], Literal["unknown"]] + +HrType = Union[int, Literal["normal"], Literal["irregular"]] + +CourseCapabilities = Union[int, Literal["processed"], Literal["valid"], Literal["time"], Literal["distance"], Literal["position"], Literal["heartRate"], Literal["power"], Literal["cadence"], Literal["training"], Literal["navigation"], Literal["bikeway"], Literal["aviation"]] + +Weight = Union[int, Literal["calculating"]] + +# 0 - 100 indicates% of max hr; >100 indicates bpm (255 max) plus 100 +WorkoutHr = Union[int, Literal["bpmOffset"]] + +# 0 - 1000 indicates % of functional threshold power; >1000 indicates watts plus 1000. +WorkoutPower = Union[int, Literal["wattsOffset"]] + +BpStatus = Union[int, Literal["noError"], Literal["errorIncompleteData"], Literal["errorNoMeasurement"], Literal["errorDataOutOfRange"], Literal["errorIrregularHeartRate"]] + +UserLocalId = Union[int, Literal["localMin"], Literal["localMax"], Literal["stationaryMin"], Literal["stationaryMax"], Literal["portableMin"], Literal["portableMax"]] + +SwimStroke = Union[int, Literal["freestyle"], Literal["backstroke"], Literal["breaststroke"], Literal["butterfly"], Literal["drill"], Literal["mixed"], Literal["im"], Literal["imByRound"], Literal["rimo"]] + +ActivityType = Union[int, Literal["generic"], Literal["running"], Literal["cycling"], Literal["transition"], Literal["fitnessEquipment"], Literal["swimming"], Literal["walking"], Literal["sedentary"], Literal["wheelchairPushing"], Literal["all"]] + +ActivitySubtype = Union[int, Literal["generic"], Literal["treadmill"], Literal["street"], Literal["trail"], Literal["track"], Literal["spin"], Literal["indoorCycling"], Literal["road"], Literal["mountain"], Literal["downhill"], Literal["recumbent"], Literal["cyclocross"], Literal["handCycling"], Literal["trackCycling"], Literal["indoorRowing"], Literal["elliptical"], Literal["stairClimbing"], Literal["lapSwimming"], Literal["openWater"], Literal["all"]] + +ActivityLevel = Union[int, Literal["low"], Literal["medium"], Literal["high"]] + +Side = Union[int, Literal["right"], Literal["left"]] + +LeftRightBalance = Union[int, Literal["mask"], Literal["right"]] + +LeftRightBalance100 = Union[int, Literal["mask"], Literal["right"]] + +LengthType = Union[int, Literal["idle"], Literal["active"]] + +DayOfWeek = Union[int, Literal["sunday"], Literal["monday"], Literal["tuesday"], Literal["wednesday"], Literal["thursday"], Literal["friday"], Literal["saturday"]] + +ConnectivityCapabilities = Union[int, Literal["bluetooth"], Literal["bluetoothLe"], Literal["ant"], Literal["activityUpload"], Literal["courseDownload"], Literal["workoutDownload"], Literal["liveTrack"], Literal["weatherConditions"], Literal["weatherAlerts"], Literal["gpsEphemerisDownload"], Literal["explicitArchive"], Literal["setupIncomplete"], Literal["continueSyncAfterSoftwareUpdate"], Literal["connectIqAppDownload"], Literal["golfCourseDownload"], Literal["deviceInitiatesSync"], Literal["connectIqWatchAppDownload"], Literal["connectIqWidgetDownload"], Literal["connectIqWatchFaceDownload"], Literal["connectIqDataFieldDownload"], Literal["connectIqAppManagment"], Literal["swingSensor"], Literal["swingSensorRemote"], Literal["incidentDetection"], Literal["audioPrompts"], Literal["wifiVerification"], Literal["trueUp"], Literal["findMyWatch"], Literal["remoteManualSync"], Literal["liveTrackAutoStart"], Literal["liveTrackMessaging"], Literal["instantInput"]] + +WeatherReport = Union[int, Literal["current"], Literal["forecast"], Literal["hourlyForecast"], Literal["dailyForecast"]] + +WeatherStatus = Union[int, Literal["clear"], Literal["partlyCloudy"], Literal["mostlyCloudy"], Literal["rain"], Literal["snow"], Literal["windy"], Literal["thunderstorms"], Literal["wintryMix"], Literal["fog"], Literal["hazy"], Literal["hail"], Literal["scatteredShowers"], Literal["scatteredThunderstorms"], Literal["unknownPrecipitation"], Literal["lightRain"], Literal["heavyRain"], Literal["lightSnow"], Literal["heavySnow"], Literal["lightRainSnow"], Literal["heavyRainSnow"], Literal["cloudy"]] + +WeatherSeverity = Union[int, Literal["unknown"], Literal["warning"], Literal["watch"], Literal["advisory"], Literal["statement"]] + +WeatherSevereType = Union[int, Literal["unspecified"], Literal["tornado"], Literal["tsunami"], Literal["hurricane"], Literal["extremeWind"], Literal["typhoon"], Literal["inlandHurricane"], Literal["hurricaneForceWind"], Literal["waterspout"], Literal["severeThunderstorm"], Literal["wreckhouseWinds"], Literal["lesSuetesWind"], Literal["avalanche"], Literal["flashFlood"], Literal["tropicalStorm"], Literal["inlandTropicalStorm"], Literal["blizzard"], Literal["iceStorm"], Literal["freezingRain"], Literal["debrisFlow"], Literal["flashFreeze"], Literal["dustStorm"], Literal["highWind"], Literal["winterStorm"], Literal["heavyFreezingSpray"], Literal["extremeCold"], Literal["windChill"], Literal["coldWave"], Literal["heavySnowAlert"], Literal["lakeEffectBlowingSnow"], Literal["snowSquall"], Literal["lakeEffectSnow"], Literal["winterWeather"], Literal["sleet"], Literal["snowfall"], Literal["snowAndBlowingSnow"], Literal["blowingSnow"], Literal["snowAlert"], Literal["arcticOutflow"], Literal["freezingDrizzle"], Literal["storm"], Literal["stormSurge"], Literal["rainfall"], Literal["arealFlood"], Literal["coastalFlood"], Literal["lakeshoreFlood"], Literal["excessiveHeat"], Literal["heat"], Literal["weather"], Literal["highHeatAndHumidity"], Literal["humidexAndHealth"], Literal["humidex"], Literal["gale"], Literal["freezingSpray"], Literal["specialMarine"], Literal["squall"], Literal["strongWind"], Literal["lakeWind"], Literal["marineWeather"], Literal["wind"], Literal["smallCraftHazardousSeas"], Literal["hazardousSeas"], Literal["smallCraft"], Literal["smallCraftWinds"], Literal["smallCraftRoughBar"], Literal["highWaterLevel"], Literal["ashfall"], Literal["freezingFog"], Literal["denseFog"], Literal["denseSmoke"], Literal["blowingDust"], Literal["hardFreeze"], Literal["freeze"], Literal["frost"], Literal["fireWeather"], Literal["flood"], Literal["ripTide"], Literal["highSurf"], Literal["smog"], Literal["airQuality"], Literal["briskWind"], Literal["airStagnation"], Literal["lowWater"], Literal["hydrological"], Literal["specialWeather"]] + +# number of seconds into the day since 00:00:00 UTC +TimeIntoDay = Union[int] + +# number of seconds into the day since local 00:00:00 +LocaltimeIntoDay = Union[int] + +StrokeType = Union[int, Literal["noEvent"], Literal["other"], Literal["serve"], Literal["forehand"], Literal["backhand"], Literal["smash"]] + +BodyLocation = Union[int, Literal["leftLeg"], Literal["leftCalf"], Literal["leftShin"], Literal["leftHamstring"], Literal["leftQuad"], Literal["leftGlute"], Literal["rightLeg"], Literal["rightCalf"], Literal["rightShin"], Literal["rightHamstring"], Literal["rightQuad"], Literal["rightGlute"], Literal["torsoBack"], Literal["leftLowerBack"], Literal["leftUpperBack"], Literal["rightLowerBack"], Literal["rightUpperBack"], Literal["torsoFront"], Literal["leftAbdomen"], Literal["leftChest"], Literal["rightAbdomen"], Literal["rightChest"], Literal["leftArm"], Literal["leftShoulder"], Literal["leftBicep"], Literal["leftTricep"], Literal["leftBrachioradialis"], Literal["leftForearmExtensors"], Literal["rightArm"], Literal["rightShoulder"], Literal["rightBicep"], Literal["rightTricep"], Literal["rightBrachioradialis"], Literal["rightForearmExtensors"], Literal["neck"], Literal["throat"], Literal["waistMidBack"], Literal["waistFront"], Literal["waistLeft"], Literal["waistRight"]] + +SegmentLapStatus = Union[int, Literal["end"], Literal["fail"]] + +SegmentLeaderboardType = Union[int, Literal["overall"], Literal["personalBest"], Literal["connections"], Literal["group"], Literal["challenger"], Literal["kom"], Literal["qom"], Literal["pr"], Literal["goal"], Literal["carrot"], Literal["clubLeader"], Literal["rival"], Literal["last"], Literal["recentBest"], Literal["courseRecord"]] + +SegmentDeleteStatus = Union[int, Literal["doNotDelete"], Literal["deleteOne"], Literal["deleteAll"]] + +SegmentSelectionType = Union[int, Literal["starred"], Literal["suggested"]] + +SourceType = Union[int, Literal["ant"], Literal["antplus"], Literal["bluetooth"], Literal["bluetoothLowEnergy"], Literal["wifi"], Literal["local"]] + +LocalDeviceType = Union[int, Literal["gps"], Literal["glonass"], Literal["gpsGlonass"], Literal["accelerometer"], Literal["barometer"], Literal["temperature"], Literal["whr"], Literal["sensorHub"]] + +BleDeviceType = Union[int, Literal["connectedGps"], Literal["heartRate"], Literal["bikePower"], Literal["bikeSpeedCadence"], Literal["bikeSpeed"], Literal["bikeCadence"], Literal["footpod"], Literal["bikeTrainer"]] + +AntChannelId = Union[int, Literal["antExtendedDeviceNumberUpperNibble"], Literal["antTransmissionTypeLowerNibble"], Literal["antDeviceType"], Literal["antDeviceNumber"]] + +DisplayOrientation = Union[int, Literal["auto"], Literal["portrait"], Literal["landscape"], Literal["portraitFlipped"], Literal["landscapeFlipped"]] + +WorkoutEquipment = Union[int, Literal["none"], Literal["swimFins"], Literal["swimKickboard"], Literal["swimPaddles"], Literal["swimPullBuoy"], Literal["swimSnorkel"]] + +WatchfaceMode = Union[int, Literal["digital"], Literal["analog"], Literal["connectIq"], Literal["disabled"]] + +DigitalWatchfaceLayout = Union[int, Literal["traditional"], Literal["modern"], Literal["bold"]] + +AnalogWatchfaceLayout = Union[int, Literal["minimal"], Literal["traditional"], Literal["modern"]] + +RiderPositionType = Union[int, Literal["seated"], Literal["standing"], Literal["transitionToSeated"], Literal["transitionToStanding"]] + +PowerPhaseType = Union[int, Literal["powerPhaseStartAngle"], Literal["powerPhaseEndAngle"], Literal["powerPhaseArcLength"], Literal["powerPhaseCenter"]] + +CameraEventType = Union[int, Literal["videoStart"], Literal["videoSplit"], Literal["videoEnd"], Literal["photoTaken"], Literal["videoSecondStreamStart"], Literal["videoSecondStreamSplit"], Literal["videoSecondStreamEnd"], Literal["videoSplitStart"], Literal["videoSecondStreamSplitStart"], Literal["videoPause"], Literal["videoSecondStreamPause"], Literal["videoResume"], Literal["videoSecondStreamResume"]] + +SensorType = Union[int, Literal["accelerometer"], Literal["gyroscope"], Literal["compass"], Literal["barometer"]] + +BikeLightNetworkConfigType = Union[int, Literal["auto"], Literal["individual"], Literal["highVisibility"], Literal["trail"]] + +CommTimeoutType = Union[int, Literal["wildcardPairingTimeout"], Literal["pairingTimeout"], Literal["connectionLost"], Literal["connectionTimeout"]] + +CameraOrientationType = Union[int, Literal["cameraOrientation0"], Literal["cameraOrientation90"], Literal["cameraOrientation180"], Literal["cameraOrientation270"]] + +AttitudeStage = Union[int, Literal["failed"], Literal["aligning"], Literal["degraded"], Literal["valid"]] + +AttitudeValidity = Union[int, Literal["trackAngleHeadingValid"], Literal["pitchValid"], Literal["rollValid"], Literal["lateralBodyAccelValid"], Literal["normalBodyAccelValid"], Literal["turnRateValid"], Literal["hwFail"], Literal["magInvalid"], Literal["noGps"], Literal["gpsInvalid"], Literal["solutionCoasting"], Literal["trueTrackAngle"], Literal["magneticHeading"]] + +AutoSyncFrequency = Union[int, Literal["never"], Literal["occasionally"], Literal["frequent"], Literal["onceADay"], Literal["remote"]] + +ExdLayout = Union[int, Literal["fullScreen"], Literal["halfVertical"], Literal["halfHorizontal"], Literal["halfVerticalRightSplit"], Literal["halfHorizontalBottomSplit"], Literal["fullQuarterSplit"], Literal["halfVerticalLeftSplit"], Literal["halfHorizontalTopSplit"], Literal["dynamic"]] + +ExdDisplayType = Union[int, Literal["numerical"], Literal["simple"], Literal["graph"], Literal["bar"], Literal["circleGraph"], Literal["virtualPartner"], Literal["balance"], Literal["stringList"], Literal["string"], Literal["simpleDynamicIcon"], Literal["gauge"]] + +ExdDataUnits = Union[int, Literal["noUnits"], Literal["laps"], Literal["milesPerHour"], Literal["kilometersPerHour"], Literal["feetPerHour"], Literal["metersPerHour"], Literal["degreesCelsius"], Literal["degreesFarenheit"], Literal["zone"], Literal["gear"], Literal["rpm"], Literal["bpm"], Literal["degrees"], Literal["millimeters"], Literal["meters"], Literal["kilometers"], Literal["feet"], Literal["yards"], Literal["kilofeet"], Literal["miles"], Literal["time"], Literal["enumTurnType"], Literal["percent"], Literal["watts"], Literal["wattsPerKilogram"], Literal["enumBatteryStatus"], Literal["enumBikeLightBeamAngleMode"], Literal["enumBikeLightBatteryStatus"], Literal["enumBikeLightNetworkConfigType"], Literal["lights"], Literal["seconds"], Literal["minutes"], Literal["hours"], Literal["calories"], Literal["kilojoules"], Literal["milliseconds"], Literal["secondPerMile"], Literal["secondPerKilometer"], Literal["centimeter"], Literal["enumCoursePoint"], Literal["bradians"], Literal["enumSport"], Literal["inchesHg"], Literal["mmHg"], Literal["mbars"], Literal["hectoPascals"], Literal["feetPerMin"], Literal["metersPerMin"], Literal["metersPerSec"], Literal["eightCardinal"]] + +ExdQualifiers = Union[int, Literal["noQualifier"], Literal["instantaneous"], Literal["average"], Literal["lap"], Literal["maximum"], Literal["maximumAverage"], Literal["maximumLap"], Literal["lastLap"], Literal["averageLap"], Literal["toDestination"], Literal["toGo"], Literal["toNext"], Literal["nextCoursePoint"], Literal["total"], Literal["threeSecondAverage"], Literal["tenSecondAverage"], Literal["thirtySecondAverage"], Literal["percentMaximum"], Literal["percentMaximumAverage"], Literal["lapPercentMaximum"], Literal["elapsed"], Literal["sunrise"], Literal["sunset"], Literal["comparedToVirtualPartner"], Literal["maximum24h"], Literal["minimum24h"], Literal["minimum"], Literal["first"], Literal["second"], Literal["third"], Literal["shifter"], Literal["lastSport"], Literal["moving"], Literal["stopped"], Literal["estimatedTotal"], Literal["zone9"], Literal["zone8"], Literal["zone7"], Literal["zone6"], Literal["zone5"], Literal["zone4"], Literal["zone3"], Literal["zone2"], Literal["zone1"]] + +ExdDescriptors = Union[int, Literal["bikeLightBatteryStatus"], Literal["beamAngleStatus"], Literal["bateryLevel"], Literal["lightNetworkMode"], Literal["numberLightsConnected"], Literal["cadence"], Literal["distance"], Literal["estimatedTimeOfArrival"], Literal["heading"], Literal["time"], Literal["batteryLevel"], Literal["trainerResistance"], Literal["trainerTargetPower"], Literal["timeSeated"], Literal["timeStanding"], Literal["elevation"], Literal["grade"], Literal["ascent"], Literal["descent"], Literal["verticalSpeed"], Literal["di2BatteryLevel"], Literal["frontGear"], Literal["rearGear"], Literal["gearRatio"], Literal["heartRate"], Literal["heartRateZone"], Literal["timeInHeartRateZone"], Literal["heartRateReserve"], Literal["calories"], Literal["gpsAccuracy"], Literal["gpsSignalStrength"], Literal["temperature"], Literal["timeOfDay"], Literal["balance"], Literal["pedalSmoothness"], Literal["power"], Literal["functionalThresholdPower"], Literal["intensityFactor"], Literal["work"], Literal["powerRatio"], Literal["normalizedPower"], Literal["trainingStressScore"], Literal["timeOnZone"], Literal["speed"], Literal["laps"], Literal["reps"], Literal["workoutStep"], Literal["courseDistance"], Literal["navigationDistance"], Literal["courseEstimatedTimeOfArrival"], Literal["navigationEstimatedTimeOfArrival"], Literal["courseTime"], Literal["navigationTime"], Literal["courseHeading"], Literal["navigationHeading"], Literal["powerZone"], Literal["torqueEffectiveness"], Literal["timerTime"], Literal["powerWeightRatio"], Literal["leftPlatformCenterOffset"], Literal["rightPlatformCenterOffset"], Literal["leftPowerPhaseStartAngle"], Literal["rightPowerPhaseStartAngle"], Literal["leftPowerPhaseFinishAngle"], Literal["rightPowerPhaseFinishAngle"], Literal["gears"], Literal["pace"], Literal["trainingEffect"], Literal["verticalOscillation"], Literal["verticalRatio"], Literal["groundContactTime"], Literal["leftGroundContactTimeBalance"], Literal["rightGroundContactTimeBalance"], Literal["strideLength"], Literal["runningCadence"], Literal["performanceCondition"], Literal["courseType"], Literal["timeInPowerZone"], Literal["navigationTurn"], Literal["courseLocation"], Literal["navigationLocation"], Literal["compass"], Literal["gearCombo"], Literal["muscleOxygen"], Literal["icon"], Literal["compassHeading"], Literal["gpsHeading"], Literal["gpsElevation"], Literal["anaerobicTrainingEffect"], Literal["course"], Literal["offCourse"], Literal["glideRatio"], Literal["verticalDistance"], Literal["vmg"], Literal["ambientPressure"], Literal["pressure"], Literal["vam"]] + +AutoActivityDetect = Union[int, Literal["none"], Literal["running"], Literal["cycling"], Literal["swimming"], Literal["walking"], Literal["elliptical"], Literal["sedentary"]] + +SupportedExdScreenLayouts = Union[int, Literal["fullScreen"], Literal["halfVertical"], Literal["halfHorizontal"], Literal["halfVerticalRightSplit"], Literal["halfHorizontalBottomSplit"], Literal["fullQuarterSplit"], Literal["halfVerticalLeftSplit"], Literal["halfHorizontalTopSplit"]] + +FitBaseType = Union[int, Literal["enum"], Literal["sint8"], Literal["uint8"], Literal["sint16"], Literal["uint16"], Literal["sint32"], Literal["uint32"], Literal["string"], Literal["float32"], Literal["float64"], Literal["uint8z"], Literal["uint16z"], Literal["uint32z"], Literal["byte"], Literal["sint64"], Literal["uint64"], Literal["uint64z"]] + +TurnType = Union[int, Literal["arrivingIdx"], Literal["arrivingLeftIdx"], Literal["arrivingRightIdx"], Literal["arrivingViaIdx"], Literal["arrivingViaLeftIdx"], Literal["arrivingViaRightIdx"], Literal["bearKeepLeftIdx"], Literal["bearKeepRightIdx"], Literal["continueIdx"], Literal["exitLeftIdx"], Literal["exitRightIdx"], Literal["ferryIdx"], Literal["roundabout45Idx"], Literal["roundabout90Idx"], Literal["roundabout135Idx"], Literal["roundabout180Idx"], Literal["roundabout225Idx"], Literal["roundabout270Idx"], Literal["roundabout315Idx"], Literal["roundabout360Idx"], Literal["roundaboutNeg45Idx"], Literal["roundaboutNeg90Idx"], Literal["roundaboutNeg135Idx"], Literal["roundaboutNeg180Idx"], Literal["roundaboutNeg225Idx"], Literal["roundaboutNeg270Idx"], Literal["roundaboutNeg315Idx"], Literal["roundaboutNeg360Idx"], Literal["roundaboutGenericIdx"], Literal["roundaboutNegGenericIdx"], Literal["sharpTurnLeftIdx"], Literal["sharpTurnRightIdx"], Literal["turnLeftIdx"], Literal["turnRightIdx"], Literal["uturnLeftIdx"], Literal["uturnRightIdx"], Literal["iconInvIdx"], Literal["iconIdxCnt"]] + +BikeLightBeamAngleMode = Union[int, Literal["manual"], Literal["auto"]] + +FitBaseUnit = Union[int, Literal["other"], Literal["kilogram"], Literal["pound"]] + +SetType = Union[int, Literal["rest"], Literal["active"]] + +MaxMetCategory = Union[int, Literal["generic"], Literal["cycling"]] + +ExerciseCategory = Union[int, Literal["benchPress"], Literal["calfRaise"], Literal["cardio"], Literal["carry"], Literal["chop"], Literal["core"], Literal["crunch"], Literal["curl"], Literal["deadlift"], Literal["flye"], Literal["hipRaise"], Literal["hipStability"], Literal["hipSwing"], Literal["hyperextension"], Literal["lateralRaise"], Literal["legCurl"], Literal["legRaise"], Literal["lunge"], Literal["olympicLift"], Literal["plank"], Literal["plyo"], Literal["pullUp"], Literal["pushUp"], Literal["row"], Literal["shoulderPress"], Literal["shoulderStability"], Literal["shrug"], Literal["sitUp"], Literal["squat"], Literal["totalBody"], Literal["tricepsExtension"], Literal["warmUp"], Literal["run"], Literal["bike"], Literal["cardioSensors"], Literal["move"], Literal["pose"], Literal["bandedExercises"], Literal["battleRope"], Literal["elliptical"], Literal["floorClimb"], Literal["indoorBike"], Literal["indoorRow"], Literal["ladder"], Literal["sandbag"], Literal["sled"], Literal["sledgeHammer"], Literal["stairStepper"], Literal["suspension"], Literal["tire"], Literal["runIndoor"], Literal["bikeOutdoor"], Literal["unknown"]] + +BenchPressExerciseName = Union[int, Literal["alternatingDumbbellChestPressOnSwissBall"], Literal["barbellBenchPress"], Literal["barbellBoardBenchPress"], Literal["barbellFloorPress"], Literal["closeGripBarbellBenchPress"], Literal["declineDumbbellBenchPress"], Literal["dumbbellBenchPress"], Literal["dumbbellFloorPress"], Literal["inclineBarbellBenchPress"], Literal["inclineDumbbellBenchPress"], Literal["inclineSmithMachineBenchPress"], Literal["isometricBarbellBenchPress"], Literal["kettlebellChestPress"], Literal["neutralGripDumbbellBenchPress"], Literal["neutralGripDumbbellInclineBenchPress"], Literal["oneArmFloorPress"], Literal["weightedOneArmFloorPress"], Literal["partialLockout"], Literal["reverseGripBarbellBenchPress"], Literal["reverseGripInclineBenchPress"], Literal["singleArmCableChestPress"], Literal["singleArmDumbbellBenchPress"], Literal["smithMachineBenchPress"], Literal["swissBallDumbbellChestPress"], Literal["tripleStopBarbellBenchPress"], Literal["wideGripBarbellBenchPress"], Literal["alternatingDumbbellChestPress"]] + +CalfRaiseExerciseName = Union[int, Literal["3WayCalfRaise"], Literal["3WayWeightedCalfRaise"], Literal["3WaySingleLegCalfRaise"], Literal["3WayWeightedSingleLegCalfRaise"], Literal["donkeyCalfRaise"], Literal["weightedDonkeyCalfRaise"], Literal["seatedCalfRaise"], Literal["weightedSeatedCalfRaise"], Literal["seatedDumbbellToeRaise"], Literal["singleLegBentKneeCalfRaise"], Literal["weightedSingleLegBentKneeCalfRaise"], Literal["singleLegDeclinePushUp"], Literal["singleLegDonkeyCalfRaise"], Literal["weightedSingleLegDonkeyCalfRaise"], Literal["singleLegHipRaiseWithKneeHold"], Literal["singleLegStandingCalfRaise"], Literal["singleLegStandingDumbbellCalfRaise"], Literal["standingBarbellCalfRaise"], Literal["standingCalfRaise"], Literal["weightedStandingCalfRaise"], Literal["standingDumbbellCalfRaise"]] + +CardioExerciseName = Union[int, Literal["bobAndWeaveCircle"], Literal["weightedBobAndWeaveCircle"], Literal["cardioCoreCrawl"], Literal["weightedCardioCoreCrawl"], Literal["doubleUnder"], Literal["weightedDoubleUnder"], Literal["jumpRope"], Literal["weightedJumpRope"], Literal["jumpRopeCrossover"], Literal["weightedJumpRopeCrossover"], Literal["jumpRopeJog"], Literal["weightedJumpRopeJog"], Literal["jumpingJacks"], Literal["weightedJumpingJacks"], Literal["skiMoguls"], Literal["weightedSkiMoguls"], Literal["splitJacks"], Literal["weightedSplitJacks"], Literal["squatJacks"], Literal["weightedSquatJacks"], Literal["tripleUnder"], Literal["weightedTripleUnder"], Literal["elliptical"], Literal["spinning"], Literal["polePaddleForwardWheelchair"], Literal["polePaddleBackwardWheelchair"], Literal["poleHandcycleForwardWheelchair"], Literal["poleHandcycleBackwardWheelchair"], Literal["poleRainbowWheelchair"], Literal["doublePunchForwardWheelchair"], Literal["doublePunchDownWheelchair"], Literal["doublePunchSidewaysWheelchair"], Literal["doublePunchUpWheelchair"], Literal["sitSkiWheelchair"], Literal["sittingJacksWheelchair"], Literal["punchForwardWheelchair"], Literal["punchDownWheelchair"], Literal["punchSidewaysWheelchair"], Literal["punchUpWheelchair"], Literal["punchBagWheelchair"], Literal["poleDdFfUuWheelchair"], Literal["butterflyArmsWheelchair"], Literal["punch"]] + +CarryExerciseName = Union[int, Literal["barHolds"], Literal["farmersWalk"], Literal["farmersWalkOnToes"], Literal["hexDumbbellHold"], Literal["overheadCarry"], Literal["dumbbellWaiterCarry"], Literal["farmersCarryWalkLunge"], Literal["farmersCarry"], Literal["farmersCarryOnToes"]] + +ChopExerciseName = Union[int, Literal["cablePullThrough"], Literal["cableRotationalLift"], Literal["cableWoodchop"], Literal["crossChopToKnee"], Literal["weightedCrossChopToKnee"], Literal["dumbbellChop"], Literal["halfKneelingRotation"], Literal["weightedHalfKneelingRotation"], Literal["halfKneelingRotationalChop"], Literal["halfKneelingRotationalReverseChop"], Literal["halfKneelingStabilityChop"], Literal["halfKneelingStabilityReverseChop"], Literal["kneelingRotationalChop"], Literal["kneelingRotationalReverseChop"], Literal["kneelingStabilityChop"], Literal["kneelingWoodchopper"], Literal["medicineBallWoodChops"], Literal["powerSquatChops"], Literal["weightedPowerSquatChops"], Literal["standingRotationalChop"], Literal["standingSplitRotationalChop"], Literal["standingSplitRotationalReverseChop"], Literal["standingStabilityReverseChop"]] + +CoreExerciseName = Union[int, Literal["absJabs"], Literal["weightedAbsJabs"], Literal["alternatingPlateReach"], Literal["barbellRollout"], Literal["weightedBarbellRollout"], Literal["bodyBarObliqueTwist"], Literal["cableCorePress"], Literal["cableSideBend"], Literal["sideBend"], Literal["weightedSideBend"], Literal["crescentCircle"], Literal["weightedCrescentCircle"], Literal["cyclingRussianTwist"], Literal["weightedCyclingRussianTwist"], Literal["elevatedFeetRussianTwist"], Literal["weightedElevatedFeetRussianTwist"], Literal["halfTurkishGetUp"], Literal["kettlebellWindmill"], Literal["kneelingAbWheel"], Literal["weightedKneelingAbWheel"], Literal["modifiedFrontLever"], Literal["openKneeTucks"], Literal["weightedOpenKneeTucks"], Literal["sideAbsLegLift"], Literal["weightedSideAbsLegLift"], Literal["swissBallJackknife"], Literal["weightedSwissBallJackknife"], Literal["swissBallPike"], Literal["weightedSwissBallPike"], Literal["swissBallRollout"], Literal["weightedSwissBallRollout"], Literal["triangleHipPress"], Literal["weightedTriangleHipPress"], Literal["trxSuspendedJackknife"], Literal["weightedTrxSuspendedJackknife"], Literal["uBoat"], Literal["weightedUBoat"], Literal["windmillSwitches"], Literal["weightedWindmillSwitches"], Literal["alternatingSlideOut"], Literal["weightedAlternatingSlideOut"], Literal["ghdBackExtensions"], Literal["weightedGhdBackExtensions"], Literal["overheadWalk"], Literal["inchworm"], Literal["weightedModifiedFrontLever"], Literal["russianTwist"], Literal["abdominalLegRotations"], Literal["armAndLegExtensionOnKnees"], Literal["bicycle"], Literal["bicepCurlWithLegExtension"], Literal["catCow"], Literal["corkscrew"], Literal["crissCross"], Literal["crissCrossWithBall"], Literal["doubleLegStretch"], Literal["kneeFolds"], Literal["lowerLift"], Literal["neckPull"], Literal["pelvicClocks"], Literal["rollOver"], Literal["rollUp"], Literal["rolling"], Literal["rowing1"], Literal["rowing2"], Literal["scissors"], Literal["singleLegCircles"], Literal["singleLegStretch"], Literal["snakeTwist1And2"], Literal["swan"], Literal["swimming"], Literal["teaser"], Literal["theHundred"], Literal["bicepCurlWithLegExtensionWithWeights"], Literal["hangingLSit"], Literal["lowerLiftWithWeights"], Literal["ringLSit"], Literal["rowing1WithWeights"], Literal["rowing2WithWeights"], Literal["scissorsWithWeights"], Literal["singleLegStretchWithWeights"], Literal["toesToElbows"], Literal["weightedCrissCross"], Literal["weightedDoubleLegStretch"], Literal["weightedTheHundred"], Literal["lSit"], Literal["turkishGetUp"], Literal["weightedRingLSit"], Literal["weightedHangingLSit"], Literal["weightedLSit"], Literal["sideBendLowWheelchair"], Literal["sideBendMidWheelchair"], Literal["sideBendHighWheelchair"], Literal["seatedSideBend"]] + +CrunchExerciseName = Union[int, Literal["bicycleCrunch"], Literal["cableCrunch"], Literal["circularArmCrunch"], Literal["crossedArmsCrunch"], Literal["weightedCrossedArmsCrunch"], Literal["crossLegReverseCrunch"], Literal["weightedCrossLegReverseCrunch"], Literal["crunchChop"], Literal["weightedCrunchChop"], Literal["doubleCrunch"], Literal["weightedDoubleCrunch"], Literal["elbowToKneeCrunch"], Literal["weightedElbowToKneeCrunch"], Literal["flutterKicks"], Literal["weightedFlutterKicks"], Literal["foamRollerReverseCrunchOnBench"], Literal["weightedFoamRollerReverseCrunchOnBench"], Literal["foamRollerReverseCrunchWithDumbbell"], Literal["foamRollerReverseCrunchWithMedicineBall"], Literal["frogPress"], Literal["hangingKneeRaiseObliqueCrunch"], Literal["weightedHangingKneeRaiseObliqueCrunch"], Literal["hipCrossover"], Literal["weightedHipCrossover"], Literal["hollowRock"], Literal["weightedHollowRock"], Literal["inclineReverseCrunch"], Literal["weightedInclineReverseCrunch"], Literal["kneelingCableCrunch"], Literal["kneelingCrossCrunch"], Literal["weightedKneelingCrossCrunch"], Literal["kneelingObliqueCableCrunch"], Literal["kneesToElbow"], Literal["legExtensions"], Literal["weightedLegExtensions"], Literal["legLevers"], Literal["mcgillCurlUp"], Literal["weightedMcgillCurlUp"], Literal["modifiedPilatesRollUpWithBall"], Literal["weightedModifiedPilatesRollUpWithBall"], Literal["pilatesCrunch"], Literal["weightedPilatesCrunch"], Literal["pilatesRollUpWithBall"], Literal["weightedPilatesRollUpWithBall"], Literal["raisedLegsCrunch"], Literal["weightedRaisedLegsCrunch"], Literal["reverseCrunch"], Literal["weightedReverseCrunch"], Literal["reverseCrunchOnABench"], Literal["weightedReverseCrunchOnABench"], Literal["reverseCurlAndLift"], Literal["weightedReverseCurlAndLift"], Literal["rotationalLift"], Literal["weightedRotationalLift"], Literal["seatedAlternatingReverseCrunch"], Literal["weightedSeatedAlternatingReverseCrunch"], Literal["seatedLegU"], Literal["weightedSeatedLegU"], Literal["sideToSideCrunchAndWeave"], Literal["weightedSideToSideCrunchAndWeave"], Literal["singleLegReverseCrunch"], Literal["weightedSingleLegReverseCrunch"], Literal["skaterCrunchCross"], Literal["weightedSkaterCrunchCross"], Literal["standingCableCrunch"], Literal["standingSideCrunch"], Literal["stepClimb"], Literal["weightedStepClimb"], Literal["swissBallCrunch"], Literal["swissBallReverseCrunch"], Literal["weightedSwissBallReverseCrunch"], Literal["swissBallRussianTwist"], Literal["weightedSwissBallRussianTwist"], Literal["swissBallSideCrunch"], Literal["weightedSwissBallSideCrunch"], Literal["thoracicCrunchesOnFoamRoller"], Literal["weightedThoracicCrunchesOnFoamRoller"], Literal["tricepsCrunch"], Literal["weightedBicycleCrunch"], Literal["weightedCrunch"], Literal["weightedSwissBallCrunch"], Literal["toesToBar"], Literal["weightedToesToBar"], Literal["crunch"], Literal["straightLegCrunchWithBall"], Literal["legClimbCrunch"]] + +CurlExerciseName = Union[int, Literal["alternatingDumbbellBicepsCurl"], Literal["alternatingDumbbellBicepsCurlOnSwissBall"], Literal["alternatingInclineDumbbellBicepsCurl"], Literal["barbellBicepsCurl"], Literal["barbellReverseWristCurl"], Literal["barbellWristCurl"], Literal["behindTheBackBarbellReverseWristCurl"], Literal["behindTheBackOneArmCableCurl"], Literal["cableBicepsCurl"], Literal["cableHammerCurl"], Literal["cheatingBarbellBicepsCurl"], Literal["closeGripEzBarBicepsCurl"], Literal["crossBodyDumbbellHammerCurl"], Literal["deadHangBicepsCurl"], Literal["declineHammerCurl"], Literal["dumbbellBicepsCurlWithStaticHold"], Literal["dumbbellHammerCurl"], Literal["dumbbellReverseWristCurl"], Literal["dumbbellWristCurl"], Literal["ezBarPreacherCurl"], Literal["forwardBendBicepsCurl"], Literal["hammerCurlToPress"], Literal["inclineDumbbellBicepsCurl"], Literal["inclineOffsetThumbDumbbellCurl"], Literal["kettlebellBicepsCurl"], Literal["lyingConcentrationCableCurl"], Literal["oneArmPreacherCurl"], Literal["platePinchCurl"], Literal["preacherCurlWithCable"], Literal["reverseEzBarCurl"], Literal["reverseGripWristCurl"], Literal["reverseGripBarbellBicepsCurl"], Literal["seatedAlternatingDumbbellBicepsCurl"], Literal["seatedDumbbellBicepsCurl"], Literal["seatedReverseDumbbellCurl"], Literal["splitStanceOffsetPinkyDumbbellCurl"], Literal["standingAlternatingDumbbellCurls"], Literal["standingDumbbellBicepsCurl"], Literal["standingEzBarBicepsCurl"], Literal["staticCurl"], Literal["swissBallDumbbellOverheadTricepsExtension"], Literal["swissBallEzBarPreacherCurl"], Literal["twistingStandingDumbbellBicepsCurl"], Literal["wideGripEzBarBicepsCurl"], Literal["oneArmConcentrationCurl"], Literal["standingZottmanBicepsCurl"], Literal["dumbbellBicepsCurl"], Literal["dragCurlWheelchair"], Literal["dumbbellBicepsCurlWheelchair"], Literal["bottleCurl"], Literal["seatedBottleCurl"]] + +DeadliftExerciseName = Union[int, Literal["barbellDeadlift"], Literal["barbellStraightLegDeadlift"], Literal["dumbbellDeadlift"], Literal["dumbbellSingleLegDeadliftToRow"], Literal["dumbbellStraightLegDeadlift"], Literal["kettlebellFloorToShelf"], Literal["oneArmOneLegDeadlift"], Literal["rackPull"], Literal["rotationalDumbbellStraightLegDeadlift"], Literal["singleArmDeadlift"], Literal["singleLegBarbellDeadlift"], Literal["singleLegBarbellStraightLegDeadlift"], Literal["singleLegDeadliftWithBarbell"], Literal["singleLegRdlCircuit"], Literal["singleLegRomanianDeadliftWithDumbbell"], Literal["sumoDeadlift"], Literal["sumoDeadliftHighPull"], Literal["trapBarDeadlift"], Literal["wideGripBarbellDeadlift"], Literal["kettlebellDeadlift"], Literal["kettlebellSumoDeadlift"], Literal["romanianDeadlift"], Literal["singleLegRomanianDeadliftCircuit"], Literal["straightLegDeadlift"]] + +FlyeExerciseName = Union[int, Literal["cableCrossover"], Literal["declineDumbbellFlye"], Literal["dumbbellFlye"], Literal["inclineDumbbellFlye"], Literal["kettlebellFlye"], Literal["kneelingRearFlye"], Literal["singleArmStandingCableReverseFlye"], Literal["swissBallDumbbellFlye"], Literal["armRotations"], Literal["hugATree"], Literal["faceDownInclineReverseFlye"], Literal["inclineReverseFlye"], Literal["rearDeltFlyWheelchair"]] + +HipRaiseExerciseName = Union[int, Literal["barbellHipThrustOnFloor"], Literal["barbellHipThrustWithBench"], Literal["bentKneeSwissBallReverseHipRaise"], Literal["weightedBentKneeSwissBallReverseHipRaise"], Literal["bridgeWithLegExtension"], Literal["weightedBridgeWithLegExtension"], Literal["clamBridge"], Literal["frontKickTabletop"], Literal["weightedFrontKickTabletop"], Literal["hipExtensionAndCross"], Literal["weightedHipExtensionAndCross"], Literal["hipRaise"], Literal["weightedHipRaise"], Literal["hipRaiseWithFeetOnSwissBall"], Literal["weightedHipRaiseWithFeetOnSwissBall"], Literal["hipRaiseWithHeadOnBosuBall"], Literal["weightedHipRaiseWithHeadOnBosuBall"], Literal["hipRaiseWithHeadOnSwissBall"], Literal["weightedHipRaiseWithHeadOnSwissBall"], Literal["hipRaiseWithKneeSqueeze"], Literal["weightedHipRaiseWithKneeSqueeze"], Literal["inclineRearLegExtension"], Literal["weightedInclineRearLegExtension"], Literal["kettlebellSwing"], Literal["marchingHipRaise"], Literal["weightedMarchingHipRaise"], Literal["marchingHipRaiseWithFeetOnASwissBall"], Literal["weightedMarchingHipRaiseWithFeetOnASwissBall"], Literal["reverseHipRaise"], Literal["weightedReverseHipRaise"], Literal["singleLegHipRaise"], Literal["weightedSingleLegHipRaise"], Literal["singleLegHipRaiseWithFootOnBench"], Literal["weightedSingleLegHipRaiseWithFootOnBench"], Literal["singleLegHipRaiseWithFootOnBosuBall"], Literal["weightedSingleLegHipRaiseWithFootOnBosuBall"], Literal["singleLegHipRaiseWithFootOnFoamRoller"], Literal["weightedSingleLegHipRaiseWithFootOnFoamRoller"], Literal["singleLegHipRaiseWithFootOnMedicineBall"], Literal["weightedSingleLegHipRaiseWithFootOnMedicineBall"], Literal["singleLegHipRaiseWithHeadOnBosuBall"], Literal["weightedSingleLegHipRaiseWithHeadOnBosuBall"], Literal["weightedClamBridge"], Literal["singleLegSwissBallHipRaiseAndLegCurl"], Literal["clams"], Literal["innerThighCircles"], Literal["innerThighSideLift"], Literal["legCircles"], Literal["legLift"], Literal["legLiftInExternalRotation"]] + +HipStabilityExerciseName = Union[int, Literal["bandSideLyingLegRaise"], Literal["deadBug"], Literal["weightedDeadBug"], Literal["externalHipRaise"], Literal["weightedExternalHipRaise"], Literal["fireHydrantKicks"], Literal["weightedFireHydrantKicks"], Literal["hipCircles"], Literal["weightedHipCircles"], Literal["innerThighLift"], Literal["weightedInnerThighLift"], Literal["lateralWalksWithBandAtAnkles"], Literal["pretzelSideKick"], Literal["weightedPretzelSideKick"], Literal["proneHipInternalRotation"], Literal["weightedProneHipInternalRotation"], Literal["quadruped"], Literal["quadrupedHipExtension"], Literal["weightedQuadrupedHipExtension"], Literal["quadrupedWithLegLift"], Literal["weightedQuadrupedWithLegLift"], Literal["sideLyingLegRaise"], Literal["weightedSideLyingLegRaise"], Literal["slidingHipAdduction"], Literal["weightedSlidingHipAdduction"], Literal["standingAdduction"], Literal["weightedStandingAdduction"], Literal["standingCableHipAbduction"], Literal["standingHipAbduction"], Literal["weightedStandingHipAbduction"], Literal["standingRearLegRaise"], Literal["weightedStandingRearLegRaise"], Literal["supineHipInternalRotation"], Literal["weightedSupineHipInternalRotation"], Literal["lyingAbductionStretch"]] + +HipSwingExerciseName = Union[int, Literal["singleArmKettlebellSwing"], Literal["singleArmDumbbellSwing"], Literal["stepOutSwing"], Literal["oneArmSwing"]] + +HyperextensionExerciseName = Union[int, Literal["backExtensionWithOppositeArmAndLegReach"], Literal["weightedBackExtensionWithOppositeArmAndLegReach"], Literal["baseRotations"], Literal["weightedBaseRotations"], Literal["bentKneeReverseHyperextension"], Literal["weightedBentKneeReverseHyperextension"], Literal["hollowHoldAndRoll"], Literal["weightedHollowHoldAndRoll"], Literal["kicks"], Literal["weightedKicks"], Literal["kneeRaises"], Literal["weightedKneeRaises"], Literal["kneelingSuperman"], Literal["weightedKneelingSuperman"], Literal["latPullDownWithRow"], Literal["medicineBallDeadliftToReach"], Literal["oneArmOneLegRow"], Literal["oneArmRowWithBand"], Literal["overheadLungeWithMedicineBall"], Literal["plankKneeTucks"], Literal["weightedPlankKneeTucks"], Literal["sideStep"], Literal["weightedSideStep"], Literal["singleLegBackExtension"], Literal["weightedSingleLegBackExtension"], Literal["spineExtension"], Literal["weightedSpineExtension"], Literal["staticBackExtension"], Literal["weightedStaticBackExtension"], Literal["supermanFromFloor"], Literal["weightedSupermanFromFloor"], Literal["swissBallBackExtension"], Literal["weightedSwissBallBackExtension"], Literal["swissBallHyperextension"], Literal["weightedSwissBallHyperextension"], Literal["swissBallOppositeArmAndLegLift"], Literal["weightedSwissBallOppositeArmAndLegLift"], Literal["supermanOnSwissBall"], Literal["cobra"], Literal["supineFloorBarre"]] + +LateralRaiseExerciseName = Union[int, Literal["45DegreeCableExternalRotation"], Literal["alternatingLateralRaiseWithStaticHold"], Literal["barMuscleUp"], Literal["bentOverLateralRaise"], Literal["cableDiagonalRaise"], Literal["cableFrontRaise"], Literal["calorieRow"], Literal["comboShoulderRaise"], Literal["dumbbellDiagonalRaise"], Literal["dumbbellVRaise"], Literal["frontRaise"], Literal["leaningDumbbellLateralRaise"], Literal["lyingDumbbellRaise"], Literal["muscleUp"], Literal["oneArmCableLateralRaise"], Literal["overhandGripRearLateralRaise"], Literal["plateRaises"], Literal["ringDip"], Literal["weightedRingDip"], Literal["ringMuscleUp"], Literal["weightedRingMuscleUp"], Literal["ropeClimb"], Literal["weightedRopeClimb"], Literal["scaption"], Literal["seatedLateralRaise"], Literal["seatedRearLateralRaise"], Literal["sideLyingLateralRaise"], Literal["standingLift"], Literal["suspendedRow"], Literal["underhandGripRearLateralRaise"], Literal["wallSlide"], Literal["weightedWallSlide"], Literal["armCircles"], Literal["shavingTheHead"], Literal["dumbbellLateralRaise"], Literal["ringDipKipping"], Literal["wallWalk"], Literal["dumbbellFrontRaiseWheelchair"], Literal["dumbbellLateralRaiseWheelchair"], Literal["poleDoubleArmOverheadAndForwardWheelchair"], Literal["poleStraightArmOverheadWheelchair"]] + +LegCurlExerciseName = Union[int, Literal["legCurl"], Literal["weightedLegCurl"], Literal["goodMorning"], Literal["seatedBarbellGoodMorning"], Literal["singleLegBarbellGoodMorning"], Literal["singleLegSlidingLegCurl"], Literal["slidingLegCurl"], Literal["splitBarbellGoodMorning"], Literal["splitStanceExtension"], Literal["staggeredStanceGoodMorning"], Literal["swissBallHipRaiseAndLegCurl"], Literal["zercherGoodMorning"], Literal["bandGoodMorning"], Literal["barGoodMorning"]] + +LegRaiseExerciseName = Union[int, Literal["hangingKneeRaise"], Literal["hangingLegRaise"], Literal["weightedHangingLegRaise"], Literal["hangingSingleLegRaise"], Literal["weightedHangingSingleLegRaise"], Literal["kettlebellLegRaises"], Literal["legLoweringDrill"], Literal["weightedLegLoweringDrill"], Literal["lyingStraightLegRaise"], Literal["weightedLyingStraightLegRaise"], Literal["medicineBallLegDrops"], Literal["quadrupedLegRaise"], Literal["weightedQuadrupedLegRaise"], Literal["reverseLegRaise"], Literal["weightedReverseLegRaise"], Literal["reverseLegRaiseOnSwissBall"], Literal["weightedReverseLegRaiseOnSwissBall"], Literal["singleLegLoweringDrill"], Literal["weightedSingleLegLoweringDrill"], Literal["weightedHangingKneeRaise"], Literal["lateralStepover"], Literal["weightedLateralStepover"]] + +LungeExerciseName = Union[int, Literal["overheadLunge"], Literal["lungeMatrix"], Literal["weightedLungeMatrix"], Literal["alternatingBarbellForwardLunge"], Literal["alternatingDumbbellLungeWithReach"], Literal["backFootElevatedDumbbellSplitSquat"], Literal["barbellBoxLunge"], Literal["barbellBulgarianSplitSquat"], Literal["barbellCrossoverLunge"], Literal["barbellFrontSplitSquat"], Literal["barbellLunge"], Literal["barbellReverseLunge"], Literal["barbellSideLunge"], Literal["barbellSplitSquat"], Literal["coreControlRearLunge"], Literal["diagonalLunge"], Literal["dropLunge"], Literal["dumbbellBoxLunge"], Literal["dumbbellBulgarianSplitSquat"], Literal["dumbbellCrossoverLunge"], Literal["dumbbellDiagonalLunge"], Literal["dumbbellLunge"], Literal["dumbbellLungeAndRotation"], Literal["dumbbellOverheadBulgarianSplitSquat"], Literal["dumbbellReverseLungeToHighKneeAndPress"], Literal["dumbbellSideLunge"], Literal["elevatedFrontFootBarbellSplitSquat"], Literal["frontFootElevatedDumbbellSplitSquat"], Literal["gunslingerLunge"], Literal["lawnmowerLunge"], Literal["lowLungeWithIsometricAdduction"], Literal["lowSideToSideLunge"], Literal["lunge"], Literal["weightedLunge"], Literal["lungeWithArmReach"], Literal["lungeWithDiagonalReach"], Literal["lungeWithSideBend"], Literal["offsetDumbbellLunge"], Literal["offsetDumbbellReverseLunge"], Literal["overheadBulgarianSplitSquat"], Literal["overheadDumbbellReverseLunge"], Literal["overheadDumbbellSplitSquat"], Literal["overheadLungeWithRotation"], Literal["reverseBarbellBoxLunge"], Literal["reverseBoxLunge"], Literal["reverseDumbbellBoxLunge"], Literal["reverseDumbbellCrossoverLunge"], Literal["reverseDumbbellDiagonalLunge"], Literal["reverseLungeWithReachBack"], Literal["weightedReverseLungeWithReachBack"], Literal["reverseLungeWithTwistAndOverheadReach"], Literal["weightedReverseLungeWithTwistAndOverheadReach"], Literal["reverseSlidingBoxLunge"], Literal["weightedReverseSlidingBoxLunge"], Literal["reverseSlidingLunge"], Literal["weightedReverseSlidingLunge"], Literal["runnersLungeToBalance"], Literal["weightedRunnersLungeToBalance"], Literal["shiftingSideLunge"], Literal["sideAndCrossoverLunge"], Literal["weightedSideAndCrossoverLunge"], Literal["sideLunge"], Literal["weightedSideLunge"], Literal["sideLungeAndPress"], Literal["sideLungeJumpOff"], Literal["sideLungeSweep"], Literal["weightedSideLungeSweep"], Literal["sideLungeToCrossoverTap"], Literal["weightedSideLungeToCrossoverTap"], Literal["sideToSideLungeChops"], Literal["weightedSideToSideLungeChops"], Literal["siffJumpLunge"], Literal["weightedSiffJumpLunge"], Literal["singleArmReverseLungeAndPress"], Literal["slidingLateralLunge"], Literal["weightedSlidingLateralLunge"], Literal["walkingBarbellLunge"], Literal["walkingDumbbellLunge"], Literal["walkingLunge"], Literal["weightedWalkingLunge"], Literal["wideGripOverheadBarbellSplitSquat"], Literal["alternatingDumbbellLunge"], Literal["dumbbellReverseLunge"], Literal["overheadDumbbellLunge"], Literal["scissorPowerSwitch"], Literal["dumbbellOverheadWalkingLunge"], Literal["curtsyLunge"], Literal["weightedCurtsyLunge"], Literal["weightedShiftingSideLunge"], Literal["weightedSideLungeAndPress"], Literal["weightedSideLungeJumpOff"]] + +OlympicLiftExerciseName = Union[int, Literal["barbellHangPowerClean"], Literal["barbellHangSquatClean"], Literal["barbellPowerClean"], Literal["barbellPowerSnatch"], Literal["barbellSquatClean"], Literal["cleanAndJerk"], Literal["barbellHangPowerSnatch"], Literal["barbellHangPull"], Literal["barbellHighPull"], Literal["barbellSnatch"], Literal["barbellSplitJerk"], Literal["clean"], Literal["dumbbellClean"], Literal["dumbbellHangPull"], Literal["oneHandDumbbellSplitSnatch"], Literal["pushJerk"], Literal["singleArmDumbbellSnatch"], Literal["singleArmHangSnatch"], Literal["singleArmKettlebellSnatch"], Literal["splitJerk"], Literal["squatCleanAndJerk"], Literal["dumbbellHangSnatch"], Literal["dumbbellPowerCleanAndJerk"], Literal["dumbbellPowerCleanAndPushPress"], Literal["dumbbellPowerCleanAndStrictPress"], Literal["dumbbellSnatch"], Literal["medicineBallClean"], Literal["cleanAndPress"], Literal["snatch"]] + +PlankExerciseName = Union[int, Literal["45DegreePlank"], Literal["weighted45DegreePlank"], Literal["90DegreeStaticHold"], Literal["weighted90DegreeStaticHold"], Literal["bearCrawl"], Literal["weightedBearCrawl"], Literal["crossBodyMountainClimber"], Literal["weightedCrossBodyMountainClimber"], Literal["elbowPlankPikeJacks"], Literal["weightedElbowPlankPikeJacks"], Literal["elevatedFeetPlank"], Literal["weightedElevatedFeetPlank"], Literal["elevatorAbs"], Literal["weightedElevatorAbs"], Literal["extendedPlank"], Literal["weightedExtendedPlank"], Literal["fullPlankPasseTwist"], Literal["weightedFullPlankPasseTwist"], Literal["inchingElbowPlank"], Literal["weightedInchingElbowPlank"], Literal["inchwormToSidePlank"], Literal["weightedInchwormToSidePlank"], Literal["kneelingPlank"], Literal["weightedKneelingPlank"], Literal["kneelingSidePlankWithLegLift"], Literal["weightedKneelingSidePlankWithLegLift"], Literal["lateralRoll"], Literal["weightedLateralRoll"], Literal["lyingReversePlank"], Literal["weightedLyingReversePlank"], Literal["medicineBallMountainClimber"], Literal["weightedMedicineBallMountainClimber"], Literal["modifiedMountainClimberAndExtension"], Literal["weightedModifiedMountainClimberAndExtension"], Literal["mountainClimber"], Literal["weightedMountainClimber"], Literal["mountainClimberOnSlidingDiscs"], Literal["weightedMountainClimberOnSlidingDiscs"], Literal["mountainClimberWithFeetOnBosuBall"], Literal["weightedMountainClimberWithFeetOnBosuBall"], Literal["mountainClimberWithHandsOnBench"], Literal["mountainClimberWithHandsOnSwissBall"], Literal["weightedMountainClimberWithHandsOnSwissBall"], Literal["plank"], Literal["plankJacksWithFeetOnSlidingDiscs"], Literal["weightedPlankJacksWithFeetOnSlidingDiscs"], Literal["plankKneeTwist"], Literal["weightedPlankKneeTwist"], Literal["plankPikeJumps"], Literal["weightedPlankPikeJumps"], Literal["plankPikes"], Literal["weightedPlankPikes"], Literal["plankToStandUp"], Literal["weightedPlankToStandUp"], Literal["plankWithArmRaise"], Literal["weightedPlankWithArmRaise"], Literal["plankWithKneeToElbow"], Literal["weightedPlankWithKneeToElbow"], Literal["plankWithObliqueCrunch"], Literal["weightedPlankWithObliqueCrunch"], Literal["plyometricSidePlank"], Literal["weightedPlyometricSidePlank"], Literal["rollingSidePlank"], Literal["weightedRollingSidePlank"], Literal["sideKickPlank"], Literal["weightedSideKickPlank"], Literal["sidePlank"], Literal["weightedSidePlank"], Literal["sidePlankAndRow"], Literal["weightedSidePlankAndRow"], Literal["sidePlankLift"], Literal["weightedSidePlankLift"], Literal["sidePlankWithElbowOnBosuBall"], Literal["weightedSidePlankWithElbowOnBosuBall"], Literal["sidePlankWithFeetOnBench"], Literal["weightedSidePlankWithFeetOnBench"], Literal["sidePlankWithKneeCircle"], Literal["weightedSidePlankWithKneeCircle"], Literal["sidePlankWithKneeTuck"], Literal["weightedSidePlankWithKneeTuck"], Literal["sidePlankWithLegLift"], Literal["weightedSidePlankWithLegLift"], Literal["sidePlankWithReachUnder"], Literal["weightedSidePlankWithReachUnder"], Literal["singleLegElevatedFeetPlank"], Literal["weightedSingleLegElevatedFeetPlank"], Literal["singleLegFlexAndExtend"], Literal["weightedSingleLegFlexAndExtend"], Literal["singleLegSidePlank"], Literal["weightedSingleLegSidePlank"], Literal["spidermanPlank"], Literal["weightedSpidermanPlank"], Literal["straightArmPlank"], Literal["weightedStraightArmPlank"], Literal["straightArmPlankWithShoulderTouch"], Literal["weightedStraightArmPlankWithShoulderTouch"], Literal["swissBallPlank"], Literal["weightedSwissBallPlank"], Literal["swissBallPlankLegLift"], Literal["weightedSwissBallPlankLegLift"], Literal["swissBallPlankLegLiftAndHold"], Literal["swissBallPlankWithFeetOnBench"], Literal["weightedSwissBallPlankWithFeetOnBench"], Literal["swissBallProneJackknife"], Literal["weightedSwissBallProneJackknife"], Literal["swissBallSidePlank"], Literal["weightedSwissBallSidePlank"], Literal["threeWayPlank"], Literal["weightedThreeWayPlank"], Literal["towelPlankAndKneeIn"], Literal["weightedTowelPlankAndKneeIn"], Literal["tStabilization"], Literal["weightedTStabilization"], Literal["turkishGetUpToSidePlank"], Literal["weightedTurkishGetUpToSidePlank"], Literal["twoPointPlank"], Literal["weightedTwoPointPlank"], Literal["weightedPlank"], Literal["wideStancePlankWithDiagonalArmLift"], Literal["weightedWideStancePlankWithDiagonalArmLift"], Literal["wideStancePlankWithDiagonalLegLift"], Literal["weightedWideStancePlankWithDiagonalLegLift"], Literal["wideStancePlankWithLegLift"], Literal["weightedWideStancePlankWithLegLift"], Literal["wideStancePlankWithOppositeArmAndLegLift"], Literal["weightedMountainClimberWithHandsOnBench"], Literal["weightedSwissBallPlankLegLiftAndHold"], Literal["weightedWideStancePlankWithOppositeArmAndLegLift"], Literal["plankWithFeetOnSwissBall"], Literal["sidePlankToPlankWithReachUnder"], Literal["bridgeWithGluteLowerLift"], Literal["bridgeOneLegBridge"], Literal["plankWithArmVariations"], Literal["plankWithLegLift"], Literal["reversePlankWithLegPull"], Literal["ringPlankSprawls"]] + +PlyoExerciseName = Union[int, Literal["alternatingJumpLunge"], Literal["weightedAlternatingJumpLunge"], Literal["barbellJumpSquat"], Literal["bodyWeightJumpSquat"], Literal["weightedJumpSquat"], Literal["crossKneeStrike"], Literal["weightedCrossKneeStrike"], Literal["depthJump"], Literal["weightedDepthJump"], Literal["dumbbellJumpSquat"], Literal["dumbbellSplitJump"], Literal["frontKneeStrike"], Literal["weightedFrontKneeStrike"], Literal["highBoxJump"], Literal["weightedHighBoxJump"], Literal["isometricExplosiveBodyWeightJumpSquat"], Literal["weightedIsometricExplosiveJumpSquat"], Literal["lateralLeapAndHop"], Literal["weightedLateralLeapAndHop"], Literal["lateralPlyoSquats"], Literal["weightedLateralPlyoSquats"], Literal["lateralSlide"], Literal["weightedLateralSlide"], Literal["medicineBallOverheadThrows"], Literal["medicineBallSideThrow"], Literal["medicineBallSlam"], Literal["sideToSideMedicineBallThrows"], Literal["sideToSideShuffleJump"], Literal["weightedSideToSideShuffleJump"], Literal["squatJumpOntoBox"], Literal["weightedSquatJumpOntoBox"], Literal["squatJumpsInAndOut"], Literal["weightedSquatJumpsInAndOut"], Literal["boxJump"], Literal["boxJumpOvers"], Literal["boxJumpOversOverTheBox"], Literal["starJumpSquats"], Literal["jumpSquat"]] + +PullUpExerciseName = Union[int, Literal["bandedPullUps"], Literal["30DegreeLatPulldown"], Literal["bandAssistedChinUp"], Literal["closeGripChinUp"], Literal["weightedCloseGripChinUp"], Literal["closeGripLatPulldown"], Literal["crossoverChinUp"], Literal["weightedCrossoverChinUp"], Literal["ezBarPullover"], Literal["hangingHurdle"], Literal["weightedHangingHurdle"], Literal["kneelingLatPulldown"], Literal["kneelingUnderhandGripLatPulldown"], Literal["latPulldown"], Literal["mixedGripChinUp"], Literal["weightedMixedGripChinUp"], Literal["mixedGripPullUp"], Literal["weightedMixedGripPullUp"], Literal["reverseGripPulldown"], Literal["standingCablePullover"], Literal["straightArmPulldown"], Literal["swissBallEzBarPullover"], Literal["towelPullUp"], Literal["weightedTowelPullUp"], Literal["weightedPullUp"], Literal["wideGripLatPulldown"], Literal["wideGripPullUp"], Literal["weightedWideGripPullUp"], Literal["burpeePullUp"], Literal["weightedBurpeePullUp"], Literal["jumpingPullUps"], Literal["weightedJumpingPullUps"], Literal["kippingPullUp"], Literal["weightedKippingPullUp"], Literal["lPullUp"], Literal["weightedLPullUp"], Literal["suspendedChinUp"], Literal["weightedSuspendedChinUp"], Literal["pullUp"], Literal["chinUp"], Literal["neutralGripChinUp"], Literal["weightedChinUp"], Literal["bandAssistedPullUp"], Literal["neutralGripPullUp"], Literal["weightedNeutralGripChinUp"], Literal["weightedNeutralGripPullUp"]] + +PushUpExerciseName = Union[int, Literal["chestPressWithBand"], Literal["alternatingStaggeredPushUp"], Literal["weightedAlternatingStaggeredPushUp"], Literal["alternatingHandsMedicineBallPushUp"], Literal["weightedAlternatingHandsMedicineBallPushUp"], Literal["bosuBallPushUp"], Literal["weightedBosuBallPushUp"], Literal["clappingPushUp"], Literal["weightedClappingPushUp"], Literal["closeGripMedicineBallPushUp"], Literal["weightedCloseGripMedicineBallPushUp"], Literal["closeHandsPushUp"], Literal["weightedCloseHandsPushUp"], Literal["declinePushUp"], Literal["weightedDeclinePushUp"], Literal["diamondPushUp"], Literal["weightedDiamondPushUp"], Literal["explosiveCrossoverPushUp"], Literal["weightedExplosiveCrossoverPushUp"], Literal["explosivePushUp"], Literal["weightedExplosivePushUp"], Literal["feetElevatedSideToSidePushUp"], Literal["weightedFeetElevatedSideToSidePushUp"], Literal["handReleasePushUp"], Literal["weightedHandReleasePushUp"], Literal["handstandPushUp"], Literal["weightedHandstandPushUp"], Literal["inclinePushUp"], Literal["weightedInclinePushUp"], Literal["isometricExplosivePushUp"], Literal["weightedIsometricExplosivePushUp"], Literal["judoPushUp"], Literal["weightedJudoPushUp"], Literal["kneelingPushUp"], Literal["weightedKneelingPushUp"], Literal["medicineBallChestPass"], Literal["medicineBallPushUp"], Literal["weightedMedicineBallPushUp"], Literal["oneArmPushUp"], Literal["weightedOneArmPushUp"], Literal["weightedPushUp"], Literal["pushUpAndRow"], Literal["weightedPushUpAndRow"], Literal["pushUpPlus"], Literal["weightedPushUpPlus"], Literal["pushUpWithFeetOnSwissBall"], Literal["weightedPushUpWithFeetOnSwissBall"], Literal["pushUpWithOneHandOnMedicineBall"], Literal["weightedPushUpWithOneHandOnMedicineBall"], Literal["shoulderPushUp"], Literal["weightedShoulderPushUp"], Literal["singleArmMedicineBallPushUp"], Literal["weightedSingleArmMedicineBallPushUp"], Literal["spidermanPushUp"], Literal["weightedSpidermanPushUp"], Literal["stackedFeetPushUp"], Literal["weightedStackedFeetPushUp"], Literal["staggeredHandsPushUp"], Literal["weightedStaggeredHandsPushUp"], Literal["suspendedPushUp"], Literal["weightedSuspendedPushUp"], Literal["swissBallPushUp"], Literal["weightedSwissBallPushUp"], Literal["swissBallPushUpPlus"], Literal["weightedSwissBallPushUpPlus"], Literal["tPushUp"], Literal["weightedTPushUp"], Literal["tripleStopPushUp"], Literal["weightedTripleStopPushUp"], Literal["wideHandsPushUp"], Literal["weightedWideHandsPushUp"], Literal["paralletteHandstandPushUp"], Literal["weightedParalletteHandstandPushUp"], Literal["ringHandstandPushUp"], Literal["weightedRingHandstandPushUp"], Literal["ringPushUp"], Literal["weightedRingPushUp"], Literal["pushUp"], Literal["pilatesPushup"], Literal["dynamicPushUp"], Literal["kippingHandstandPushUp"], Literal["shoulderTappingPushUp"], Literal["bicepsPushUp"], Literal["hinduPushUp"], Literal["pikePushUp"], Literal["wideGripPushUp"], Literal["weightedBicepsPushUp"], Literal["weightedHinduPushUp"], Literal["weightedPikePushUp"], Literal["kippingParalletteHandstandPushUp"], Literal["wallPushUp"]] + +RowExerciseName = Union[int, Literal["barbellStraightLegDeadliftToRow"], Literal["cableRowStanding"], Literal["dumbbellRow"], Literal["elevatedFeetInvertedRow"], Literal["weightedElevatedFeetInvertedRow"], Literal["facePull"], Literal["facePullWithExternalRotation"], Literal["invertedRowWithFeetOnSwissBall"], Literal["weightedInvertedRowWithFeetOnSwissBall"], Literal["kettlebellRow"], Literal["modifiedInvertedRow"], Literal["weightedModifiedInvertedRow"], Literal["neutralGripAlternatingDumbbellRow"], Literal["oneArmBentOverRow"], Literal["oneLeggedDumbbellRow"], Literal["renegadeRow"], Literal["reverseGripBarbellRow"], Literal["ropeHandleCableRow"], Literal["seatedCableRow"], Literal["seatedDumbbellRow"], Literal["singleArmCableRow"], Literal["singleArmCableRowAndRotation"], Literal["singleArmInvertedRow"], Literal["weightedSingleArmInvertedRow"], Literal["singleArmNeutralGripDumbbellRow"], Literal["singleArmNeutralGripDumbbellRowAndRotation"], Literal["suspendedInvertedRow"], Literal["weightedSuspendedInvertedRow"], Literal["tBarRow"], Literal["towelGripInvertedRow"], Literal["weightedTowelGripInvertedRow"], Literal["underhandGripCableRow"], Literal["vGripCableRow"], Literal["wideGripSeatedCableRow"], Literal["alternatingDumbbellRow"], Literal["invertedRow"], Literal["row"], Literal["weightedRow"], Literal["indoorRow"], Literal["bandedFacePulls"], Literal["chestSupportedDumbbellRow"], Literal["declineRingRow"], Literal["elevatedRingRow"], Literal["rdlBentOverRowWithBarbellDumbbell"], Literal["ringRow"], Literal["barbellRow"], Literal["bentOverRowWithBarbell"], Literal["bentOverRowWithDumbell"], Literal["seatedUnderhandGripCableRow"], Literal["trxInvertedRow"], Literal["weightedInvertedRow"], Literal["weightedTrxInvertedRow"], Literal["dumbbellRowWheelchair"]] + +ShoulderPressExerciseName = Union[int, Literal["alternatingDumbbellShoulderPress"], Literal["arnoldPress"], Literal["barbellFrontSquatToPushPress"], Literal["barbellPushPress"], Literal["barbellShoulderPress"], Literal["deadCurlPress"], Literal["dumbbellAlternatingShoulderPressAndTwist"], Literal["dumbbellHammerCurlToLungeToPress"], Literal["dumbbellPushPress"], Literal["floorInvertedShoulderPress"], Literal["weightedFloorInvertedShoulderPress"], Literal["invertedShoulderPress"], Literal["weightedInvertedShoulderPress"], Literal["oneArmPushPress"], Literal["overheadBarbellPress"], Literal["overheadDumbbellPress"], Literal["seatedBarbellShoulderPress"], Literal["seatedDumbbellShoulderPress"], Literal["singleArmDumbbellShoulderPress"], Literal["singleArmStepUpAndPress"], Literal["smithMachineOverheadPress"], Literal["splitStanceHammerCurlToPress"], Literal["swissBallDumbbellShoulderPress"], Literal["weightPlateFrontRaise"], Literal["dumbbellShoulderPress"], Literal["militaryPress"], Literal["strictPress"], Literal["dumbbellFrontRaise"], Literal["dumbbellCurlToOverheadPressWheelchair"], Literal["arnoldPressWheelchair"], Literal["overheadDumbbellPressWheelchair"]] + +ShoulderStabilityExerciseName = Union[int, Literal["90DegreeCableExternalRotation"], Literal["bandExternalRotation"], Literal["bandInternalRotation"], Literal["bentArmLateralRaiseAndExternalRotation"], Literal["cableExternalRotation"], Literal["dumbbellFacePullWithExternalRotation"], Literal["floorIRaise"], Literal["weightedFloorIRaise"], Literal["floorTRaise"], Literal["weightedFloorTRaise"], Literal["floorYRaise"], Literal["weightedFloorYRaise"], Literal["inclineIRaise"], Literal["weightedInclineIRaise"], Literal["inclineLRaise"], Literal["weightedInclineLRaise"], Literal["inclineTRaise"], Literal["weightedInclineTRaise"], Literal["inclineWRaise"], Literal["weightedInclineWRaise"], Literal["inclineYRaise"], Literal["weightedInclineYRaise"], Literal["lyingExternalRotation"], Literal["seatedDumbbellExternalRotation"], Literal["standingLRaise"], Literal["swissBallIRaise"], Literal["weightedSwissBallIRaise"], Literal["swissBallTRaise"], Literal["weightedSwissBallTRaise"], Literal["swissBallWRaise"], Literal["weightedSwissBallWRaise"], Literal["swissBallYRaise"], Literal["weightedSwissBallYRaise"], Literal["cableInternalRotation"], Literal["lyingInternalRotation"], Literal["seatedDumbbellInternalRotation"]] + +ShrugExerciseName = Union[int, Literal["barbellJumpShrug"], Literal["barbellShrug"], Literal["barbellUprightRow"], Literal["behindTheBackSmithMachineShrug"], Literal["dumbbellJumpShrug"], Literal["dumbbellShrug"], Literal["dumbbellUprightRow"], Literal["inclineDumbbellShrug"], Literal["overheadBarbellShrug"], Literal["overheadDumbbellShrug"], Literal["scaptionAndShrug"], Literal["scapularRetraction"], Literal["serratusChairShrug"], Literal["weightedSerratusChairShrug"], Literal["serratusShrug"], Literal["weightedSerratusShrug"], Literal["wideGripJumpShrug"], Literal["wideGripBarbellShrug"], Literal["behindTheBackShrug"], Literal["dumbbellShrugWheelchair"], Literal["shrugWheelchair"], Literal["shrugArmDownWheelchair"], Literal["shrugArmMidWheelchair"], Literal["shrugArmUpWheelchair"], Literal["uprightRow"]] + +SitUpExerciseName = Union[int, Literal["alternatingSitUp"], Literal["weightedAlternatingSitUp"], Literal["bentKneeVUp"], Literal["weightedBentKneeVUp"], Literal["butterflySitUp"], Literal["weightedButterflySitup"], Literal["crossPunchRollUp"], Literal["weightedCrossPunchRollUp"], Literal["crossedArmsSitUp"], Literal["weightedCrossedArmsSitUp"], Literal["getUpSitUp"], Literal["weightedGetUpSitUp"], Literal["hoveringSitUp"], Literal["weightedHoveringSitUp"], Literal["kettlebellSitUp"], Literal["medicineBallAlternatingVUp"], Literal["medicineBallSitUp"], Literal["medicineBallVUp"], Literal["modifiedSitUp"], Literal["negativeSitUp"], Literal["oneArmFullSitUp"], Literal["recliningCircle"], Literal["weightedRecliningCircle"], Literal["reverseCurlUp"], Literal["weightedReverseCurlUp"], Literal["singleLegSwissBallJackknife"], Literal["weightedSingleLegSwissBallJackknife"], Literal["theTeaser"], Literal["theTeaserWeighted"], Literal["threePartRollDown"], Literal["weightedThreePartRollDown"], Literal["vUp"], Literal["weightedVUp"], Literal["weightedRussianTwistOnSwissBall"], Literal["weightedSitUp"], Literal["xAbs"], Literal["weightedXAbs"], Literal["sitUp"], Literal["ghdSitUps"], Literal["sitUpTurkishGetUp"], Literal["russianTwistOnSwissBall"]] + +SquatExerciseName = Union[int, Literal["legPress"], Literal["backSquatWithBodyBar"], Literal["backSquats"], Literal["weightedBackSquats"], Literal["balancingSquat"], Literal["weightedBalancingSquat"], Literal["barbellBackSquat"], Literal["barbellBoxSquat"], Literal["barbellFrontSquat"], Literal["barbellHackSquat"], Literal["barbellHangSquatSnatch"], Literal["barbellLateralStepUp"], Literal["barbellQuarterSquat"], Literal["barbellSiffSquat"], Literal["barbellSquatSnatch"], Literal["barbellSquatWithHeelsRaised"], Literal["barbellStepover"], Literal["barbellStepUp"], Literal["benchSquatWithRotationalChop"], Literal["weightedBenchSquatWithRotationalChop"], Literal["bodyWeightWallSquat"], Literal["weightedWallSquat"], Literal["boxStepSquat"], Literal["weightedBoxStepSquat"], Literal["bracedSquat"], Literal["crossedArmBarbellFrontSquat"], Literal["crossoverDumbbellStepUp"], Literal["dumbbellFrontSquat"], Literal["dumbbellSplitSquat"], Literal["dumbbellSquat"], Literal["dumbbellSquatClean"], Literal["dumbbellStepover"], Literal["dumbbellStepUp"], Literal["elevatedSingleLegSquat"], Literal["weightedElevatedSingleLegSquat"], Literal["figureFourSquats"], Literal["weightedFigureFourSquats"], Literal["gobletSquat"], Literal["kettlebellSquat"], Literal["kettlebellSwingOverhead"], Literal["kettlebellSwingWithFlipToSquat"], Literal["lateralDumbbellStepUp"], Literal["oneLeggedSquat"], Literal["overheadDumbbellSquat"], Literal["overheadSquat"], Literal["partialSingleLegSquat"], Literal["weightedPartialSingleLegSquat"], Literal["pistolSquat"], Literal["weightedPistolSquat"], Literal["plieSlides"], Literal["weightedPlieSlides"], Literal["plieSquat"], Literal["weightedPlieSquat"], Literal["prisonerSquat"], Literal["weightedPrisonerSquat"], Literal["singleLegBenchGetUp"], Literal["weightedSingleLegBenchGetUp"], Literal["singleLegBenchSquat"], Literal["weightedSingleLegBenchSquat"], Literal["singleLegSquatOnSwissBall"], Literal["weightedSingleLegSquatOnSwissBall"], Literal["squat"], Literal["weightedSquat"], Literal["squatsWithBand"], Literal["staggeredSquat"], Literal["weightedStaggeredSquat"], Literal["stepUp"], Literal["weightedStepUp"], Literal["suitcaseSquats"], Literal["sumoSquat"], Literal["sumoSquatSlideIn"], Literal["weightedSumoSquatSlideIn"], Literal["sumoSquatToHighPull"], Literal["sumoSquatToStand"], Literal["weightedSumoSquatToStand"], Literal["sumoSquatWithRotation"], Literal["weightedSumoSquatWithRotation"], Literal["swissBallBodyWeightWallSquat"], Literal["weightedSwissBallWallSquat"], Literal["thrusters"], Literal["unevenSquat"], Literal["weightedUnevenSquat"], Literal["waistSlimmingSquat"], Literal["wallBall"], Literal["wideStanceBarbellSquat"], Literal["wideStanceGobletSquat"], Literal["zercherSquat"], Literal["kbsOverhead"], Literal["squatAndSideKick"], Literal["squatJumpsInNOut"], Literal["pilatesPlieSquatsParallelTurnedOutFlatAndHeels"], Literal["releveStraightLegAndKneeBentWithOneLegVariation"], Literal["alternatingBoxDumbbellStepUps"], Literal["dumbbellOverheadSquatSingleArm"], Literal["dumbbellSquatSnatch"], Literal["medicineBallSquat"], Literal["wallBallSquatAndPress"], Literal["squatAmericanSwing"], Literal["airSquat"], Literal["dumbbellThrusters"], Literal["overheadBarbellSquat"]] + +TotalBodyExerciseName = Union[int, Literal["burpee"], Literal["weightedBurpee"], Literal["burpeeBoxJump"], Literal["weightedBurpeeBoxJump"], Literal["highPullBurpee"], Literal["manMakers"], Literal["oneArmBurpee"], Literal["squatThrusts"], Literal["weightedSquatThrusts"], Literal["squatPlankPushUp"], Literal["weightedSquatPlankPushUp"], Literal["standingTRotationBalance"], Literal["weightedStandingTRotationBalance"], Literal["barbellBurpee"], Literal["burpeeBoxJumpOverYesLiterallyJumpingOverTheBox"], Literal["burpeeBoxJumpStepUpOver"], Literal["lateralBarbellBurpee"], Literal["totalBodyBurpeeOverBar"], Literal["burpeeBoxJumpOver"], Literal["burpeeWheelchair"]] + +MoveExerciseName = Union[int, Literal["archAndCurl"], Literal["armCirclesWithBallBandAndWeight"], Literal["armStretch"], Literal["backMassage"], Literal["bellyBreathing"], Literal["bridgeWithBall"], Literal["diamondLegCrunch"], Literal["diamondLegLift"], Literal["eightPointShoulderOpener"], Literal["footRolling"], Literal["footwork"], Literal["footworkOnDisc"], Literal["forwardFold"], Literal["frogWithBand"], Literal["halfRollUp"], Literal["hamstringCurl"], Literal["hamstringStretch"], Literal["hipStretch"], Literal["hugATreeWithBallBandAndWeight"], Literal["kneeCircles"], Literal["kneeFoldsOnDisc"], Literal["lateralFlexion"], Literal["legStretchWithBand"], Literal["legStretchWithLegCircles"], Literal["lowerLiftOnDisc"], Literal["lungeSquat"], Literal["lungesWithKneeLift"], Literal["mermaidStretch"], Literal["neutralPelvicPosition"], Literal["pelvicClocksOnDisc"], Literal["pilatesPlieSquatsParallelTurnedOutFlatAndHeelsWithChair"], Literal["piriformisStretch"], Literal["plankKneeCrosses"], Literal["plankKneePulls"], Literal["plankUpDowns"], Literal["prayerMudra"], Literal["psoasLungeStretch"], Literal["ribcageBreathing"], Literal["rollDown"], Literal["rollUpWithWeightAndBand"], Literal["saw"], Literal["scapularStabilization"], Literal["scissorsOnDisc"], Literal["seatedHipStretchup"], Literal["seatedTwist"], Literal["shavingTheHeadWithBallBandAndWeight"], Literal["spinalTwist"], Literal["spinalTwistStretch"], Literal["spineStretchForward"], Literal["squatOpenArmTwistPose"], Literal["squatsWithBall"], Literal["standAndHang"], Literal["standingSideStretch"], Literal["standingSingleLegForwardBendWithItBandOpener"], Literal["straightLegCrunchWithLegLift"], Literal["straightLegCrunchWithLegLiftWithBall"], Literal["straightLegCrunchWithLegsCrossed"], Literal["straightLegCrunchWithLegsCrossedWithBall"], Literal["straightLegDiagonalCrunch"], Literal["straightLegDiagonalCrunchWithBall"], Literal["tailboneCurl"], Literal["throatLock"], Literal["tickTockSideRoll"], Literal["twist"], Literal["vLegCrunches"], Literal["vSit"], Literal["forwardFoldWheelchair"], Literal["forwardFoldPlusWheelchair"], Literal["armCirclesLowForwardWheelchair"], Literal["armCirclesMidForwardWheelchair"], Literal["armCirclesHighForwardWheelchair"], Literal["armCirclesLowBackwardWheelchair"], Literal["armCirclesMidBackwardWheelchair"], Literal["armCirclesHighBackwardWheelchair"], Literal["coreTwistsWheelchair"], Literal["armRaiseWheelchair"], Literal["chestExpandWheelchair"], Literal["armExtendWheelchair"], Literal["forwardBendWheelchair"], Literal["toeTouchWheelchair"], Literal["extendedToeTouchWheelchair"], Literal["seatedArmCircles"], Literal["trunkRotations"], Literal["seatedTrunkRotations"], Literal["toeTouch"]] + +PoseExerciseName = Union[int, Literal["allFours"], Literal["ankleToKnee"], Literal["babyCobra"], Literal["boat"], Literal["boundAngle"], Literal["boundSeatedSingleLegForwardBend"], Literal["bow"], Literal["bowedHalfMoon"], Literal["bridge"], Literal["cat"], Literal["chair"], Literal["childs"], Literal["corpse"], Literal["cowFace"], Literal["cow"], Literal["devotionalWarrior"], Literal["dolphinPlank"], Literal["dolphin"], Literal["downDogKneeToNose"], Literal["downDogSplit"], Literal["downDogSplitOpenHipBentKnee"], Literal["downwardFacingDog"], Literal["eagle"], Literal["easySeated"], Literal["extendedPuppy"], Literal["extendedSideAngle"], Literal["fish"], Literal["fourLimbedStaff"], Literal["fullSplit"], Literal["gate"], Literal["halfChairHalfAnkleToKnee"], Literal["halfMoon"], Literal["headToKnee"], Literal["heron"], Literal["heros"], Literal["highLunge"], Literal["kneesChestChin"], Literal["lizard"], Literal["locust"], Literal["lowLunge"], Literal["lowLungeTwist"], Literal["lowLungeWithKneeDown"], Literal["mermaid"], Literal["mountain"], Literal["oneLeggedDownwardFacingPoseOpenHipBentKnee"], Literal["oneLeggedPigeon"], Literal["peacefulWarrior"], Literal["plank"], Literal["plow"], Literal["reclinedHandToFoot"], Literal["revolvedHalfMoon"], Literal["revolvedHeadToKnee"], Literal["revolvedTriangle"], Literal["runnersLunge"], Literal["seatedEasySideBend"], Literal["seatedEasyTwist"], Literal["seatedLongLegForwardBend"], Literal["seatedWideLegForwardBend"], Literal["shoulderStand"], Literal["sideBoat"], Literal["sidePlank"], Literal["sphinx"], Literal["squatOpenArmTwist"], Literal["squatPalmPress"], Literal["staff"], Literal["standingArmsUp"], Literal["standingForwardBendHalfwayUp"], Literal["standingForwardBend"], Literal["standingSideOpener"], Literal["standingSingleLegForwardBend"], Literal["standingSplit"], Literal["standingWideLegForwardBend"], Literal["standingWideLegForwardBendWithTwist"], Literal["supineSpinalTwist"], Literal["tableTop"], Literal["threadTheNeedle"], Literal["thunderbolt"], Literal["thunderboltPoseBothSidesArmStretch"], Literal["tree"], Literal["triangle"], Literal["upDog"], Literal["upwardFacingPlank"], Literal["warriorOne"], Literal["warriorThree"], Literal["warriorTwo"], Literal["wheel"], Literal["wideSideLunge"], Literal["deepBreathingWheelchair"], Literal["deepBreathingLowWheelchair"], Literal["deepBreathingMidWheelchair"], Literal["deepBreathingHighWheelchair"], Literal["prayerWheelchair"], Literal["overheadPrayerWheelchair"], Literal["cactusWheelchair"], Literal["breathingPunchesWheelchair"], Literal["breathingPunchesExtendedWheelchair"], Literal["breathingPunchesOverheadWheelchair"], Literal["breathingPunchesOverheadAndDownWheelchair"], Literal["breathingPunchesSideWheelchair"], Literal["breathingPunchesExtendedSideWheelchair"], Literal["breathingPunchesOverheadSideWheelchair"], Literal["breathingPunchesOverheadAndDownSideWheelchair"], Literal["leftHandBackWheelchair"], Literal["triangleWheelchair"], Literal["threadTheNeedleWheelchair"], Literal["neckFlexionAndExtensionWheelchair"], Literal["neckLateralFlexionWheelchair"], Literal["spineFlexionAndExtensionWheelchair"], Literal["spineRotationWheelchair"], Literal["spineLateralFlexionWheelchair"], Literal["alternativeSkiingWheelchair"], Literal["reachForwardWheelchair"], Literal["warriorWheelchair"], Literal["reverseWarriorWheelchair"], Literal["downwardFacingDogToCobra"], Literal["seatedCatCow"]] + +TricepsExtensionExerciseName = Union[int, Literal["benchDip"], Literal["weightedBenchDip"], Literal["bodyWeightDip"], Literal["cableKickback"], Literal["cableLyingTricepsExtension"], Literal["cableOverheadTricepsExtension"], Literal["dumbbellKickback"], Literal["dumbbellLyingTricepsExtension"], Literal["ezBarOverheadTricepsExtension"], Literal["inclineDip"], Literal["weightedInclineDip"], Literal["inclineEzBarLyingTricepsExtension"], Literal["lyingDumbbellPulloverToExtension"], Literal["lyingEzBarTricepsExtension"], Literal["lyingTricepsExtensionToCloseGripBenchPress"], Literal["overheadDumbbellTricepsExtension"], Literal["recliningTricepsPress"], Literal["reverseGripPressdown"], Literal["reverseGripTricepsPressdown"], Literal["ropePressdown"], Literal["seatedBarbellOverheadTricepsExtension"], Literal["seatedDumbbellOverheadTricepsExtension"], Literal["seatedEzBarOverheadTricepsExtension"], Literal["seatedSingleArmOverheadDumbbellExtension"], Literal["singleArmDumbbellOverheadTricepsExtension"], Literal["singleDumbbellSeatedOverheadTricepsExtension"], Literal["singleLegBenchDipAndKick"], Literal["weightedSingleLegBenchDipAndKick"], Literal["singleLegDip"], Literal["weightedSingleLegDip"], Literal["staticLyingTricepsExtension"], Literal["suspendedDip"], Literal["weightedSuspendedDip"], Literal["swissBallDumbbellLyingTricepsExtension"], Literal["swissBallEzBarLyingTricepsExtension"], Literal["swissBallEzBarOverheadTricepsExtension"], Literal["tabletopDip"], Literal["weightedTabletopDip"], Literal["tricepsExtensionOnFloor"], Literal["tricepsPressdown"], Literal["weightedDip"], Literal["alternatingDumbbellLyingTricepsExtension"], Literal["tricepsPress"], Literal["dumbbellKickbackWheelchair"], Literal["overheadDumbbellTricepsExtensionWheelchair"]] + +WarmUpExerciseName = Union[int, Literal["quadrupedRocking"], Literal["neckTilts"], Literal["ankleCircles"], Literal["ankleDorsiflexionWithBand"], Literal["ankleInternalRotation"], Literal["armCircles"], Literal["bentOverReachToSky"], Literal["catCamel"], Literal["elbowToFootLunge"], Literal["forwardAndBackwardLegSwings"], Literal["groiners"], Literal["invertedHamstringStretch"], Literal["lateralDuckUnder"], Literal["neckRotations"], Literal["oppositeArmAndLegBalance"], Literal["reachRollAndLift"], Literal["scorpion"], Literal["shoulderCircles"], Literal["sideToSideLegSwings"], Literal["sleeperStretch"], Literal["slideOut"], Literal["swissBallHipCrossover"], Literal["swissBallReachRollAndLift"], Literal["swissBallWindshieldWipers"], Literal["thoracicRotation"], Literal["walkingHighKicks"], Literal["walkingHighKnees"], Literal["walkingKneeHugs"], Literal["walkingLegCradles"], Literal["walkout"], Literal["walkoutFromPushUpPosition"], Literal["bicepsStretch"], Literal["glutesStretch"], Literal["standingHamstringStretch"], Literal["stretch90_90"], Literal["stretchAbs"], Literal["stretchButterfly"], Literal["stretchCalf"], Literal["stretchCatCow"], Literal["stretchChildsPose"], Literal["stretchCobra"], Literal["stretchForearms"], Literal["stretchForwardGlutes"], Literal["stretchFrontSplit"], Literal["stretchHamstring"], Literal["stretchHipFlexorAndQuad"], Literal["stretchLat"], Literal["stretchLevatorScapulae"], Literal["stretchLungeWithSpinalTwist"], Literal["stretchLungingHipFlexor"], Literal["stretchLyingAbduction"], Literal["stretchLyingItBand"], Literal["stretchLyingKneeToChest"], Literal["stretchLyingPiriformis"], Literal["stretchLyingSpinalTwist"], Literal["stretchNeck"], Literal["stretchObliques"], Literal["stretchOverUnderShoulder"], Literal["stretchPectoral"], Literal["stretchPigeonPose"], Literal["stretchPiriformis"], Literal["stretchQuad"], Literal["stretchScorpion"], Literal["stretchShoulder"], Literal["stretchSide"], Literal["stretchSideLunge"], Literal["stretchSideSplit"], Literal["stretchStandingItBand"], Literal["stretchStraddle"], Literal["stretchTriceps"], Literal["stretchWallChestAndShoulder"], Literal["neckRotationsWheelchair"], Literal["halfKneelingArmRotation"], Literal["threeWayAnkleMobilization"], Literal["ninetyNinetyHipSwitch"], Literal["activeFrog"], Literal["shoulderSweeps"], Literal["ankleLunges"], Literal["backRollFoamRoller"], Literal["bearCrawl"], Literal["latissimusDorsiFoamRoll"], Literal["reverseTHipOpener"], Literal["shoulderRolls"], Literal["chestOpeners"], Literal["tricepsStretch"], Literal["upperBackStretch"], Literal["hipCircles"], Literal["ankleStretch"], Literal["marchingInPlace"], Literal["tricepsStretchWheelchair"], Literal["upperBackStretchWheelchair"]] + +RunExerciseName = Union[int, Literal["run"], Literal["walk"], Literal["jog"], Literal["sprint"], Literal["runOrWalk"], Literal["speedWalk"], Literal["warmUp"]] + +BikeExerciseName = Union[int, Literal["bike"], Literal["ride"], Literal["sprint"]] + +BandedExercisesExerciseName = Union[int, Literal["abTwist"], Literal["backExtension"], Literal["bicycleCrunch"], Literal["calfRaises"], Literal["chestPress"], Literal["clamShells"], Literal["curl"], Literal["deadbug"], Literal["deadlift"], Literal["donkeyKick"], Literal["externalRotation"], Literal["externalRotationAt90DegreeAbduction"], Literal["facePull"], Literal["fireHydrant"], Literal["fly"], Literal["frontRaise"], Literal["gluteBridge"], Literal["hamstringCurls"], Literal["highPlankLegLifts"], Literal["hipExtension"], Literal["internalRotation"], Literal["jumpingJack"], Literal["kneelingCrunch"], Literal["lateralBandWalks"], Literal["lateralRaise"], Literal["latpull"], Literal["legAbduction"], Literal["legAdduction"], Literal["legExtension"], Literal["lunge"], Literal["plank"], Literal["pullApart"], Literal["pushUps"], Literal["reverseCrunch"], Literal["row"], Literal["shoulderAbduction"], Literal["shoulderExtension"], Literal["shoulderExternalRotation"], Literal["shoulderFlexionTo90Degrees"], Literal["sidePlankLegLifts"], Literal["sideRaise"], Literal["squat"], Literal["squatToPress"], Literal["tricepExtension"], Literal["tricepKickback"], Literal["uprightRow"], Literal["wallCrawlWithExternalRotation"], Literal["lateralRaiseWheelchair"], Literal["tricepsExtensionWheelchair"], Literal["chestFlyInclineWheelchair"], Literal["chestFlyDeclineWheelchair"], Literal["pullDownWheelchair"], Literal["straightArmPullDownWheelchair"], Literal["curlWheelchair"], Literal["overheadCurlWheelchair"], Literal["facePullWheelchair"], Literal["aroundTheWorldWheelchair"], Literal["pullApartWheelchair"], Literal["sideCurlWheelchair"], Literal["overheadPressWheelchair"]] + +BattleRopeExerciseName = Union[int, Literal["alternatingFigureEight"], Literal["alternatingJumpWave"], Literal["alternatingKneelingToStandingWave"], Literal["alternatingLungeWave"], Literal["alternatingSquatWave"], Literal["alternatingWave"], Literal["alternatingWaveWithLateralShuffle"], Literal["clapWave"], Literal["doubleArmFigureEight"], Literal["doubleArmSideToSideSnake"], Literal["doubleArmSideWave"], Literal["doubleArmSlam"], Literal["doubleArmWave"], Literal["grapplerToss"], Literal["hipToss"], Literal["inAndOutWave"], Literal["insideCircle"], Literal["jumpingJacks"], Literal["outsideCircle"], Literal["rainbow"], Literal["sidePlankWave"], Literal["sidewinder"], Literal["sittingRussianTwist"], Literal["snakeWave"], Literal["splitJack"], Literal["stageCoach"], Literal["ultimateWarrior"], Literal["upperCuts"]] + +EllipticalExerciseName = Union[int, Literal["elliptical"]] + +FloorClimbExerciseName = Union[int, Literal["floorClimb"]] + +IndoorBikeExerciseName = Union[int, Literal["airBike"], Literal["assaultBike"], Literal["stationaryBike"]] + +IndoorRowExerciseName = Union[int, Literal["rowingMachine"]] + +LadderExerciseName = Union[int, Literal["agility"], Literal["speed"]] + +SandbagExerciseName = Union[int, Literal["aroundTheWorld"], Literal["backSquat"], Literal["bearCrawlPullThrough"], Literal["bearHugSquat"], Literal["clean"], Literal["cleanAndPress"], Literal["curl"], Literal["frontCarry"], Literal["frontSquat"], Literal["lunge"], Literal["overheadPress"], Literal["plankPullThrough"], Literal["rotationalLunge"], Literal["row"], Literal["russianTwist"], Literal["shouldering"], Literal["shoveling"], Literal["sideLunge"], Literal["sprint"], Literal["zercherSquat"]] + +SledExerciseName = Union[int, Literal["backwardDrag"], Literal["chestPress"], Literal["forwardDrag"], Literal["lowPush"], Literal["push"], Literal["row"]] + +SledgeHammerExerciseName = Union[int, Literal["lateralSwing"], Literal["hammerSlam"]] + +StairStepperExerciseName = Union[int, Literal["stairStepper"]] + +SuspensionExerciseName = Union[int, Literal["chestFly"], Literal["chestPress"], Literal["crunch"], Literal["curl"], Literal["dip"], Literal["facePull"], Literal["gluteBridge"], Literal["hamstringCurl"], Literal["hipDrop"], Literal["invertedRow"], Literal["kneeDriveJump"], Literal["kneeToChest"], Literal["latPullover"], Literal["lunge"], Literal["mountainClimber"], Literal["pendulum"], Literal["pike"], Literal["plank"], Literal["powerPull"], Literal["pullUp"], Literal["pushUp"], Literal["reverseMountainClimber"], Literal["reversePlank"], Literal["rollout"], Literal["row"], Literal["sideLunge"], Literal["sidePlank"], Literal["singleLegDeadlift"], Literal["singleLegSquat"], Literal["sitUp"], Literal["split"], Literal["squat"], Literal["squatJump"], Literal["tricepPress"], Literal["yFly"]] + +TireExerciseName = Union[int, Literal["flip"]] + +BikeOutdoorExerciseName = Union[int, Literal["bike"]] + +RunIndoorExerciseName = Union[int, Literal["indoorTrackRun"], Literal["treadmill"]] + +WaterType = Union[int, Literal["fresh"], Literal["salt"], Literal["en13319"], Literal["custom"]] + +TissueModelType = Union[int, Literal["zhl16c"]] + +DiveGasStatus = Union[int, Literal["disabled"], Literal["enabled"], Literal["backupOnly"]] + +DiveAlert = Union[int, Literal["ndlReached"], Literal["gasSwitchPrompted"], Literal["nearSurface"], Literal["approachingNdl"], Literal["po2Warn"], Literal["po2CritHigh"], Literal["po2CritLow"], Literal["timeAlert"], Literal["depthAlert"], Literal["decoCeilingBroken"], Literal["decoComplete"], Literal["safetyStopBroken"], Literal["safetyStopComplete"], Literal["cnsWarning"], Literal["cnsCritical"], Literal["otuWarning"], Literal["otuCritical"], Literal["ascentCritical"], Literal["alertDismissedByKey"], Literal["alertDismissedByTimeout"], Literal["batteryLow"], Literal["batteryCritical"], Literal["safetyStopStarted"], Literal["approachingFirstDecoStop"], Literal["setpointSwitchAutoLow"], Literal["setpointSwitchAutoHigh"], Literal["setpointSwitchManualLow"], Literal["setpointSwitchManualHigh"], Literal["autoSetpointSwitchIgnored"], Literal["switchedToOpenCircuit"], Literal["switchedToClosedCircuit"], Literal["tankBatteryLow"], Literal["po2CcrDilLow"], Literal["decoStopCleared"], Literal["apneaNeutralBuoyancy"], Literal["apneaTargetDepth"], Literal["apneaSurface"], Literal["apneaHighSpeed"], Literal["apneaLowSpeed"]] + +DiveAlarmType = Union[int, Literal["depth"], Literal["time"], Literal["speed"]] + +DiveBacklightMode = Union[int, Literal["atDepth"], Literal["alwaysOn"]] + +SleepLevel = Union[int, Literal["unmeasurable"], Literal["awake"], Literal["light"], Literal["deep"], Literal["rem"]] + +Spo2MeasurementType = Union[int, Literal["offWrist"], Literal["spotCheck"], Literal["continuousCheck"], Literal["periodic"]] + +CcrSetpointSwitchMode = Union[int, Literal["manual"], Literal["automatic"]] + +DiveGasMode = Union[int, Literal["openCircuit"], Literal["closedCircuitDiluent"]] + +ProjectileType = Union[int, Literal["arrow"], Literal["rifleCartridge"], Literal["pistolCartridge"], Literal["shotshell"], Literal["airRiflePellet"], Literal["other"]] + +FaveroProduct = Union[int, Literal["assiomaUno"], Literal["assiomaDuo"]] + +SplitType = Union[int, Literal["ascentSplit"], Literal["descentSplit"], Literal["intervalActive"], Literal["intervalRest"], Literal["intervalWarmup"], Literal["intervalCooldown"], Literal["intervalRecovery"], Literal["intervalOther"], Literal["climbActive"], Literal["climbRest"], Literal["surfActive"], Literal["runActive"], Literal["runRest"], Literal["workoutRound"], Literal["rwdRun"], Literal["rwdWalk"], Literal["windsurfActive"], Literal["rwdStand"], Literal["transition"], Literal["skiLiftSplit"], Literal["skiRunSplit"]] + +ClimbProEvent = Union[int, Literal["approach"], Literal["start"], Literal["complete"]] + +GasConsumptionRateType = Union[int, Literal["pressureSac"], Literal["volumeSac"], Literal["rmv"]] + +TapSensitivity = Union[int, Literal["high"], Literal["medium"], Literal["low"]] + +RadarThreatLevelType = Union[int, Literal["threatUnknown"], Literal["threatNone"], Literal["threatApproaching"], Literal["threatApproachingFast"]] + +SleepDisruptionSeverity = Union[int, Literal["none"], Literal["low"], Literal["medium"], Literal["high"]] + +NapPeriodFeedback = Union[int, Literal["none"], Literal["multipleNapsDuringDay"], Literal["jetlagIdealTimingIdealDuration"], Literal["jetlagIdealTimingLongDuration"], Literal["jetlagLateTimingIdealDuration"], Literal["jetlagLateTimingLongDuration"], Literal["idealTimingIdealDurationLowNeed"], Literal["idealTimingIdealDurationHighNeed"], Literal["idealTimingLongDurationLowNeed"], Literal["idealTimingLongDurationHighNeed"], Literal["lateTimingIdealDurationLowNeed"], Literal["lateTimingIdealDurationHighNeed"], Literal["lateTimingLongDurationLowNeed"], Literal["lateTimingLongDurationHighNeed"], Literal["idealDurationLowNeed"], Literal["idealDurationHighNeed"], Literal["longDurationLowNeed"], Literal["longDurationHighNeed"]] + +NapSource = Union[int, Literal["automatic"], Literal["manualDevice"], Literal["manualGc"]] + +MaxMetSpeedSource = Union[int, Literal["onboardGps"], Literal["connectedGps"], Literal["cadence"]] + +MaxMetHeartRateSource = Union[int, Literal["whr"], Literal["hrm"]] + +HrvStatus = Union[int, Literal["none"], Literal["poor"], Literal["low"], Literal["unbalanced"], Literal["balanced"]] + +NoFlyTimeMode = Union[int, Literal["standard"], Literal["flat24Hours"]] + diff --git a/garmin_fit_sdk/util.py b/garmin_fit_sdk/util.py index 2f88338..ab35c7e 100644 --- a/garmin_fit_sdk/util.py +++ b/garmin_fit_sdk/util.py @@ -7,8 +7,8 @@ # Transfer (FIT) Protocol License. ########################################################################################### # ****WARNING**** This file is auto-generated! Do NOT edit this file. -# Profile Version = 21.208.0Release -# Tag = production/release/21.208.0-0-g5209d509 +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 ############################################################################################ diff --git a/garmin_fit_sdk/util.pyi b/garmin_fit_sdk/util.pyi new file mode 100644 index 0000000..e456e7f --- /dev/null +++ b/garmin_fit_sdk/util.pyi @@ -0,0 +1,22 @@ +########################################################################################### +# Copyright 2026 Garmin International, Inc. +# Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +# may not use this file except in compliance with the Flexible and Interoperable Data +# Transfer (FIT) Protocol License. +########################################################################################### +# ****WARNING**** This file is auto-generated! Do NOT edit this file. +# Profile Version = 21.212.0Release +# Tag = production/release/21.212.0-0-g0676a0e3 +############################################################################################ + + +from datetime import datetime +from typing import Any, Dict, Optional + +FIT_EPOCH_S: int + +BASE_TYPE_TO_FIELD_TYPE: Dict[int, str] +FIELD_TYPE_TO_BASE_TYPE: Dict[str, int] + +def convert_timestamp_to_datetime(timestamp: Optional[int]) -> datetime: ... +def convert_datetime_to_timestamp(value: datetime) -> int: ... diff --git a/pyproject.toml b/pyproject.toml index 8e7559e..baee0ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools >= 64"] build-backend = "setuptools.build_meta" [project] -version = "21.208.0" +version = "21.212.0" name = "garmin-fit-sdk" description = "Garmin FIT Python SDK" authors = [{ name = "Garmin International, Inc." }] @@ -23,9 +23,12 @@ classifiers = [ "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3 :: Only", "Operating System :: OS Independent", + "Typing :: Typed", ] urls = { "Homepage" = "https://github.com/garmin/fit-python-sdk" } -dependencies = [] +dependencies = [ + "typing_extensions>=3.7.4; python_version < '3.8'", +] [project.optional-dependencies] dev = ["pytest~=7.0.1", "pytest-cov~=3.0.0", "pytest-mock~=3.6.1"] @@ -33,5 +36,8 @@ dev = ["pytest~=7.0.1", "pytest-cov~=3.0.0", "pytest-mock~=3.6.1"] [tool.setuptools] include-package-data = true +[tool.setuptools.package-data] +garmin_fit_sdk = ["py.typed", "*.pyi"] + [tool.setuptools.packages.find] exclude = [".gitignore", ".vscode*", ".pytest_cache*", ".test.py"] diff --git a/tests/__init__.py b/tests/__init__.py index 6698401..7b9141b 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,4 +8,4 @@ # __init__.py for the fit sdk tests module -__version__ = '21.208.0' \ No newline at end of file +__version__ = '21.212.0' \ No newline at end of file