================================================================================ PROJECT MAP: ================================================================================ ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/activity_parser.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • detect_file_type() └─ Detect file format (FIT, XML, or unknown) • parse_xml_file() └─ Parse XML (TCX) file to extract activity metrics • compute_gradient() └─ Compute gradient percentage for each point using elevation c • distance_between_points() └─ Calculate distance between two (lat, lon) points in meters u • parse_fit_file() └─ Parse FIT file to extract activity metrics and detailed cycl • get_activity_metrics() └─ Get activity metrics from local file or Garmin API ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/cli.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • list_activities() └─ List activities based on specified filters • download() └─ Download activities based on specified filters • daemon_mode() └─ Daemon mode operations • migrate_activities() └─ Migrate database to add new activity fields • analyze_activities() └─ Analyze activity data for cycling metrics • reprocess_activities() └─ Reprocess activities to calculate missing metrics • generate_report() └─ Generate performance reports for cycling activities • main() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/config.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • Config Methods: - validate() FUNCTIONS: • load_config() └─ Load environment variables from .env file ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/daemon.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • GarminSyncDaemon Methods: - __init__() - start() - _enqueue_sync() - _enqueue_reprocess() - _process_tasks() - _execute_in_process_pool() - sync_and_download() - load_config() - update_daemon_status() - update_daemon_last_run() - start_web_ui() - signal_handler() - is_sync_in_progress() - stop() - log_operation() - count_missing() - reprocess_activities() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/database.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • Activity └─ Activity model representing a Garmin activity record. Methods: - to_dict() • DaemonConfig └─ Daemon configuration model. • SyncLog └─ Sync log model for tracking sync operations. FUNCTIONS: • get_legacy_session() └─ Temporary synchronous session for migration purposes. ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/fit_processor/gear_analyzer.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • SinglespeedAnalyzer Methods: - __init__() - analyze_gear_ratio() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/fit_processor/power_estimator.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • PowerEstimator Methods: - __init__() - calculate_power() - estimate_peak_power() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/garmin.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • GarminClient └─ Garmin API client for interacting with Garmin Connect servic Methods: - __init__() - authenticate() - get_activities() - download_activity_fit() - get_activity_details() FUNCTIONS: • test_download() └─ Test function to verify download functionality ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/migrate_activities.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • migrate_activities() └─ Migrate activities to populate fields from FIT files or Garm ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/parsers/gpx_parser.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • parse_gpx_file() └─ Parse GPX file to extract activity metrics. • haversine() └─ Calculate the great circle distance between two points ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/utils.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • setup_logger() └─ Setup logger with consistent formatting • format_timestamp() └─ Format timestamp string for display • safe_filename() └─ Make filename safe for filesystem • bytes_to_human_readable() └─ Convert bytes to human readable format • validate_cron_expression() └─ Basic validation of cron expression • handle_db_error() └─ Decorator for database operations with error handling ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/web/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/web/app.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/web/routes.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ScheduleConfig ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/garminsync/web/test_ui.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • test_ui_endpoints() └─ Test that the new UI endpoints are working correctly • test_api_endpoints() └─ Test that the new API endpoints are working correctly ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/migrations/versions/20240821150000_add_cycling_columns.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • upgrade() • downgrade() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/migrations/versions/20240822165438_add_hr_and_calories_columns.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • upgrade() • downgrade() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/migrations/versions/20240823000000_add_reprocessed_column.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • upgrade() • downgrade() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/migrations/versions/env.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • run_migrations_offline() └─ Run migrations in 'offline' mode. • run_migrations_online() └─ Run migrations in 'online' mode. ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/patches/garth_data_weight.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • WeightData Methods: - to_localized_datetime() - get() - list() ──────────────────────────────────────────────────────────────────────────────── FILE: GarminSync/tests/test_sync.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • test_sync_database_with_valid_activities() └─ Test sync_database with valid API response • test_sync_database_with_none_activities() └─ Test sync_database with None response from API • test_sync_database_with_missing_fields() └─ Test sync_database with activities missing required fields • test_sync_database_with_existing_activities() └─ Test sync_database doesn't duplicate existing activities • test_sync_database_with_invalid_activity_data() └─ Test sync_database with invalid activity data types ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/alembic/env.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • run_migrations_offline() └─ Run migrations in 'offline' mode. • run_migrations_online() └─ Run migrations in 'online' mode. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/alembic/versions/ed891fdd5174_create_activity_downloads_table.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • upgrade() • downgrade() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/analyzers/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/analyzers/workout_analyzer.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • WorkoutAnalyzer └─ Analyzer for workout data to calculate metrics and insights. Methods: - __init__() - analyze_workout() - _calculate_summary_metrics() - _analyze_power() - _analyze_heart_rate() - _analyze_speed() - _analyze_elevation() - _detect_intervals() - _calculate_zone_distribution() - _calculate_efficiency_metrics() - _calculate_normalized_power() - _detect_power_spikes() - _calculate_power_distribution() - _calculate_hr_distribution() - _calculate_speed_distribution() - _calculate_hr_recovery() - _calculate_climbing_ratio() - _analyze_gear() - _analyze_cadence() - _estimate_power() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/analyzers/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/analyzers/workout_analyzer.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • WorkoutAnalyzer └─ Analyzer for workout data to calculate metrics and insights. Methods: - __init__() - analyze_workout() - _calculate_summary_metrics() - _analyze_power() - _analyze_heart_rate() - _analyze_speed() - _analyze_elevation() - _detect_intervals() - _calculate_zone_distribution() - _calculate_efficiency_metrics() - _calculate_normalized_power() - _detect_power_spikes() - _calculate_power_distribution() - _calculate_hr_distribution() - _calculate_speed_distribution() - _calculate_hr_recovery() - _calculate_climbing_ratio() - _analyze_gear() - _analyze_cadence() - _estimate_power() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/clients/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/clients/garmin_client.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • GarminClient └─ Client for interacting with Garmin Connect API. Methods: - __init__() - authenticate() - is_authenticated() - get_latest_activity() - get_activity_by_id() - download_activity_file() - download_activity_original() - get_activity_summary() - get_all_cycling_workouts() - get_workout_by_id() - download_workout_file() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/config/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/config/settings.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • BikeConfig └─ Bike configuration constants. FUNCTIONS: • get_garmin_credentials() └─ Get Garmin Connect credentials from environment variables. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/examples/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/examples/basic_analysis.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • analyze_workout() └─ Analyze a single workout file and generate reports. • main() └─ Main function for command line usage. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/models/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/models/workout.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • WorkoutMetadata └─ Metadata for a workout session. • PowerData └─ Power-related data for a workout. • HeartRateData └─ Heart rate data for a workout. • SpeedData └─ Speed and distance data for a workout. • ElevationData └─ Elevation and gradient data for a workout. • GearData └─ Gear-related data for a workout. • WorkoutData └─ Complete workout data structure. Methods: - has_power_data() - duration_minutes() - distance_km() - get_summary() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/models/zones.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ZoneDefinition └─ Definition of a training zone. • ZoneCalculator └─ Calculator for various training zones. Methods: - get_power_zones() - get_heart_rate_zones() - calculate_zone_distribution() - get_zone_for_value() - get_cadence_zones() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/parsers/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/parsers/file_parser.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • FileParser └─ Parser for workout files in various formats. Methods: - __init__() - parse_file() - _parse_fit() - _extract_fit_session() - _fit_records_to_dataframe() - _extract_power_data() - _extract_heart_rate_data() - _extract_speed_data() - _extract_elevation_data() - _extract_gear_data() - _distance_window_indices() - _calculate_gradients() - _parse_tcx() - _parse_gpx() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/reports/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_analyzer_speed_and_normalized_naming.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • synthetic_workout_data() └─ Create a small, synthetic workout dataset for testing. • test_analyze_workout_includes_speed_analysis_and_normalized_summary() └─ Verify that `analyze_workout` returns 'speed_analysis' and a • test_backward_compatibility_aliases_present() └─ Verify that `analyze_workout` summary includes backward-comp ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_credentials.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • CredentialsSmokeTest Methods: - setUp() - tearDown() - test_case_A_email_and_password() - test_case_B_username_fallback_and_one_time_warning() - test_case_C_garmin_client_credential_sourcing() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_gear_estimation.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestGearEstimation Methods: - setUp() - tearDown() - _create_synthetic_df() - test_gear_ratio_estimation_basics() - test_smoothing_and_hysteresis_mock() - test_nan_handling() - test_missing_signals_behavior() - test_parser_integration() - test_analyzer_propagation() FUNCTIONS: • mock_estimate_gear_series() • mock_compute_gear_summary() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_gradients.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestGradientCalculations Methods: - setUp() - tearDown() - test_distance_windowing_correctness() - test_nan_handling() - test_fallback_distance_from_speed() - test_clamping_behavior() - test_smoothing_effect() - test_performance_guard() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_packaging_and_imports.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • run_command() └─ Helper to run a command and check for success. • wheel_path() └─ Builds the wheel and yields its path. • test_editable_install_validation() └─ Validates that an editable install is successful and the CLI • test_wheel_distribution_validation() └─ Validates the wheel build and a clean installation. • test_unsupported_file_types_raise_not_implemented_error() └─ Tests that parsing .tcx and .gpx files raises NotImplemented ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_power_estimate.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestPowerEstimation Methods: - setUp() - tearDown() - _create_mock_workout() - test_outdoor_physics_basics() - test_indoor_handling() - test_inputs_and_fallbacks() - test_nan_safety() - test_clamping_and_smoothing() - test_integration_via_analyze_workout() - test_logging() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_report_minute_by_minute.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • report_generator() • _create_synthetic_df() • test_aggregate_minute_by_minute_keys() • test_speed_and_distance_conversion() • test_distance_from_cumulative_column() • test_nan_safety_for_optional_metrics() • test_all_nan_metrics() • test_rounding_precision() • test_power_selection_logic() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_summary_report_template.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • MockWorkoutData Methods: - __init__() FUNCTIONS: • report_generator() • _get_full_summary() • _get_partial_summary() └─ Summary missing NP, IF, and TSS. • test_summary_report_generation_with_full_data() • test_summary_report_gracefully_handles_missing_data() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_template_rendering_normalized_vars.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • analysis_result() └─ Get analysis result from synthetic workout data. • test_template_rendering_with_normalized_variables() └─ Test that HTML and Markdown templates render successfully wi ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/tests/test_workout_templates_minute_section.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • report_generator() • _get_base_context() └─ Provides a minimal, valid context for rendering. • test_workout_report_renders_minute_section_when_present() • test_workout_report_omits_minute_section_when_absent() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/utils/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/utils/gear_estimation.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • estimate_gear_series() └─ Estimate gear per sample using speed and cadence data. • compute_gear_summary() └─ Compute summary statistics from gear series. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/visualizers/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/visualizers/chart_generator.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ChartGenerator └─ Generate various charts and visualizations for workout data. Methods: - __init__() - _get_avg_max_values() - _get_avg_max_labels() - generate_workout_charts() - _create_power_time_series() - _create_heart_rate_time_series() - _create_speed_time_series() - _create_elevation_time_series() - _create_power_distribution() - _create_heart_rate_distribution() - _create_speed_distribution() - _create_power_zones_chart() - _create_heart_rate_zones_chart() - _create_power_vs_heart_rate() - _create_power_vs_speed() - _create_workout_dashboard() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/build/lib/visualizers/report_generator.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ReportGenerator └─ Generate comprehensive workout reports in various formats. Methods: - __init__() - generate_workout_report() - _prepare_report_data() - _generate_html_report() - _generate_pdf_report() - _generate_markdown_report() - generate_summary_report() - _generate_summary_html_report() - _aggregate_workout_data() - _aggregate_minute_by_minute() - _format_duration() - _format_distance() - _format_speed() - _format_power() - _format_heart_rate() - create_report_templates() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/clients/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/clients/garmin_client.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • GarminClient └─ Client for interacting with Garmin Connect API. Methods: - __init__() - authenticate() - is_authenticated() - get_latest_activity() - get_activity_by_id() - download_activity_file() - download_activity_original() - get_activity_summary() - get_all_activities() - get_all_cycling_workouts() - get_workout_by_id() - download_workout_file() - download_all_workouts() - download_latest_workout() FUNCTIONS: • calculate_sha256() └─ Calculate the SHA256 checksum of a file. • upsert_activity_download() └─ Upsert an activity download record in the database. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/config/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/config/settings.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • BikeConfig └─ Bike configuration constants. FUNCTIONS: • get_garmin_credentials() └─ Get Garmin Connect credentials from environment variables. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/db/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/db/models.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ActivityDownload Methods: - __repr__() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/db/session.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • get_db() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/examples/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/examples/basic_analysis.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • analyze_workout() └─ Analyze a single workout file and generate reports. • main() └─ Main function for command line usage. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/garmin_download_fix.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • download_activity_file() └─ Download activity file in specified format. • download_activity_original() └─ Download original activity file (usually FIT format in a ZIP ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/main.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • GarminAnalyser └─ Main application class. Methods: - __init__() - _apply_analysis_overrides() - analyze_file() - batch_analyze_directory() - download_workouts() - reanalyze_workouts() - show_config() - generate_outputs() FUNCTIONS: • setup_logging() └─ Set up logging configuration. • parse_args() └─ Parse command line arguments. • main() └─ Main application entry point. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/models/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/models/workout.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • WorkoutMetadata └─ Metadata for a workout session. • PowerData └─ Power-related data for a workout. • HeartRateData └─ Heart rate data for a workout. • SpeedData └─ Speed and distance data for a workout. • ElevationData └─ Elevation and gradient data for a workout. • GearData └─ Gear-related data for a workout. • WorkoutData └─ Complete workout data structure. Methods: - has_power_data() - duration_minutes() - distance_km() - get_summary() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/models/zones.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ZoneDefinition └─ Definition of a training zone. • ZoneCalculator └─ Calculator for various training zones. Methods: - get_power_zones() - get_heart_rate_zones() - calculate_zone_distribution() - get_zone_for_value() - get_cadence_zones() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/parsers/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/parsers/file_parser.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • FileParser └─ Parser for workout files in various formats. Methods: - __init__() - parse_file() - _parse_fit() - _extract_fit_session() - _fit_records_to_dataframe() - _extract_power_data() - _extract_heart_rate_data() - _extract_speed_data() - _extract_elevation_data() - _extract_gear_data() - _distance_window_indices() - _calculate_gradients() - _parse_tcx() - _parse_gpx() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/reports/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/setup.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/test_installation.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • test_imports() └─ Test that all modules can be imported successfully. • test_configuration() └─ Test configuration loading. • test_basic_functionality() └─ Test basic functionality with mock data. • test_dependencies() └─ Test that all required dependencies are available. • main() └─ Run all tests. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_analyzer_speed_and_normalized_naming.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • synthetic_workout_data() └─ Create a small, synthetic workout dataset for testing. • test_analyze_workout_includes_speed_analysis_and_normalized_summary() └─ Verify that `analyze_workout` returns 'speed_analysis' and a • test_backward_compatibility_aliases_present() └─ Verify that `analyze_workout` summary includes backward-comp ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_credentials.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • CredentialsSmokeTest Methods: - setUp() - tearDown() - test_case_A_email_and_password() - test_case_B_username_fallback_and_one_time_warning() - test_case_C_garmin_client_credential_sourcing() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_download_missing.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestDownloadMissing └─ Test missing download functionality with --missing and --dry Methods: - setup_and_teardown() - _clean_database() - test_get_downloaded_activity_ids_from_db() - test_get_downloaded_activity_ids_empty_db() - test_get_downloaded_activity_ids_mixed_status() - test_find_missing_activities() - test_find_missing_activities_none_missing() - test_find_missing_activities_limit() - test_download_missing_activities_dry_run() - test_download_missing_activities_real_run() - test_download_missing_activities_with_limit() - test_download_missing_activities_with_force() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_download_tracking.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestDownloadTracking └─ Test download tracking functionality. Methods: - setup_and_teardown() - test_upsert_activity_download_success() - test_upsert_activity_download_failure() - test_upsert_activity_download_update_existing() - test_calculate_sha256() - test_should_skip_download_exists_and_matches() - test_should_skip_download_exists_checksum_mismatch() - test_should_skip_download_file_missing() - test_should_skip_download_no_record() - test_download_activity_with_db_integration() - test_force_download_override() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_gear_estimation.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestGearEstimation Methods: - setUp() - tearDown() - _create_synthetic_df() - test_gear_ratio_estimation_basics() - test_smoothing_and_hysteresis_mock() - test_nan_handling() - test_missing_signals_behavior() - test_parser_integration() - test_analyzer_propagation() FUNCTIONS: • mock_estimate_gear_series() • mock_compute_gear_summary() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_gradients.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestGradientCalculations Methods: - setUp() - tearDown() - test_distance_windowing_correctness() - test_nan_handling() - test_fallback_distance_from_speed() - test_clamping_behavior() - test_smoothing_effect() - test_performance_guard() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_packaging_and_imports.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • run_command() └─ Helper to run a command and check for success. • wheel_path() └─ Builds the wheel and yields its path. • test_editable_install_validation() └─ Validates that an editable install is successful and the CLI • test_wheel_distribution_validation() └─ Validates the wheel build and a clean installation. • test_unsupported_file_types_raise_not_implemented_error() └─ Tests that parsing .tcx and .gpx files raises NotImplemented ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_power_estimate.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • TestPowerEstimation Methods: - setUp() - tearDown() - _create_mock_workout() - test_outdoor_physics_basics() - test_indoor_handling() - test_inputs_and_fallbacks() - test_nan_safety() - test_clamping_and_smoothing() - test_integration_via_analyze_workout() - test_logging() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_report_minute_by_minute.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • report_generator() • _create_synthetic_df() • test_aggregate_minute_by_minute_keys() • test_speed_and_distance_conversion() • test_distance_from_cumulative_column() • test_nan_safety_for_optional_metrics() • test_all_nan_metrics() • test_rounding_precision() • test_power_selection_logic() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_summary_report_template.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • MockWorkoutData Methods: - __init__() FUNCTIONS: • report_generator() • _get_full_summary() • _get_partial_summary() └─ Summary missing NP, IF, and TSS. • test_summary_report_generation_with_full_data() • test_summary_report_gracefully_handles_missing_data() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_template_rendering_normalized_vars.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • analysis_result() └─ Get analysis result from synthetic workout data. • test_template_rendering_with_normalized_variables() └─ Test that HTML and Markdown templates render successfully wi ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/tests/test_workout_templates_minute_section.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • report_generator() • _get_base_context() └─ Provides a minimal, valid context for rendering. • test_workout_report_renders_minute_section_when_present() • test_workout_report_omits_minute_section_when_absent() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/utils/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/utils/gear_estimation.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • estimate_gear_series() └─ Estimate gear per sample using speed and cadence data. • compute_gear_summary() └─ Compute summary statistics from gear series. ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/visualizers/__init__.py ──────────────────────────────────────────────────────────────────────────────── (No classes or functions found) ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/visualizers/chart_generator.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ChartGenerator └─ Generate various charts and visualizations for workout data. Methods: - __init__() - _get_avg_max_values() - _get_avg_max_labels() - generate_workout_charts() - _create_power_time_series() - _create_heart_rate_time_series() - _create_speed_time_series() - _create_elevation_time_series() - _create_power_distribution() - _create_heart_rate_distribution() - _create_speed_distribution() - _create_power_zones_chart() - _create_heart_rate_zones_chart() - _create_power_vs_heart_rate() - _create_power_vs_speed() - _create_workout_dashboard() ──────────────────────────────────────────────────────────────────────────────── FILE: Garmin_Analyser/visualizers/report_generator.py ──────────────────────────────────────────────────────────────────────────────── CLASSES: • ReportGenerator └─ Generate comprehensive workout reports in various formats. Methods: - __init__() - generate_workout_report() - _prepare_report_data() - _generate_html_report() - _generate_pdf_report() - _generate_markdown_report() - generate_summary_report() - _generate_summary_html_report() - _aggregate_workout_data() - _aggregate_minute_by_minute() - _format_duration() - _format_distance() - _format_speed() - _format_power() - _format_heart_rate() - create_report_templates() ──────────────────────────────────────────────────────────────────────────────── FILE: python_project_mapper.py ──────────────────────────────────────────────────────────────────────────────── FUNCTIONS: • get_docstring() └─ Extract docstring from a node. • analyze_file() └─ Analyze a Python file and extract structure. • generate_project_map() └─ Generate a project map for LLM consumption.