Coverage report: 84%

Files Functions Classes

coverage.py v7.13.1, created at 2026-01-11 23:04 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src / tracekit / __init__.py (no function)   100% 48 0 0   100% 0 0   100%
src / tracekit / __main__.py get_samples_dir   100% 1 0 0   100% 0 0   100%
src / tracekit / __main__.py get_sample_files   100% 1 0 0   100% 0 0   100%
src / tracekit / __main__.py download_file   100% 21 0 0   100% 4 0   100%
src / tracekit / __main__.py generate_sample_file   100% 45 0 0   100% 10 0   100%
src / tracekit / __main__.py download_samples   100% 44 0 0   100% 12 0   100%
src / tracekit / __main__.py list_samples   100% 11 0 0   100% 2 0   100%
src / tracekit / __main__.py main   100% 19 0 2   100% 6 0   100%
src / tracekit / __main__.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / analyzers / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / __init__.py (no function)   100% 12 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / bus.py BusConfig.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / bus.py BusConfig.from_yaml   100% 10 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / bus.py BusConfig.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / bus.py ParallelBusConfig.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / bus.py ParallelBusConfig.to_bus_config   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / bus.py BusDecoder.__init__   100% 10 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / bus.py BusDecoder.decode_bus   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / bus.py BusDecoder.decode_parallel   100% 19 0 0   100% 14 0   100%
src / tracekit / analyzers / digital / bus.py BusDecoder.decode_with_clock   92% 24 2 0   89% 18 2   90%
src / tracekit / analyzers / digital / bus.py BusDecoder.decode_transactions   94% 31 2 0   92% 24 2   93%
src / tracekit / analyzers / digital / bus.py BusDecoder.sample_at_clock   91% 22 2 0   83% 12 2   88%
src / tracekit / analyzers / digital / bus.py BusDecoder.sample_at_intervals   95% 21 1 0   92% 12 1   94%
src / tracekit / analyzers / digital / bus.py BusDecoder._reconstruct_value   100% 12 0 0   100% 12 0   100%
src / tracekit / analyzers / digital / bus.py BusDecoder._apply_active_low   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / bus.py decode_bus   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / bus.py sample_at_clock   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / bus.py (no function)   100% 48 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery.__init__   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery._get_sample_rate   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery._get_trace_data   67% 3 1 0   50% 2 1   60%
src / tracekit / analyzers / digital / clock.py ClockRecovery.detect_frequency   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery.detect_clock_frequency   100% 11 0 0   100% 10 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery.recover_clock   93% 15 1 0   88% 8 1   91%
src / tracekit / analyzers / digital / clock.py ClockRecovery.detect_baud_rate   95% 21 1 0   88% 8 1   93%
src / tracekit / analyzers / digital / clock.py ClockRecovery.measure_clock_jitter   91% 34 3 0   75% 16 4   86%
src / tracekit / analyzers / digital / clock.py ClockRecovery._detect_frequency_edge   100% 10 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery._detect_frequency_fft   87% 15 2 0   50% 4 2   79%
src / tracekit / analyzers / digital / clock.py ClockRecovery._detect_frequency_autocorr   83% 12 2 0   50% 4 2   75%
src / tracekit / analyzers / digital / clock.py ClockRecovery._pll_track   96% 24 1 0   83% 6 1   93%
src / tracekit / analyzers / digital / clock.py ClockRecovery._detect_edges_simple   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / clock.py ClockRecovery._detect_edges_by_type   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / clock.py detect_clock_frequency   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / clock.py recover_clock   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / clock.py detect_baud_rate   100% 11 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / clock.py measure_clock_jitter   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / clock.py (no function)   100% 43 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py CorrelatedChannels.__init__   100% 10 0 0   100% 6 0   100%
src / tracekit / analyzers / digital / correlation.py CorrelatedChannels.channel_names   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py CorrelatedChannels.get_channel   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py CorrelatedChannels.get_time_vector   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.correlate   100% 15 0 0   100% 6 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.find_lag   100% 10 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.correlation_matrix   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.correlate_channels   100% 22 0 0   100% 6 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.align_by_trigger   91% 22 2 0   92% 12 1   91%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.resample_to_common_rate   96% 23 1 0   93% 14 1   95%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator.auto_align   97% 29 1 0   94% 18 1   96%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator._estimate_correlation_confidence   85% 13 2 0   50% 4 2   76%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator._classify_correlation_quality   100% 8 0 0   100% 6 0   100%
src / tracekit / analyzers / digital / correlation.py ChannelCorrelator._find_first_edge   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / correlation.py correlate_channels   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py align_by_trigger   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py resample_to_common_rate   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / correlation.py (no function)   100% 35 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / edges.py detect_edges   100% 36 0 0   100% 16 0   100%
src / tracekit / analyzers / digital / edges.py interpolate_edge_time   94% 17 1 0   80% 10 2   89%
src / tracekit / analyzers / digital / edges.py measure_edge_timing   100% 26 0 0   90% 10 1   97%
src / tracekit / analyzers / digital / edges.py check_timing_constraints   100% 21 0 0   100% 18 0   100%
src / tracekit / analyzers / digital / edges.py classify_edge_quality   57% 28 12 0   39% 18 1   50%
src / tracekit / analyzers / digital / edges.py EdgeDetector.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / edges.py EdgeDetector.detect_all_edges   100% 14 0 0   88% 8 1   95%
src / tracekit / analyzers / digital / edges.py EdgeDetector.detect_rising_edges   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / edges.py EdgeDetector.detect_falling_edges   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / edges.py EdgeDetector.measure_timing   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / edges.py (no function)   100% 49 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / extraction.py to_digital   100% 16 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / extraction.py _apply_hysteresis   100% 10 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / extraction.py detect_edges   100% 16 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / extraction.py _detect_edges_internal   100% 19 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / extraction.py _interpolate_edges   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / extraction.py _interpolate_crossing   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / extraction.py get_logic_threshold   100% 11 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / extraction.py (no function)   100% 14 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / quality.py noise_margin   100% 16 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / quality.py detect_violations   100% 17 0 0   100% 12 0   100%
src / tracekit / analyzers / digital / quality.py detect_glitches   93% 46 3 0   88% 24 3   91%
src / tracekit / analyzers / digital / quality.py signal_quality_summary   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / quality.py _find_logic_levels   81% 16 3 0   75% 4 1   80%
src / tracekit / analyzers / digital / quality.py _get_clock_edges   90% 21 2 0   80% 10 2   87%
src / tracekit / analyzers / digital / quality.py mask_test   100% 39 0 0   100% 16 0   100%
src / tracekit / analyzers / digital / quality.py _get_predefined_mask   100% 10 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / quality.py pll_clock_recovery   92% 53 4 0   71% 14 4   88%
src / tracekit / analyzers / digital / quality.py (no function)   100% 57 0 3   100% 0 0   100%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.__init__   100% 15 0 0   100% 6 0   100%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.analyze   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer._analyze_simple   90% 21 2 0   80% 10 2   87%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer._measure_rise_fall_samples   93% 42 3 0   70% 20 6   85%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer._detect_overshoot_simple   93% 14 1 0   75% 4 1   89%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer._calculate_duty_cycle   83% 6 1 0   75% 4 1   80%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer._analyze_full   91% 34 3 0   90% 20 2   91%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.measure_noise_margins   100% 27 0 0   100% 10 0   100%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.measure_transitions   100% 42 0 0   79% 14 3   95%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.detect_overshoot   94% 18 1 0   75% 4 1   91%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.detect_ringing   91% 32 3 0   90% 10 1   90%
src / tracekit / analyzers / digital / signal_quality.py SignalQualityAnalyzer.calculate_snr   100% 14 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / signal_quality.py measure_noise_margins   86% 7 1 0   50% 2 1   78%
src / tracekit / analyzers / digital / signal_quality.py analyze_signal_integrity   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / signal_quality.py (no function)   100% 59 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / thresholds.py AdaptiveThresholder.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / thresholds.py AdaptiveThresholder.apply   100% 30 0 0   90% 10 1   98%
src / tracekit / analyzers / digital / thresholds.py AdaptiveThresholder.calculate_threshold_profile   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / thresholds.py AdaptiveThresholder._apply_with_hysteresis   100% 20 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / thresholds.py AdaptiveThresholder._otsu_threshold   96% 25 1 0   80% 10 2   91%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector.__init__   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector.detect   100% 10 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector.detect_levels_from_histogram   67% 3 1 0   50% 2 1   60%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector.calculate_eye_diagram   100% 9 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector._detect_levels   100% 15 0 0   100% 8 0   100%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector._detect_with_hysteresis   100% 24 0 0   100% 14 0   100%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector._find_closest_level   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / thresholds.py MultiLevelDetector._calculate_eye_heights   100% 13 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / thresholds.py apply_adaptive_threshold   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / thresholds.py detect_multi_level   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / digital / thresholds.py calculate_threshold_snr   100% 13 0 0   100% 6 0   100%
src / tracekit / analyzers / digital / thresholds.py (no function)   100% 45 0 2   100% 0 0   100%
src / tracekit / analyzers / digital / timing.py propagation_delay   100% 21 0 0   94% 16 1   97%
src / tracekit / analyzers / digital / timing.py setup_time   88% 24 3 0   83% 18 1   86%
src / tracekit / analyzers / digital / timing.py hold_time   96% 24 1 0   94% 18 1   95%
src / tracekit / analyzers / digital / timing.py slew_rate   89% 44 5 0   70% 30 7   81%
src / tracekit / analyzers / digital / timing.py phase   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / timing.py _phase_edge   90% 20 2 0   80% 10 2   87%
src / tracekit / analyzers / digital / timing.py _phase_fft   94% 16 1 0   75% 4 1   90%
src / tracekit / analyzers / digital / timing.py skew   94% 32 2 0   88% 16 2   92%
src / tracekit / analyzers / digital / timing.py recover_clock_fft   100% 34 0 0   100% 12 0   100%
src / tracekit / analyzers / digital / timing.py recover_clock_edge   88% 17 2 0   67% 6 2   83%
src / tracekit / analyzers / digital / timing.py _get_edge_timestamps   94% 33 2 0   80% 20 4   89%
src / tracekit / analyzers / digital / timing.py _find_levels   93% 14 1 0   50% 2 1   88%
src / tracekit / analyzers / digital / timing.py rms_jitter   91% 11 1 0   75% 4 1   87%
src / tracekit / analyzers / digital / timing.py peak_to_peak_jitter   88% 8 1 0   75% 4 1   83%
src / tracekit / analyzers / digital / timing.py time_interval_error   100% 11 0 0   100% 4 0   100%
src / tracekit / analyzers / digital / timing.py (no function)   100% 44 0 2   100% 0 0   100%
src / tracekit / analyzers / eye / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / eye / diagram.py generate_eye   98% 44 1 0   94% 18 1   97%
src / tracekit / analyzers / eye / diagram.py generate_eye_from_edges   97% 30 1 0   92% 12 1   95%
src / tracekit / analyzers / eye / diagram.py auto_center_eye_diagram   97% 37 1 0   89% 18 2   95%
src / tracekit / analyzers / eye / diagram.py (no function)   100% 20 0 3   100% 0 0   100%
src / tracekit / analyzers / eye / metrics.py eye_height   0% 32 32 0   0% 10 0   0%
src / tracekit / analyzers / eye / metrics.py eye_width   0% 39 39 0   0% 16 0   0%
src / tracekit / analyzers / eye / metrics.py q_factor   0% 28 28 0   0% 8 0   0%
src / tracekit / analyzers / eye / metrics.py crossing_percentage   0% 27 27 0   0% 14 0   0%
src / tracekit / analyzers / eye / metrics.py eye_contour   0% 39 39 0   0% 14 0   0%
src / tracekit / analyzers / eye / metrics.py measure_eye   0% 30 30 0   0% 6 0   0%
src / tracekit / analyzers / eye / metrics.py (no function)   100% 26 0 3   100% 0 0   100%
src / tracekit / analyzers / jitter / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / tracekit / analyzers / jitter / ber.py q_factor_from_ber   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / jitter / ber.py ber_from_q_factor   75% 4 1 0   50% 2 1   67%
src / tracekit / analyzers / jitter / ber.py tj_at_ber   89% 9 1 0   83% 6 1   87%
src / tracekit / analyzers / jitter / ber.py bathtub_curve   82% 33 6 0   67% 6 2   79%
src / tracekit / analyzers / jitter / ber.py _calculate_eye_opening   80% 5 1 0   50% 2 1   71%
src / tracekit / analyzers / jitter / ber.py eye_opening_at_ber   83% 6 1 0   50% 2 1   75%
src / tracekit / analyzers / jitter / ber.py (no function)   100% 21 0 2   100% 0 0   100%
src / tracekit / analyzers / jitter / decomposition.py extract_rj   100% 12 0 0   100% 10 0   100%
src / tracekit / analyzers / jitter / decomposition.py _extract_rj_tail_fit   79% 28 6 0   50% 4 2   75%
src / tracekit / analyzers / jitter / decomposition.py _extract_rj_q_scale   87% 23 3 0   50% 2 1   84%
src / tracekit / analyzers / jitter / decomposition.py extract_dj   98% 40 1 0   86% 14 2   94%
src / tracekit / analyzers / jitter / decomposition.py extract_pj   88% 34 4 0   88% 8 1   88%
src / tracekit / analyzers / jitter / decomposition.py extract_ddj   97% 36 1 0   88% 16 2   94%
src / tracekit / analyzers / jitter / decomposition.py decompose_jitter   100% 9 0 0   100% 4 0   100%
src / tracekit / analyzers / jitter / decomposition.py (no function)   100% 50 0 2   100% 0 0   100%
src / tracekit / analyzers / jitter / measurements.py tie_from_edges   100% 10 0 0   100% 4 0   100%
src / tracekit / analyzers / jitter / measurements.py cycle_to_cycle_jitter   100% 16 0 0   100% 6 0   100%
src / tracekit / analyzers / jitter / measurements.py period_jitter   100% 7 0 0   100% 4 0   100%
src / tracekit / analyzers / jitter / measurements.py measure_dcd   96% 24 1 0   93% 14 1   95%
src / tracekit / analyzers / jitter / measurements.py _find_edges   94% 33 2 0   80% 10 2   91%
src / tracekit / analyzers / jitter / measurements.py (no function)   100% 31 0 2   100% 0 0   100%
src / tracekit / analyzers / jitter / spectrum.py jitter_spectrum   100% 32 0 0   100% 12 0   100%
src / tracekit / analyzers / jitter / spectrum.py identify_periodic_components   100% 11 0 0   100% 4 0   100%
src / tracekit / analyzers / jitter / spectrum.py (no function)   100% 17 0 2   100% 0 0   100%
src / tracekit / analyzers / measurements.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / daq.py FuzzyMatch.is_exact   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / daq.py detect_gaps   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / packet / daq.py detect_gaps_by_timestamps   100% 23 0 0   90% 10 1   97%
src / tracekit / analyzers / packet / daq.py detect_gaps_by_samples   93% 30 2 0   67% 12 4   86%
src / tracekit / analyzers / packet / daq.py fuzzy_pattern_search   100% 20 0 0   100% 12 0   100%
src / tracekit / analyzers / packet / daq.py _extract_bits   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / packet / daq.py robust_packet_parse   85% 34 5 0   79% 14 3   83%
src / tracekit / analyzers / packet / daq.py compensate_timestamp_jitter   98% 42 1 0   92% 12 1   96%
src / tracekit / analyzers / packet / daq.py error_tolerant_decode   100% 11 0 0   100% 8 0   100%
src / tracekit / analyzers / packet / daq.py _decode_uart_tolerant   100% 10 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / daq.py _decode_spi_tolerant   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / packet / daq.py _decode_i2c_tolerant   94% 16 1 0   88% 8 1   92%
src / tracekit / analyzers / packet / daq.py analyze_bit_errors   100% 44 0 0   100% 22 0   100%
src / tracekit / analyzers / packet / daq.py _diagnose_errors   76% 21 5 0   80% 10 2   77%
src / tracekit / analyzers / packet / daq.py (no function)   100% 76 0 3   100% 0 0   100%
src / tracekit / analyzers / packet / metrics.py throughput   100% 12 0 0   100% 4 0   100%
src / tracekit / analyzers / packet / metrics.py jitter   100% 13 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / metrics.py loss_rate   100% 18 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / metrics.py latency   100% 12 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / metrics.py windowed_throughput   100% 19 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / metrics.py (no function)   100% 47 0 3   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.format   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.size   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.unpack   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.unpack_from   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.pack   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py BinaryParser.iter_unpack   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py PacketParser.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py PacketParser.size   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py PacketParser.parse   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py PacketParser.pack   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / parser.py parse_tlv   100% 20 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / parser.py parse_tlv_nested   100% 9 0 0   100% 4 0   100%
src / tracekit / analyzers / packet / parser.py (no function)   100% 29 0 2   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py FieldInferrer.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py FieldInferrer.infer_fields   94% 17 1 0   83% 6 1   91%
src / tracekit / analyzers / packet / payload.py FieldInferrer.detect_field_types   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / packet / payload.py FieldInferrer.find_sequence_fields   74% 19 5 0   83% 12 2   77%
src / tracekit / analyzers / packet / payload.py FieldInferrer.find_checksum_fields   11% 19 17 0   8% 12 1   10%
src / tracekit / analyzers / packet / payload.py FieldInferrer._detect_field_boundaries   97% 32 1 0   82% 22 4   91%
src / tracekit / analyzers / packet / payload.py FieldInferrer._infer_field   87% 39 5 0   88% 16 2   87%
src / tracekit / analyzers / packet / payload.py FieldInferrer._infer_type   46% 35 19 0   55% 20 3   49%
src / tracekit / analyzers / packet / payload.py FieldInferrer._is_sequence   78% 9 2 0   50% 4 2   69%
src / tracekit / analyzers / packet / payload.py FieldInferrer._check_checksum_correlation   11% 18 16 0   8% 12 1   10%
src / tracekit / analyzers / packet / payload.py FieldInferrer._guess_checksum_algorithm   0% 7 7 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload.py infer_fields   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py detect_field_types   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py find_sequence_fields   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py find_checksum_fields   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py PayloadExtractor.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py PayloadExtractor.extract_payload   90% 10 1 0   88% 8 1   89%
src / tracekit / analyzers / packet / payload.py PayloadExtractor.extract_all_payloads   77% 22 5 0   79% 14 3   78%
src / tracekit / analyzers / packet / payload.py PayloadExtractor.iter_payloads   75% 8 2 0   67% 6 2   71%
src / tracekit / analyzers / packet / payload.py PayloadExtractor._format_output   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / packet / payload.py search_pattern   92% 13 1 0   83% 6 1   89%
src / tracekit / analyzers / packet / payload.py search_patterns   84% 19 3 0   75% 12 3   81%
src / tracekit / analyzers / packet / payload.py filter_by_pattern   90% 10 1 0   83% 6 1   88%
src / tracekit / analyzers / packet / payload.py detect_delimiter   88% 41 5 0   79% 24 5   85%
src / tracekit / analyzers / packet / payload.py detect_length_prefix   88% 17 2 0   86% 14 2   87%
src / tracekit / analyzers / packet / payload.py find_message_boundaries   88% 26 3 0   80% 20 4   85%
src / tracekit / analyzers / packet / payload.py segment_messages   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload.py diff_payloads   100% 28 0 0   100% 22 0   100%
src / tracekit / analyzers / packet / payload.py find_common_bytes   83% 12 2 0   62% 8 3   75%
src / tracekit / analyzers / packet / payload.py find_variable_positions   94% 17 1 0   83% 6 1   91%
src / tracekit / analyzers / packet / payload.py compute_similarity   28% 18 13 0   25% 8 2   27%
src / tracekit / analyzers / packet / payload.py cluster_payloads   60% 5 2 0   50% 4 2   56%
src / tracekit / analyzers / packet / payload.py correlate_request_response   88% 16 2 0   75% 12 3   82%
src / tracekit / analyzers / packet / payload.py _find_pattern_in_data   61% 28 11 0   56% 18 4   59%
src / tracekit / analyzers / packet / payload.py _test_length_prefix   100% 17 0 0   100% 8 0   100%
src / tracekit / analyzers / packet / payload.py _extract_length_prefixed_messages   83% 18 3 0   62% 8 3   77%
src / tracekit / analyzers / packet / payload.py _levenshtein_distance   100% 14 0 0   100% 8 0   100%
src / tracekit / analyzers / packet / payload.py _fast_similarity   27% 48 35 0   13% 38 5   21%
src / tracekit / analyzers / packet / payload.py _cluster_greedy_optimized   89% 28 3 0   79% 14 3   86%
src / tracekit / analyzers / packet / payload.py _cluster_greedy   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload.py _cluster_dbscan   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload.py (no function)   100% 136 0 0   100% 0 0   100%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer.__init__   0% 3 3 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer.infer_fields   0% 17 17 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer.detect_field_types   0% 5 5 0   0% 2 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer.find_sequence_fields   0% 19 19 0   0% 12 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer.find_checksum_fields   0% 19 19 0   0% 12 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer._detect_field_boundaries   0% 32 32 0   0% 22 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer._infer_field   0% 39 39 0   0% 16 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer._infer_type   0% 35 35 0   0% 20 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer._is_sequence   0% 9 9 0   0% 4 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer._check_checksum_correlation   0% 18 18 0   0% 12 0   0%
src / tracekit / analyzers / packet / payload_analysis.py FieldInferrer._guess_checksum_algorithm   0% 7 7 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload_analysis.py infer_fields   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py detect_field_types   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py find_sequence_fields   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py find_checksum_fields   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py diff_payloads   0% 28 28 0   0% 22 0   0%
src / tracekit / analyzers / packet / payload_analysis.py find_common_bytes   0% 12 12 0   0% 8 0   0%
src / tracekit / analyzers / packet / payload_analysis.py find_variable_positions   0% 17 17 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload_analysis.py compute_similarity   0% 18 18 0   0% 8 0   0%
src / tracekit / analyzers / packet / payload_analysis.py cluster_payloads   0% 5 5 0   0% 4 0   0%
src / tracekit / analyzers / packet / payload_analysis.py correlate_request_response   0% 16 16 0   0% 12 0   0%
src / tracekit / analyzers / packet / payload_analysis.py _levenshtein_distance   0% 14 14 0   0% 8 0   0%
src / tracekit / analyzers / packet / payload_analysis.py _fast_similarity   0% 47 47 0   0% 36 0   0%
src / tracekit / analyzers / packet / payload_analysis.py _cluster_greedy_optimized   0% 28 28 0   0% 14 0   0%
src / tracekit / analyzers / packet / payload_analysis.py _cluster_greedy   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py _cluster_dbscan   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_analysis.py (no function)   0% 78 78 2   100% 0 0   0%
src / tracekit / analyzers / packet / payload_extraction.py PayloadExtractor.__init__   0% 3 3 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_extraction.py PayloadExtractor.extract_payload   0% 10 10 0   0% 8 0   0%
src / tracekit / analyzers / packet / payload_extraction.py PayloadExtractor.extract_all_payloads   0% 22 22 0   0% 14 0   0%
src / tracekit / analyzers / packet / payload_extraction.py PayloadExtractor.iter_payloads   0% 8 8 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload_extraction.py PayloadExtractor._format_output   0% 5 5 0   0% 4 0   0%
src / tracekit / analyzers / packet / payload_extraction.py (no function)   0% 24 24 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_patterns.py search_pattern   0% 13 13 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload_patterns.py search_patterns   0% 19 19 0   0% 12 0   0%
src / tracekit / analyzers / packet / payload_patterns.py filter_by_pattern   0% 10 10 0   0% 6 0   0%
src / tracekit / analyzers / packet / payload_patterns.py detect_delimiter   0% 41 41 0   0% 24 0   0%
src / tracekit / analyzers / packet / payload_patterns.py detect_length_prefix   0% 17 17 0   0% 14 0   0%
src / tracekit / analyzers / packet / payload_patterns.py find_message_boundaries   0% 26 26 0   0% 20 0   0%
src / tracekit / analyzers / packet / payload_patterns.py segment_messages   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / packet / payload_patterns.py _find_pattern_in_data   0% 28 28 0   0% 18 0   0%
src / tracekit / analyzers / packet / payload_patterns.py _test_length_prefix   0% 17 17 0   0% 8 0   0%
src / tracekit / analyzers / packet / payload_patterns.py _extract_length_prefixed_messages   0% 18 18 0   0% 8 0   0%
src / tracekit / analyzers / packet / payload_patterns.py (no function)   0% 47 47 0   100% 0 0   0%
src / tracekit / analyzers / packet / stream.py stream_file   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / packet / stream.py stream_records   100% 16 0 0   100% 8 0   100%
src / tracekit / analyzers / packet / stream.py stream_packets   97% 30 1 0   93% 14 1   95%
src / tracekit / analyzers / packet / stream.py stream_delimited   100% 27 0 0   100% 16 0   100%
src / tracekit / analyzers / packet / stream.py pipeline   100% 4 0 1   100% 2 0   100%
src / tracekit / analyzers / packet / stream.py batch   100% 8 0 0   100% 6 0   100%
src / tracekit / analyzers / packet / stream.py take   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / packet / stream.py skip   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / packet / stream.py (no function)   100% 21 0 2   100% 0 0   100%
src / tracekit / analyzers / patterns / __init__.py find_motifs   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / __init__.py extract_motif   0% 5 5 0   100% 0 0   0%
src / tracekit / analyzers / patterns / __init__.py detect_anomalies   89% 9 1 0   50% 2 1   82%
src / tracekit / analyzers / patterns / __init__.py cluster_patterns   67% 3 1 0   50% 2 1   60%
src / tracekit / analyzers / patterns / __init__.py pattern_similarity   78% 9 2 0   50% 4 2   69%
src / tracekit / analyzers / patterns / __init__.py (no function)   100% 15 0 3   100% 0 0   100%
src / tracekit / analyzers / patterns / clustering.py ClusterResult.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / clustering.py ClusteringResult.__post_init__   100% 2 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / clustering.py cluster_by_hamming   97% 38 1 0   95% 22 1   97%
src / tracekit / analyzers / patterns / clustering.py cluster_by_edit_distance   97% 35 1 0   94% 18 1   96%
src / tracekit / analyzers / patterns / clustering.py cluster_hierarchical   96% 27 1 0   90% 10 1   95%
src / tracekit / analyzers / patterns / clustering.py analyze_cluster   100% 18 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / clustering.py compute_distance_matrix   100% 14 0 0   100% 10 0   100%
src / tracekit / analyzers / patterns / clustering.py _to_array   100% 12 0 0   100% 8 0   100%
src / tracekit / analyzers / patterns / clustering.py _hamming_distance   100% 8 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / clustering.py _edit_distance   100% 19 0 0   100% 12 0   100%
src / tracekit / analyzers / patterns / clustering.py _jaccard_distance   89% 9 1 0   75% 4 1   85%
src / tracekit / analyzers / patterns / clustering.py _compute_centroid_hamming   100% 9 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / clustering.py _compute_centroid_edit   75% 8 2 0   50% 4 2   67%
src / tracekit / analyzers / patterns / clustering.py _analyze_pattern_variance   100% 12 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / clustering.py _compute_byte_entropy   100% 11 0 0   83% 6 1   94%
src / tracekit / analyzers / patterns / clustering.py _compute_silhouette_score   93% 30 2 0   85% 20 3   90%
src / tracekit / analyzers / patterns / clustering.py _hierarchical_clustering   100% 24 0 0   94% 18 1   98%
src / tracekit / analyzers / patterns / clustering.py _linkage_distance   80% 10 2 0   75% 8 2   78%
src / tracekit / analyzers / patterns / clustering.py PatternClusterer.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / clustering.py PatternClusterer.cluster   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / clustering.py PatternClusterer.fit   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / clustering.py PatternClusterer.fit_predict   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / clustering.py PatternClusterer.get_clusters   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / clustering.py PatternClusterer.get_silhouette_score   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / clustering.py (no function)   100% 43 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / discovery.py CandidateSignature.__post_init__   100% 8 0 0   100% 8 0   100%
src / tracekit / analyzers / patterns / discovery.py SignatureDiscovery.__init__   100% 9 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / discovery.py SignatureDiscovery.discover_signatures   100% 23 0 0   100% 12 0   100%
src / tracekit / analyzers / patterns / discovery.py SignatureDiscovery.find_header_candidates   92% 12 1 0   83% 6 1   89%
src / tracekit / analyzers / patterns / discovery.py SignatureDiscovery.find_delimiter_candidates   96% 27 1 0   92% 12 1   95%
src / tracekit / analyzers / patterns / discovery.py SignatureDiscovery.rank_signatures   100% 13 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / discovery.py SignatureDiscovery._calculate_score   90% 10 1 0   50% 2 1   83%
src / tracekit / analyzers / patterns / discovery.py discover_signatures   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / discovery.py find_header_candidates   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / discovery.py find_delimiter_candidates   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / discovery.py _to_bytes   100% 7 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / discovery.py _calculate_entropy   100% 10 0 0   83% 6 1   94%
src / tracekit / analyzers / patterns / discovery.py (no function)   100% 29 0 2   100% 0 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.add_sample   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.add_samples   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.learn_patterns   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.learn_structure   100% 9 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.predict_next_bytes   100% 18 0 0   100% 12 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner.build_ngram_model   100% 11 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner._build_ngram_models   100% 2 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner._find_candidates   89% 9 1 0   88% 8 1   88%
src / tracekit / analyzers / patterns / learning.py PatternLearner._score_patterns   100% 19 0 0   100% 8 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner._calculate_pattern_confidence   100% 14 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner._get_context   100% 23 0 0   100% 14 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner._is_structural   90% 10 1 0   88% 8 1   89%
src / tracekit / analyzers / patterns / learning.py PatternLearner._is_delimiter   92% 12 1 0   90% 10 1   91%
src / tracekit / analyzers / patterns / learning.py PatternLearner._detect_field_boundaries   67% 9 3 0   50% 2 1   64%
src / tracekit / analyzers / patterns / learning.py PatternLearner._infer_field_types   17% 12 10 0   25% 4 1   19%
src / tracekit / analyzers / patterns / learning.py PatternLearner._classify_field   89% 18 2 0   79% 14 3   84%
src / tracekit / analyzers / patterns / learning.py PatternLearner._estimate_header_size   33% 6 4 0   17% 6 1   25%
src / tracekit / analyzers / patterns / learning.py PatternLearner._detect_record_size   100% 12 0 0   88% 8 1   95%
src / tracekit / analyzers / patterns / learning.py PatternLearner._find_delimiters   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / learning.py PatternLearner._calculate_structure_confidence   69% 13 4 0   60% 10 4   65%
src / tracekit / analyzers / patterns / learning.py learn_patterns_from_data   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / learning.py infer_structure   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / learning.py find_recurring_structures   94% 18 1 0   83% 12 2   90%
src / tracekit / analyzers / patterns / learning.py (no function)   100% 55 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py BinaryRegex.__post_init__   100% 5 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py BinaryRegex._convert_to_regex   89% 70 8 0   87% 38 5   88%
src / tracekit / analyzers / patterns / matching.py BinaryRegex.match   83% 6 1 0   75% 4 1   80%
src / tracekit / analyzers / patterns / matching.py BinaryRegex.search   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / matching.py BinaryRegex.findall   83% 6 1 0   75% 4 1   80%
src / tracekit / analyzers / patterns / matching.py AhoCorasickMatcher.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py AhoCorasickMatcher.add_pattern   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / matching.py AhoCorasickMatcher.add_patterns   100% 2 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / matching.py AhoCorasickMatcher.build   93% 27 2 0   81% 16 3   88%
src / tracekit / analyzers / patterns / matching.py AhoCorasickMatcher.search   100% 13 0 0   100% 10 0   100%
src / tracekit / analyzers / patterns / matching.py AhoCorasickMatcher.iter_search   100% 11 0 0   100% 10 0   100%
src / tracekit / analyzers / patterns / matching.py FuzzyMatcher.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py FuzzyMatcher.min_similarity   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / matching.py FuzzyMatcher.search   95% 19 1 0   94% 16 1   94%
src / tracekit / analyzers / patterns / matching.py FuzzyMatcher.match_with_wildcards   80% 20 4 0   57% 14 4   71%
src / tracekit / analyzers / patterns / matching.py FuzzyMatcher._edit_distance_detailed   97% 35 1 0   88% 26 3   93%
src / tracekit / analyzers / patterns / matching.py FuzzyMatcher._remove_overlapping   100% 11 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / matching.py binary_regex_search   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py multi_pattern_search   100% 8 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / matching.py fuzzy_search   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py find_similar_sequences   89% 37 4 0   82% 22 4   86%
src / tracekit / analyzers / patterns / matching.py _edit_distance_with_threshold   67% 6 2 0   50% 4 2   60%
src / tracekit / analyzers / patterns / matching.py _banded_edit_distance   95% 37 2 0   85% 20 3   91%
src / tracekit / analyzers / patterns / matching.py count_pattern_occurrences   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / matching.py find_pattern_positions   100% 11 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / matching.py (no function)   100% 57 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / periodic.py PeriodResult.period   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / periodic.py PeriodResult.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / periodic.py detect_period   97% 32 1 0   96% 24 1   96%
src / tracekit / analyzers / patterns / periodic.py detect_periods_fft   97% 39 1 0   94% 18 1   96%
src / tracekit / analyzers / patterns / periodic.py detect_periods_autocorr   100% 28 0 0   100% 10 0   100%
src / tracekit / analyzers / patterns / periodic.py validate_period   95% 20 1 0   88% 8 1   93%
src / tracekit / analyzers / patterns / periodic.py _compute_lag_correlation   100% 12 0 0   100% 4 0   100%
src / tracekit / analyzers / patterns / periodic.py _find_spectral_peaks   100% 18 0 0   92% 12 1   97%
src / tracekit / analyzers / patterns / periodic.py _detect_period_suffix   94% 17 1 0   92% 12 1   93%
src / tracekit / analyzers / patterns / periodic.py PeriodicPatternDetector.__init__   100% 6 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / periodic.py PeriodicPatternDetector.detect_period   100% 9 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / periodic.py PeriodicPatternDetector.detect_multiple_periods   100% 6 0 0   100% 2 0   100%
src / tracekit / analyzers / patterns / periodic.py PeriodicPatternDetector.validate   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / periodic.py (no function)   100% 28 0 2   100% 0 0   100%
src / tracekit / analyzers / patterns / sequences.py RepeatingSequence.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / sequences.py find_repeating_sequences   100% 22 0 0   100% 16 0   100%
src / tracekit / analyzers / patterns / sequences.py find_frequent_ngrams   100% 28 0 0   100% 16 0   100%
src / tracekit / analyzers / patterns / sequences.py find_longest_repeat   95% 19 1 0   90% 10 1   93%
src / tracekit / analyzers / patterns / sequences.py find_approximate_repeats   95% 56 3 0   91% 32 3   93%
src / tracekit / analyzers / patterns / sequences.py _to_bytes   100% 7 0 0   100% 6 0   100%
src / tracekit / analyzers / patterns / sequences.py _build_suffix_array   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / sequences.py _build_lcp_array   94% 17 1 0   92% 12 1   93%
src / tracekit / analyzers / patterns / sequences.py _edit_distance   0% 15 15 0   0% 10 0   0%
src / tracekit / analyzers / patterns / sequences.py _edit_distance_optimized   87% 23 3 0   81% 16 3   85%
src / tracekit / analyzers / patterns / sequences.py _banded_edit_distance_simple   71% 34 10 0   50% 22 5   62%
src / tracekit / analyzers / patterns / sequences.py RepeatingSequenceFinder.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / sequences.py RepeatingSequenceFinder.find_sequences   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / sequences.py RepeatingSequenceFinder.find_ngrams   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / sequences.py RepeatingSequenceFinder.find_longest   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / patterns / sequences.py (no function)   100% 36 0 2   100% 0 0   100%
src / tracekit / analyzers / power / __init__.py (no function)   100% 8 0 0   100% 0 0   100%
src / tracekit / analyzers / power / ac_power.py phase_angle   80% 20 4 0   50% 2 1   77%
src / tracekit / analyzers / power / ac_power.py reactive_power   100% 9 0 0   100% 0 0   100%
src / tracekit / analyzers / power / ac_power.py apparent_power   100% 8 0 0   100% 0 0   100%
src / tracekit / analyzers / power / ac_power.py power_factor   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / power / ac_power.py displacement_power_factor   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / power / ac_power.py distortion_power_factor   80% 5 1 0   50% 2 1   71%
src / tracekit / analyzers / power / ac_power.py total_harmonic_distortion_power   95% 19 1 0   75% 8 2   89%
src / tracekit / analyzers / power / ac_power.py _extract_fundamental   100% 9 0 0   100% 0 0   100%
src / tracekit / analyzers / power / ac_power.py three_phase_power   100% 11 0 0   100% 0 0   100%
src / tracekit / analyzers / power / ac_power.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / analyzers / power / basic.py instantaneous_power   100% 24 0 0   100% 6 0   100%
src / tracekit / analyzers / power / basic.py average_power   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / power / basic.py rms_power   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / power / basic.py peak_power   100% 7 0 0   100% 6 0   100%
src / tracekit / analyzers / power / basic.py energy   100% 16 0 0   100% 10 0   100%
src / tracekit / analyzers / power / basic.py power_statistics   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / power / basic.py power_profile   100% 13 0 0   100% 4 0   100%
src / tracekit / analyzers / power / basic.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / analyzers / power / conduction.py conduction_loss   100% 11 0 0   100% 2 0   100%
src / tracekit / analyzers / power / conduction.py on_resistance   100% 14 0 0   100% 4 0   100%
src / tracekit / analyzers / power / conduction.py forward_voltage   100% 12 0 0   100% 4 0   100%
src / tracekit / analyzers / power / conduction.py duty_cycle_weighted_loss   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / power / conduction.py temperature_derating   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / power / conduction.py mosfet_conduction_loss   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / power / conduction.py diode_conduction_loss   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / power / conduction.py igbt_conduction_loss   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / power / conduction.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / analyzers / power / efficiency.py efficiency   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / power / efficiency.py power_conversion_efficiency   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / power / efficiency.py multi_output_efficiency   100% 12 0 0   100% 2 0   100%
src / tracekit / analyzers / power / efficiency.py efficiency_vs_load   100% 22 0 0   100% 2 0   100%
src / tracekit / analyzers / power / efficiency.py loss_breakdown   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / power / efficiency.py thermal_efficiency   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / power / efficiency.py (no function)   100% 11 0 3   100% 0 0   100%
src / tracekit / analyzers / power / ripple.py ripple   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / power / ripple.py ripple_percentage   80% 5 1 0   50% 2 1   71%
src / tracekit / analyzers / power / ripple.py ripple_frequency   94% 18 1 0   83% 6 1   92%
src / tracekit / analyzers / power / ripple.py ripple_harmonics   100% 17 0 0   88% 8 1   96%
src / tracekit / analyzers / power / ripple.py ripple_statistics   85% 13 2 0   50% 2 1   80%
src / tracekit / analyzers / power / ripple.py extract_ripple   100% 10 0 0   100% 4 0   100%
src / tracekit / analyzers / power / ripple.py ripple_envelope   94% 16 1 0   75% 8 2   88%
src / tracekit / analyzers / power / ripple.py (no function)   100% 13 0 0   100% 0 0   100%
src / tracekit / analyzers / power / soa.py soa_analysis   100% 26 0 0   100% 12 0   100%
src / tracekit / analyzers / power / soa.py _interpolate_soa_limit   86% 22 3 0   86% 14 2   86%
src / tracekit / analyzers / power / soa.py check_soa_violations   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / power / soa.py plot_soa   100% 29 0 0   100% 4 0   100%
src / tracekit / analyzers / power / soa.py create_mosfet_soa   100% 13 0 0   88% 8 1   95%
src / tracekit / analyzers / power / soa.py (no function)   100% 24 0 3   100% 0 0   100%
src / tracekit / analyzers / power / switching.py switching_loss   97% 74 2 0   88% 34 4   94%
src / tracekit / analyzers / power / switching.py switching_energy   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / power / switching.py turn_on_loss   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / power / switching.py turn_off_loss   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / power / switching.py total_switching_loss   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / power / switching.py switching_frequency   100% 12 0 0   100% 4 0   100%
src / tracekit / analyzers / power / switching.py switching_times   100% 16 0 0   100% 0 0   100%
src / tracekit / analyzers / power / switching.py switching_times.find_transition_time   91% 23 2 0   80% 10 2   88%
src / tracekit / analyzers / power / switching.py (no function)   100% 21 0 3   100% 0 0   100%
src / tracekit / analyzers / protocol / __init__.py (no function)   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / protocols / __init__.py (no function)   100% 16 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py DecoderState.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py DecoderState.reset   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.__init__   90% 10 1 0   83% 6 1   88%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.get_option   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.set_option   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.reset   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.put_annotation   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.put_packet   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.get_annotations   62% 8 3 0   50% 6 3   57%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.get_packets   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.get_channel_ids   0% 4 4 0   0% 2 0   0%
src / tracekit / analyzers / protocols / base.py ProtocolDecoder.get_option_ids   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / protocols / base.py SyncDecoder.sample_on_edge   0% 7 7 0   0% 2 0   0%
src / tracekit / analyzers / protocols / base.py AsyncDecoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / base.py AsyncDecoder.baudrate   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / protocols / base.py AsyncDecoder.baudrate   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / protocols / base.py AsyncDecoder.bit_time   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / protocols / base.py AsyncDecoder.find_start_bit   0% 7 7 0   0% 4 0   0%
src / tracekit / analyzers / protocols / base.py (no function)   100% 74 0 10   100% 0 0   100%
src / tracekit / analyzers / protocols / can.py CANFrame.crc_valid   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoderState.reset   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoder.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoder.bitrate   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoder.bitrate   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / protocols / can.py CANDecoder.decode   100% 17 0 0   100% 6 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoder._find_frame_starts   100% 13 0 0   100% 6 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoder._decode_frame   100% 39 0 0   100% 16 0   100%
src / tracekit / analyzers / protocols / can.py CANDecoder._parse_frame_bits   89% 75 8 0   78% 40 9   85%
src / tracekit / analyzers / protocols / can.py CANDecoder._compute_crc   100% 7 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / can.py decode_can   100% 6 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / can.py (no function)   100% 51 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / can_fd.py CANFDDecoder.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / can_fd.py CANFDDecoder.decode   100% 23 0 0   100% 8 0   100%
src / tracekit / analyzers / protocols / can_fd.py CANFDDecoder._find_sof   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / can_fd.py CANFDDecoder._decode_frame   100% 48 0 0   100% 22 0   100%
src / tracekit / analyzers / protocols / can_fd.py CANFDDecoder._decode_frame.sample_bits   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / can_fd.py decode_can_fd   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / can_fd.py (no function)   100% 37 0 4   100% 0 0   100%
src / tracekit / analyzers / protocols / flexray.py FlexRayDecoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / flexray.py FlexRayDecoder.decode   79% 28 6 0   75% 12 1   78%
src / tracekit / analyzers / protocols / flexray.py FlexRayDecoder._find_tss   100% 10 0 0   83% 6 1   94%
src / tracekit / analyzers / protocols / flexray.py FlexRayDecoder._decode_frame   98% 42 1 0   95% 20 1   97%
src / tracekit / analyzers / protocols / flexray.py FlexRayDecoder._decode_frame.sample_bits   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / flexray.py decode_flexray   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / flexray.py (no function)   100% 39 0 4   100% 0 0   100%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder.decode   91% 54 5 0   82% 22 4   88%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder._sample_bits   100% 8 0 0   75% 4 1   92%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder._find_flag   100% 4 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder._unstuff_bits   100% 15 0 0   100% 6 0   100%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder._bits_to_byte   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder._crc16_ccitt   100% 6 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / hdlc.py HDLCDecoder._crc32   100% 8 0 0   100% 6 0   100%
src / tracekit / analyzers / protocols / hdlc.py decode_hdlc   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / hdlc.py (no function)   100% 24 0 4   100% 0 0   100%
src / tracekit / analyzers / protocols / i2c.py I2CDecoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / i2c.py I2CDecoder.decode   84% 73 12 0   74% 38 8   80%
src / tracekit / analyzers / protocols / i2c.py I2CDecoder._extract_bytes   95% 21 1 0   80% 10 2   90%
src / tracekit / analyzers / protocols / i2c.py decode_i2c   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / i2c.py (no function)   100% 34 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / i2s.py I2SDecoder.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / i2s.py I2SDecoder.decode   93% 55 4 0   77% 26 4   88%
src / tracekit / analyzers / protocols / i2s.py decode_i2s   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / i2s.py (no function)   100% 23 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / jtag.py JTAGDecoder.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / jtag.py JTAGDecoder.decode   72% 54 15 0   83% 24 2   76%
src / tracekit / analyzers / protocols / jtag.py JTAGDecoder._next_state   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / jtag.py JTAGDecoder._bits_to_value   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / jtag.py decode_jtag   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / jtag.py (no function)   100% 39 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / lin.py LINDecoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / lin.py LINDecoder.decode   97% 61 2 0   92% 26 2   95%
src / tracekit / analyzers / protocols / lin.py LINDecoder._find_break_field   100% 13 0 0   100% 8 0   100%
src / tracekit / analyzers / protocols / lin.py LINDecoder._decode_byte   100% 17 0 0   100% 12 0   100%
src / tracekit / analyzers / protocols / lin.py LINDecoder._compute_parity   100% 9 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / lin.py LINDecoder._get_data_length   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / lin.py LINDecoder._compute_checksum   100% 7 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / lin.py decode_lin   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / lin.py (no function)   100% 26 0 4   100% 0 0   100%
src / tracekit / analyzers / protocols / manchester.py ManchesterDecoder.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / manchester.py ManchesterDecoder.decode   97% 32 1 0   93% 14 1   96%
src / tracekit / analyzers / protocols / manchester.py ManchesterDecoder._decode_standard   100% 18 0 0   80% 10 2   93%
src / tracekit / analyzers / protocols / manchester.py ManchesterDecoder._decode_differential   100% 12 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / manchester.py decode_manchester   60% 5 2 0   50% 2 1   57%
src / tracekit / analyzers / protocols / manchester.py (no function)   100% 25 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / onewire.py OneWireTimings.overdrive   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / onewire.py OneWireROMID.from_bytes   100% 6 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / onewire.py OneWireROMID.family_name   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / onewire.py OneWireROMID.to_hex   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / onewire.py OneWireROMID.verify_crc   0% 2 2 0   100% 0 0   0%
src / tracekit / analyzers / protocols / onewire.py _crc8_maxim   0% 8 8 0   0% 6 0   0%
src / tracekit / analyzers / protocols / onewire.py OneWireDecoder.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / onewire.py OneWireDecoder.decode   68% 77 25 0   50% 34 11   62%
src / tracekit / analyzers / protocols / onewire.py OneWireDecoder._build_annotations   0% 11 11 0   0% 4 0   0%
src / tracekit / analyzers / protocols / onewire.py decode_onewire   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / onewire.py (no function)   100% 61 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / spi.py SPIDecoder.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / spi.py SPIDecoder.decode   98% 62 1 0   97% 34 1   98%
src / tracekit / analyzers / protocols / spi.py SPIDecoder._bits_to_value   100% 7 0 0   100% 6 0   100%
src / tracekit / analyzers / protocols / spi.py decode_spi   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / spi.py (no function)   100% 19 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / swd.py SWDDecoder.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / swd.py SWDDecoder.decode   90% 90 9 0   81% 42 8   87%
src / tracekit / analyzers / protocols / swd.py decode_swd   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / swd.py (no function)   100% 23 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / uart.py UARTDecoder.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / uart.py UARTDecoder.decode   96% 77 3 0   88% 40 5   93%
src / tracekit / analyzers / protocols / uart.py UARTDecoder._find_start_bit   86% 7 1 0   75% 4 1   82%
src / tracekit / analyzers / protocols / uart.py decode_uart   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / uart.py (no function)   100% 19 0 3   100% 0 0   100%
src / tracekit / analyzers / protocols / usb.py USBDecoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / usb.py USBDecoder.decode   60% 68 27 0   41% 34 6   54%
src / tracekit / analyzers / protocols / usb.py USBDecoder._find_sync_pattern   100% 16 0 0   90% 10 1   96%
src / tracekit / analyzers / protocols / usb.py USBDecoder._extract_packet_bits   92% 24 2 0   70% 10 3   85%
src / tracekit / analyzers / protocols / usb.py USBDecoder._bits_to_byte   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / usb.py USBDecoder._bits_to_value   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / protocols / usb.py USBDecoder._crc5   100% 7 0 0   100% 4 0   100%
src / tracekit / analyzers / protocols / usb.py decode_usb   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / protocols / usb.py (no function)   100% 44 0 4   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / embedding.py deembed   100% 7 0 0   100% 6 0   100%
src / tracekit / analyzers / signal_integrity / embedding.py _deembed_frequency_domain   100% 12 0 0   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / embedding.py _deembed_time_domain   100% 19 0 0   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / embedding.py embed   100% 11 0 0   100% 2 0   100%
src / tracekit / analyzers / signal_integrity / embedding.py cascade_deembed   100% 23 0 0   100% 12 0   100%
src / tracekit / analyzers / signal_integrity / embedding.py (no function)   100% 11 0 0   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / equalization.py ffe_equalize   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / equalization.py optimize_ffe   100% 19 0 0   75% 4 1   96%
src / tracekit / analyzers / signal_integrity / equalization.py optimize_ffe.objective   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / equalization.py dfe_equalize   100% 22 0 0   83% 6 1   96%
src / tracekit / analyzers / signal_integrity / equalization.py ctle_equalize   100% 16 0 0   100% 2 0   100%
src / tracekit / analyzers / signal_integrity / equalization.py (no function)   100% 33 0 3   100% 0 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py SParameterData.__post_init__   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py SParameterData.get_s   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py load_touchstone   86% 14 2 0   100% 4 0   89%
src / tracekit / analyzers / signal_integrity / sparams.py _parse_touchstone   91% 79 7 0   79% 48 10   87%
src / tracekit / analyzers / signal_integrity / sparams.py return_loss   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py insertion_loss   100% 7 0 0   100% 2 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py s_to_abcd   100% 11 0 0   100% 6 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py _s_to_abcd_single   89% 9 1 0   50% 2 1   82%
src / tracekit / analyzers / signal_integrity / sparams.py abcd_to_s   100% 7 0 0   100% 4 0   100%
src / tracekit / analyzers / signal_integrity / sparams.py _abcd_to_s_single   89% 9 1 0   50% 2 1   82%
src / tracekit / analyzers / signal_integrity / sparams.py (no function)   100% 28 0 2   100% 0 0   100%
src / tracekit / analyzers / spectral / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked.py spectrogram_chunked   100% 29 0 0   100% 8 0   100%
src / tracekit / analyzers / spectral / chunked.py _generate_chunks   92% 12 1 0   75% 4 1   88%
src / tracekit / analyzers / spectral / chunked.py spectrogram_chunked_generator   100% 14 0 1   100% 4 0   100%
src / tracekit / analyzers / spectral / chunked.py (no function)   100% 11 0 3   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py fft_chunked   100% 40 0 0   100% 26 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py _generate_segments   90% 10 1 0   75% 4 1   86%
src / tracekit / analyzers / spectral / chunked_fft.py welch_psd_chunked   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py fft_chunked_parallel   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py streaming_fft   93% 30 2 1   86% 14 2   91%
src / tracekit / analyzers / spectral / chunked_fft.py StreamingAnalyzer.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py StreamingAnalyzer.accumulate_psd   100% 6 0 0   100% 2 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py StreamingAnalyzer.accumulate_stats   100% 4 0 0   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py StreamingAnalyzer.get_psd   83% 6 1 0   75% 4 1   80%
src / tracekit / analyzers / spectral / chunked_fft.py StreamingAnalyzer.get_stats   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py StreamingAnalyzer.reset   100% 6 0 0   100% 2 0   100%
src / tracekit / analyzers / spectral / chunked_fft.py (no function)   100% 20 0 3   100% 0 0   100%
src / tracekit / analyzers / spectral / chunked_wavelet.py cwt_chunked   100% 25 0 0   100% 6 0   100%
src / tracekit / analyzers / spectral / chunked_wavelet.py dwt_chunked   96% 53 2 0   95% 22 1   96%
src / tracekit / analyzers / spectral / chunked_wavelet.py _generate_chunks   92% 12 1 0   75% 4 1   88%
src / tracekit / analyzers / spectral / chunked_wavelet.py cwt_chunked_generator   100% 19 0 1   100% 2 0   100%
src / tracekit / analyzers / spectral / chunked_wavelet.py (no function)   100% 9 0 3   100% 0 0   100%
src / tracekit / analyzers / statistical / __init__.py entropy_windowed   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / __init__.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / analyzers / statistical / checksum.py detect_checksum_fields   96% 47 2 0   93% 28 2   95%
src / tracekit / analyzers / statistical / checksum.py identify_checksum_algorithm   90% 63 6 0   92% 50 4   91%
src / tracekit / analyzers / statistical / checksum.py verify_checksums   89% 38 4 0   92% 24 2   90%
src / tracekit / analyzers / statistical / checksum.py compute_checksum   100% 21 0 0   100% 16 0   100%
src / tracekit / analyzers / statistical / checksum.py crc8   100% 9 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / checksum.py crc16_ccitt   100% 10 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / checksum.py crc16_ibm   100% 9 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / checksum.py crc32   100% 9 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / checksum.py sum8   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / checksum.py sum16   100% 11 0 0   100% 8 0   100%
src / tracekit / analyzers / statistical / checksum.py xor_checksum   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / statistical / checksum.py ChecksumDetector.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / checksum.py ChecksumDetector.detect_checksum_field   81% 31 6 0   70% 20 6   76%
src / tracekit / analyzers / statistical / checksum.py ChecksumDetector.identify_algorithm   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / statistical / checksum.py ChecksumDetector.verify   0% 1 1 0   100% 0 0   0%
src / tracekit / analyzers / statistical / checksum.py ChecksumDetector.verify_checksum   38% 24 15 0   22% 18 4   31%
src / tracekit / analyzers / statistical / checksum.py (no function)   100% 51 0 2   100% 0 0   100%
src / tracekit / analyzers / statistical / chunked_corr.py correlate_chunked   100% 17 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / chunked_corr.py _correlate_chunked_fft   89% 70 8 0   82% 34 6   87%
src / tracekit / analyzers / statistical / chunked_corr.py autocorrelate_chunked   100% 10 0 0   83% 6 1   94%
src / tracekit / analyzers / statistical / chunked_corr.py _load_signal   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / chunked_corr.py _next_power_of_2   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / statistical / chunked_corr.py cross_correlate_chunked_generator   100% 4 0 1   100% 2 0   100%
src / tracekit / analyzers / statistical / chunked_corr.py (no function)   100% 13 0 3   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py ClassificationResult.data_type   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py classify_data_type   100% 37 0 0   100% 20 0   100%
src / tracekit / analyzers / statistical / classification.py detect_text_regions   100% 31 0 0   90% 20 2   96%
src / tracekit / analyzers / statistical / classification.py detect_encrypted_regions   96% 27 1 0   86% 14 2   93%
src / tracekit / analyzers / statistical / classification.py detect_compressed_regions   85% 27 4 0   64% 14 3   78%
src / tracekit / analyzers / statistical / classification.py detect_padding_regions   100% 26 0 0   94% 16 1   98%
src / tracekit / analyzers / statistical / classification.py segment_by_type   100% 34 0 0   81% 16 3   94%
src / tracekit / analyzers / statistical / classification.py DataClassifier.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.classify   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.classify_detailed   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.detect_text_regions   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.detect_encrypted_regions   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.detect_compressed_regions   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.detect_padding_regions   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py DataClassifier.segment   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / classification.py (no function)   100% 40 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / entropy.py EntropyTransition.entropy_change   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / entropy.py shannon_entropy   100% 12 0 0   88% 8 1   95%
src / tracekit / analyzers / statistical / entropy.py bit_entropy   100% 13 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / entropy.py sliding_entropy   100% 23 0 0   93% 14 1   97%
src / tracekit / analyzers / statistical / entropy.py detect_entropy_transitions   69% 29 9 0   67% 18 4   68%
src / tracekit / analyzers / statistical / entropy.py _detect_transitions_boundary_scan   82% 45 8 0   79% 24 5   81%
src / tracekit / analyzers / statistical / entropy.py classify_by_entropy   95% 22 1 0   92% 12 1   94%
src / tracekit / analyzers / statistical / entropy.py entropy_profile   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / entropy.py entropy_histogram   100% 10 0 0   100% 6 0   100%
src / tracekit / analyzers / statistical / entropy.py byte_frequency_distribution   94% 32 2 0   75% 12 3   89%
src / tracekit / analyzers / statistical / entropy.py detect_frequency_anomalies   88% 17 2 0   75% 8 2   84%
src / tracekit / analyzers / statistical / entropy.py compare_byte_distributions   100% 13 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / entropy.py sliding_byte_frequency   91% 22 2 0   86% 14 2   89%
src / tracekit / analyzers / statistical / entropy.py detect_compression_indicators   70% 30 9 0   57% 14 4   66%
src / tracekit / analyzers / statistical / entropy.py EntropyAnalyzer.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / entropy.py EntropyAnalyzer.calculate_entropy   100% 3 0 0   100% 2 0   100%
src / tracekit / analyzers / statistical / entropy.py EntropyAnalyzer.analyze   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / entropy.py EntropyAnalyzer.detect_transitions   100% 3 0 0   50% 2 1   80%
src / tracekit / analyzers / statistical / entropy.py EntropyAnalyzer.analyze_blocks   94% 17 1 0   83% 12 2   90%
src / tracekit / analyzers / statistical / entropy.py (no function)   100% 63 0 2   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py ngram_frequency   100% 19 0 0   100% 10 0   100%
src / tracekit / analyzers / statistical / ngrams.py ngram_entropy   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py compare_ngram_profiles   96% 27 1 0   80% 10 2   92%
src / tracekit / analyzers / statistical / ngrams.py find_unusual_ngrams   95% 21 1 0   86% 14 2   91%
src / tracekit / analyzers / statistical / ngrams.py ngram_heatmap   100% 13 0 0   100% 8 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.analyze   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.analyze_profile   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.get_distribution   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.entropy   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.compare   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.find_unusual   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py NGramAnalyzer.heatmap   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / statistical / ngrams.py (no function)   100% 36 0 2   100% 0 0   100%
src / tracekit / analyzers / statistics / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / advanced.py isolation_forest_outliers   81% 27 5 0   50% 10 1   73%
src / tracekit / analyzers / statistics / advanced.py _isolation_tree_path_lengths   100% 5 0 0   100% 2 0   100%
src / tracekit / analyzers / statistics / advanced.py _compute_path_length   91% 11 1 0   83% 6 1   88%
src / tracekit / analyzers / statistics / advanced.py _average_path_length   100% 5 0 0   100% 4 0   100%
src / tracekit / analyzers / statistics / advanced.py local_outlier_factor   96% 28 1 0   90% 10 1   95%
src / tracekit / analyzers / statistics / advanced.py seasonal_decompose   94% 33 2 0   86% 14 2   91%
src / tracekit / analyzers / statistics / advanced.py _detect_period   85% 13 2 0   50% 4 2   76%
src / tracekit / analyzers / statistics / advanced.py detect_change_points   87% 15 2 0   50% 6 3   76%
src / tracekit / analyzers / statistics / advanced.py _segment_cost   71% 7 2 0   50% 4 2   64%
src / tracekit / analyzers / statistics / advanced.py _pelt_change_points   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / advanced.py _binseg_change_points   100% 22 0 0   100% 8 0   100%
src / tracekit / analyzers / statistics / advanced.py _binseg_change_points.find_best_split   100% 15 0 0   100% 6 0   100%
src / tracekit / analyzers / statistics / advanced.py phase_coherence   100% 18 0 0   75% 4 1   95%
src / tracekit / analyzers / statistics / advanced.py kernel_density   90% 40 4 0   80% 20 4   87%
src / tracekit / analyzers / statistics / advanced.py (no function)   100% 67 0 2   100% 0 0   100%
src / tracekit / analyzers / statistics / basic.py basic_stats   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / basic.py percentiles   100% 9 0 0   100% 4 0   100%
src / tracekit / analyzers / statistics / basic.py quartiles   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / basic.py weighted_mean   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / statistics / basic.py running_stats   100% 15 0 0   100% 2 0   100%
src / tracekit / analyzers / statistics / basic.py summary_stats   100% 8 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / basic.py (no function)   100% 11 0 2   100% 0 0   100%
src / tracekit / analyzers / statistics / correlation.py autocorrelation   100% 24 0 0   100% 10 0   100%
src / tracekit / analyzers / statistics / correlation.py cross_correlation   97% 34 1 0   93% 14 1   96%
src / tracekit / analyzers / statistics / correlation.py correlation_coefficient   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / correlation.py find_periodicity   100% 38 0 0   100% 16 0   100%
src / tracekit / analyzers / statistics / correlation.py coherence   100% 17 0 0   100% 6 0   100%
src / tracekit / analyzers / statistics / correlation.py correlate_chunked   93% 68 5 0   93% 30 2   93%
src / tracekit / analyzers / statistics / correlation.py (no function)   100% 21 0 2   100% 0 0   100%
src / tracekit / analyzers / statistics / distribution.py histogram   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / distribution.py distribution_metrics   100% 12 0 0   100% 2 0   100%
src / tracekit / analyzers / statistics / distribution.py moment   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / statistics / distribution.py fit_distribution   100% 27 0 0   100% 8 0   100%
src / tracekit / analyzers / statistics / distribution.py normality_test   100% 14 0 0   100% 8 0   100%
src / tracekit / analyzers / statistics / distribution.py bimodality_coefficient   100% 6 0 0   100% 0 0   100%
src / tracekit / analyzers / statistics / distribution.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / analyzers / statistics / outliers.py zscore_outliers   95% 20 1 0   88% 8 1   93%
src / tracekit / analyzers / statistics / outliers.py modified_zscore_outliers   85% 26 4 0   70% 10 1   81%
src / tracekit / analyzers / statistics / outliers.py iqr_outliers   96% 28 1 0   88% 8 1   94%
src / tracekit / analyzers / statistics / outliers.py detect_outliers   88% 8 1 0   75% 4 1   83%
src / tracekit / analyzers / statistics / outliers.py remove_outliers   100% 34 0 0   91% 22 2   96%
src / tracekit / analyzers / statistics / outliers.py (no function)   100% 20 0 2   100% 0 0   100%
src / tracekit / analyzers / statistics / trend.py detect_trend   100% 20 0 0   100% 6 0   100%
src / tracekit / analyzers / statistics / trend.py detrend   100% 20 0 0   100% 10 0   100%
src / tracekit / analyzers / statistics / trend.py moving_average   100% 23 0 0   100% 12 0   100%
src / tracekit / analyzers / statistics / trend.py detect_drift_segments   100% 22 0 0   100% 12 0   100%
src / tracekit / analyzers / statistics / trend.py change_point_detection   97% 33 1 0   93% 14 1   96%
src / tracekit / analyzers / statistics / trend.py piecewise_linear_fit   100% 24 0 0   88% 8 1   97%
src / tracekit / analyzers / statistics / trend.py (no function)   100% 22 0 2   100% 0 0   100%
src / tracekit / analyzers / validation.py is_suitable_for_frequency_measurement   100% 17 0 0   90% 10 1   96%
src / tracekit / analyzers / validation.py is_suitable_for_duty_cycle_measurement   82% 11 2 0   67% 6 2   76%
src / tracekit / analyzers / validation.py is_suitable_for_rise_time_measurement   96% 28 1 0   75% 12 3   90%
src / tracekit / analyzers / validation.py is_suitable_for_fall_time_measurement   92% 13 1 0   83% 6 1   89%
src / tracekit / analyzers / validation.py is_suitable_for_jitter_measurement   88% 8 1 0   75% 4 1   83%
src / tracekit / analyzers / validation.py get_valid_measurements   100% 33 0 0   95% 22 1   98%
src / tracekit / analyzers / validation.py analyze_signal_characteristics   80% 41 8 0   64% 14 1   76%
src / tracekit / analyzers / validation.py get_measurement_requirements   100% 3 0 0   100% 0 0   100%
src / tracekit / analyzers / validation.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / analyzers / waveform / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / analyzers / waveform / measurements.py rise_time   91% 33 3 0   75% 16 4   86%
src / tracekit / analyzers / waveform / measurements.py fall_time   91% 33 3 0   75% 16 4   86%
src / tracekit / analyzers / waveform / measurements.py period   89% 9 1 0   83% 6 1   87%
src / tracekit / analyzers / waveform / measurements.py frequency   93% 15 1 0   88% 8 1   91%
src / tracekit / analyzers / waveform / measurements.py duty_cycle   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / waveform / measurements.py pulse_width   83% 24 4 0   75% 20 3   80%
src / tracekit / analyzers / waveform / measurements.py overshoot   82% 11 2 0   67% 6 2   76%
src / tracekit / analyzers / waveform / measurements.py undershoot   82% 11 2 0   67% 6 2   76%
src / tracekit / analyzers / waveform / measurements.py preshoot   60% 35 14 0   55% 22 2   58%
src / tracekit / analyzers / waveform / measurements.py amplitude   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / waveform / measurements.py rms   85% 13 2 0   75% 12 3   80%
src / tracekit / analyzers / waveform / measurements.py mean   60% 10 4 0   50% 8 2   56%
src / tracekit / analyzers / waveform / measurements.py measure   100% 14 0 0   100% 6 0   100%
src / tracekit / analyzers / waveform / measurements.py _find_levels   91% 11 1 0   50% 2 1   85%
src / tracekit / analyzers / waveform / measurements.py _find_edges   90% 21 2 0   80% 10 2   87%
src / tracekit / analyzers / waveform / measurements.py _interpolate_crossing_time   36% 28 18 0   20% 20 4   29%
src / tracekit / analyzers / waveform / measurements.py (no function)   100% 21 0 37   100% 0 0   100%
src / tracekit / analyzers / waveform / measurements_with_uncertainty.py rise_time   0% 24 24 0   0% 8 0   0%
src / tracekit / analyzers / waveform / measurements_with_uncertainty.py fall_time   0% 12 12 0   0% 2 0   0%
src / tracekit / analyzers / waveform / measurements_with_uncertainty.py frequency   0% 17 17 0   0% 4 0   0%
src / tracekit / analyzers / waveform / measurements_with_uncertainty.py amplitude   0% 28 28 0   0% 8 0   0%
src / tracekit / analyzers / waveform / measurements_with_uncertainty.py rms   0% 13 13 0   0% 2 0   0%
src / tracekit / analyzers / waveform / measurements_with_uncertainty.py (no function)   0% 11 11 2   100% 0 0   0%
src / tracekit / analyzers / waveform / spectral.py fft   95% 22 1 0   88% 8 1   93%
src / tracekit / analyzers / waveform / spectral.py psd   100% 14 0 0   100% 6 0   100%
src / tracekit / analyzers / waveform / spectral.py periodogram   100% 5 0 0   100% 0 0   100%
src / tracekit / analyzers / waveform / spectral.py bartlett_psd   92% 26 2 0   70% 10 3   86%
src / tracekit / analyzers / waveform / spectral.py spectrogram   100% 12 0 0   100% 4 0   100%
src / tracekit / analyzers / waveform / spectral.py _find_fundamental   86% 7 1 0   50% 2 1   78%
src / tracekit / analyzers / waveform / spectral.py _find_harmonic_indices   100% 8 0 0   100% 4 0   100%
src / tracekit / analyzers / waveform / spectral.py thd   83% 18 3 0   60% 10 4   75%
src / tracekit / analyzers / waveform / spectral.py snr   94% 32 2 0   79% 24 5   88%
src / tracekit / analyzers / waveform / spectral.py sinad   89% 19 2 0   60% 10 4   79%
src / tracekit / analyzers / waveform / spectral.py enob   75% 4 1 0   50% 2 1   67%
src / tracekit / analyzers / waveform / spectral.py sfdr   88% 25 3 0   64% 14 5   79%
src / tracekit / analyzers / waveform / spectral.py hilbert_transform   100% 9 0 0   100% 0 0   100%
src / tracekit / analyzers / waveform / spectral.py cwt   0% 16 16 0   0% 8 0   0%
src / tracekit / analyzers / waveform / spectral.py dwt   0% 16 16 2   0% 6 0   0%
src / tracekit / analyzers / waveform / spectral.py idwt   0% 11 11 2   100% 0 0   0%
src / tracekit / analyzers / waveform / spectral.py mfcc   100% 17 0 0   67% 6 2   91%
src / tracekit / analyzers / waveform / spectral.py _mel_filterbank   100% 20 0 0   80% 10 2   93%
src / tracekit / analyzers / waveform / spectral.py _mel_filterbank.hz_to_mel   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / waveform / spectral.py _mel_filterbank.mel_to_hz   100% 1 0 0   100% 0 0   100%
src / tracekit / analyzers / waveform / spectral.py spectrogram_chunked   96% 46 2 0   79% 14 3   92%
src / tracekit / analyzers / waveform / spectral.py psd_chunked   95% 39 2 0   75% 16 4   89%
src / tracekit / analyzers / waveform / spectral.py fft_chunked   84% 38 6 0   64% 14 5   79%
src / tracekit / analyzers / waveform / spectral.py (no function)   100% 28 0 3   100% 0 0   100%
src / tracekit / analyzers / waveform / wavelets.py cwt_chunked   92% 25 2 1   80% 10 2   89%
src / tracekit / analyzers / waveform / wavelets.py dwt_chunked   93% 29 2 1   83% 12 2   90%
src / tracekit / analyzers / waveform / wavelets.py cwt   100% 4 0 0   100% 2 0   100%
src / tracekit / analyzers / waveform / wavelets.py dwt   75% 4 1 0   50% 2 1   67%
src / tracekit / analyzers / waveform / wavelets.py (no function)   100% 12 0 6   100% 0 0   100%
src / tracekit / api / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExpression.to_dict   100% 4 0 0   100% 2 0   100%
src / tracekit / api / dsl.py DSLParser.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLParser.parse   100% 3 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLParser._parse_chain   100% 7 0 0   100% 2 0   100%
src / tracekit / api / dsl.py DSLParser._parse_operation   100% 14 0 0   100% 6 0   100%
src / tracekit / api / dsl.py DSLParser._parse_arguments   100% 21 0 0   100% 6 0   100%
src / tracekit / api / dsl.py DSLParser._parse_value   89% 9 1 0   83% 6 1   87%
src / tracekit / api / dsl.py DSLParser._parse_string   100% 12 0 0   100% 6 0   100%
src / tracekit / api / dsl.py DSLParser._parse_list   100% 14 0 0   100% 6 0   100%
src / tracekit / api / dsl.py DSLParser._parse_number_or_identifier   100% 16 0 0   100% 10 0   100%
src / tracekit / api / dsl.py DSLParser._parse_identifier   100% 8 0 0   100% 6 0   100%
src / tracekit / api / dsl.py DSLParser._try_parse_identifier   100% 6 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLParser._skip_whitespace   100% 2 0 0   100% 2 0   100%
src / tracekit / api / dsl.py DSLExecutor.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._register_builtins   100% 13 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor.execute   100% 9 0 0   100% 6 0   100%
src / tracekit / api / dsl.py DSLExecutor._lowpass   100% 4 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._highpass   100% 4 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._bandpass   100% 4 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._fft   100% 1 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._psd   100% 4 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._normalize   100% 15 0 0   100% 8 0   100%
src / tracekit / api / dsl.py DSLExecutor._resample   100% 3 0 0   100% 0 0   100%
src / tracekit / api / dsl.py DSLExecutor._slice   100% 1 0 0   100% 0 0   100%
src / tracekit / api / dsl.py parse_expression   100% 1 0 0   100% 0 0   100%
src / tracekit / api / dsl.py analyze   100% 2 0 0   100% 0 0   100%
src / tracekit / api / dsl.py (no function)   100% 43 0 3   100% 0 0   100%
src / tracekit / api / fluent.py FluentResult.get   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentResult.map   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentResult.filter   100% 3 0 0   100% 2 0   100%
src / tracekit / api / fluent.py FluentResult.format   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentResult.print   100% 2 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentResult.with_metadata   100% 2 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.data   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.sample_rate   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.get   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.copy   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.lowpass   100% 7 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.highpass   100% 7 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.bandpass   100% 6 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.notch   100% 6 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.normalize   100% 15 0 0   100% 12 0   100%
src / tracekit / api / fluent.py FluentTrace.scale   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.offset   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.clip   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.abs   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.diff   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.integrate   100% 4 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.resample   100% 5 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.decimate   100% 5 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.slice   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.fft   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.magnitude   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.phase   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.psd   100% 3 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.mean   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.std   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.rms   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.peak_to_peak   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.min   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.max   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.print_history   100% 4 0 0   100% 2 0   100%
src / tracekit / api / fluent.py FluentTrace.with_metadata   100% 2 0 0   100% 0 0   100%
src / tracekit / api / fluent.py FluentTrace.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py trace   100% 1 0 0   100% 0 0   100%
src / tracekit / api / fluent.py (no function)   100% 52 0 5   100% 0 0   100%
src / tracekit / api / operators.py TimeIndex.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / api / operators.py TimeIndex.duration   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py TimeIndex.time_axis   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py TimeIndex._parse_time   100% 8 0 0   100% 4 0   100%
src / tracekit / api / operators.py TimeIndex._time_to_index   100% 3 0 0   100% 0 0   100%
src / tracekit / api / operators.py TimeIndex.at   100% 4 0 0   100% 2 0   100%
src / tracekit / api / operators.py TimeIndex.slice   100% 11 0 0   100% 8 0   100%
src / tracekit / api / operators.py TimeIndex.__getitem__   100% 3 0 0   100% 2 0   100%
src / tracekit / api / operators.py UnitConverter.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py UnitConverter._parse_unit   100% 11 0 0   100% 8 0   100%
src / tracekit / api / operators.py UnitConverter.convert   100% 13 0 0   100% 10 0   100%
src / tracekit / api / operators.py UnitConverter.auto_scale   86% 7 1 0   75% 4 1   82%
src / tracekit / api / operators.py UnitConverter.format_value   100% 2 0 0   100% 0 0   100%
src / tracekit / api / operators.py convert_units   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py PipeableFunction.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / api / operators.py PipeableFunction.__call__   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py PipeableFunction.__rrshift__   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py make_pipeable   100% 4 0 0   100% 0 0   100%
src / tracekit / api / operators.py make_pipeable.wrapper   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py scale   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py offset   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py clip_values   100% 1 0 0   100% 0 0   100%
src / tracekit / api / operators.py normalize_data   100% 11 0 0   100% 8 0   100%
src / tracekit / api / operators.py (no function)   100% 46 0 3   100% 0 0   100%
src / tracekit / api / optimization.py ParameterSpace.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / api / optimization.py ParameterSpace.__iter__   100% 1 0 0   100% 0 0   100%
src / tracekit / api / optimization.py ParameterSpace.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / api / optimization.py OptimizationResult.top_n   100% 2 0 0   100% 0 0   100%
src / tracekit / api / optimization.py OptimizationResult.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / api / optimization.py GridSearch.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / api / optimization.py GridSearch.num_combinations   100% 4 0 0   100% 2 0   100%
src / tracekit / api / optimization.py GridSearch.on_progress   100% 2 0 0   100% 0 0   100%
src / tracekit / api / optimization.py GridSearch.fit   100% 34 0 0   100% 18 0   100%
src / tracekit / api / optimization.py RandomSearch.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / api / optimization.py RandomSearch.fit   100% 23 0 0   92% 12 1   97%
src / tracekit / api / optimization.py optimize_parameters   100% 8 0 0   100% 6 0   100%
src / tracekit / api / optimization.py (no function)   100% 39 0 2   100% 0 0   100%
src / tracekit / api / profiling.py OperationProfile.mean_time   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py OperationProfile.std_time   100% 3 0 0   100% 2 0   100%
src / tracekit / api / profiling.py OperationProfile.throughput   100% 3 0 0   100% 2 0   100%
src / tracekit / api / profiling.py OperationProfile.record   100% 7 0 0   100% 2 0   100%
src / tracekit / api / profiling.py OperationProfile.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py ProfileReport.total_time   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py ProfileReport.wall_time   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py ProfileReport.get_slowest   100% 2 0 0   100% 0 0   100%
src / tracekit / api / profiling.py ProfileReport.get_most_called   100% 2 0 0   100% 0 0   100%
src / tracekit / api / profiling.py ProfileReport.summary   100% 4 0 0   100% 2 0   100%
src / tracekit / api / profiling.py ProfileReport.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py Profiler.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / api / profiling.py Profiler.get_instance   100% 3 0 0   100% 2 0   100%
src / tracekit / api / profiling.py Profiler.enable   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py Profiler.disable   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py Profiler.reset   100% 2 0 0   100% 0 0   100%
src / tracekit / api / profiling.py Profiler.profile   100% 14 0 0   100% 6 0   100%
src / tracekit / api / profiling.py Profiler.record   100% 5 0 0   75% 4 1   89%
src / tracekit / api / profiling.py Profiler.get_profile   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py Profiler.report   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py profile   100% 2 0 0   100% 0 0   100%
src / tracekit / api / profiling.py profile.decorator   100% 4 0 0   100% 0 0   100%
src / tracekit / api / profiling.py profile.decorator.wrapper   92% 12 1 0   88% 8 1   90%
src / tracekit / api / profiling.py get_profiler   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py enable_profiling   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py disable_profiling   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py reset_profiling   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py get_profile_report   100% 1 0 0   100% 0 0   100%
src / tracekit / api / profiling.py (no function)   100% 61 0 2   100% 0 0   100%
src / tracekit / batch / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / batch / advanced.py BatchCheckpoint.save   100% 9 0 0   100% 4 0   100%
src / tracekit / batch / advanced.py BatchCheckpoint.load   100% 10 0 0   100% 4 0   100%
src / tracekit / batch / advanced.py _run_with_timeout   0% 10 10 0   0% 4 0   0%
src / tracekit / batch / advanced.py _run_with_timeout.target   0% 4 4 0   100% 0 0   0%
src / tracekit / batch / advanced.py AdvancedBatchProcessor.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / advanced.py AdvancedBatchProcessor.process   100% 5 0 0   50% 2 1   86%
src / tracekit / batch / advanced.py AdvancedBatchProcessor._resume_or_start   46% 13 7 0   75% 4 1   53%
src / tracekit / batch / advanced.py AdvancedBatchProcessor._process_files   77% 43 10 0   81% 26 5   78%
src / tracekit / batch / advanced.py AdvancedBatchProcessor._process_files._process_one   73% 15 4 0   25% 4 1   63%
src / tracekit / batch / advanced.py AdvancedBatchProcessor._save_checkpoint   100% 4 0 0   50% 2 1   83%
src / tracekit / batch / advanced.py AdvancedBatchProcessor._results_to_dataframe   100% 13 0 0   100% 6 0   100%
src / tracekit / batch / advanced.py resume_batch   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / advanced.py (no function)   100% 54 0 4   100% 0 0   100%
src / tracekit / batch / aggregate.py aggregate_results   68% 76 24 2   76% 38 3   71%
src / tracekit / batch / aggregate.py _generate_html_report   94% 34 2 0   79% 14 3   90%
src / tracekit / batch / aggregate.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / batch / analyze.py batch_analyze   94% 32 2 0   88% 16 2   92%
src / tracekit / batch / analyze.py batch_analyze._wrapped_analysis   100% 9 0 0   100% 2 0   100%
src / tracekit / batch / analyze.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogEntry.duration   100% 3 0 0   100% 2 0   100%
src / tracekit / batch / logging.py FileLogEntry.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchSummary.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogger.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogger._log   100% 3 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogger.debug   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogger.info   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogger.warning   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / logging.py FileLogger.error   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.start   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.finish   100% 3 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.register_file   100% 4 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.file_context   94% 17 1 0   100% 0 0   94%
src / tracekit / batch / logging.py BatchLogger.mark_success   100% 4 0 0   50% 2 1   83%
src / tracekit / batch / logging.py BatchLogger.mark_error   100% 6 0 0   50% 2 1   88%
src / tracekit / batch / logging.py BatchLogger.summary   100% 13 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.get_file_logs   75% 4 1 0   50% 2 1   67%
src / tracekit / batch / logging.py BatchLogger.get_all_files   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / logging.py BatchLogger.get_errors   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / logging.py aggregate_batch_logs   100% 16 0 0   100% 4 0   100%
src / tracekit / batch / logging.py (no function)   100% 58 0 2   100% 0 0   100%
src / tracekit / batch / metrics.py FileMetrics.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py ErrorBreakdown.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py TimingStats.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py ThroughputStats.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetricsSummary.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.start   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.finish   100% 3 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.record_file   100% 6 0 0   100% 2 0   100%
src / tracekit / batch / metrics.py BatchMetrics.record_error   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.record_skip   100% 1 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.summary   95% 20 1 0   75% 4 1   92%
src / tracekit / batch / metrics.py BatchMetrics.get_file_metrics   100% 2 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.export_json   100% 6 0 0   100% 0 0   100%
src / tracekit / batch / metrics.py BatchMetrics.export_csv   82% 11 2 0   50% 2 1   77%
src / tracekit / batch / metrics.py get_batch_stats   100% 3 0 0   100% 2 0   100%
src / tracekit / batch / metrics.py (no function)   100% 73 0 0   100% 0 0   100%
src / tracekit / cli / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / cli / batch.py batch   100% 24 0 0   100% 8 0   100%
src / tracekit / cli / batch.py _perform_batch_analysis   100% 30 0 0   100% 14 0   100%
src / tracekit / cli / batch.py _perform_batch_analysis.analyze_single_file   100% 24 0 0   88% 8 1   97%
src / tracekit / cli / batch.py _generate_summary   100% 7 0 0   100% 2 0   100%
src / tracekit / cli / batch.py _save_summary   100% 10 0 0   100% 4 0   100%
src / tracekit / cli / batch.py (no function)   100% 21 0 0   100% 0 0   100%
src / tracekit / cli / characterize.py characterize   100% 30 0 0   100% 10 0   100%
src / tracekit / cli / characterize.py _perform_characterization   100% 33 0 0   90% 10 1   98%
src / tracekit / cli / characterize.py (no function)   100% 17 0 2   100% 0 0   100%
src / tracekit / cli / compare.py compare   100% 28 0 0   100% 6 0   100%
src / tracekit / cli / compare.py _align_signals   100% 23 0 0   100% 4 0   100%
src / tracekit / cli / compare.py _compute_timing_drift   100% 21 0 0   88% 8 1   97%
src / tracekit / cli / compare.py _compute_spectral_difference   100% 27 0 0   75% 4 1   97%
src / tracekit / cli / compare.py _perform_comparison   91% 56 5 0   75% 12 3   88%
src / tracekit / cli / compare.py _generate_html_report   100% 7 0 0   100% 0 0   100%
src / tracekit / cli / compare.py (no function)   100% 24 0 2   100% 0 0   100%
src / tracekit / cli / decode.py decode   100% 20 0 0   100% 6 0   100%
src / tracekit / cli / decode.py _to_digital   100% 6 0 0   100% 2 0   100%
src / tracekit / cli / decode.py _perform_decoding   100% 45 0 0   85% 20 3   95%
src / tracekit / cli / decode.py _decode_uart   100% 11 0 0   100% 6 0   100%
src / tracekit / cli / decode.py _decode_spi   100% 17 0 0   100% 8 0   100%
src / tracekit / cli / decode.py _decode_i2c   96% 26 1 0   93% 14 1   95%
src / tracekit / cli / decode.py _decode_can   86% 29 4 0   79% 14 1   84%
src / tracekit / cli / decode.py (no function)   100% 25 0 0   100% 0 0   100%
src / tracekit / cli / main.py OutputFormat.json   100% 1 0 0   100% 0 0   100%
src / tracekit / cli / main.py OutputFormat.csv   100% 9 0 0   100% 8 0   100%
src / tracekit / cli / main.py OutputFormat.html   100% 5 0 0   100% 2 0   100%
src / tracekit / cli / main.py OutputFormat.table   100% 12 0 0   100% 4 0   100%
src / tracekit / cli / main.py format_output   100% 2 0 0   100% 0 0   100%
src / tracekit / cli / main.py cli   78% 9 2 0   75% 4 1   77%
src / tracekit / cli / main.py shell   100% 2 0 0   100% 0 0   100%
src / tracekit / cli / main.py tutorial   100% 11 0 0   83% 6 1   94%
src / tracekit / cli / main.py main   100% 5 0 0   100% 0 0   100%
src / tracekit / cli / main.py (no function)   100% 40 0 2   100% 0 0   100%
src / tracekit / cli / shell.py get_tracekit_namespace   100% 21 0 8   100% 0 0   100%
src / tracekit / cli / shell.py setup_history   100% 6 0 0   100% 2 0   100%
src / tracekit / cli / shell.py tracekit_help   100% 2 0 0   100% 0 0   100%
src / tracekit / cli / shell.py TraceKitConsole.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / cli / shell.py TraceKitConsole.interact   100% 6 0 0   75% 4 1   90%
src / tracekit / cli / shell.py TraceKitConsole.raw_input   100% 4 0 0   100% 0 0   100%
src / tracekit / cli / shell.py TraceKitConsole.showtraceback   100% 1 0 0   100% 0 0   100%
src / tracekit / cli / shell.py start_shell   100% 7 0 0   100% 0 0   100%
src / tracekit / cli / shell.py (no function)   100% 20 0 2   100% 0 0   100%
src / tracekit / comparison / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / tracekit / comparison / compare.py difference   100% 14 0 0   83% 6 1   95%
src / tracekit / comparison / compare.py correlation   100% 14 0 0   100% 8 0   100%
src / tracekit / comparison / compare.py similarity_score   100% 44 0 0   100% 22 0   100%
src / tracekit / comparison / compare.py compare_traces   95% 39 2 0   100% 14 0   96%
src / tracekit / comparison / compare.py (no function)   100% 22 0 2   100% 0 0   100%
src / tracekit / comparison / golden.py GoldenReference.num_samples   100% 1 0 0   100% 0 0   100%
src / tracekit / comparison / golden.py GoldenReference.duration   100% 1 0 0   100% 0 0   100%
src / tracekit / comparison / golden.py GoldenReference.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / comparison / golden.py GoldenReference.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / comparison / golden.py GoldenReference.save   100% 3 0 0   100% 0 0   100%
src / tracekit / comparison / golden.py GoldenReference.load   100% 6 0 0   100% 2 0   100%
src / tracekit / comparison / golden.py create_golden   100% 17 0 0   100% 6 0   100%
src / tracekit / comparison / golden.py tolerance_envelope   100% 10 0 0   100% 6 0   100%
src / tracekit / comparison / golden.py compare_to_golden   98% 41 1 0   92% 12 1   96%
src / tracekit / comparison / golden.py batch_compare_to_golden   100% 1 0 0   100% 0 0   100%
src / tracekit / comparison / golden.py golden_from_average   100% 10 0 0   100% 2 0   100%
src / tracekit / comparison / golden.py (no function)   100% 47 0 3   100% 0 0   100%
src / tracekit / comparison / limits.py LimitSpec.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / comparison / limits.py create_limit_spec   100% 19 0 0   100% 10 0   100%
src / tracekit / comparison / limits.py check_limits   93% 46 3 0   79% 34 5   88%
src / tracekit / comparison / limits.py margin_analysis   98% 40 1 0   88% 26 3   94%
src / tracekit / comparison / limits.py (no function)   100% 41 0 2   100% 0 0   100%
src / tracekit / comparison / mask.py MaskRegion.contains_point   100% 10 0 0   100% 4 0   100%
src / tracekit / comparison / mask.py Mask.add_region   100% 1 0 0   100% 0 0   100%
src / tracekit / comparison / mask.py create_mask   100% 7 0 0   100% 2 0   100%
src / tracekit / comparison / mask.py eye_mask   100% 16 0 0   100% 0 0   100%
src / tracekit / comparison / mask.py mask_test   95% 38 2 0   93% 30 2   94%
src / tracekit / comparison / mask.py _point_to_segment_distance   89% 9 1 0   50% 2 1   82%
src / tracekit / comparison / mask.py eye_diagram_mask_test   88% 24 3 0   83% 12 2   86%
src / tracekit / comparison / mask.py (no function)   100% 32 0 3   100% 0 0   100%
src / tracekit / comparison / trace_diff.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / comparison / visualization.py plot_overlay   66% 38 13 0   38% 16 2   57%
src / tracekit / comparison / visualization.py plot_difference   100% 34 0 0   88% 8 1   98%
src / tracekit / comparison / visualization.py plot_comparison_heatmap   96% 47 2 0   80% 10 2   93%
src / tracekit / comparison / visualization.py plot_comparison_summary   100% 48 0 0   70% 10 3   95%
src / tracekit / comparison / visualization.py (no function)   100% 10 0 4   100% 0 0   100%
src / tracekit / compliance / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py LimitInterpolator.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py LimitInterpolator.interpolate   73% 15 4 0   67% 12 2   70%
src / tracekit / compliance / advanced.py LimitInterpolator._interp_linear   0% 1 1 0   100% 0 0   0%
src / tracekit / compliance / advanced.py LimitInterpolator._interp_log_linear   100% 2 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py LimitInterpolator._interp_cubic   0% 5 5 0   100% 0 0   0%
src / tracekit / compliance / advanced.py LimitInterpolator._interp_step   0% 6 6 0   0% 2 0   0%
src / tracekit / compliance / advanced.py LimitInterpolator.get_limit_at   67% 15 5 0   50% 6 3   62%
src / tracekit / compliance / advanced.py interpolate_limit   100% 2 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py ComplianceTestRunner.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py ComplianceTestRunner.add_mask   100% 4 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py ComplianceTestRunner.run   100% 7 0 0   100% 2 0   100%
src / tracekit / compliance / advanced.py ComplianceTestRunner._test_against_mask   80% 25 5 0   70% 10 3   77%
src / tracekit / compliance / advanced.py ComplianceTestSuite.residential   100% 4 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py ComplianceTestSuite.commercial   100% 4 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py ComplianceTestSuite.military   100% 4 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py run_compliance_suite   38% 8 5 0   17% 6 1   29%
src / tracekit / compliance / advanced.py QuasiPeakDetector.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py QuasiPeakDetector.get_band   75% 4 1 0   75% 4 1   75%
src / tracekit / compliance / advanced.py QuasiPeakDetector.get_params   75% 4 1 0   50% 2 1   67%
src / tracekit / compliance / advanced.py QuasiPeakDetector.apply   100% 7 0 0   75% 4 1   91%
src / tracekit / compliance / advanced.py QuasiPeakDetector._get_qp_correction   100% 2 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py QuasiPeakDetector.compare_peak_qp   100% 3 0 0   100% 0 0   100%
src / tracekit / compliance / advanced.py QuasiPeakDetector.get_bandwidth   75% 4 1 0   50% 2 1   67%
src / tracekit / compliance / advanced.py QuasiPeakDetector.validate_bandwidth   40% 5 3 0   25% 4 1   33%
src / tracekit / compliance / advanced.py (no function)   100% 79 0 3   100% 0 0   100%
src / tracekit / compliance / masks.py LimitMask.frequency_range   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / masks.py LimitMask.get_limit_at_frequency   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / masks.py LimitMask.interpolate   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / masks.py LimitMask.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / masks.py LimitMask.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / masks.py load_limit_mask   60% 15 6 0   62% 8 1   61%
src / tracekit / compliance / masks.py create_custom_mask   100% 9 0 0   100% 4 0   100%
src / tracekit / compliance / masks.py (no function)   100% 32 0 2   100% 0 0   100%
src / tracekit / compliance / reporting.py generate_compliance_report   67% 15 5 0   70% 10 1   68%
src / tracekit / compliance / reporting.py _generate_html_report   74% 23 6 0   50% 10 3   67%
src / tracekit / compliance / reporting.py _generate_plot_html   100% 14 0 0   100% 0 0   100%
src / tracekit / compliance / reporting.py _generate_plot_html.x_scale   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / reporting.py _generate_plot_html.y_scale   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / reporting.py _generate_markdown_report   42% 19 11 0   25% 8 2   37%
src / tracekit / compliance / reporting.py _generate_json_report   100% 4 0 0   100% 0 0   100%
src / tracekit / compliance / reporting.py _convert_html_to_pdf   0% 3 3 3   100% 0 0   0%
src / tracekit / compliance / reporting.py (no function)   100% 17 0 2   100% 0 0   100%
src / tracekit / compliance / testing.py ComplianceViolation.__str__   100% 2 0 0   100% 0 0   100%
src / tracekit / compliance / testing.py ComplianceResult.passed   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / testing.py ComplianceResult.violation_count   100% 1 0 0   100% 0 0   100%
src / tracekit / compliance / testing.py ComplianceResult.summary   100% 8 0 0   100% 6 0   100%
src / tracekit / compliance / testing.py check_compliance   92% 38 3 0   83% 18 3   89%
src / tracekit / compliance / testing.py _compute_spectrum   33% 12 8 0   17% 6 1   28%
src / tracekit / compliance / testing.py (no function)   100% 40 0 4   100% 0 0   100%
src / tracekit / component / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / component / impedance.py ImpedanceProfile.mean_impedance   100% 1 0 0   100% 0 0   100%
src / tracekit / component / impedance.py ImpedanceProfile.max_impedance   100% 1 0 0   100% 0 0   100%
src / tracekit / component / impedance.py ImpedanceProfile.min_impedance   100% 1 0 0   100% 0 0   100%
src / tracekit / component / impedance.py extract_impedance   97% 29 1 0   90% 10 1   95%
src / tracekit / component / impedance.py impedance_profile   100% 5 0 0   100% 2 0   100%
src / tracekit / component / impedance.py discontinuity_analysis   83% 30 5 0   50% 12 4   74%
src / tracekit / component / impedance.py _find_incident_level   75% 8 2 0   50% 4 2   67%
src / tracekit / component / impedance.py (no function)   100% 33 0 3   100% 0 0   100%
src / tracekit / component / reactive.py measure_capacitance   97% 39 1 0   93% 14 1   96%
src / tracekit / component / reactive.py measure_inductance   95% 39 2 0   86% 14 2   92%
src / tracekit / component / reactive.py extract_parasitics   97% 30 1 0   88% 8 1   95%
src / tracekit / component / reactive.py _extract_time_constant   92% 13 1 0   75% 4 1   88%
src / tracekit / component / reactive.py _estimate_esr   80% 5 1 0   50% 2 1   71%
src / tracekit / component / reactive.py _estimate_dcr   86% 7 1 0   50% 2 1   78%
src / tracekit / component / reactive.py _fit_series_rlc   86% 14 2 0   100% 0 0   86%
src / tracekit / component / reactive.py _fit_series_rlc.model   100% 1 0 0   100% 0 0   100%
src / tracekit / component / reactive.py _fit_series_rlc.objective   100% 3 0 0   100% 0 0   100%
src / tracekit / component / reactive.py _fit_parallel_rlc   85% 13 2 0   100% 0 0   85%
src / tracekit / component / reactive.py _fit_parallel_rlc.objective   100% 4 0 0   100% 0 0   100%
src / tracekit / component / reactive.py _calculate_rlc_impedance   100% 6 0 0   100% 2 0   100%
src / tracekit / component / reactive.py (no function)   100% 37 0 3   100% 0 0   100%
src / tracekit / component / transmission_line.py transmission_line_analysis   100% 21 0 0   100% 4 0   100%
src / tracekit / component / transmission_line.py characteristic_impedance   100% 3 0 0   100% 0 0   100%
src / tracekit / component / transmission_line.py propagation_delay   100% 4 0 0   100% 0 0   100%
src / tracekit / component / transmission_line.py velocity_factor   83% 6 1 0   50% 2 1   75%
src / tracekit / component / transmission_line.py _find_reflection_times   88% 16 2 0   75% 4 1   85%
src / tracekit / component / transmission_line.py _estimate_loss   81% 16 3 0   60% 10 4   73%
src / tracekit / component / transmission_line.py _calculate_return_loss   83% 6 1 0   75% 4 1   80%
src / tracekit / component / transmission_line.py (no function)   100% 23 0 3   100% 0 0   100%
src / tracekit / config / __init__.py (no function)   100% 11 0 0   100% 0 0   100%
src / tracekit / config / defaults.py deep_merge   100% 6 0 0   100% 4 0   100%
src / tracekit / config / defaults.py inject_defaults   100% 4 0 0   100% 2 0   100%
src / tracekit / config / defaults.py get_effective_config   100% 7 0 0   100% 4 0   100%
src / tracekit / config / defaults.py get_default   100% 5 0 0   100% 4 0   100%
src / tracekit / config / defaults.py _get_nested   100% 7 0 0   100% 4 0   100%
src / tracekit / config / defaults.py (no function)   100% 11 0 0   100% 0 0   100%
src / tracekit / config / loader.py load_config_file   100% 22 0 0   100% 10 0   100%
src / tracekit / config / loader.py _load_yaml   100% 17 0 0   88% 8 1   96%
src / tracekit / config / loader.py _load_json   100% 12 0 0   100% 4 0   100%
src / tracekit / config / loader.py load_config   100% 15 0 0   100% 10 0   100%
src / tracekit / config / loader.py save_config   100% 19 0 0   100% 10 0   100%
src / tracekit / config / loader.py get_config_value   100% 7 0 0   100% 4 0   100%
src / tracekit / config / loader.py (no function)   100% 15 0 2   100% 0 0   100%
src / tracekit / config / memory.py MemoryConfiguration.__post_init__   100% 8 0 0   100% 8 0   100%
src / tracekit / config / memory.py get_memory_config   100% 1 0 0   100% 0 0   100%
src / tracekit / config / memory.py set_memory_limit   100% 6 0 0   100% 4 0   100%
src / tracekit / config / memory.py set_memory_thresholds   100% 5 0 0   100% 4 0   100%
src / tracekit / config / memory.py enable_auto_degrade   100% 1 0 0   100% 0 0   100%
src / tracekit / config / memory.py set_memory_reserve   100% 3 0 0   100% 2 0   100%
src / tracekit / config / memory.py configure_from_environment   100% 16 0 0   100% 12 0   100%
src / tracekit / config / memory.py reset_to_defaults   100% 1 0 0   100% 0 0   100%
src / tracekit / config / memory.py _parse_memory_string   100% 17 0 0   100% 12 0   100%
src / tracekit / config / memory.py (no function)   100% 23 0 0   100% 0 0   100%
src / tracekit / config / migration.py Migration.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / config / migration.py SchemaMigration.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / config / migration.py SchemaMigration.register_migration   100% 8 0 0   100% 4 0   100%
src / tracekit / config / migration.py SchemaMigration.migrate_config   100% 23 0 0   100% 12 0   100%
src / tracekit / config / migration.py SchemaMigration.get_config_version   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py SchemaMigration.list_migrations   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py SchemaMigration.has_migration   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py SchemaMigration._find_migration_path   88% 16 2 0   83% 12 2   86%
src / tracekit / config / migration.py SchemaMigration._get_latest_version   94% 16 1 0   83% 12 2   89%
src / tracekit / config / migration.py get_migration_registry   100% 4 0 0   100% 2 0   100%
src / tracekit / config / migration.py register_migration   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py migrate_config   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py get_config_version   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py list_migrations   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py _parse_version   50% 4 2 0   100% 0 0   50%
src / tracekit / config / migration.py _register_builtin_migrations   100% 1 0 0   100% 0 0   100%
src / tracekit / config / migration.py _register_builtin_migrations._migrate_protocol_1_0_to_1_1   0% 1 1 0   100% 0 0   0%
src / tracekit / config / migration.py (no function)   100% 32 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py PipelineValidationError.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py PipelineExecutionError.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline.load   100% 2 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline.on_progress   100% 1 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline.register_handler   100% 1 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline.execute   93% 44 3 0   86% 14 2   91%
src / tracekit / config / pipeline.py Pipeline._validate_step   43% 7 4 0   38% 8 3   40%
src / tracekit / config / pipeline.py Pipeline._rollback   100% 4 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline._execute_step   100% 13 0 0   100% 8 0   100%
src / tracekit / config / pipeline.py Pipeline._get_default_handler   100% 2 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline._handle_input_file   0% 1 1 0   100% 0 0   0%
src / tracekit / config / pipeline.py Pipeline._handle_output_json   0% 6 6 0   100% 0 0   0%
src / tracekit / config / pipeline.py Pipeline._handle_statistics   100% 1 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline._evaluate_condition   100% 5 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py Pipeline._eval_expression   100% 17 0 0   100% 10 0   100%
src / tracekit / config / pipeline.py Pipeline._eval_comparison   74% 19 5 0   62% 16 2   69%
src / tracekit / config / pipeline.py Pipeline._resolve_value   100% 19 0 0   100% 12 0   100%
src / tracekit / config / pipeline.py Pipeline._notify_progress   60% 5 2 0   100% 2 0   71%
src / tracekit / config / pipeline.py Pipeline._run_cleanups   20% 5 4 0   50% 2 1   29%
src / tracekit / config / pipeline.py load_pipeline   100% 22 0 0   100% 8 0   100%
src / tracekit / config / pipeline.py _parse_step   45% 11 6 0   38% 8 3   42%
src / tracekit / config / pipeline.py _substitute_variables   100% 26 0 0   94% 16 1   98%
src / tracekit / config / pipeline.py resolve_includes   97% 34 1 0   94% 16 1   96%
src / tracekit / config / pipeline.py _apply_namespace   100% 5 0 0   100% 2 0   100%
src / tracekit / config / pipeline.py PipelineTemplate.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py PipelineTemplate.load   100% 9 0 0   100% 2 0   100%
src / tracekit / config / pipeline.py PipelineTemplate.instantiate   94% 31 2 0   83% 18 3   90%
src / tracekit / config / pipeline.py _validate_type   100% 3 0 0   100% 0 0   100%
src / tracekit / config / pipeline.py _substitute_dict_variables   100% 10 0 0   100% 8 0   100%
src / tracekit / config / pipeline.py (no function)   100% 76 0 2   100% 0 0   100%
src / tracekit / config / preferences.py UserPreferences.get   91% 11 1 0   88% 8 1   89%
src / tracekit / config / preferences.py UserPreferences.set   100% 20 0 0   93% 14 1   97%
src / tracekit / config / preferences.py UserPreferences.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / config / preferences.py UserPreferences.from_dict   100% 19 0 0   100% 10 0   100%
src / tracekit / config / preferences.py PreferencesManager.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / config / preferences.py PreferencesManager._get_default_path   100% 5 0 0   100% 0 0   100%
src / tracekit / config / preferences.py PreferencesManager.load   100% 22 0 0   100% 6 0   100%
src / tracekit / config / preferences.py PreferencesManager.save   92% 13 1 0   50% 2 1   87%
src / tracekit / config / preferences.py PreferencesManager.reset   100% 4 0 0   100% 0 0   100%
src / tracekit / config / preferences.py PreferencesManager.add_recent_file   100% 7 0 0   100% 2 0   100%
src / tracekit / config / preferences.py PreferencesManager.get_recent_files   100% 2 0 0   100% 0 0   100%
src / tracekit / config / preferences.py PreferencesManager.path   100% 1 0 0   100% 0 0   100%
src / tracekit / config / preferences.py get_preferences_manager   100% 3 0 0   100% 2 0   100%
src / tracekit / config / preferences.py get_preferences   100% 1 0 0   100% 0 0   100%
src / tracekit / config / preferences.py save_preferences   100% 1 0 0   100% 0 0   100%
src / tracekit / config / preferences.py (no function)   100% 72 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolDefinition.supports_digital   100% 1 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolDefinition.supports_analog   100% 1 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolDefinition.sample_rate_min   100% 5 0 0   100% 2 0   100%
src / tracekit / config / protocol.py ProtocolDefinition.sample_rate_max   100% 1 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolDefinition.bit_widths   100% 1 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolRegistry.__new__   100% 6 0 0   100% 2 0   100%
src / tracekit / config / protocol.py ProtocolRegistry.register   100% 8 0 0   100% 6 0   100%
src / tracekit / config / protocol.py ProtocolRegistry.get   70% 10 3 0   75% 8 2   72%
src / tracekit / config / protocol.py ProtocolRegistry.list   67% 9 3 0   50% 6 1   60%
src / tracekit / config / protocol.py ProtocolRegistry.get_capabilities   100% 2 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolRegistry.filter   71% 17 5 0   61% 18 5   66%
src / tracekit / config / protocol.py ProtocolRegistry.has_protocol   100% 5 0 0   100% 4 0   100%
src / tracekit / config / protocol.py ProtocolRegistry.list_versions   67% 3 1 0   50% 2 1   60%
src / tracekit / config / protocol.py ProtocolRegistry.on_change   100% 1 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolRegistry._notify_change   60% 5 2 0   100% 2 0   71%
src / tracekit / config / protocol.py load_protocol   92% 24 2 0   100% 8 0   94%
src / tracekit / config / protocol.py resolve_inheritance   100% 28 0 0   100% 10 0   100%
src / tracekit / config / protocol.py _deep_merge_dicts   100% 6 0 0   100% 4 0   100%
src / tracekit / config / protocol.py ProtocolWatcher.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolWatcher.on_change   100% 1 0 0   100% 0 0   100%
src / tracekit / config / protocol.py ProtocolWatcher.start   75% 8 2 0   50% 2 1   70%
src / tracekit / config / protocol.py ProtocolWatcher.stop   100% 4 0 0   50% 2 1   83%
src / tracekit / config / protocol.py ProtocolWatcher._watch_loop   67% 6 2 0   100% 2 0   75%
src / tracekit / config / protocol.py ProtocolWatcher.check_changes   75% 24 6 0   80% 10 2   76%
src / tracekit / config / protocol.py ProtocolWatcher._scan_files   100% 4 0 0   75% 4 1   88%
src / tracekit / config / protocol.py ProtocolWatcher._notify   60% 5 2 0   100% 2 0   71%
src / tracekit / config / protocol.py get_protocol_registry   100% 4 0 0   100% 2 0   100%
src / tracekit / config / protocol.py _register_builtin_protocols   100% 4 0 0   100% 0 0   100%
src / tracekit / config / protocol.py migrate_protocol_schema   85% 13 2 0   100% 4 0   88%
src / tracekit / config / protocol.py _migrate_0_8_to_0_9   100% 4 0 0   50% 2 1   83%
src / tracekit / config / protocol.py _migrate_0_9_to_1_0   100% 6 0 0   100% 2 0   100%
src / tracekit / config / protocol.py (no function)   100% 74 0 2   100% 0 0   100%
src / tracekit / config / schema.py ValidationError.__init__   100% 20 0 0   90% 10 1   97%
src / tracekit / config / schema.py ConfigSchema.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / config / schema.py ConfigSchema.full_uri   100% 3 0 0   100% 2 0   100%
src / tracekit / config / schema.py SchemaRegistry.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / config / schema.py SchemaRegistry.register   100% 8 0 0   100% 6 0   100%
src / tracekit / config / schema.py SchemaRegistry.get   86% 7 1 0   83% 6 1   85%
src / tracekit / config / schema.py SchemaRegistry.list_schemas   100% 1 0 0   100% 0 0   100%
src / tracekit / config / schema.py SchemaRegistry.list_versions   100% 3 0 0   100% 2 0   100%
src / tracekit / config / schema.py SchemaRegistry.has_schema   100% 5 0 0   100% 4 0   100%
src / tracekit / config / schema.py get_schema_registry   100% 4 0 0   100% 2 0   100%
src / tracekit / config / schema.py register_schema   100% 1 0 0   100% 0 0   100%
src / tracekit / config / schema.py validate_against_schema   86% 22 3 0   88% 8 1   87%
src / tracekit / config / schema.py _get_error_suggestion   100% 15 0 0   92% 12 1   96%
src / tracekit / config / schema.py _register_builtin_schemas   100% 5 0 0   100% 0 0   100%
src / tracekit / config / schema.py (no function)   100% 36 0 3   100% 0 0   100%
src / tracekit / config / settings.py Settings.enable_feature   100% 2 0 0   100% 0 0   100%
src / tracekit / config / settings.py Settings.disable_feature   100% 2 0 0   100% 0 0   100%
src / tracekit / config / settings.py Settings.is_feature_enabled   100% 1 0 0   100% 0 0   100%
src / tracekit / config / settings.py Settings.get   91% 11 1 0   88% 8 1   89%
src / tracekit / config / settings.py Settings.set   100% 20 0 0   93% 14 1   97%
src / tracekit / config / settings.py Settings.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / config / settings.py Settings.from_dict   100% 13 0 0   100% 6 0   100%
src / tracekit / config / settings.py get_settings   67% 3 1 0   50% 2 1   60%
src / tracekit / config / settings.py set_settings   100% 2 0 0   100% 0 0   100%
src / tracekit / config / settings.py reset_settings   100% 2 0 0   100% 0 0   100%
src / tracekit / config / settings.py load_settings   94% 16 1 0   100% 4 0   95%
src / tracekit / config / settings.py save_settings   60% 10 4 0   100% 0 0   60%
src / tracekit / config / settings.py (no function)   100% 51 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py LogicFamily.__post_init__   100% 8 0 0   100% 8 0   100%
src / tracekit / config / thresholds.py LogicFamily.get_threshold   100% 1 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py LogicFamily.with_temperature_derating   100% 3 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py ThresholdProfile.apply_to   100% 2 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.__new__   100% 7 0 0   100% 2 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry._register_builtins   100% 6 0 0   100% 4 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.get_family   100% 9 0 0   100% 6 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.list_families   100% 1 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.register_family   83% 6 1 0   50% 2 1   75%
src / tracekit / config / thresholds.py ThresholdRegistry.set_threshold_override   100% 8 0 0   100% 6 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.reset_overrides   100% 2 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.get_profile   100% 3 0 0   100% 2 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.apply_profile   100% 3 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py ThresholdRegistry.save_profile   100% 8 0 0   100% 2 0   100%
src / tracekit / config / thresholds.py load_logic_family   100% 5 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py get_threshold_registry   100% 1 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py get_user_logic_families_dir   100% 6 0 0   100% 0 0   100%
src / tracekit / config / thresholds.py load_user_logic_families   100% 9 0 0   100% 2 0   100%
src / tracekit / config / thresholds.py (no function)   100% 50 0 0   100% 0 0   100%
src / tracekit / core / __init__.py (no function)   100% 22 0 0   100% 0 0   100%
src / tracekit / core / audit.py AuditEntry.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / core / audit.py AuditEntry.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / core / audit.py AuditTrail.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / audit.py AuditTrail.record_action   73% 15 4 0   100% 2 0   76%
src / tracekit / core / audit.py AuditTrail.verify_integrity   83% 12 2 0   83% 12 2   83%
src / tracekit / core / audit.py AuditTrail.export_audit_log   100% 7 0 0   100% 4 0   100%
src / tracekit / core / audit.py AuditTrail.get_entries   100% 7 0 0   100% 4 0   100%
src / tracekit / core / audit.py AuditTrail._compute_hmac   86% 7 1 0   75% 4 1   82%
src / tracekit / core / audit.py AuditTrail._export_json   100% 3 0 0   100% 0 0   100%
src / tracekit / core / audit.py AuditTrail._export_csv   94% 17 1 0   88% 8 1   92%
src / tracekit / core / audit.py get_global_audit_trail   100% 3 0 0   100% 2 0   100%
src / tracekit / core / audit.py record_audit   100% 2 0 0   100% 0 0   100%
src / tracekit / core / audit.py (no function)   100% 37 0 0   100% 0 0   100%
src / tracekit / core / backend_selector.py get_system_capabilities   0% 11 11 0   0% 2 0   0%
src / tracekit / core / backend_selector.py BackendSelector.__init__   0% 1 1 0   100% 0 0   0%
src / tracekit / core / backend_selector.py BackendSelector.select_for_fft   0% 7 7 0   0% 6 0   0%
src / tracekit / core / backend_selector.py BackendSelector.select_for_edge_detection   0% 7 7 0   0% 6 0   0%
src / tracekit / core / backend_selector.py BackendSelector.select_for_correlation   0% 10 10 0   0% 6 0   0%
src / tracekit / core / backend_selector.py BackendSelector.select_for_protocol_decode   0% 3 3 0   0% 2 0   0%
src / tracekit / core / backend_selector.py BackendSelector.select_for_pattern_matching   0% 5 5 0   0% 4 0   0%
src / tracekit / core / backend_selector.py BackendSelector._estimate_correlation_output   0% 5 5 0   0% 4 0   0%
src / tracekit / core / backend_selector.py get_global_selector   0% 3 3 0   0% 2 0   0%
src / tracekit / core / backend_selector.py select_backend   0% 12 12 0   0% 10 0   0%
src / tracekit / core / backend_selector.py (no function)   0% 45 45 6   100% 0 0   0%
src / tracekit / core / cache.py CacheStats.hit_rate   100% 2 0 0   100% 0 0   100%
src / tracekit / core / cache.py CacheStats.__str__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / cache.py TraceKitCache.__init__   100% 15 0 0   100% 4 0   100%
src / tracekit / core / cache.py TraceKitCache.__enter__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / cache.py TraceKitCache.__exit__   100% 2 0 0   100% 2 0   100%
src / tracekit / core / cache.py TraceKitCache.get   100% 15 0 0   100% 4 0   100%
src / tracekit / core / cache.py TraceKitCache.put   92% 12 1 0   75% 4 1   88%
src / tracekit / core / cache.py TraceKitCache.get_or_compute   100% 6 0 0   100% 2 0   100%
src / tracekit / core / cache.py TraceKitCache.clear   83% 12 2 0   100% 6 0   89%
src / tracekit / core / cache.py TraceKitCache.get_stats   100% 3 0 0   100% 0 0   100%
src / tracekit / core / cache.py TraceKitCache.show_stats   100% 2 0 0   100% 0 0   100%
src / tracekit / core / cache.py TraceKitCache.compute_key   100% 7 0 0   100% 4 0   100%
src / tracekit / core / cache.py TraceKitCache._ensure_memory_limit   100% 12 0 0   83% 6 1   94%
src / tracekit / core / cache.py TraceKitCache._spill_to_disk   100% 4 0 0   100% 0 0   100%
src / tracekit / core / cache.py TraceKitCache._load_from_disk   100% 2 0 0   100% 0 0   100%
src / tracekit / core / cache.py TraceKitCache._estimate_size   100% 10 0 0   100% 6 0   100%
src / tracekit / core / cache.py TraceKitCache._make_hashable   100% 9 0 0   100% 8 0   100%
src / tracekit / core / cache.py TraceKitCache._parse_memory_string   100% 8 0 0   100% 6 0   100%
src / tracekit / core / cache.py get_cache   100% 3 0 0   100% 2 0   100%
src / tracekit / core / cache.py clear_cache   100% 3 0 0   100% 2 0   100%
src / tracekit / core / cache.py show_cache_stats   100% 3 0 0   100% 2 0   100%
src / tracekit / core / cache.py (no function)   100% 57 0 2   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager.__init__   100% 9 0 0   100% 2 0   100%
src / tracekit / core / cancellation.py CancellationManager.register_signal_handlers   100% 6 0 0   100% 2 0   100%
src / tracekit / core / cancellation.py CancellationManager.register_signal_handlers.signal_handler   100% 1 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager.cancel   100% 2 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager.is_cancelled   100% 1 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager.check_cancelled   100% 4 0 0   100% 2 0   100%
src / tracekit / core / cancellation.py CancellationManager.add_cleanup   100% 1 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager.store_partial_result   100% 1 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager.get_partial_results   100% 1 0 1   100% 0 0   100%
src / tracekit / core / cancellation.py CancellationManager._cleanup   100% 10 0 0   100% 4 0   100%
src / tracekit / core / cancellation.py CancellationManager.cancellable_operation   100% 12 0 1   100% 2 0   100%
src / tracekit / core / cancellation.py CancelledException.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py ResumableOperation.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py ResumableOperation.checkpoint   100% 2 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py ResumableOperation.restore   100% 2 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py ResumableOperation.has_checkpoint   100% 5 0 0   100% 0 0   100%
src / tracekit / core / cancellation.py confirm_cancellation   100% 7 0 1   100% 2 0   100%
src / tracekit / core / cancellation.py (no function)   100% 28 0 3   100% 0 0   100%
src / tracekit / core / confidence.py ConfidenceScore.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / core / confidence.py ConfidenceScore.level   100% 7 0 0   100% 6 0   100%
src / tracekit / core / confidence.py ConfidenceScore.interpretation   100% 9 0 0   100% 8 0   100%
src / tracekit / core / confidence.py ConfidenceScore.combine   100% 15 0 0   100% 12 0   100%
src / tracekit / core / confidence.py ConfidenceScore.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / core / confidence.py ConfidenceScore.__float__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / confidence.py calculate_confidence   100% 14 0 0   100% 8 0   100%
src / tracekit / core / confidence.py (no function)   100% 19 0 1   100% 0 0   100%
src / tracekit / core / config.py _deep_merge   100% 6 0 0   100% 4 0   100%
src / tracekit / core / config.py load_config   80% 25 5 0   81% 16 3   80%
src / tracekit / core / config.py validate_config   100% 21 0 0   100% 18 0   100%
src / tracekit / core / config.py get_config_value   100% 7 0 0   100% 4 0   100%
src / tracekit / core / config.py save_config   67% 9 3 0   50% 2 1   64%
src / tracekit / core / config.py SmartDefaults.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / config.py SmartDefaults._log   100% 3 0 0   100% 2 0   100%
src / tracekit / core / config.py SmartDefaults.get_fft_size   100% 4 0 0   100% 0 0   100%
src / tracekit / core / config.py SmartDefaults.get_window_function   100% 16 0 0   100% 8 0   100%
src / tracekit / core / config.py SmartDefaults.get_overlap   85% 13 2 0   83% 6 1   84%
src / tracekit / core / config.py SmartDefaults.get_reference_levels   85% 13 2 0   83% 6 1   84%
src / tracekit / core / config.py SmartDefaults.get_log_messages   100% 1 0 0   100% 0 0   100%
src / tracekit / core / config.py SmartDefaults.clear_log   100% 1 0 0   100% 0 0   100%
src / tracekit / core / config.py (no function)   100% 25 0 2   100% 0 0   100%
src / tracekit / core / correlation.py get_correlation_id   100% 1 0 0   100% 0 0   100%
src / tracekit / core / correlation.py set_correlation_id   100% 1 0 0   100% 0 0   100%
src / tracekit / core / correlation.py CorrelationContext.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / correlation.py CorrelationContext.__enter__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / correlation.py CorrelationContext.__exit__   100% 2 0 0   50% 2 1   75%
src / tracekit / core / correlation.py with_correlation_id   100% 3 0 1   100% 0 0   100%
src / tracekit / core / correlation.py with_correlation_id.decorator   100% 2 0 0   100% 0 0   100%
src / tracekit / core / correlation.py with_correlation_id.decorator.wrapper   100% 2 0 0   100% 0 0   100%
src / tracekit / core / correlation.py generate_correlation_id   100% 1 0 0   100% 0 0   100%
src / tracekit / core / correlation.py (no function)   100% 16 0 1   100% 0 0   100%
src / tracekit / core / cross_domain.py CrossDomainInsight.__post_init__   0% 2 2 0   0% 2 0   0%
src / tracekit / core / cross_domain.py CorrelationResult.overall_coherence   0% 6 6 0   0% 4 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator.__init__   0% 2 2 0   100% 0 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator.correlate   0% 19 19 0   0% 14 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._correlate_pair   0% 10 10 0   0% 6 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._build_correlation_rules   0% 1 1 0   100% 0 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._check_frequency_timing_agreement   0% 10 10 0   0% 6 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._check_digital_timing_consistency   0% 8 8 0   0% 4 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._check_jitter_eye_correlation   0% 7 7 0   0% 2 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._check_waveform_stats_consistency   0% 9 9 0   0% 4 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._extract_value   0% 11 11 0   0% 12 0   0%
src / tracekit / core / cross_domain.py CrossDomainCorrelator._calculate_adjustments   0% 7 7 0   0% 4 0   0%
src / tracekit / core / cross_domain.py correlate_results   0% 2 2 0   100% 0 0   0%
src / tracekit / core / cross_domain.py (no function)   100% 37 0 0   100% 0 0   100%
src / tracekit / core / debug.py enable_debug   90% 10 1 0   83% 6 1   88%
src / tracekit / core / debug.py disable_debug   100% 3 0 0   100% 0 0   100%
src / tracekit / core / debug.py is_debug_enabled   100% 2 0 0   100% 0 0   100%
src / tracekit / core / debug.py get_debug_level   100% 1 0 0   100% 0 0   100%
src / tracekit / core / debug.py debug_context.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / debug.py debug_context.__enter__   100% 11 0 0   100% 4 0   100%
src / tracekit / core / debug.py debug_context.__exit__   100% 5 0 0   50% 4 2   78%
src / tracekit / core / debug.py should_log_debug   100% 1 0 0   100% 0 0   100%
src / tracekit / core / debug.py configure_debug_from_env   100% 3 0 0   100% 2 0   100%
src / tracekit / core / debug.py debug_log   100% 2 0 0   100% 2 0   100%
src / tracekit / core / debug.py (no function)   100% 26 0 2   100% 0 0   100%
src / tracekit / core / edge_cases.py EmptyTraceError.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / edge_cases.py InsufficientSamplesError.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / core / edge_cases.py validate_signal   100% 12 0 0   100% 10 0   100%
src / tracekit / core / edge_cases.py handle_empty_trace   100% 1 0 0   100% 0 0   100%
src / tracekit / core / edge_cases.py check_single_sample   100% 4 0 0   100% 2 0   100%
src / tracekit / core / edge_cases.py sanitize_signal   100% 32 0 0   100% 24 0   100%
src / tracekit / core / edge_cases.py _interpolate_nan   92% 13 1 0   75% 4 1   88%
src / tracekit / core / edge_cases.py check_signal_quality   95% 20 1 0   50% 4 2   88%
src / tracekit / core / edge_cases.py SignalQualityReport.__init__   100% 9 0 0   100% 0 0   100%
src / tracekit / core / edge_cases.py SignalQualityReport.has_issues   100% 1 0 0   100% 0 0   100%
src / tracekit / core / edge_cases.py SignalQualityReport.summary   100% 13 0 0   100% 6 0   100%
src / tracekit / core / edge_cases.py (no function)   100% 19 0 2   100% 0 0   100%
src / tracekit / core / exceptions.py TraceKitError.__init__   100% 6 0 0   100% 2 0   100%
src / tracekit / core / exceptions.py TraceKitError._format_message   100% 7 0 0   100% 4 0   100%
src / tracekit / core / exceptions.py LoaderError.__init__   100% 6 0 0   100% 4 0   100%
src / tracekit / core / exceptions.py UnsupportedFormatError.__init__   100% 9 0 0   100% 2 0   100%
src / tracekit / core / exceptions.py FormatError.__init__   100% 10 0 0   100% 10 0   100%
src / tracekit / core / exceptions.py AnalysisError.__init__   100% 6 0 0   100% 4 0   100%
src / tracekit / core / exceptions.py InsufficientDataError.__init__   100% 9 0 0   100% 4 0   100%
src / tracekit / core / exceptions.py SampleRateError.__init__   100% 9 0 0   100% 4 0   100%
src / tracekit / core / exceptions.py ConfigurationError.__init__   100% 15 0 0   100% 10 0   100%
src / tracekit / core / exceptions.py ValidationError.__init__   100% 13 0 0   100% 6 0   100%
src / tracekit / core / exceptions.py ExportError.__init__   100% 12 0 0   100% 6 0   100%
src / tracekit / core / exceptions.py (no function)   100% 35 0 1   100% 0 0   100%
src / tracekit / core / gpu_backend.py GPUBackend.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / core / gpu_backend.py GPUBackend._check_gpu   83% 18 3 3   100% 4 0   86%
src / tracekit / core / gpu_backend.py GPUBackend.gpu_available   100% 3 0 0   100% 2 0   100%
src / tracekit / core / gpu_backend.py GPUBackend.using_gpu   100% 1 0 0   100% 0 0   100%
src / tracekit / core / gpu_backend.py GPUBackend._to_cpu   0% 4 4 0   0% 4 0   0%
src / tracekit / core / gpu_backend.py GPUBackend._to_gpu   0% 3 3 0   0% 2 0   0%
src / tracekit / core / gpu_backend.py GPUBackend.fft   40% 5 3 0   50% 2 1   43%
src / tracekit / core / gpu_backend.py GPUBackend.ifft   40% 5 3 0   50% 2 1   43%
src / tracekit / core / gpu_backend.py GPUBackend.rfft   40% 5 3 0   50% 2 1   43%
src / tracekit / core / gpu_backend.py GPUBackend.irfft   40% 5 3 0   50% 2 1   43%
src / tracekit / core / gpu_backend.py GPUBackend.convolve   33% 6 4 0   50% 2 1   38%
src / tracekit / core / gpu_backend.py GPUBackend.correlate   33% 6 4 0   50% 2 1   38%
src / tracekit / core / gpu_backend.py GPUBackend.histogram   33% 6 4 0   50% 2 1   38%
src / tracekit / core / gpu_backend.py GPUBackend.dot   33% 6 4 0   50% 2 1   38%
src / tracekit / core / gpu_backend.py GPUBackend.matmul   33% 6 4 0   50% 2 1   38%
src / tracekit / core / gpu_backend.py (no function)   100% 25 0 2   100% 0 0   100%
src / tracekit / core / lazy.py LazyComputeStats.hit_rate   100% 4 0 0   100% 2 0   100%
src / tracekit / core / lazy.py LazyComputeStats.__str__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py get_lazy_stats   100% 2 0 1   100% 0 0   100%
src / tracekit / core / lazy.py reset_lazy_stats   100% 2 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyResult.__init__   100% 9 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyResult.value   95% 20 1 0   75% 4 1   92%
src / tracekit / core / lazy.py LazyResult.is_computed   100% 2 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyResult.invalidate   100% 6 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyResult.get_if_computed   100% 4 0 0   100% 2 0   100%
src / tracekit / core / lazy.py LazyResult.peek   100% 2 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyResult.map   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyResult._release_source   0% 5 5 0   0% 2 0   0%
src / tracekit / core / lazy.py LazyResult._release_source.return_result   0% 1 1 0   100% 0 0   0%
src / tracekit / core / lazy.py LazyDict.__getitem__   100% 4 0 0   100% 2 0   100%
src / tracekit / core / lazy.py LazyDict.get_lazy   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyDict.is_computed   100% 4 0 0   100% 2 0   100%
src / tracekit / core / lazy.py LazyDict.invalidate   100% 3 0 0   50% 2 1   80%
src / tracekit / core / lazy.py LazyDict.invalidate_all   100% 3 0 0   100% 4 0   100%
src / tracekit / core / lazy.py LazyDict.computed_keys   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyDict.deferred_keys   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py lazy   100% 3 0 0   100% 0 0   100%
src / tracekit / core / lazy.py lazy.wrapper   100% 2 0 0   100% 0 0   100%
src / tracekit / core / lazy.py lazy.wrapper.compute   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.__init__   100% 8 0 0   100% 2 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.__init__.make_compute_fn   100% 2 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.__init__.make_compute_fn.compute_domain   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult._default_compute   38% 8 5 0   25% 4 1   33%
src / tracekit / core / lazy.py LazyAnalysisResult.get_domain   67% 3 1 0   50% 2 1   60%
src / tracekit / core / lazy.py LazyAnalysisResult.computed_domains   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.deferred_domains   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.compute_all   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.invalidate_domain   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py LazyAnalysisResult.invalidate_all   0% 1 1 0   100% 0 0   0%
src / tracekit / core / lazy.py LazyAnalysisResult.__getitem__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / lazy.py (no function)   100% 49 0 4   100% 0 0   100%
src / tracekit / core / log_query.py LogRecord.to_dict   100% 4 0 0   100% 2 0   100%
src / tracekit / core / log_query.py LogRecord.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / core / log_query.py LogQuery.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / log_query.py LogQuery.load_from_file   100% 8 0 0   100% 6 0   100%
src / tracekit / core / log_query.py LogQuery.add_record   100% 1 0 0   100% 0 0   100%
src / tracekit / core / log_query.py LogQuery.query_logs   100% 25 0 0   100% 18 0   100%
src / tracekit / core / log_query.py LogQuery.export_logs   100% 9 0 0   100% 6 0   100%
src / tracekit / core / log_query.py LogQuery.get_statistics   100% 8 0 0   100% 2 0   100%
src / tracekit / core / log_query.py LogQuery.clear   100% 1 0 0   100% 0 0   100%
src / tracekit / core / log_query.py LogQuery._load_json_lines   93% 14 1 0   75% 4 1   89%
src / tracekit / core / log_query.py LogQuery._load_text   92% 13 1 0   83% 6 1   89%
src / tracekit / core / log_query.py LogQuery._export_json   100% 2 0 0   100% 0 0   100%
src / tracekit / core / log_query.py LogQuery._export_csv   100% 8 0 0   100% 4 0   100%
src / tracekit / core / log_query.py LogQuery._export_text   100% 6 0 0   100% 4 0   100%
src / tracekit / core / log_query.py query_logs   100% 3 0 0   100% 0 0   100%
src / tracekit / core / log_query.py (no function)   100% 34 0 2   100% 0 0   100%
src / tracekit / core / logging.py CompressingRotatingFileHandler.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / logging.py CompressingRotatingFileHandler.doRollover   100% 9 0 0   75% 4 1   92%
src / tracekit / core / logging.py CompressingTimedRotatingFileHandler.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / core / logging.py CompressingTimedRotatingFileHandler._parse_max_age   100% 7 0 0   100% 6 0   100%
src / tracekit / core / logging.py CompressingTimedRotatingFileHandler.doRollover   0% 24 24 0   0% 14 0   0%
src / tracekit / core / logging.py CompressingTimedRotatingFileHandler._cleanup_old_files   77% 13 3 0   67% 6 2   74%
src / tracekit / core / logging.py CompressingTimedRotatingFileHandler._delete_old_files   78% 9 2 0   100% 2 0   82%
src / tracekit / core / logging.py StructuredFormatter.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / logging.py StructuredFormatter.format   100% 21 0 2   93% 14 1   97%
src / tracekit / core / logging.py StructuredFormatter._format_timestamp   89% 9 1 0   83% 6 1   87%
src / tracekit / core / logging.py StructuredFormatter._format_logfmt   100% 7 0 0   100% 4 0   100%
src / tracekit / core / logging.py configure_logging   100% 36 0 0   92% 12 1   98%
src / tracekit / core / logging.py get_logger   100% 5 0 0   100% 4 0   100%
src / tracekit / core / logging.py set_log_level   100% 2 0 0   100% 0 0   100%
src / tracekit / core / logging.py ErrorContextCapture.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / core / logging.py ErrorContextCapture.from_exception   100% 4 0 0   100% 0 0   100%
src / tracekit / core / logging.py ErrorContextCapture.to_dict   100% 14 0 0   100% 8 0   100%
src / tracekit / core / logging.py ErrorContextCapture._filter_sensitive_data   100% 8 0 0   100% 4 0   100%
src / tracekit / core / logging.py log_exception   80% 5 1 0   50% 2 1   71%
src / tracekit / core / logging.py format_timestamp   100% 10 0 0   100% 8 0   100%
src / tracekit / core / logging.py _init_logging   100% 5 0 0   100% 2 0   100%
src / tracekit / core / logging.py (no function)   100% 62 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAggregator.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAggregator._normalize_message   100% 4 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAggregator.add   100% 10 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogAggregator.get_summary   100% 2 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAggregator.cleanup_old   100% 3 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAnalyzer.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAnalyzer.add   100% 1 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAnalyzer.analyze_patterns   100% 14 0 0   100% 4 0   100%
src / tracekit / core / logging_advanced.py LogAnalyzer.get_error_rate   100% 6 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogAnalyzer.get_trend   100% 14 0 0   100% 6 0   100%
src / tracekit / core / logging_advanced.py LogAlerter.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAlerter.add_alert   100% 5 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAlerter.check   100% 19 0 0   100% 10 0   100%
src / tracekit / core / logging_advanced.py LogAlerter.on_alert   100% 1 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogAlerter._notify   100% 5 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogSampler.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogSampler.should_log   90% 31 3 0   78% 18 4   86%
src / tracekit / core / logging_advanced.py LogBuffer.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogBuffer.add   100% 5 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogBuffer.flush   83% 12 2 0   100% 6 0   89%
src / tracekit / core / logging_advanced.py LogBuffer.on_flush   100% 1 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogBuffer.start_auto_flush   100% 3 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogBuffer.stop_auto_flush   100% 4 0 0   50% 2 1   83%
src / tracekit / core / logging_advanced.py LogBuffer._flush_loop   100% 3 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py CompressedLogHandler.__init__   100% 8 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py CompressedLogHandler.emit   83% 12 2 0   100% 4 0   88%
src / tracekit / core / logging_advanced.py CompressedLogHandler._open_file   60% 5 2 0   100% 0 0   60%
src / tracekit / core / logging_advanced.py CompressedLogHandler._rotate   100% 10 0 0   75% 8 2   89%
src / tracekit / core / logging_advanced.py CompressedLogHandler.close   100% 5 0 0   50% 2 1   86%
src / tracekit / core / logging_advanced.py EncryptedLogHandler.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py EncryptedLogHandler.emit   82% 11 2 0   50% 2 1   77%
src / tracekit / core / logging_advanced.py EncryptedLogHandler._encrypt   100% 4 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py EncryptedLogHandler.close   100% 5 0 0   50% 2 1   86%
src / tracekit / core / logging_advanced.py LogForwarder.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogForwarder.forward   100% 5 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogForwarder._flush   56% 16 7 0   20% 10 2   42%
src / tracekit / core / logging_advanced.py LogForwarder._send_http   100% 4 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogForwarder._send_syslog   100% 6 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogForwarder._send_tcp   100% 8 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogForwarder._send_udp   100% 6 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogDashboardCollector.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / logging_advanced.py LogDashboardCollector.add   100% 6 0 0   100% 2 0   100%
src / tracekit / core / logging_advanced.py LogDashboardCollector.get_metrics   100% 22 0 0   100% 6 0   100%
src / tracekit / core / logging_advanced.py (no function)   100% 130 0 2   100% 0 0   100%
src / tracekit / core / memoize.py array_hash   100% 6 0 0   100% 0 0   100%
src / tracekit / core / memoize.py memoize_analysis   100% 2 0 1   100% 0 0   100%
src / tracekit / core / memoize.py memoize_analysis.decorator   100% 9 0 0   100% 0 0   100%
src / tracekit / core / memoize.py memoize_analysis.decorator.wrapper   100% 21 0 0   100% 12 0   100%
src / tracekit / core / memoize.py memoize_analysis.decorator.cache_clear   0% 2 2 0   100% 0 0   0%
src / tracekit / core / memoize.py memoize_analysis.decorator.cache_info   0% 1 1 0   100% 0 0   0%
src / tracekit / core / memoize.py (no function)   100% 10 0 2   100% 0 0   100%
src / tracekit / core / memory_check.py set_force_memory   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_check.py is_force_memory   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_check.py check_operation_memory   100% 3 0 0   100% 2 0   100%
src / tracekit / core / memory_check.py auto_check_memory   100% 5 0 0   100% 4 0   100%
src / tracekit / core / memory_check.py with_memory_check   100% 5 0 1   100% 0 0   100%
src / tracekit / core / memory_check.py with_memory_check.wrapper   83% 12 2 0   83% 6 1   83%
src / tracekit / core / memory_check.py register_auto_check_operation   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_check.py get_auto_check_operations   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_check.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / core / memory_guard.py get_memory_usage_mb   0% 4 4 3   100% 0 0   0%
src / tracekit / core / memory_guard.py check_memory_available   100% 4 0 3   100% 0 0   100%
src / tracekit / core / memory_guard.py MemoryGuard.__init__   0% 4 4 0   100% 0 0   0%
src / tracekit / core / memory_guard.py MemoryGuard.__enter__   0% 3 3 0   100% 0 0   0%
src / tracekit / core / memory_guard.py MemoryGuard.__exit__   0% 5 5 0   0% 2 0   0%
src / tracekit / core / memory_guard.py MemoryGuard.check   0% 7 7 1   0% 2 0   0%
src / tracekit / core / memory_guard.py MemoryGuard.get_stats   0% 2 2 1   100% 0 0   0%
src / tracekit / core / memory_guard.py safe_array_size   0% 9 9 0   0% 2 0   0%
src / tracekit / core / memory_guard.py can_allocate   0% 2 2 0   100% 0 0   0%
src / tracekit / core / memory_guard.py get_safe_chunk_size   0% 4 4 0   100% 0 0   0%
src / tracekit / core / memory_guard.py (no function)   100% 18 0 1   100% 0 0   100%
src / tracekit / core / memory_limits.py parse_memory_limit   100% 21 0 0   100% 16 0   100%
src / tracekit / core / memory_limits.py apply_memory_limit   100% 42 0 0   79% 28 6   91%
src / tracekit / core / memory_limits.py _find_max_nfft   100% 10 0 0   100% 4 0   100%
src / tracekit / core / memory_limits.py _find_max_nperseg   100% 15 0 0   100% 4 0   100%
src / tracekit / core / memory_limits.py _find_max_num_uis   100% 3 0 0   100% 0 0   100%
src / tracekit / core / memory_limits.py get_operation_memory_limit   100% 8 0 0   100% 4 0   100%
src / tracekit / core / memory_limits.py check_operation_fits   100% 3 0 0   100% 0 0   100%
src / tracekit / core / memory_limits.py (no function)   100% 13 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py MemoryMonitor.__init__   100% 15 0 0   100% 4 0   100%
src / tracekit / core / memory_monitor.py MemoryMonitor.__enter__   100% 6 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py MemoryMonitor.__exit__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py MemoryMonitor.check   92% 12 1 1   83% 6 1   89%
src / tracekit / core / memory_monitor.py MemoryMonitor.get_stats   100% 2 0 1   100% 0 0   100%
src / tracekit / core / memory_monitor.py MemoryMonitor.get_snapshots   100% 1 0 1   100% 0 0   100%
src / tracekit / core / memory_monitor.py MemoryMonitor._get_process_memory   0% 4 4 3   100% 0 0   0%
src / tracekit / core / memory_monitor.py MemoryMonitor._take_snapshot   22% 9 7 2   100% 0 0   22%
src / tracekit / core / memory_monitor.py monitor_memory   100% 3 0 1   100% 0 0   100%
src / tracekit / core / memory_monitor.py ProgressWithMemory.percent   100% 3 0 0   100% 2 0   100%
src / tracekit / core / memory_monitor.py ProgressWithMemory.memory_pressure   100% 2 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py ProgressWithMemory.format_progress   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py ProgressMonitor.__init__   100% 8 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py ProgressMonitor.update   100% 8 0 0   100% 4 0   100%
src / tracekit / core / memory_monitor.py ProgressMonitor.get_progress   100% 4 0 0   100% 0 0   100%
src / tracekit / core / memory_monitor.py (no function)   100% 44 0 4   100% 0 0   100%
src / tracekit / core / memory_progress.py MemoryLogger.__init__   100% 11 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py MemoryLogger.__enter__   100% 10 0 0   75% 4 1   93%
src / tracekit / core / memory_progress.py MemoryLogger.__exit__   100% 6 0 0   75% 4 1   90%
src / tracekit / core / memory_progress.py MemoryLogger.log_operation   100% 12 0 0   83% 6 1   94%
src / tracekit / core / memory_progress.py MemoryLogger.log_progress   100% 3 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py MemoryLogger.get_summary   100% 2 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py MemoryLogger.get_entries   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py MemoryLogger._get_summary_dict   100% 6 0 0   100% 2 0   100%
src / tracekit / core / memory_progress.py MemoryLogger._format_entry   100% 2 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py MemoryLogger._get_process_memory   100% 4 0 3   100% 0 0   100%
src / tracekit / core / memory_progress.py log_memory   100% 3 0 1   100% 0 0   100%
src / tracekit / core / memory_progress.py create_progress_callback_with_logging   100% 2 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py create_progress_callback_with_logging.callback   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_progress.py enable_memory_logging_from_cli   100% 6 0 1   100% 4 0   100%
src / tracekit / core / memory_progress.py (no function)   100% 37 0 4   100% 0 0   100%
src / tracekit / core / memory_warnings.py check_memory_warnings   100% 7 0 0   100% 4 0   100%
src / tracekit / core / memory_warnings.py emit_memory_warning   100% 8 0 0   100% 6 0   100%
src / tracekit / core / memory_warnings.py check_and_abort_if_critical   100% 6 0 1   100% 2 0   100%
src / tracekit / core / memory_warnings.py MemoryWarningMonitor.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / core / memory_warnings.py MemoryWarningMonitor.__enter__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / memory_warnings.py MemoryWarningMonitor.__exit__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_warnings.py MemoryWarningMonitor.check   100% 16 0 0   100% 12 0   100%
src / tracekit / core / memory_warnings.py register_memory_warning_callback   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_warnings.py clear_memory_warning_callbacks   100% 1 0 0   100% 0 0   100%
src / tracekit / core / memory_warnings.py _invoke_callbacks   100% 5 0 0   100% 2 0   100%
src / tracekit / core / memory_warnings.py format_memory_warning   100% 8 0 0   100% 4 0   100%
src / tracekit / core / memory_warnings.py (no function)   100% 24 0 3   100% 0 0   100%
src / tracekit / core / numba_backend.py get_optimal_numba_config   0% 3 3 0   0% 2 0   0%
src / tracekit / core / numba_backend.py find_crossings_numba   0% 11 11 0   0% 10 0   0%
src / tracekit / core / numba_backend.py moving_average_numba   0% 8 8 0   0% 4 0   0%
src / tracekit / core / numba_backend.py argrelextrema_numba   0% 15 15 0   0% 12 0   0%
src / tracekit / core / numba_backend.py interpolate_linear_numba   0% 21 21 0   0% 10 0   0%
src / tracekit / core / numba_backend.py (no function)   0% 61 61 2   0% 10 0   0%
src / tracekit / core / performance.py PerformanceCollector.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / performance.py PerformanceCollector.record   100% 1 0 0   100% 0 0   100%
src / tracekit / core / performance.py PerformanceCollector.get_summary   100% 8 0 0   100% 4 0   100%
src / tracekit / core / performance.py PerformanceCollector.clear   100% 1 0 0   100% 0 0   100%
src / tracekit / core / performance.py PerformanceCollector.get_records   100% 7 0 0   100% 4 0   100%
src / tracekit / core / performance.py timed   100% 3 0 0   100% 0 0   100%
src / tracekit / core / performance.py timed.decorator   100% 2 0 0   100% 0 0   100%
src / tracekit / core / performance.py timed.decorator.wrapper   100% 11 0 0   100% 2 0   100%
src / tracekit / core / performance.py get_performance_summary   100% 1 0 0   100% 0 0   100%
src / tracekit / core / performance.py clear_performance_data   100% 1 0 0   100% 0 0   100%
src / tracekit / core / performance.py get_performance_records   100% 1 0 0   100% 0 0   100%
src / tracekit / core / performance.py PerformanceContext.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / core / performance.py PerformanceContext.__enter__   100% 2 0 0   100% 0 0   100%
src / tracekit / core / performance.py PerformanceContext.__exit__   100% 7 0 0   100% 4 0   100%
src / tracekit / core / performance.py (no function)   100% 31 0 2   100% 0 0   100%
src / tracekit / core / progress.py CancellationToken.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / progress.py CancellationToken.cancel   100% 3 0 0   100% 0 0   100%
src / tracekit / core / progress.py CancellationToken.is_cancelled   100% 1 0 0   100% 0 0   100%
src / tracekit / core / progress.py CancellationToken.check   100% 2 0 0   100% 2 0   100%
src / tracekit / core / progress.py CancellationToken.message   100% 1 0 0   100% 0 0   100%
src / tracekit / core / progress.py CancellationToken.cancelled_at   100% 1 0 0   100% 0 0   100%
src / tracekit / core / progress.py CancelledError.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / core / progress.py create_progress_tracker   100% 1 0 0   100% 0 0   100%
src / tracekit / core / progress.py ProgressTracker.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / core / progress.py ProgressTracker.update   100% 7 0 0   100% 4 0   100%
src / tracekit / core / progress.py ProgressTracker.get_eta   100% 8 0 0   100% 4 0   100%
src / tracekit / core / progress.py ProgressTracker.get_progress_percent   100% 3 0 0   100% 2 0   100%
src / tracekit / core / progress.py ProgressTracker.finish   100% 4 0 0   100% 2 0   100%
src / tracekit / core / progress.py estimate_memory_usage   100% 3 0 0   100% 0 0   100%
src / tracekit / core / progress.py check_memory_available   100% 4 0 0   100% 0 0   100%
src / tracekit / core / progress.py warn_memory_usage   100% 11 0 0   100% 4 0   100%
src / tracekit / core / progress.py create_simple_progress   100% 2 0 0   100% 0 0   100%
src / tracekit / core / progress.py create_simple_progress.callback   100% 7 0 0   100% 4 0   100%
src / tracekit / core / progress.py (no function)   100% 28 0 27   100% 0 0   100%
src / tracekit / core / provenance.py Provenance.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / core / provenance.py Provenance.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / core / provenance.py Provenance.__str__   100% 7 0 0   100% 4 0   100%
src / tracekit / core / provenance.py MeasurementResultWithProvenance.is_equivalent   100% 10 0 0   100% 10 0   100%
src / tracekit / core / provenance.py MeasurementResultWithProvenance.to_dict   100% 6 0 0   100% 4 0   100%
src / tracekit / core / provenance.py MeasurementResultWithProvenance.from_dict   100% 7 0 0   100% 4 0   100%
src / tracekit / core / provenance.py MeasurementResultWithProvenance.__str__   100% 6 0 0   100% 4 0   100%
src / tracekit / core / provenance.py MeasurementResultWithProvenance.pretty_print   100% 8 0 0   100% 6 0   100%
src / tracekit / core / provenance.py compute_input_hash   100% 3 0 0   100% 0 0   100%
src / tracekit / core / provenance.py create_provenance   100% 4 0 0   100% 2 0   100%
src / tracekit / core / provenance.py (no function)   100% 34 0 3   100% 0 0   100%
src / tracekit / core / results.py AnalysisResult.get_intermediate   100% 4 0 0   100% 2 0   100%
src / tracekit / core / results.py AnalysisResult.has_intermediate   100% 1 0 0   100% 0 0   100%
src / tracekit / core / results.py AnalysisResult.list_intermediates   100% 1 0 0   100% 0 0   100%
src / tracekit / core / results.py FFTResult.__post_init__   100% 5 0 0   100% 4 0   100%
src / tracekit / core / results.py FFTResult.peak_frequency   100% 3 0 0   100% 2 0   100%
src / tracekit / core / results.py FFTResult.magnitude   100% 1 0 0   100% 0 0   100%
src / tracekit / core / results.py FilterResult.__post_init__   100% 12 0 0   92% 12 1   96%
src / tracekit / core / results.py WaveletResult.__post_init__   100% 10 0 0   90% 10 1   95%
src / tracekit / core / results.py MeasurementResult.__post_init__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / results.py MeasurementResult.__str__   100% 3 0 0   100% 2 0   100%
src / tracekit / core / results.py (no function)   100% 48 0 4   100% 0 0   100%
src / tracekit / core / types.py CalibrationInfo.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / core / types.py CalibrationInfo.is_calibration_current   100% 4 0 0   100% 2 0   100%
src / tracekit / core / types.py CalibrationInfo.traceability_summary   100% 10 0 0   100% 8 0   100%
src / tracekit / core / types.py TraceMetadata.__post_init__   100% 2 0 0   100% 2 0   100%
src / tracekit / core / types.py TraceMetadata.time_base   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py WaveformTrace.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / core / types.py WaveformTrace.time_vector   100% 2 0 0   100% 0 0   100%
src / tracekit / core / types.py WaveformTrace.duration   100% 3 0 0   100% 2 0   100%
src / tracekit / core / types.py WaveformTrace.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py DigitalTrace.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / core / types.py DigitalTrace.time_vector   100% 2 0 0   100% 0 0   100%
src / tracekit / core / types.py DigitalTrace.duration   100% 3 0 0   100% 2 0   100%
src / tracekit / core / types.py DigitalTrace.rising_edges   100% 3 0 0   100% 2 0   100%
src / tracekit / core / types.py DigitalTrace.falling_edges   100% 3 0 0   100% 2 0   100%
src / tracekit / core / types.py DigitalTrace.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py IQTrace.__post_init__   100% 10 0 0   100% 10 0   100%
src / tracekit / core / types.py IQTrace.complex_data   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py IQTrace.magnitude   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py IQTrace.phase   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py IQTrace.time_vector   100% 2 0 0   100% 0 0   100%
src / tracekit / core / types.py IQTrace.duration   100% 3 0 0   100% 2 0   100%
src / tracekit / core / types.py IQTrace.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py ProtocolPacket.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / core / types.py ProtocolPacket.duration   100% 3 0 0   100% 2 0   100%
src / tracekit / core / types.py ProtocolPacket.has_errors   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py ProtocolPacket.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / core / types.py (no function)   100% 94 0 3   100% 0 0   100%
src / tracekit / core / uncertainty.py MeasurementWithUncertainty.__post_init__   100% 8 0 0   100% 8 0   100%
src / tracekit / core / uncertainty.py MeasurementWithUncertainty.expanded_uncertainty   100% 1 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py MeasurementWithUncertainty.relative_uncertainty   100% 3 0 0   100% 2 0   100%
src / tracekit / core / uncertainty.py MeasurementWithUncertainty.lower_bound   100% 1 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py MeasurementWithUncertainty.upper_bound   100% 1 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py MeasurementWithUncertainty.__str__   75% 4 1 0   50% 2 1   67%
src / tracekit / core / uncertainty.py UncertaintyEstimator.type_a_standard_deviation   100% 3 0 0   100% 2 0   100%
src / tracekit / core / uncertainty.py UncertaintyEstimator.type_a_standard_error   67% 3 1 0   50% 2 1   60%
src / tracekit / core / uncertainty.py UncertaintyEstimator.combined_uncertainty   100% 5 0 0   100% 2 0   100%
src / tracekit / core / uncertainty.py UncertaintyEstimator.type_b_rectangular   100% 1 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py UncertaintyEstimator.type_b_triangular   100% 1 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py UncertaintyEstimator.type_b_from_tolerance   56% 9 4 0   50% 6 1   53%
src / tracekit / core / uncertainty.py UncertaintyEstimator.time_base_uncertainty   100% 3 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py UncertaintyEstimator.vertical_uncertainty   100% 3 0 0   100% 0 0   100%
src / tracekit / core / uncertainty.py (no function)   100% 41 0 3   100% 0 0   100%
src / tracekit / discovery / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / discovery / anomaly_detector.py find_anomalies   94% 32 2 0   95% 22 1   94%
src / tracekit / discovery / anomaly_detector.py _detect_glitches   90% 29 3 0   79% 14 3   86%
src / tracekit / discovery / anomaly_detector.py _detect_dropouts   30% 23 16 0   17% 12 2   26%
src / tracekit / discovery / anomaly_detector.py _detect_noise_spikes   94% 18 1 0   88% 8 1   92%
src / tracekit / discovery / anomaly_detector.py _detect_timing_violations   32% 22 15 0   20% 10 2   28%
src / tracekit / discovery / anomaly_detector.py _detect_ringing   62% 21 8 0   62% 8 3   62%
src / tracekit / discovery / anomaly_detector.py _detect_overshoot   27% 26 19 0   17% 12 2   24%
src / tracekit / discovery / anomaly_detector.py _detect_undershoot   85% 26 4 0   75% 12 3   82%
src / tracekit / discovery / anomaly_detector.py (no function)   100% 26 0 2   100% 0 0   100%
src / tracekit / discovery / auto_decoder.py DecodedByte.__post_init__   0% 4 4 0   0% 4 0   0%
src / tracekit / discovery / auto_decoder.py decode_protocol   0% 20 20 0   0% 18 0   0%
src / tracekit / discovery / auto_decoder.py _decode_uart_auto   0% 32 32 0   0% 12 0   0%
src / tracekit / discovery / auto_decoder.py _decode_spi_auto   0% 1 1 0   100% 0 0   0%
src / tracekit / discovery / auto_decoder.py _decode_i2c_auto   0% 1 1 0   100% 0 0   0%
src / tracekit / discovery / auto_decoder.py _detect_baud_rate   0% 15 15 0   0% 4 0   0%
src / tracekit / discovery / auto_decoder.py (no function)   100% 30 0 2   100% 0 0   100%
src / tracekit / discovery / comparison.py _align_time_based   100% 4 0 0   100% 0 0   100%
src / tracekit / discovery / comparison.py _align_trigger_based   100% 19 0 0   100% 2 0   100%
src / tracekit / discovery / comparison.py _align_pattern_based   100% 14 0 0   100% 2 0   100%
src / tracekit / discovery / comparison.py _detect_timing_differences   100% 14 0 0   100% 2 0   100%
src / tracekit / discovery / comparison.py _detect_amplitude_differences   100% 15 0 0   100% 4 0   100%
src / tracekit / discovery / comparison.py _detect_pattern_differences   100% 10 0 0   100% 4 0   100%
src / tracekit / discovery / comparison.py compare_traces   94% 63 4 0   89% 36 4   92%
src / tracekit / discovery / comparison.py (no function)   100% 33 0 3   100% 0 0   100%
src / tracekit / discovery / quality_validator.py assess_data_quality   92% 36 3 0   79% 14 1   88%
src / tracekit / discovery / quality_validator.py _assess_sample_rate   100% 36 0 0   100% 18 0   100%
src / tracekit / discovery / quality_validator.py _assess_resolution   71% 28 8 0   80% 10 2   74%
src / tracekit / discovery / quality_validator.py _assess_duration   88% 33 4 0   92% 12 1   89%
src / tracekit / discovery / quality_validator.py _assess_noise   64% 25 9 0   70% 10 3   66%
src / tracekit / discovery / quality_validator.py (no function)   100% 31 0 2   100% 0 0   100%
src / tracekit / discovery / signal_detector.py characterize_signal   81% 53 10 0   68% 22 1   77%
src / tracekit / discovery / signal_detector.py _estimate_noise_level   90% 21 2 0   60% 10 4   81%
src / tracekit / discovery / signal_detector.py _detect_digital   93% 15 1 0   75% 4 1   89%
src / tracekit / discovery / signal_detector.py _detect_analog   33% 15 10 0   50% 6 1   38%
src / tracekit / discovery / signal_detector.py _detect_pwm   93% 27 2 0   83% 12 2   90%
src / tracekit / discovery / signal_detector.py _detect_uart   100% 31 0 0   100% 14 0   100%
src / tracekit / discovery / signal_detector.py _detect_spi   95% 21 1 0   88% 8 1   93%
src / tracekit / discovery / signal_detector.py _detect_i2c   100% 2 0 0   100% 0 0   100%
src / tracekit / discovery / signal_detector.py _estimate_frequency   90% 10 1 0   75% 4 1   86%
src / tracekit / discovery / signal_detector.py _estimate_snr   86% 7 1 0   50% 2 1   78%
src / tracekit / discovery / signal_detector.py _estimate_jitter   100% 9 0 0   100% 2 0   100%
src / tracekit / discovery / signal_detector.py _extract_parameters   69% 13 4 0   88% 8 1   76%
src / tracekit / discovery / signal_detector.py _guess_logic_family   100% 20 0 0   100% 10 0   100%
src / tracekit / discovery / signal_detector.py _estimate_baud_rate   91% 11 1 0   50% 2 1   85%
src / tracekit / discovery / signal_detector.py (no function)   100% 32 0 2   100% 0 0   100%
src / tracekit / dsl / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / tracekit / dsl / commands.py cmd_load   100% 17 0 0   100% 8 0   100%
src / tracekit / dsl / commands.py cmd_filter   100% 19 0 2   100% 16 0   100%
src / tracekit / dsl / commands.py cmd_measure   100% 28 0 2   100% 22 0   100%
src / tracekit / dsl / commands.py cmd_plot   100% 8 0 2   100% 2 0   100%
src / tracekit / dsl / commands.py cmd_export   100% 13 0 2   100% 8 0   100%
src / tracekit / dsl / commands.py cmd_glob   100% 2 0 0   100% 0 0   100%
src / tracekit / dsl / commands.py (no function)   100% 11 0 0   100% 0 0   100%
src / tracekit / dsl / interpreter.py Interpreter.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / dsl / interpreter.py Interpreter._register_builtin_commands   100% 6 0 0   100% 0 0   100%
src / tracekit / dsl / interpreter.py Interpreter._cmd_load   100% 11 0 2   100% 6 0   100%
src / tracekit / dsl / interpreter.py Interpreter._cmd_filter   100% 6 0 0   100% 4 0   100%
src / tracekit / dsl / interpreter.py Interpreter._cmd_measure   100% 6 0 0   100% 4 0   100%
src / tracekit / dsl / interpreter.py Interpreter._cmd_plot   100% 1 0 0   100% 0 0   100%
src / tracekit / dsl / interpreter.py Interpreter._cmd_export   100% 6 0 0   100% 4 0   100%
src / tracekit / dsl / interpreter.py Interpreter._cmd_glob   100% 4 0 0   100% 2 0   100%
src / tracekit / dsl / interpreter.py Interpreter.eval_expression   100% 13 0 0   100% 12 0   100%
src / tracekit / dsl / interpreter.py Interpreter.eval_function_call   100% 4 0 0   100% 2 0   100%
src / tracekit / dsl / interpreter.py Interpreter.eval_command   100% 6 0 0   100% 4 0   100%
src / tracekit / dsl / interpreter.py Interpreter.eval_pipeline   100% 10 0 0   100% 8 0   100%
src / tracekit / dsl / interpreter.py Interpreter.eval_statement   100% 14 0 0   100% 8 0   100%
src / tracekit / dsl / interpreter.py Interpreter.eval_for_loop   100% 7 0 0   100% 6 0   100%
src / tracekit / dsl / interpreter.py Interpreter.execute   100% 2 0 0   100% 2 0   100%
src / tracekit / dsl / interpreter.py Interpreter.execute_source   100% 2 0 0   100% 0 0   100%
src / tracekit / dsl / interpreter.py execute_dsl   100% 5 0 0   100% 2 0   100%
src / tracekit / dsl / interpreter.py (no function)   100% 23 0 0   100% 0 0   100%
src / tracekit / dsl / parser.py Lexer.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / dsl / parser.py Lexer.current_char   100% 3 0 0   100% 2 0   100%
src / tracekit / dsl / parser.py Lexer.peek_char   0% 4 4 0   0% 2 0   0%
src / tracekit / dsl / parser.py Lexer.advance   100% 6 0 0   100% 2 0   100%
src / tracekit / dsl / parser.py Lexer.skip_whitespace   100% 2 0 0   100% 2 0   100%
src / tracekit / dsl / parser.py Lexer.skip_comment   100% 3 0 0   100% 4 0   100%
src / tracekit / dsl / parser.py Lexer.measure_indent   100% 14 0 0   88% 8 1   95%
src / tracekit / dsl / parser.py Lexer.read_string   94% 16 1 0   88% 8 1   92%
src / tracekit / dsl / parser.py Lexer.read_number   88% 16 2 0   80% 10 2   85%
src / tracekit / dsl / parser.py Lexer.read_identifier   100% 5 0 0   100% 2 0   100%
src / tracekit / dsl / parser.py Lexer.read_variable   100% 2 0 0   100% 0 0   100%
src / tracekit / dsl / parser.py Lexer.emit_indent_tokens   90% 10 1 0   88% 8 1   89%
src / tracekit / dsl / parser.py Lexer.tokenize   100% 59 0 0   97% 36 1   99%
src / tracekit / dsl / parser.py Parser.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / dsl / parser.py Parser.current_token   67% 3 1 0   50% 2 1   60%
src / tracekit / dsl / parser.py Parser.peek_token   75% 4 1 0   50% 2 1   67%
src / tracekit / dsl / parser.py Parser.advance   100% 2 0 0   50% 2 1   75%
src / tracekit / dsl / parser.py Parser.expect   80% 5 1 0   50% 2 1   71%
src / tracekit / dsl / parser.py Parser.skip_newlines   100% 2 0 0   100% 2 0   100%
src / tracekit / dsl / parser.py Parser.parse   89% 9 1 0   75% 4 1   85%
src / tracekit / dsl / parser.py Parser.parse_statement   100% 6 0 0   100% 6 0   100%
src / tracekit / dsl / parser.py Parser.parse_assignment   100% 5 0 0   100% 0 0   100%
src / tracekit / dsl / parser.py Parser.parse_pipeline   100% 7 0 0   100% 4 0   100%
src / tracekit / dsl / parser.py Parser.parse_primary   100% 20 0 0   100% 12 0   100%
src / tracekit / dsl / parser.py Parser.parse_function_call   100% 8 0 0   100% 4 0   100%
src / tracekit / dsl / parser.py Parser.parse_for_loop   91% 23 2 0   70% 10 3   85%
src / tracekit / dsl / parser.py parse_dsl   100% 4 0 0   100% 0 0   100%
src / tracekit / dsl / parser.py (no function)   100% 94 0 0   100% 0 0   100%
src / tracekit / dsl / repl.py REPL.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / dsl / repl.py REPL.print_banner   100% 3 0 0   100% 0 0   100%
src / tracekit / dsl / repl.py REPL.print_help   100% 23 0 0   100% 0 0   100%
src / tracekit / dsl / repl.py REPL.print_variables   100% 9 0 0   100% 6 0   100%
src / tracekit / dsl / repl.py REPL.read_input   100% 4 0 0   100% 0 0   100%
src / tracekit / dsl / repl.py REPL.eval_special_command   100% 11 0 0   100% 6 0   100%
src / tracekit / dsl / repl.py REPL.eval_line   74% 19 5 0   75% 8 0   74%
src / tracekit / dsl / repl.py REPL.run   100% 8 0 0   100% 4 0   100%
src / tracekit / dsl / repl.py start_repl   100% 2 0 0   100% 0 0   100%
src / tracekit / dsl / repl.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / exceptions.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / exploratory / __init__.py (no function)   100% 9 0 0   100% 0 0   100%
src / tracekit / exploratory / error_recovery.py recover_corrupted_data   91% 68 6 0   79% 28 4   88%
src / tracekit / exploratory / error_recovery.py graceful_degradation   73% 33 9 0   64% 14 1   70%
src / tracekit / exploratory / error_recovery.py partial_decode   88% 41 5 0   86% 14 2   87%
src / tracekit / exploratory / error_recovery.py ErrorContext.capture   86% 28 4 0   79% 14 3   83%
src / tracekit / exploratory / error_recovery.py retry_with_adjustment   100% 20 0 0   90% 10 1   97%
src / tracekit / exploratory / error_recovery.py (no function)   100% 53 0 3   100% 0 0   100%
src / tracekit / exploratory / fuzzy.py fuzzy_timing_match   97% 31 1 0   88% 8 1   95%
src / tracekit / exploratory / fuzzy.py fuzzy_pattern_match   100% 36 0 0   93% 14 1   98%
src / tracekit / exploratory / fuzzy.py fuzzy_protocol_detect   96% 67 3 0   80% 46 9   89%
src / tracekit / exploratory / fuzzy.py (no function)   100% 33 0 2   100% 0 0   100%
src / tracekit / exploratory / fuzzy_advanced.py _compute_entropy   92% 12 1 0   75% 8 2   85%
src / tracekit / exploratory / fuzzy_advanced.py _classify_variation   86% 7 1 0   83% 6 1   85%
src / tracekit / exploratory / fuzzy_advanced.py _detect_error_variation   91% 11 1 0   88% 8 1   89%
src / tracekit / exploratory / fuzzy_advanced.py characterize_variants   100% 33 0 0   100% 12 0   100%
src / tracekit / exploratory / fuzzy_advanced.py _needleman_wunsch   100% 47 0 0   100% 24 0   100%
src / tracekit / exploratory / fuzzy_advanced.py _smith_waterman   83% 46 8 0   80% 20 2   82%
src / tracekit / exploratory / fuzzy_advanced.py align_two_sequences   100% 6 0 0   100% 4 0   100%
src / tracekit / exploratory / fuzzy_advanced.py align_sequences   92% 12 1 0   90% 10 1   91%
src / tracekit / exploratory / fuzzy_advanced.py _progressive_alignment   98% 43 1 0   92% 24 2   96%
src / tracekit / exploratory / fuzzy_advanced.py compute_conservation_scores   100% 18 0 0   100% 10 0   100%
src / tracekit / exploratory / fuzzy_advanced.py (no function)   100% 55 0 2   100% 0 0   100%
src / tracekit / exploratory / legacy.py detect_logic_families_multi_channel   93% 41 3 0   73% 22 4   86%
src / tracekit / exploratory / legacy.py _score_logic_family   100% 16 0 0   92% 12 1   96%
src / tracekit / exploratory / legacy.py cross_correlate_multi_reference   95% 37 2 0   75% 8 2   91%
src / tracekit / exploratory / legacy.py _normalize_to_logic_levels   83% 6 1 0   50% 2 1   75%
src / tracekit / exploratory / legacy.py assess_signal_quality   96% 67 3 0   69% 36 9   86%
src / tracekit / exploratory / legacy.py characterize_test_points   100% 26 0 0   80% 10 2   94%
src / tracekit / exploratory / legacy.py _is_bimodal   92% 25 2 0   75% 16 4   85%
src / tracekit / exploratory / legacy.py (no function)   100% 63 0 3   100% 0 0   100%
src / tracekit / exploratory / parse.py correct_timestamp_jitter   98% 47 1 0   94% 16 1   97%
src / tracekit / exploratory / parse.py decode_with_error_tolerance   71% 35 10 0   62% 24 1   68%
src / tracekit / exploratory / parse.py (no function)   100% 27 0 0   100% 0 0   100%
src / tracekit / exploratory / recovery.py analyze_bit_errors   94% 53 3 0   89% 28 3   93%
src / tracekit / exploratory / recovery.py generate_error_visualization_data   100% 6 0 0   100% 2 0   100%
src / tracekit / exploratory / recovery.py (no function)   100% 21 0 0   100% 0 0   100%
src / tracekit / exploratory / sync.py hamming_distance   100% 4 0 0   100% 0 0   100%
src / tracekit / exploratory / sync.py fuzzy_sync_search   100% 27 0 0   100% 22 0   100%
src / tracekit / exploratory / sync.py parse_variable_length_packets   97% 63 2 0   91% 32 3   95%
src / tracekit / exploratory / sync.py (no function)   100% 26 0 0   100% 0 0   100%
src / tracekit / exploratory / unknown.py detect_binary_fields   100% 47 0 0   94% 16 1   98%
src / tracekit / exploratory / unknown.py _detect_encoding   77% 13 3 0   62% 8 1   71%
src / tracekit / exploratory / unknown.py characterize_unknown_signal   93% 68 5 0   84% 32 5   90%
src / tracekit / exploratory / unknown.py _suggest_protocols   84% 31 5 0   78% 18 4   82%
src / tracekit / exploratory / unknown.py analyze_pattern_frequency   100% 29 0 0   90% 10 1   97%
src / tracekit / exploratory / unknown.py reverse_engineer_protocol   100% 24 0 0   100% 16 0   100%
src / tracekit / exploratory / unknown.py (no function)   100% 45 0 3   100% 0 0   100%
src / tracekit / exporters / __init__.py (no function)   100% 10 0 0   100% 0 0   100%
src / tracekit / exporters / csv.py export_csv   75% 8 2 0   67% 6 2   71%
src / tracekit / exporters / csv.py _export_trace   85% 40 6 0   77% 26 2   82%
src / tracekit / exporters / csv.py _export_dict   0% 14 14 0   0% 10 0   0%
src / tracekit / exporters / csv.py _export_array   0% 14 14 0   0% 10 0   0%
src / tracekit / exporters / csv.py export_multi_trace_csv   0% 29 29 0   0% 16 0   0%
src / tracekit / exporters / csv.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / exporters / exporters.py (no function)   100% 9 0 0   100% 0 0   100%
src / tracekit / exporters / hdf5.py export_hdf5   100% 11 0 0   100% 6 0   100%
src / tracekit / exporters / hdf5.py _write_trace_dataset   92% 25 2 0   75% 20 3   84%
src / tracekit / exporters / hdf5.py export_measurement_results   0% 15 15 0   0% 12 0   0%
src / tracekit / exporters / hdf5.py append_trace   0% 5 5 0   0% 2 0   0%
src / tracekit / exporters / hdf5.py (no function)   100% 14 0 2   100% 0 0   100%
src / tracekit / exporters / html_export.py export_html   100% 2 0 0   100% 0 0   100%
src / tracekit / exporters / html_export.py generate_html_report   91% 32 3 0   75% 16 4   85%
src / tracekit / exporters / html_export.py _html_escape   100% 1 0 0   100% 0 0   100%
src / tracekit / exporters / html_export.py _format_sample_rate   29% 7 5 0   17% 6 1   23%
src / tracekit / exporters / html_export.py _format_value   58% 24 10 0   55% 22 8   57%
src / tracekit / exporters / html_export.py _generate_measurements_html   81% 21 4 0   67% 12 2   76%
src / tracekit / exporters / html_export.py _generate_plots_html   0% 38 38 0   0% 18 0   0%
src / tracekit / exporters / html_export.py _try_render_plotly   0% 7 7 2   0% 4 0   0%
src / tracekit / exporters / html_export.py _try_render_matplotlib   0% 11 11 2   0% 2 0   0%
src / tracekit / exporters / html_export.py (no function)   100% 18 0 0   100% 0 0   100%
src / tracekit / exporters / json_export.py TraceKitJSONEncoder.default   20% 30 24 0   18% 28 1   19%
src / tracekit / exporters / json_export.py export_json   94% 18 1 0   75% 8 2   88%
src / tracekit / exporters / json_export.py export_measurements   0% 10 10 0   0% 4 0   0%
src / tracekit / exporters / json_export.py export_protocol_decode   0% 10 10 0   0% 4 0   0%
src / tracekit / exporters / json_export.py load_json   0% 3 3 0   100% 0 0   0%
src / tracekit / exporters / json_export.py (no function)   100% 16 0 0   100% 0 0   100%
src / tracekit / exporters / markdown_export.py export_markdown   95% 19 1 0   80% 10 2   90%
src / tracekit / exporters / markdown_export.py _generate_metadata_section   52% 31 15 0   41% 22 3   47%
src / tracekit / exporters / markdown_export.py _generate_measurements_section   71% 24 7 0   50% 12 2   64%
src / tracekit / exporters / markdown_export.py _format_value   50% 30 15 0   46% 28 9   48%
src / tracekit / exporters / markdown_export.py _generate_plots_section   0% 46 46 0   0% 12 0   0%
src / tracekit / exporters / markdown_export.py generate_markdown_report   44% 27 15 0   38% 16 6   42%
src / tracekit / exporters / markdown_export.py (no function)   100% 13 0 0   100% 0 0   100%
src / tracekit / exporters / matlab_export.py export_mat   89% 19 2 0   81% 16 3   86%
src / tracekit / exporters / matlab_export.py _save_hdf5_mat   100% 5 0 0   100% 2 0   100%
src / tracekit / exporters / matlab_export.py _write_hdf5_value   62% 26 10 0   56% 18 2   59%
src / tracekit / exporters / matlab_export.py _add_trace_to_dict   96% 23 1 0   88% 16 2   92%
src / tracekit / exporters / matlab_export.py _sanitize_varname   71% 7 2 0   50% 4 2   64%
src / tracekit / exporters / matlab_export.py _convert_value   46% 13 7 0   42% 12 3   44%
src / tracekit / exporters / matlab_export.py export_multi_trace_mat   0% 6 6 0   0% 4 0   0%
src / tracekit / exporters / matlab_export.py (no function)   100% 20 0 4   100% 0 0   100%
src / tracekit / exporters / npz_export.py export_npz   80% 10 2 0   75% 8 2   78%
src / tracekit / exporters / npz_export.py _export_trace   68% 22 7 0   50% 16 8   61%
src / tracekit / exporters / npz_export.py _export_dict   62% 13 5 0   60% 10 2   61%
src / tracekit / exporters / npz_export.py _export_array   100% 3 0 0   100% 2 0   100%
src / tracekit / exporters / npz_export.py load_npz   100% 3 0 0   100% 0 0   100%
src / tracekit / exporters / npz_export.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / exporters / spice_export.py export_pwl   54% 26 12 0   43% 14 4   50%
src / tracekit / exporters / spice_export.py export_pwl_multi   0% 6 6 0   0% 2 0   0%
src / tracekit / exporters / spice_export.py generate_spice_source   100% 4 0 0   100% 2 0   100%
src / tracekit / exporters / spice_export.py (no function)   100% 9 0 2   100% 0 0   100%
src / tracekit / extensibility / __init__.py (no function)   100% 9 0 0   100% 0 0   100%
src / tracekit / extensibility / docs.py generate_extension_docs   100% 8 0 0   75% 4 1   92%
src / tracekit / extensibility / docs.py generate_decoder_docs   56% 48 21 1   42% 26 9   51%
src / tracekit / extensibility / docs.py extract_plugin_metadata   57% 23 10 0   50% 8 2   55%
src / tracekit / extensibility / docs.py _extract_metadata   70% 10 3 0   25% 4 1   57%
src / tracekit / extensibility / docs.py _document_modules   75% 8 2 0   100% 2 0   80%
src / tracekit / extensibility / docs.py _document_module   100% 14 0 0   80% 10 2   92%
src / tracekit / extensibility / docs.py _document_class   82% 11 2 0   83% 6 1   82%
src / tracekit / extensibility / docs.py _document_class_ast   100% 7 0 0   100% 6 0   100%
src / tracekit / extensibility / docs.py _document_function_ast   100% 8 0 0   75% 4 1   92%
src / tracekit / extensibility / docs.py _parse_docstring   100% 13 0 0   100% 8 0   100%
src / tracekit / extensibility / docs.py _process_section   37% 27 17 0   29% 24 1   33%
src / tracekit / extensibility / docs.py _get_name_from_ast   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / docs.py _generate_markdown   95% 56 3 0   62% 32 12   83%
src / tracekit / extensibility / docs.py _generate_html   85% 26 4 0   71% 14 2   80%
src / tracekit / extensibility / docs.py (no function)   100% 54 0 2   100% 0 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointSpec.validate_implementation   80% 5 1 0   75% 4 1   78%
src / tracekit / extensibility / extensions.py RegisteredAlgorithm.can   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py RegisteredAlgorithm.get_capabilities   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py HookContext.__post_init__   50% 2 1 0   50% 2 1   50%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.__new__   100% 10 0 0   50% 2 1   92%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.initialize   100% 9 0 0   100% 2 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.register_point   75% 4 1 0   50% 2 1   67%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.get_point   67% 3 1 0   50% 2 1   60%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.list_points   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.exists   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.register_algorithm   80% 10 2 0   67% 6 2   75%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.get_algorithm   60% 5 2 0   50% 4 2   56%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.select_algorithm   25% 59 44 0   20% 50 8   23%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.select_algorithm.sort_key   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.list_algorithms   75% 8 2 0   50% 6 3   64%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.list_categories   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.benchmark_algorithms   0% 38 38 0   0% 12 0   0%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.configure_priorities   86% 7 1 0   75% 8 2   80%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.register_hook   100% 6 0 0   100% 2 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.execute_hooks   38% 16 10 0   33% 12 2   36%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.configure_hooks   0% 3 3 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.list_hooks   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.clear_hooks   0% 3 3 0   0% 2 0   0%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.register_decoder   78% 9 2 0   50% 4 2   69%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.get_decoder   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / extensions.py ExtensionPointRegistry.list_decoders   67% 3 1 0   50% 2 1   60%
src / tracekit / extensibility / extensions.py get_registry   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / extensions.py list_extension_points   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py get_extension_point   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py extension_point_exists   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py register_extension_point   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py hook   0% 2 2 1   100% 0 0   0%
src / tracekit / extensibility / extensions.py hook.decorator   0% 2 2 0   100% 0 0   0%
src / tracekit / extensibility / extensions.py (no function)   100% 79 0 2   100% 0 0   100%
src / tracekit / extensibility / logging.py get_plugin_logger   0% 5 5 0   0% 2 0   0%
src / tracekit / extensibility / logging.py set_plugin_log_level   0% 6 6 0   0% 2 0   0%
src / tracekit / extensibility / logging.py get_plugin_log_level   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / logging.py PluginLoggerAdapter.__init__   0% 7 7 0   0% 2 0   0%
src / tracekit / extensibility / logging.py PluginLoggerAdapter.process   0% 4 4 0   100% 0 0   0%
src / tracekit / extensibility / logging.py log_plugin_lifecycle   0% 9 9 0   0% 4 0   0%
src / tracekit / extensibility / logging.py configure_plugin_logging   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / logging.py list_plugin_loggers   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / logging.py (no function)   100% 16 0 0   100% 0 0   100%
src / tracekit / extensibility / measurements.py MeasurementDefinition.__post_init__   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / measurements.py MeasurementDefinition._validate_signature   0% 7 7 0   0% 4 0   0%
src / tracekit / extensibility / measurements.py MeasurementDefinition.__call__   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py MeasurementRegistry.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / measurements.py MeasurementRegistry.register   0% 9 9 0   0% 6 0   0%
src / tracekit / extensibility / measurements.py MeasurementRegistry.get   0% 4 4 0   0% 2 0   0%
src / tracekit / extensibility / measurements.py MeasurementRegistry.has_measurement   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py MeasurementRegistry.list_measurements   0% 8 8 0   0% 6 0   0%
src / tracekit / extensibility / measurements.py MeasurementRegistry.get_metadata   0% 2 2 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py MeasurementRegistry.unregister   0% 4 4 0   0% 4 0   0%
src / tracekit / extensibility / measurements.py register_measurement   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py measure   0% 2 2 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py list_measurements   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py get_measurement_registry   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / measurements.py (no function)   100% 31 0 4   100% 0 0   100%
src / tracekit / extensibility / plugins.py PluginManager.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / plugins.py PluginManager.discover_plugins   0% 14 14 0   0% 2 0   0%
src / tracekit / extensibility / plugins.py PluginManager.load_plugin   0% 22 22 0   0% 8 0   0%
src / tracekit / extensibility / plugins.py PluginManager.get_plugin   0% 2 2 0   100% 0 0   0%
src / tracekit / extensibility / plugins.py PluginManager.is_loaded   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / plugins.py PluginManager.list_loaded_plugins   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / plugins.py PluginManager.unload_plugin   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / plugins.py PluginManager._find_entry_point   0% 14 14 0   0% 8 0   0%
src / tracekit / extensibility / plugins.py load_plugin   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / plugins.py list_plugins   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / plugins.py get_plugin_manager   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / plugins.py (no function)   100% 31 0 1   100% 0 0   100%
src / tracekit / extensibility / registry.py AlgorithmRegistry.__new__   100% 4 0 0   100% 2 0   100%
src / tracekit / extensibility / registry.py AlgorithmRegistry.register   0% 9 9 0   0% 8 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.get   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.list_categories   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.list_algorithms   0% 3 3 0   0% 2 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.has_algorithm   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.unregister   0% 3 3 0   0% 2 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.clear_category   0% 2 2 0   0% 2 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry.clear_all   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / registry.py AlgorithmRegistry._validate_signature   0% 5 5 0   0% 4 0   0%
src / tracekit / extensibility / registry.py register_algorithm   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / registry.py get_algorithm   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / registry.py get_algorithms   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / registry.py (no function)   100% 21 0 3   100% 0 0   100%
src / tracekit / extensibility / templates.py generate_plugin_template   100% 8 0 0   100% 4 0   100%
src / tracekit / extensibility / templates.py _generate_plugin_structure   100% 12 0 0   100% 2 0   100%
src / tracekit / extensibility / templates.py _write_init_py   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _write_main_module   91% 11 1 0   88% 8 1   89%
src / tracekit / extensibility / templates.py _write_test_init   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _write_test_module   100% 3 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _write_readme   100% 4 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _write_pyproject_toml   100% 4 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _get_class_name   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _get_entry_point_group   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _generate_decoder_stub   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _generate_analyzer_stub   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _generate_loader_stub   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _generate_exporter_stub   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / templates.py _generate_generic_stub   0% 1 1 0   100% 0 0   0%
src / tracekit / extensibility / templates.py (no function)   100% 29 0 2   100% 0 0   100%
src / tracekit / extensibility / validation.py ValidationResult.add_error   100% 2 0 0   100% 0 0   100%
src / tracekit / extensibility / validation.py ValidationResult.add_warning   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / validation.py ValidationResult.add_info   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / validation.py ValidationResult.all_issues   100% 1 0 0   100% 0 0   100%
src / tracekit / extensibility / validation.py validate_extension   81% 21 4 0   67% 12 2   76%
src / tracekit / extensibility / validation.py validate_decoder_interface   90% 21 2 0   88% 16 2   89%
src / tracekit / extensibility / validation.py validate_hook_function   100% 14 0 0   100% 8 0   100%
src / tracekit / extensibility / validation.py _validate_metadata   80% 20 4 0   70% 10 3   77%
src / tracekit / extensibility / validation.py _validate_structure   75% 12 3 0   50% 8 2   65%
src / tracekit / extensibility / validation.py _validate_entry_points   56% 18 8 0   50% 6 1   54%
src / tracekit / extensibility / validation.py _validate_implementation   85% 13 2 0   100% 4 0   88%
src / tracekit / extensibility / validation.py _check_dependencies   0% 17 17 0   0% 6 0   0%
src / tracekit / extensibility / validation.py _check_security   83% 18 3 0   86% 14 2   84%
src / tracekit / extensibility / validation.py (no function)   100% 35 0 3   100% 0 0   100%
src / tracekit / filtering / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / filtering / base.py Filter.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / base.py Filter.sample_rate   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / base.py Filter.sample_rate   100% 3 0 0   100% 2 0   100%
src / tracekit / filtering / base.py Filter.get_transfer_function   100% 7 0 0   100% 4 0   100%
src / tracekit / filtering / base.py Filter.get_group_delay   100% 10 0 0   100% 2 0   100%
src / tracekit / filtering / base.py IIRFilter.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / filtering / base.py IIRFilter.sos   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / base.py IIRFilter.ba   100% 6 0 0   100% 4 0   100%
src / tracekit / filtering / base.py IIRFilter.is_stable   88% 8 1 0   75% 4 1   83%
src / tracekit / filtering / base.py IIRFilter.order   100% 5 0 0   100% 4 0   100%
src / tracekit / filtering / base.py IIRFilter.poles   100% 5 0 0   100% 2 0   100%
src / tracekit / filtering / base.py IIRFilter.zeros   100% 5 0 0   100% 2 0   100%
src / tracekit / filtering / base.py IIRFilter.apply   100% 19 0 0   100% 12 0   100%
src / tracekit / filtering / base.py IIRFilter.get_frequency_response   100% 8 0 0   100% 6 0   100%
src / tracekit / filtering / base.py IIRFilter.get_impulse_response   100% 8 0 0   100% 4 0   100%
src / tracekit / filtering / base.py IIRFilter.get_step_response   100% 7 0 0   100% 4 0   100%
src / tracekit / filtering / base.py FIRFilter.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / filtering / base.py FIRFilter.coeffs   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / base.py FIRFilter.coeffs   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / base.py FIRFilter.is_stable   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / base.py FIRFilter.order   100% 3 0 0   100% 2 0   100%
src / tracekit / filtering / base.py FIRFilter.is_linear_phase   100% 6 0 0   100% 2 0   100%
src / tracekit / filtering / base.py FIRFilter.apply   100% 10 0 0   100% 4 0   100%
src / tracekit / filtering / base.py FIRFilter.get_frequency_response   100% 6 0 0   100% 4 0   100%
src / tracekit / filtering / base.py FIRFilter.get_impulse_response   100% 7 0 0   100% 4 0   100%
src / tracekit / filtering / base.py FIRFilter.get_step_response   100% 5 0 0   100% 2 0   100%
src / tracekit / filtering / base.py FIRFilter.get_group_delay   100% 6 0 0   100% 4 0   100%
src / tracekit / filtering / base.py (no function)   100% 58 0 36   100% 0 0   100%
src / tracekit / filtering / convenience.py low_pass   80% 5 1 0   50% 2 1   71%
src / tracekit / filtering / convenience.py high_pass   80% 5 1 0   50% 2 1   71%
src / tracekit / filtering / convenience.py band_pass   80% 5 1 0   50% 2 1   71%
src / tracekit / filtering / convenience.py band_stop   80% 5 1 0   50% 2 1   71%
src / tracekit / filtering / convenience.py notch_filter   100% 10 0 0   100% 2 0   100%
src / tracekit / filtering / convenience.py moving_average   100% 7 0 0   100% 4 0   100%
src / tracekit / filtering / convenience.py median_filter   100% 6 0 0   100% 4 0   100%
src / tracekit / filtering / convenience.py savgol_filter   100% 6 0 0   100% 4 0   100%
src / tracekit / filtering / convenience.py matched_filter   100% 11 0 0   88% 8 1   95%
src / tracekit / filtering / convenience.py exponential_moving_average   100% 6 0 0   100% 2 0   100%
src / tracekit / filtering / convenience.py gaussian_filter   100% 4 0 0   100% 2 0   100%
src / tracekit / filtering / convenience.py differentiate   100% 7 0 0   100% 4 0   100%
src / tracekit / filtering / convenience.py integrate   88% 8 1 0   75% 4 1   83%
src / tracekit / filtering / convenience.py (no function)   100% 21 0 2   100% 0 0   100%
src / tracekit / filtering / design.py design_filter   98% 47 1 0   97% 32 1   97%
src / tracekit / filtering / design.py design_filter_spec   100% 26 0 0   100% 16 0   100%
src / tracekit / filtering / design.py LowPassFilter.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / filtering / design.py LowPassFilter.cutoff   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / design.py HighPassFilter.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / filtering / design.py HighPassFilter.cutoff   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / design.py BandPassFilter.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / filtering / design.py BandPassFilter.passband   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / design.py BandStopFilter.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / filtering / design.py BandStopFilter.stopband   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / design.py ButterworthFilter.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / design.py ChebyshevType1Filter.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / design.py ChebyshevType2Filter.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / design.py BesselFilter.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / design.py EllipticFilter.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / design.py suggest_filter_type   100% 9 0 0   100% 8 0   100%
src / tracekit / filtering / design.py auto_design_filter   100% 10 0 0   100% 4 0   100%
src / tracekit / filtering / design.py (no function)   100% 39 0 0   100% 0 0   100%
src / tracekit / filtering / filters.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.filter   100% 1 0 0   100% 0 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.magnitude_response   100% 9 0 0   100% 6 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.phase_response   100% 11 0 0   100% 8 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.group_delay_hz   100% 7 0 0   100% 2 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.passband_ripple   100% 5 0 0   100% 2 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.stopband_attenuation   100% 5 0 0   100% 2 0   100%
src / tracekit / filtering / introspection.py FilterIntrospection.cutoff_frequency   100% 9 0 0   100% 4 0   100%
src / tracekit / filtering / introspection.py plot_bode   100% 24 0 0   100% 6 0   100%
src / tracekit / filtering / introspection.py plot_impulse   100% 17 0 0   100% 4 0   100%
src / tracekit / filtering / introspection.py plot_step   100% 18 0 0   100% 4 0   100%
src / tracekit / filtering / introspection.py plot_poles_zeros   100% 24 0 0   100% 4 0   100%
src / tracekit / filtering / introspection.py plot_group_delay   100% 15 0 0   100% 4 0   100%
src / tracekit / filtering / introspection.py compare_filters   100% 45 0 0   100% 10 0   100%
src / tracekit / filtering / introspection.py (no function)   100% 21 0 3   100% 0 0   100%
src / tracekit / guidance / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / tracekit / guidance / recommender.py AnalysisHistory.add_step   0% 5 5 0   0% 4 0   0%
src / tracekit / guidance / recommender.py AnalysisHistory.was_recent   50% 4 2 0   50% 2 1   50%
src / tracekit / guidance / recommender.py _calculate_priority   100% 2 0 0   100% 0 0   100%
src / tracekit / guidance / recommender.py _recommend_characterization   100% 3 0 0   100% 2 0   100%
src / tracekit / guidance / recommender.py _recommend_anomaly_check   58% 12 5 0   50% 10 3   55%
src / tracekit / guidance / recommender.py _recommend_quality_assessment   75% 4 1 0   50% 2 1   67%
src / tracekit / guidance / recommender.py _recommend_protocol_decode   81% 16 3 0   70% 10 3   77%
src / tracekit / guidance / recommender.py _recommend_spectral_analysis   78% 9 2 0   62% 8 3   71%
src / tracekit / guidance / recommender.py suggest_next_steps   89% 19 2 0   75% 12 3   84%
src / tracekit / guidance / recommender.py (no function)   100% 32 0 3   100% 0 0   100%
src / tracekit / guidance / wizard.py AnalysisWizard.__init__   100% 14 0 0   100% 0 0   100%
src / tracekit / guidance / wizard.py AnalysisWizard.add_custom_step   100% 3 0 0   100% 2 0   100%
src / tracekit / guidance / wizard.py AnalysisWizard.set_answers   100% 1 0 0   100% 0 0   100%
src / tracekit / guidance / wizard.py AnalysisWizard.run   88% 91 11 0   74% 42 7   83%
src / tracekit / guidance / wizard.py AnalysisWizard.from_session   100% 18 0 0   100% 6 0   100%
src / tracekit / guidance / wizard.py AnalysisWizard.save_session   100% 7 0 0   100% 0 0   100%
src / tracekit / guidance / wizard.py _format_params   100% 12 0 0   100% 10 0   100%
src / tracekit / guidance / wizard.py (no function)   100% 35 0 3   100% 0 0   100%
src / tracekit / inference / __init__.py (no function)   100% 16 0 0   100% 0 0   100%
src / tracekit / inference / adaptive_tuning.py TunedParameters.get   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner._analyze_signal   100% 23 0 0   100% 2 0   100%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner._estimate_dominant_frequency   82% 11 2 0   100% 2 0   85%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.get_spectral_params   100% 24 0 0   100% 6 0   100%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.get_digital_params   100% 24 0 0   75% 4 1   96%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.get_timing_params   100% 16 0 0   50% 2 1   94%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.get_jitter_params   89% 19 2 0   50% 6 3   80%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.get_pattern_params   88% 16 2 0   50% 2 1   83%
src / tracekit / inference / adaptive_tuning.py AdaptiveParameterTuner.get_params_for_domain   100% 12 0 0   100% 10 0   100%
src / tracekit / inference / adaptive_tuning.py get_adaptive_parameters   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / adaptive_tuning.py (no function)   100% 24 0 2   100% 0 0   100%
src / tracekit / inference / alignment.py align_global   100% 57 0 0   100% 26 0   100%
src / tracekit / inference / alignment.py align_local   95% 58 3 0   96% 26 1   95%
src / tracekit / inference / alignment.py align_multiple   96% 25 1 0   92% 12 1   95%
src / tracekit / inference / alignment.py compute_similarity   100% 15 0 0   100% 12 0   100%
src / tracekit / inference / alignment.py find_conserved_regions   100% 29 0 0   100% 18 0   100%
src / tracekit / inference / alignment.py find_variable_regions   100% 28 0 0   100% 18 0   100%
src / tracekit / inference / alignment.py _find_conserved_simple   100% 13 0 0   100% 12 0   100%
src / tracekit / inference / alignment.py _find_variable_simple   100% 13 0 0   100% 12 0   100%
src / tracekit / inference / alignment.py _compute_consensus   100% 14 0 0   100% 6 0   100%
src / tracekit / inference / alignment.py _insert_gaps_from_alignment   100% 10 0 0   100% 6 0   100%
src / tracekit / inference / alignment.py (no function)   100% 24 0 0   100% 0 0   100%
src / tracekit / inference / bayesian.py Prior.__post_init__   0% 8 8 0   0% 4 0   0%
src / tracekit / inference / bayesian.py Prior.pdf   0% 20 20 0   0% 14 0   0%
src / tracekit / inference / bayesian.py Prior.sample   0% 18 18 0   0% 14 0   0%
src / tracekit / inference / bayesian.py Posterior.confidence   0% 6 6 0   0% 2 0   0%
src / tracekit / inference / bayesian.py BayesianInference.__init__   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / bayesian.py BayesianInference._default_priors   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / bayesian.py BayesianInference.update   0% 25 25 1   0% 6 0   0%
src / tracekit / inference / bayesian.py BayesianInference.infer_baud_rate   0% 8 8 0   0% 4 0   0%
src / tracekit / inference / bayesian.py BayesianInference.infer_baud_rate.likelihood   0% 8 8 0   0% 2 0   0%
src / tracekit / inference / bayesian.py BayesianInference.infer_protocol_type   0% 9 9 0   0% 2 0   0%
src / tracekit / inference / bayesian.py BayesianInference._likelihood_uart   0% 15 15 0   0% 10 0   0%
src / tracekit / inference / bayesian.py BayesianInference._likelihood_spi   0% 13 13 0   0% 8 0   0%
src / tracekit / inference / bayesian.py BayesianInference._likelihood_i2c   0% 9 9 0   0% 4 0   0%
src / tracekit / inference / bayesian.py BayesianInference._likelihood_can   0% 16 16 0   0% 10 0   0%
src / tracekit / inference / bayesian.py BayesianInference.infer_symbol_count   0% 13 13 0   0% 8 0   0%
src / tracekit / inference / bayesian.py BayesianInference.infer_symbol_count.likelihood   0% 8 8 0   0% 6 0   0%
src / tracekit / inference / bayesian.py SequentialBayesian.__init__   0% 4 4 0   100% 0 0   0%
src / tracekit / inference / bayesian.py SequentialBayesian.update   0% 27 27 0   0% 6 0   0%
src / tracekit / inference / bayesian.py SequentialBayesian.get_confidence   0% 3 3 0   0% 2 0   0%
src / tracekit / inference / bayesian.py infer_with_uncertainty   0% 11 11 0   0% 4 0   0%
src / tracekit / inference / bayesian.py infer_with_uncertainty.likelihood   0% 2 2 0   100% 0 0   0%
src / tracekit / inference / bayesian.py (no function)   100% 41 0 2   100% 0 0   100%
src / tracekit / inference / binary.py MagicByteDetector.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / inference / binary.py MagicByteDetector.detect   100% 7 0 0   100% 8 0   100%
src / tracekit / inference / binary.py MagicByteDetector.detect_all   100% 6 0 0   100% 4 0   100%
src / tracekit / inference / binary.py MagicByteDetector.learn_magic_from_samples   100% 18 0 0   100% 14 0   100%
src / tracekit / inference / binary.py MagicByteDetector.add_signature   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / binary.py AlignmentDetector.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py AlignmentDetector.detect   100% 14 0 0   100% 6 0   100%
src / tracekit / inference / binary.py AlignmentDetector.detect_field_types   100% 9 0 0   100% 2 0   100%
src / tracekit / inference / binary.py AlignmentDetector._detect_padding_byte   100% 5 0 0   100% 2 0   100%
src / tracekit / inference / binary.py AlignmentDetector._find_padding   100% 13 0 0   90% 10 1   96%
src / tracekit / inference / binary.py AlignmentDetector._find_field_boundaries   100% 12 0 0   100% 6 0   100%
src / tracekit / inference / binary.py AlignmentDetector._score_alignment   100% 19 0 0   100% 16 0   100%
src / tracekit / inference / binary.py AlignmentDetector._estimate_structure_size   100% 6 0 0   100% 6 0   100%
src / tracekit / inference / binary.py AlignmentDetector._infer_type   100% 9 0 0   100% 8 0   100%
src / tracekit / inference / binary.py BinaryParserGenerator.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / binary.py BinaryParserGenerator.generate   96% 25 1 0   92% 12 1   95%
src / tracekit / inference / binary.py BinaryParserGenerator.generate_from_definition   100% 4 0 0   100% 2 0   100%
src / tracekit / inference / binary.py BinaryParserGenerator.to_yaml   100% 18 0 0   100% 12 0   100%
src / tracekit / inference / binary.py BinaryParserGenerator.to_python   93% 28 2 0   86% 14 2   90%
src / tracekit / inference / binary.py BinaryParserGenerator._analyze_variance   100% 15 0 0   90% 10 1   96%
src / tracekit / inference / binary.py detect_magic_bytes   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py detect_alignment   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py generate_parser   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py parser_to_yaml   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py parser_to_python   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py find_all_magic_bytes   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / binary.py (no function)   100% 70 0 0   100% 0 0   100%
src / tracekit / inference / logic.py detect_logic_family   94% 17 1 0   88% 8 1   92%
src / tracekit / inference / logic.py _detect_logic_levels   100% 23 0 0   90% 10 1   97%
src / tracekit / inference / logic.py _score_logic_family   100% 12 0 0   100% 4 0   100%
src / tracekit / inference / logic.py (no function)   100% 9 0 3   100% 0 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer.infer_format   96% 26 1 0   94% 16 1   95%
src / tracekit / inference / message_format.py MessageFormatInferrer.detect_field_boundaries   100% 31 0 0   100% 22 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer.detect_field_types   100% 38 0 0   95% 22 1   98%
src / tracekit / inference / message_format.py MessageFormatInferrer.find_dependencies   100% 7 0 0   100% 6 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer._calculate_byte_entropy   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer._calculate_entropy   100% 6 0 0   100% 2 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer._classify_field   90% 29 3 0   85% 26 4   87%
src / tracekit / inference / message_format.py MessageFormatInferrer._detect_counter_field   100% 8 0 0   100% 4 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer._detect_checksum_field   100% 15 0 0   100% 12 0   100%
src / tracekit / inference / message_format.py MessageFormatInferrer._estimate_header_size   91% 11 1 0   92% 12 1   91%
src / tracekit / inference / message_format.py MessageFormatInferrer._extract_field_value   100% 7 0 0   100% 6 0   100%
src / tracekit / inference / message_format.py infer_format   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / message_format.py detect_field_types   100% 9 0 0   100% 6 0   100%
src / tracekit / inference / message_format.py find_dependencies   89% 9 1 0   83% 6 1   87%
src / tracekit / inference / message_format.py (no function)   100% 40 0 0   100% 0 0   100%
src / tracekit / inference / protocol.py detect_protocol   96% 24 1 0   93% 14 1   95%
src / tracekit / inference / protocol.py _analyze_signal_characteristics   96% 28 1 0   88% 8 1   94%
src / tracekit / inference / protocol.py _score_uart   100% 12 0 0   100% 8 0   100%
src / tracekit / inference / protocol.py _score_spi   93% 14 1 0   88% 8 1   91%
src / tracekit / inference / protocol.py _score_i2c   100% 10 0 0   100% 6 0   100%
src / tracekit / inference / protocol.py _score_can   100% 13 0 0   100% 8 0   100%
src / tracekit / inference / protocol.py (no function)   100% 11 0 2   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py FieldDefinition.__post_init__   100% 2 0 0   100% 2 0   100%
src / tracekit / inference / protocol_dsl.py FieldDefinition.type   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py FieldDefinition.type   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDefinition.from_yaml   100% 3 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDefinition.from_dict   100% 6 0 0   100% 2 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDefinition._parse_field_definition   100% 5 0 0   100% 2 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.__contains__   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.__getitem__   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.__iter__   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.keys   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.values   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.items   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py DecodedMessage.get   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.eval   100% 6 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_Compare   89% 9 1 0   83% 6 1   87%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_BoolOp   0% 5 5 0   0% 4 0   0%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_UnaryOp   0% 3 3 0   0% 2 0   0%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_Name   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_Constant   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_Num   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_Str   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.visit_NameConstant   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / protocol_dsl.py _SafeConditionEvaluator.generic_visit   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder.load   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder.decode   100% 25 0 0   100% 12 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder.decode_stream   76% 17 4 0   60% 10 2   70%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder.find_sync   100% 12 0 0   100% 8 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._decode_field   97% 36 1 0   96% 24 1   97%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._decode_array   93% 29 2 0   86% 14 2   91%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._decode_struct   94% 16 1 0   90% 10 1   92%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._decode_integer   100% 8 0 0   100% 4 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._decode_float   100% 9 0 0   100% 4 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._resolve_size   82% 11 2 0   80% 10 2   81%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._evaluate_condition   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolDecoder._validate_field   100% 10 0 0   100% 12 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolEncoder.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolEncoder.encode   100% 14 0 0   100% 10 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolEncoder._encode_field   100% 37 0 0   100% 34 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolEncoder._encode_array   100% 15 0 0   100% 6 0   100%
src / tracekit / inference / protocol_dsl.py ProtocolEncoder._encode_struct   100% 10 0 0   88% 8 1   94%
src / tracekit / inference / protocol_dsl.py load_protocol   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_dsl.py decode_message   100% 5 0 0   100% 2 0   100%
src / tracekit / inference / protocol_dsl.py (no function)   100% 98 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._load_builtin_protocols   100% 21 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.list_protocols   100% 4 0 0   100% 2 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.list_protocol_names   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.get   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.get_decoder   100% 9 0 0   100% 4 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.get_definition   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.add_protocol   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary.categories   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_modbus_rtu   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_modbus_tcp   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_dnp3   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_bacnet   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_http   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_mqtt   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_coap   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_cbor   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_messagepack   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_obd2   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_j1939   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_can   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_dns   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_ntp   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_syslog   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_nmea   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_xmodem   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_knx   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_lonworks   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_tlv   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py ProtocolLibrary._add_length_prefixed   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py get_library   100% 3 0 0   100% 2 0   100%
src / tracekit / inference / protocol_library.py list_protocols   100% 3 0 0   100% 2 0   100%
src / tracekit / inference / protocol_library.py get_protocol   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py get_decoder   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / protocol_library.py (no function)   100% 49 0 8   100% 0 0   100%
src / tracekit / inference / sequences.py SequencePatternDetector.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / inference / sequences.py SequencePatternDetector.detect_patterns   100% 12 0 0   100% 6 0   100%
src / tracekit / inference / sequences.py SequencePatternDetector.find_repeating_sequences   100% 16 0 0   100% 12 0   100%
src / tracekit / inference / sequences.py SequencePatternDetector.detect_periodic_patterns   100% 10 0 0   88% 8 1   94%
src / tracekit / inference / sequences.py SequencePatternDetector._find_ngram_patterns   100% 10 0 0   100% 8 0   100%
src / tracekit / inference / sequences.py SequencePatternDetector._score_patterns   100% 25 0 0   92% 12 1   97%
src / tracekit / inference / sequences.py RequestResponseCorrelator.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / sequences.py RequestResponseCorrelator.correlate   100% 21 0 0   100% 10 0   100%
src / tracekit / inference / sequences.py RequestResponseCorrelator.correlate_by_content   92% 25 2 0   83% 12 2   89%
src / tracekit / inference / sequences.py RequestResponseCorrelator.extract_flows   95% 19 1 0   90% 10 1   93%
src / tracekit / inference / sequences.py RequestResponseCorrelator._match_pairs   100% 24 0 0   100% 16 0   100%
src / tracekit / inference / sequences.py RequestResponseCorrelator._content_similarity   89% 9 1 0   75% 4 1   85%
src / tracekit / inference / sequences.py detect_sequence_patterns   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / sequences.py correlate_requests   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / sequences.py find_message_dependencies   100% 7 0 0   100% 4 0   100%
src / tracekit / inference / sequences.py calculate_latency_stats   100% 5 0 0   100% 2 0   100%
src / tracekit / inference / sequences.py (no function)   100% 50 0 0   100% 0 0   100%
src / tracekit / inference / signal_intelligence.py classify_signal   95% 87 4 0   93% 44 3   95%
src / tracekit / inference / signal_intelligence.py assess_signal_quality   96% 78 3 0   92% 40 3   95%
src / tracekit / inference / signal_intelligence.py check_measurement_suitability   89% 98 11 0   89% 54 4   89%
src / tracekit / inference / signal_intelligence.py suggest_measurements   100% 32 0 0   67% 18 6   88%
src / tracekit / inference / signal_intelligence.py _detect_digital_signal   100% 25 0 0   94% 16 1   98%
src / tracekit / inference / signal_intelligence.py _estimate_noise_level   100% 7 0 0   100% 2 0   100%
src / tracekit / inference / signal_intelligence.py _detect_periodicity   92% 24 2 0   86% 14 2   89%
src / tracekit / inference / signal_intelligence.py _count_edges   100% 9 0 0   100% 4 0   100%
src / tracekit / inference / signal_intelligence.py _detect_periodicity_fft   89% 28 3 0   75% 12 3   85%
src / tracekit / inference / signal_intelligence.py _detect_edge_periodicity   81% 43 8 0   65% 20 5   76%
src / tracekit / inference / signal_intelligence.py recommend_analyses   0% 47 47 0   0% 32 0   0%
src / tracekit / inference / signal_intelligence.py get_optimal_domain_order   0% 18 18 0   0% 12 0   0%
src / tracekit / inference / signal_intelligence.py (no function)   100% 25 0 4   100% 0 0   100%
src / tracekit / inference / spectral.py auto_spectral_config   85% 41 6 0   77% 22 3   83%
src / tracekit / inference / spectral.py _assess_stationarity   100% 24 0 0   100% 8 0   100%
src / tracekit / inference / spectral.py (no function)   100% 6 0 3   100% 0 0   100%
src / tracekit / inference / state_machine.py FiniteAutomaton.to_dot   100% 17 0 0   100% 6 0   100%
src / tracekit / inference / state_machine.py FiniteAutomaton.to_networkx   40% 10 6 0   0% 4 0   29%
src / tracekit / inference / state_machine.py FiniteAutomaton.accepts   100% 11 0 0   100% 8 0   100%
src / tracekit / inference / state_machine.py FiniteAutomaton.get_successors   100% 5 0 0   100% 4 0   100%
src / tracekit / inference / state_machine.py StateMachineInferrer.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / state_machine.py StateMachineInferrer.infer_rpni   100% 21 0 0   100% 12 0   100%
src / tracekit / inference / state_machine.py StateMachineInferrer._build_pta   100% 27 0 0   100% 14 0   100%
src / tracekit / inference / state_machine.py StateMachineInferrer._merge_states   100% 23 0 0   94% 16 1   97%
src / tracekit / inference / state_machine.py StateMachineInferrer._is_compatible   100% 8 0 0   100% 4 0   100%
src / tracekit / inference / state_machine.py StateMachineInferrer._get_next_state_id   100% 3 0 0   100% 0 0   100%
src / tracekit / inference / state_machine.py minimize_dfa   100% 61 0 0   94% 34 2   98%
src / tracekit / inference / state_machine.py to_dot   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / state_machine.py to_networkx   0% 1 1 0   100% 0 0   0%
src / tracekit / inference / state_machine.py infer_rpni   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / state_machine.py (no function)   100% 37 0 0   100% 0 0   100%
src / tracekit / inference / stream.py UDPStreamReassembler.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / inference / stream.py UDPStreamReassembler.add_segment   100% 11 0 0   100% 4 0   100%
src / tracekit / inference / stream.py UDPStreamReassembler.get_stream   96% 23 1 0   93% 14 1   95%
src / tracekit / inference / stream.py UDPStreamReassembler.get_all_streams   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / stream.py UDPStreamReassembler.clear   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / stream.py TCPStreamReassembler.__init__   100% 5 0 0   100% 0 0   100%
src / tracekit / inference / stream.py TCPStreamReassembler.add_segment   100% 20 0 0   93% 14 1   97%
src / tracekit / inference / stream.py TCPStreamReassembler.get_stream   92% 38 3 0   92% 24 2   92%
src / tracekit / inference / stream.py TCPStreamReassembler.get_all_streams   100% 1 0 0   100% 0 0   100%
src / tracekit / inference / stream.py TCPStreamReassembler.clear   100% 3 0 0   100% 0 0   100%
src / tracekit / inference / stream.py MessageFramer.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / inference / stream.py MessageFramer.frame   100% 7 0 0   100% 6 0   100%
src / tracekit / inference / stream.py MessageFramer.detect_framing   96% 26 1 0   88% 26 3   92%
src / tracekit / inference / stream.py MessageFramer._auto_frame   94% 16 1 0   71% 14 4   83%
src / tracekit / inference / stream.py MessageFramer._frame_by_delimiter   100% 15 0 0   90% 10 1   96%
src / tracekit / inference / stream.py MessageFramer._frame_by_length   100% 21 0 0   100% 8 0   100%
src / tracekit / inference / stream.py MessageFramer._frame_fixed   100% 11 0 0   100% 4 0   100%
src / tracekit / inference / stream.py reassemble_udp_stream   100% 4 0 0   100% 2 0   100%
src / tracekit / inference / stream.py reassemble_tcp_stream   100% 4 0 0   100% 2 0   100%
src / tracekit / inference / stream.py extract_messages   100% 2 0 0   100% 0 0   100%
src / tracekit / inference / stream.py detect_message_framing   89% 19 2 0   64% 14 5   79%
src / tracekit / inference / stream.py (no function)   100% 66 0 0   100% 0 0   100%
src / tracekit / integrations / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py CostTracker.record   100% 8 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py CostTracker.reset   100% 5 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py CostTracker.get_summary   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py ResponseCache.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py ResponseCache._make_key   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py ResponseCache.get   100% 8 0 0   100% 4 0   100%
src / tracekit / integrations / llm.py ResponseCache.set   100% 6 0 0   100% 2 0   100%
src / tracekit / integrations / llm.py ResponseCache.clear   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py ResponseCache.size   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py get_cost_tracker   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py get_response_cache   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py RateLimiter.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py RateLimiter.acquire   100% 9 0 0   100% 4 0   100%
src / tracekit / integrations / llm.py estimate_tokens   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LLMIntegration.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LLMIntegration.configure   100% 6 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LLMIntegration._get_client   100% 3 0 0   50% 2 1   80%
src / tracekit / integrations / llm.py LLMIntegration._create_client   71% 7 2 0   67% 6 2   69%
src / tracekit / integrations / llm.py LLMIntegration._create_openai_client   29% 7 5 2   0% 4 0   18%
src / tracekit / integrations / llm.py LLMIntegration._create_anthropic_client   0% 7 7 2   0% 4 0   0%
src / tracekit / integrations / llm.py LLMIntegration._create_local_client   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LLMIntegration.register_hook   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LLMIntegration.trigger_hook   100% 5 0 0   100% 2 0   100%
src / tracekit / integrations / llm.py LLMIntegration.prepare_context   100% 14 0 0   88% 8 1   95%
src / tracekit / integrations / llm.py LLMIntegration.analyze   100% 9 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LLMIntegration.explain   0% 2 2 0   100% 0 0   0%
src / tracekit / integrations / llm.py OpenAIClient.__init__   100% 9 0 2   100% 2 0   100%
src / tracekit / integrations / llm.py OpenAIClient.chat_completion   74% 35 9 0   60% 10 2   71%
src / tracekit / integrations / llm.py OpenAIClient.analyze_trace   100% 3 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py OpenAIClient.suggest_measurements   100% 6 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py OpenAIClient._summarize_trace   100% 14 0 0   50% 10 5   79%
src / tracekit / integrations / llm.py OpenAIClient._extract_commands   100% 7 0 0   100% 4 0   100%
src / tracekit / integrations / llm.py OpenAIClient.query   0% 3 3 0   100% 0 0   0%
src / tracekit / integrations / llm.py OpenAIClient.analyze   0% 1 1 0   100% 0 0   0%
src / tracekit / integrations / llm.py OpenAIClient.explain   0% 3 3 0   100% 0 0   0%
src / tracekit / integrations / llm.py AnthropicClient.__init__   100% 9 0 2   100% 2 0   100%
src / tracekit / integrations / llm.py AnthropicClient.chat_completion   65% 51 18 0   62% 26 6   64%
src / tracekit / integrations / llm.py AnthropicClient.analyze_trace   100% 4 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py AnthropicClient.suggest_measurements   0% 7 7 0   100% 0 0   0%
src / tracekit / integrations / llm.py AnthropicClient._summarize_trace   100% 14 0 0   50% 10 5   79%
src / tracekit / integrations / llm.py AnthropicClient._extract_commands   0% 7 7 0   0% 4 0   0%
src / tracekit / integrations / llm.py AnthropicClient.query   0% 4 4 0   100% 0 0   0%
src / tracekit / integrations / llm.py AnthropicClient.analyze   0% 1 1 0   100% 0 0   0%
src / tracekit / integrations / llm.py AnthropicClient.explain   0% 4 4 0   100% 0 0   0%
src / tracekit / integrations / llm.py LocalLLMClient.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LocalLLMClient.query   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py LocalLLMClient.analyze   100% 4 0 0   100% 2 0   100%
src / tracekit / integrations / llm.py LocalLLMClient.explain   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py get_provider   93% 15 1 0   83% 6 1   90%
src / tracekit / integrations / llm.py get_llm   100% 3 0 0   50% 2 1   80%
src / tracekit / integrations / llm.py configure   0% 2 2 0   100% 0 0   0%
src / tracekit / integrations / llm.py analyze   0% 2 2 0   100% 0 0   0%
src / tracekit / integrations / llm.py explain   0% 2 2 0   100% 0 0   0%
src / tracekit / integrations / llm.py get_client   100% 3 0 0   100% 2 0   100%
src / tracekit / integrations / llm.py get_client_auto   64% 11 4 0   100% 4 0   73%
src / tracekit / integrations / llm.py get_client_with_failover   67% 3 1 0   50% 2 1   60%
src / tracekit / integrations / llm.py FailoverLLMClient.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient._get_or_create_client   100% 6 0 0   100% 2 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient._try_providers   82% 17 3 0   100% 6 0   87%
src / tracekit / integrations / llm.py FailoverLLMClient.chat_completion   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.chat_completion.operation   50% 6 3 0   50% 2 1   50%
src / tracekit / integrations / llm.py FailoverLLMClient.analyze_trace   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.analyze_trace.operation   86% 7 1 0   50% 2 1   78%
src / tracekit / integrations / llm.py FailoverLLMClient.analyze_trace.operation.DictTrace.__init__   100% 3 0 0   100% 2 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.suggest_measurements   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.suggest_measurements.operation   86% 7 1 0   50% 2 1   78%
src / tracekit / integrations / llm.py FailoverLLMClient.suggest_measurements.operation.CharTrace.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.query   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.analyze   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py FailoverLLMClient.explain   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py is_provider_available   80% 15 3 4   90% 10 1   84%
src / tracekit / integrations / llm.py list_available_providers   100% 1 0 0   100% 0 0   100%
src / tracekit / integrations / llm.py (no function)   100% 128 0 10   100% 0 0   100%
src / tracekit / jupyter / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / tracekit / jupyter / display.py TraceDisplay.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / jupyter / display.py TraceDisplay._repr_html_   88% 41 5 0   61% 28 11   77%
src / tracekit / jupyter / display.py MeasurementDisplay.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / jupyter / display.py MeasurementDisplay._format_value   64% 22 8 0   60% 20 6   62%
src / tracekit / jupyter / display.py MeasurementDisplay._repr_html_   100% 6 0 0   100% 2 0   100%
src / tracekit / jupyter / display.py display_trace   75% 4 1 0   50% 2 1   67%
src / tracekit / jupyter / display.py display_measurements   80% 5 1 0   75% 4 1   78%
src / tracekit / jupyter / display.py display_spectrum   0% 14 14 0   0% 4 0   0%
src / tracekit / jupyter / display.py (no function)   93% 15 1 16   100% 0 0   93%
src / tracekit / jupyter / magic.py get_current_trace   100% 1 0 0   100% 0 0   100%
src / tracekit / jupyter / magic.py set_current_trace   100% 2 0 0   100% 0 0   100%
src / tracekit / jupyter / magic.py TracekitMagics.tracekit   0% 26 26 0   0% 16 0   0%
src / tracekit / jupyter / magic.py TracekitMagics._load_trace   0% 10 10 0   100% 0 0   0%
src / tracekit / jupyter / magic.py TracekitMagics._run_measurements   0% 22 22 0   0% 8 0   0%
src / tracekit / jupyter / magic.py TracekitMagics._display_measurements   0% 7 7 0   0% 6 0   0%
src / tracekit / jupyter / magic.py TracekitMagics._show_trace_info   0% 16 16 0   0% 12 0   0%
src / tracekit / jupyter / magic.py TracekitMagics._show_help   0% 2 2 0   100% 0 0   0%
src / tracekit / jupyter / magic.py TracekitMagics.analyze   0% 7 7 0   0% 2 0   0%
src / tracekit / jupyter / magic.py load_ipython_extension   0% 2 2 0   100% 0 0   0%
src / tracekit / jupyter / magic.py unload_ipython_extension   0% 1 1 0   100% 0 0   0%
src / tracekit / jupyter / magic.py (no function)   91% 23 2 17   100% 0 0   91%
src / tracekit / loaders / __init__.py load   92% 50 4 0   94% 34 2   93%
src / tracekit / loaders / __init__.py _load_wfm_auto   100% 10 0 0   100% 2 0   100%
src / tracekit / loaders / __init__.py load_all_channels   100% 14 0 0   100% 8 0   100%
src / tracekit / loaders / __init__.py _load_all_channels_tektronix   39% 44 27 4   50% 16 4   42%
src / tracekit / loaders / __init__.py get_supported_formats   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / __init__.py load_lazy   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / __init__.py (no function)   100% 22 0 3   100% 0 0   100%
src / tracekit / loaders / binary.py load_binary   100% 8 0 0   100% 2 0   100%
src / tracekit / loaders / binary.py (no function)   100% 7 0 2   100% 0 0   100%
src / tracekit / loaders / configurable.py BitfieldDef.__post_init__   50% 4 2 0   50% 4 2   50%
src / tracekit / loaders / configurable.py DeviceInfo.from_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py HeaderFieldDef.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / loaders / configurable.py SampleFormatDef.__post_init__   100% 2 0 0   100% 2 0   100%
src / tracekit / loaders / configurable.py PacketFormatConfig.from_file   50% 8 4 0   25% 4 1   42%
src / tracekit / loaders / configurable.py PacketFormatConfig.from_dict   100% 21 0 0   100% 4 0   100%
src / tracekit / loaders / configurable.py PacketFormatConfig.from_yaml   78% 9 2 0   100% 2 0   82%
src / tracekit / loaders / configurable.py PacketFormatConfig.from_json   0% 9 9 0   0% 2 0   0%
src / tracekit / loaders / configurable.py DeviceConfig.from_yaml   83% 18 3 0   83% 6 1   83%
src / tracekit / loaders / configurable.py BitfieldExtractor.extract_bit   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py BitfieldExtractor.extract_bits   100% 3 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py PacketLoadResult.packet_count   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader.load_packets   88% 8 1 0   75% 4 1   83%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader.load_packets_streaming   85% 52 8 0   85% 26 4   85%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader._parse_packet   100% 17 0 0   100% 6 0   100%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader._extract_field   60% 30 12 0   50% 22 5   56%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader._bytes_to_int   100% 4 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader._parse_sample   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader.load   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py ConfigurablePacketLoader.stream   0% 8 8 0   0% 6 0   0%
src / tracekit / loaders / configurable.py DeviceMapper.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py DeviceMapper.from_file   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py DeviceMapper.get_device   100% 7 0 0   100% 6 0   100%
src / tracekit / loaders / configurable.py DeviceMapper.resolve_name   100% 4 0 0   100% 2 0   100%
src / tracekit / loaders / configurable.py DeviceMapper.get_device_name   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / configurable.py DeviceMapper.get_device_info   75% 4 1 0   50% 2 1   67%
src / tracekit / loaders / configurable.py load_binary_packets   80% 10 2 0   67% 6 2   75%
src / tracekit / loaders / configurable.py load_packets_streaming   70% 10 3 0   50% 6 3   62%
src / tracekit / loaders / configurable.py detect_source_type   45% 20 11 0   50% 12 2   47%
src / tracekit / loaders / configurable.py extract_channels   100% 21 0 0   93% 14 1   97%
src / tracekit / loaders / configurable.py (no function)   100% 117 0 2   100% 0 0   100%
src / tracekit / loaders / csv.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / csv_loader.py load_csv   93% 14 1 0   83% 6 1   90%
src / tracekit / loaders / csv_loader.py _load_with_pandas   98% 64 1 0   93% 46 3   96%
src / tracekit / loaders / csv_loader.py _load_basic   96% 89 4 0   84% 64 10   91%
src / tracekit / loaders / csv_loader.py _detect_delimiter   100% 6 0 0   100% 0 0   100%
src / tracekit / loaders / csv_loader.py _detect_delimiter_from_content   86% 7 1 0   75% 4 1   82%
src / tracekit / loaders / csv_loader.py (no function)   100% 19 0 4   100% 0 0   100%
src / tracekit / loaders / hdf5.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.__init__   86% 7 1 0   50% 2 1   78%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.sample_rate   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.length   100% 3 0 0   100% 0 0   100%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.metadata   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace._ensure_open   100% 3 0 0   50% 2 1   80%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.__getitem__   0% 4 4 0   100% 0 0   0%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.__len__   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.close   100% 4 0 0   50% 2 1   83%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.__del__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.__enter__   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / hdf5_loader.py HDF5MmapTrace.__exit__   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / hdf5_loader.py load_hdf5   96% 45 2 0   93% 28 2   95%
src / tracekit / loaders / hdf5_loader.py _find_waveform_dataset   100% 4 0 0   100% 0 0   100%
src / tracekit / loaders / hdf5_loader.py _find_waveform_dataset.visitor   100% 11 0 0   92% 12 1   96%
src / tracekit / loaders / hdf5_loader.py _find_dataset_by_name   100% 5 0 0   100% 0 0   100%
src / tracekit / loaders / hdf5_loader.py _find_dataset_by_name.visitor   83% 6 1 0   83% 6 1   83%
src / tracekit / loaders / hdf5_loader.py _find_sample_rate   79% 29 6 0   73% 30 6   76%
src / tracekit / loaders / hdf5_loader.py _get_attr   86% 7 1 0   83% 6 1   85%
src / tracekit / loaders / hdf5_loader.py list_datasets   85% 13 2 0   100% 4 0   88%
src / tracekit / loaders / hdf5_loader.py list_datasets.visitor   100% 2 0 0   100% 2 0   100%
src / tracekit / loaders / hdf5_loader.py get_attributes   83% 18 3 0   90% 10 1   86%
src / tracekit / loaders / hdf5_loader.py (no function)   100% 34 0 5   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.__init__   100% 10 0 0   100% 2 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.sample_rate   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.length   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.duration   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.metadata   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.data   100% 3 0 0   100% 2 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.time_vector   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace._load_data   100% 5 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.__getitem__   100% 17 0 0   80% 10 2   93%
src / tracekit / loaders / lazy.py LazyWaveformTrace.to_eager   100% 3 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.close   100% 3 0 0   100% 2 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.__del__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py LazyWaveformTrace.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / lazy.py load_trace_lazy   100% 34 0 0   100% 14 0   100%
src / tracekit / loaders / lazy.py (no function)   100% 27 0 4   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.__init__   85% 20 3 0   70% 10 3   80%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.sample_rate   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.length   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.duration   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.metadata   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.dtype   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.file_path   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.data   100% 3 0 0   100% 2 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.time_vector   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.__getitem__   67% 3 1 0   50% 2 1   60%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.__len__   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.iter_chunks   73% 11 3 1   62% 8 3   68%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.to_eager   100% 4 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.close   100% 3 0 0   100% 2 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.__del__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.__enter__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py MmapWaveformTrace.__exit__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / mmap_loader.py load_mmap   76% 17 4 0   75% 12 3   76%
src / tracekit / loaders / mmap_loader.py _load_npy_mmap   67% 24 8 0   43% 14 6   58%
src / tracekit / loaders / mmap_loader.py should_use_mmap   100% 5 0 0   100% 2 0   100%
src / tracekit / loaders / mmap_loader.py (no function)   100% 38 0 4   100% 0 0   100%
src / tracekit / loaders / numpy_loader.py load_npz   82% 33 6 0   75% 12 1   80%
src / tracekit / loaders / numpy_loader.py _find_data_array   100% 30 0 0   100% 28 0   100%
src / tracekit / loaders / numpy_loader.py _is_channel_array   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / numpy_loader.py _is_data_array   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / numpy_loader.py _find_metadata_value   93% 28 2 0   69% 26 8   81%
src / tracekit / loaders / numpy_loader.py _get_channel_name   100% 9 0 0   100% 6 0   100%
src / tracekit / loaders / numpy_loader.py list_arrays   100% 8 0 0   100% 2 0   100%
src / tracekit / loaders / numpy_loader.py load_raw_binary   100% 14 0 0   83% 6 1   95%
src / tracekit / loaders / numpy_loader.py (no function)   100% 20 0 2   100% 0 0   100%
src / tracekit / loaders / pcap.py PcapPacketList.__iter__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / pcap.py PcapPacketList.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / pcap.py PcapPacketList.__getitem__   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / pcap.py PcapPacketList.filter   100% 8 0 0   100% 6 0   100%
src / tracekit / loaders / pcap.py load_pcap   83% 6 1 0   75% 4 1   80%
src / tracekit / loaders / pcap.py _load_with_dpkt   85% 62 9 0   62% 24 3   79%
src / tracekit / loaders / pcap.py _load_basic   95% 39 2 0   94% 18 1   95%
src / tracekit / loaders / pcap.py _format_mac   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / pcap.py _format_ip   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / pcap.py (no function)   97% 31 1 5   100% 0 0   97%
src / tracekit / loaders / preprocessing.py IdleRegion.length   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / preprocessing.py IdleRegion.get_duration_seconds   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / preprocessing.py IdleStatistics.idle_fraction   67% 3 1 0   50% 2 1   60%
src / tracekit / loaders / preprocessing.py IdleStatistics.active_fraction   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / preprocessing.py detect_idle_regions   78% 23 5 0   67% 12 4   74%
src / tracekit / loaders / preprocessing.py _auto_detect_pattern   0% 14 14 0   0% 8 0   0%
src / tracekit / loaders / preprocessing.py trim_idle   86% 22 3 0   50% 14 7   72%
src / tracekit / loaders / preprocessing.py get_idle_statistics   91% 11 1 0   75% 4 1   87%
src / tracekit / loaders / preprocessing.py (no function)   100% 34 0 2   100% 0 0   100%
src / tracekit / loaders / rigol.py load_rigol_wfm   100% 6 0 0   100% 4 0   100%
src / tracekit / loaders / rigol.py _load_with_rigolwfm   100% 22 0 0   100% 6 0   100%
src / tracekit / loaders / rigol.py _load_basic   100% 29 0 0   100% 6 0   100%
src / tracekit / loaders / rigol.py _extract_trigger_info   100% 8 0 0   100% 6 0   100%
src / tracekit / loaders / rigol.py (no function)   93% 14 1 4   100% 0 0   93%
src / tracekit / loaders / sigrok.py load_sigrok   92% 40 3 0   89% 18 2   91%
src / tracekit / loaders / sigrok.py _parse_metadata   88% 32 4 0   94% 16 1   90%
src / tracekit / loaders / sigrok.py _read_logic_data   100% 26 0 0   100% 12 0   100%
src / tracekit / loaders / sigrok.py _compute_edges   100% 15 0 0   100% 6 0   100%
src / tracekit / loaders / sigrok.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / loaders / tdms.py load_tdms   91% 11 1 0   83% 6 1   88%
src / tracekit / loaders / tdms.py _load_with_nptdms   98% 46 1 0   96% 28 1   97%
src / tracekit / loaders / tdms.py _get_sample_rate   83% 23 4 0   75% 24 2   79%
src / tracekit / loaders / tdms.py _extract_tdms_properties   100% 7 0 0   100% 4 0   100%
src / tracekit / loaders / tdms.py list_tdms_channels   100% 14 0 0   100% 6 0   100%
src / tracekit / loaders / tdms.py (no function)   93% 15 1 4   100% 0 0   93%
src / tracekit / loaders / tektronix.py load_tektronix_wfm   90% 10 1 0   83% 6 1   88%
src / tracekit / loaders / tektronix.py _load_with_tm_data_types   62% 52 20 0   75% 16 4   65%
src / tracekit / loaders / tektronix.py _build_waveform_trace   100% 6 0 0   100% 2 0   100%
src / tracekit / loaders / tektronix.py _load_digital_waveform   100% 34 0 0   100% 18 0   100%
src / tracekit / loaders / tektronix.py _load_iq_waveform   100% 21 0 0   100% 8 0   100%
src / tracekit / loaders / tektronix.py _load_basic   93% 14 1 0   83% 6 1   90%
src / tracekit / loaders / tektronix.py _parse_wfm003   90% 41 4 0   72% 18 5   85%
src / tracekit / loaders / tektronix.py _parse_wfm_legacy   92% 24 2 0   83% 6 1   90%
src / tracekit / loaders / tektronix.py _extract_trigger_info   100% 8 0 0   100% 6 0   100%
src / tracekit / loaders / tektronix.py (no function)   100% 25 0 4   100% 0 0   100%
src / tracekit / loaders / validation.py SequenceValidation.gap_count   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / validation.py SequenceValidation.total_missing_packets   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / validation.py ValidationResult.add_error   100% 2 0 0   100% 0 0   100%
src / tracekit / loaders / validation.py ValidationResult.add_warning   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / validation.py ValidationStats.pass_rate   0% 3 3 0   0% 2 0   0%
src / tracekit / loaders / validation.py ValidationStats.fail_rate   0% 1 1 0   100% 0 0   0%
src / tracekit / loaders / validation.py ValidationStats.add_error_type   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / validation.py PacketValidator.__init__   100% 8 0 0   100% 0 0   100%
src / tracekit / loaders / validation.py PacketValidator.validate_packet   100% 12 0 0   100% 8 0   100%
src / tracekit / loaders / validation.py PacketValidator._validate_sync   54% 28 13 0   44% 16 3   50%
src / tracekit / loaders / validation.py PacketValidator._validate_sequence   83% 24 4 0   75% 12 3   81%
src / tracekit / loaders / validation.py PacketValidator._validate_checksum   28% 18 13 0   25% 8 2   27%
src / tracekit / loaders / validation.py PacketValidator._compute_checksum   20% 15 12 0   17% 12 2   19%
src / tracekit / loaders / validation.py PacketValidator._crc8   0% 9 9 0   0% 6 0   0%
src / tracekit / loaders / validation.py PacketValidator._crc16   100% 9 0 0   100% 6 0   100%
src / tracekit / loaders / validation.py PacketValidator._crc32   0% 8 8 0   0% 6 0   0%
src / tracekit / loaders / validation.py PacketValidator.get_statistics   100% 1 0 0   100% 0 0   100%
src / tracekit / loaders / validation.py PacketValidator.validate_sequence   0% 21 21 0   0% 12 0   0%
src / tracekit / loaders / validation.py PacketValidator.reset_statistics   0% 2 2 0   100% 0 0   0%
src / tracekit / loaders / validation.py (no function)   100% 63 0 0   100% 0 0   100%
src / tracekit / loaders / vcd.py load_vcd   94% 33 2 0   94% 18 1   94%
src / tracekit / loaders / vcd.py _parse_vcd_header   96% 45 2 0   85% 20 3   92%
src / tracekit / loaders / vcd.py _parse_value_changes   89% 28 3 0   78% 18 4   85%
src / tracekit / loaders / vcd.py _determine_sample_rate   75% 12 3 0   50% 6 3   67%
src / tracekit / loaders / vcd.py _changes_to_samples   96% 28 1 0   88% 8 1   94%
src / tracekit / loaders / vcd.py _changes_to_samples.value_to_bool   100% 6 0 0   100% 4 0   100%
src / tracekit / loaders / vcd.py (no function)   100% 29 0 2   100% 0 0   100%
src / tracekit / loaders / wav.py load_wav   96% 52 2 0   94% 32 2   95%
src / tracekit / loaders / wav.py get_wav_info   100% 11 0 0   100% 2 0   100%
src / tracekit / loaders / wav.py (no function)   100% 10 0 2   100% 0 0   100%
src / tracekit / math / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py _ensure_compatible_traces   100% 10 0 0   100% 4 0   100%
src / tracekit / math / arithmetic.py add   100% 12 0 0   100% 6 0   100%
src / tracekit / math / arithmetic.py subtract   100% 12 0 0   100% 6 0   100%
src / tracekit / math / arithmetic.py multiply   100% 12 0 0   100% 6 0   100%
src / tracekit / math / arithmetic.py divide   100% 18 0 0   100% 8 0   100%
src / tracekit / math / arithmetic.py scale   100% 1 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py offset   100% 1 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py invert   100% 1 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py absolute   100% 3 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py differentiate   100% 21 0 0   100% 12 0   100%
src / tracekit / math / arithmetic.py integrate   100% 13 0 0   100% 8 0   100%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.eval   100% 5 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_BinOp   80% 5 1 0   50% 2 1   71%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_UnaryOp   0% 4 4 0   0% 2 0   0%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_Compare   0% 9 9 0   0% 6 0   0%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_Call   44% 16 9 0   38% 8 1   42%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_Name   67% 3 1 0   50% 2 1   60%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_Constant   100% 1 0 0   100% 0 0   100%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_Num   0% 1 1 0   100% 0 0   0%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.visit_Attribute   0% 2 2 0   100% 0 0   0%
src / tracekit / math / arithmetic.py _SafeExpressionEvaluator.generic_visit   0% 1 1 0   100% 0 0   0%
src / tracekit / math / arithmetic.py math_expression   92% 25 2 0   100% 12 0   95%
src / tracekit / math / arithmetic.py (no function)   100% 35 0 0   100% 0 0   100%
src / tracekit / math / interpolation.py interpolate   100% 19 0 0   100% 12 0   100%
src / tracekit / math / interpolation.py resample   100% 46 0 0   92% 24 2   97%
src / tracekit / math / interpolation.py align_traces   100% 20 0 0   100% 6 0   100%
src / tracekit / math / interpolation.py downsample   100% 22 0 0   100% 14 0   100%
src / tracekit / math / interpolation.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / onboarding / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / onboarding / help.py get_help   92% 24 2 0   75% 12 3   86%
src / tracekit / onboarding / help.py suggest_commands   100% 25 0 0   86% 14 2   95%
src / tracekit / onboarding / help.py explain_result   100% 4 0 0   100% 2 0   100%
src / tracekit / onboarding / help.py _explain_rise_time   89% 9 1 0   88% 8 1   88%
src / tracekit / onboarding / help.py _explain_fall_time   60% 5 2 0   50% 4 2   56%
src / tracekit / onboarding / help.py _explain_frequency   100% 7 0 0   100% 6 0   100%
src / tracekit / onboarding / help.py _explain_thd   100% 7 0 0   100% 6 0   100%
src / tracekit / onboarding / help.py _explain_snr   100% 7 0 0   100% 6 0   100%
src / tracekit / onboarding / help.py get_example   100% 2 0 0   100% 0 0   100%
src / tracekit / onboarding / help.py (no function)   100% 12 0 0   100% 0 0   100%
src / tracekit / onboarding / tutorials.py _register_getting_started   100% 3 0 0   100% 0 0   100%
src / tracekit / onboarding / tutorials.py _register_spectral_analysis   100% 3 0 0   100% 0 0   100%
src / tracekit / onboarding / tutorials.py list_tutorials   100% 1 0 0   100% 0 0   100%
src / tracekit / onboarding / tutorials.py get_tutorial   100% 1 0 0   100% 0 0   100%
src / tracekit / onboarding / tutorials.py run_tutorial   100% 37 0 0   86% 14 2   96%
src / tracekit / onboarding / tutorials.py (no function)   100% 26 0 3   100% 0 0   100%
src / tracekit / onboarding / wizard.py AnalysisWizard.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / onboarding / wizard.py AnalysisWizard._build_steps   100% 2 0 0   100% 0 0   100%
src / tracekit / onboarding / wizard.py AnalysisWizard.run   94% 32 2 0   75% 16 4   88%
src / tracekit / onboarding / wizard.py AnalysisWizard._show_trace_summary   100% 19 0 0   71% 14 4   88%
src / tracekit / onboarding / wizard.py AnalysisWizard._get_user_choice   100% 9 0 0   100% 2 0   100%
src / tracekit / onboarding / wizard.py AnalysisWizard._handle_signal_type   100% 26 0 0   92% 12 1   97%
src / tracekit / onboarding / wizard.py AnalysisWizard._handle_measurements   75% 20 5 0   50% 12 2   66%
src / tracekit / onboarding / wizard.py AnalysisWizard._handle_spectral   84% 19 3 0   67% 6 2   80%
src / tracekit / onboarding / wizard.py AnalysisWizard._handle_quality   77% 26 6 0   67% 12 2   74%
src / tracekit / onboarding / wizard.py AnalysisWizard._generate_summary   89% 28 3 0   86% 22 3   88%
src / tracekit / onboarding / wizard.py run_wizard   100% 2 0 0   100% 0 0   100%
src / tracekit / onboarding / wizard.py (no function)   100% 37 0 3   100% 0 0   100%
src / tracekit / optimization / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / optimization / parallel.py get_optimal_workers   100% 5 0 0   100% 2 0   100%
src / tracekit / optimization / parallel.py parallel_map   100% 26 0 0   100% 6 0   100%
src / tracekit / optimization / parallel.py parallel_reduce   100% 2 0 0   100% 0 0   100%
src / tracekit / optimization / parallel.py batch_parallel_map   100% 24 0 0   100% 4 0   100%
src / tracekit / optimization / parallel.py parallel_filter   100% 24 0 0   100% 6 0   100%
src / tracekit / optimization / parallel.py chunked_parallel_map   100% 16 0 0   100% 6 0   100%
src / tracekit / optimization / parallel.py (no function)   100% 29 0 3   100% 0 0   100%
src / tracekit / optimization / search.py _default_snr_scorer   100% 8 0 0   100% 2 0   100%
src / tracekit / optimization / search.py _default_thd_scorer   100% 2 0 0   100% 0 0   100%
src / tracekit / optimization / search.py GridSearchCV.__init__   100% 15 0 0   100% 6 0   100%
src / tracekit / optimization / search.py GridSearchCV.fit   100% 15 0 0   83% 6 1   95%
src / tracekit / optimization / search.py GridSearchCV._generate_combinations   100% 6 0 0   100% 2 0   100%
src / tracekit / optimization / search.py GridSearchCV._evaluate_combinations   100% 3 0 0   100% 2 0   100%
src / tracekit / optimization / search.py GridSearchCV._evaluate_one   100% 24 0 0   100% 12 0   100%
src / tracekit / optimization / search.py GridSearchCV._evaluate_sequential   100% 5 0 0   100% 2 0   100%
src / tracekit / optimization / search.py GridSearchCV._evaluate_parallel   100% 8 0 0   100% 2 0   100%
src / tracekit / optimization / search.py RandomizedSearchCV.__init__   100% 18 0 0   100% 8 0   100%
src / tracekit / optimization / search.py RandomizedSearchCV.fit   100% 16 0 0   83% 6 1   95%
src / tracekit / optimization / search.py RandomizedSearchCV._sample_combinations   100% 5 0 0   100% 2 0   100%
src / tracekit / optimization / search.py (no function)   100% 32 0 4   100% 0 0   100%
src / tracekit / pipeline / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / tracekit / pipeline / base.py TraceTransformer.fit   100% 1 0 1   100% 0 0   100%
src / tracekit / pipeline / base.py TraceTransformer.fit_transform   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / base.py TraceTransformer.get_params   73% 11 3 0   62% 8 1   68%
src / tracekit / pipeline / base.py TraceTransformer.set_params   44% 16 9 0   42% 12 3   43%
src / tracekit / pipeline / base.py TraceTransformer.clone   100% 2 0 0   100% 0 0   100%
src / tracekit / pipeline / base.py TraceTransformer.__getstate__   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / base.py TraceTransformer.__setstate__   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / base.py TraceTransformer.get_intermediate_result   57% 7 3 0   50% 4 2   55%
src / tracekit / pipeline / base.py TraceTransformer.has_intermediate_result   67% 3 1 0   50% 2 1   60%
src / tracekit / pipeline / base.py TraceTransformer.list_intermediate_results   100% 3 0 0   100% 2 0   100%
src / tracekit / pipeline / base.py TraceTransformer._cache_intermediate   100% 3 0 0   100% 2 0   100%
src / tracekit / pipeline / base.py TraceTransformer._clear_intermediates   50% 2 1 1   50% 2 1   50%
src / tracekit / pipeline / base.py (no function)   100% 17 0 5   100% 0 0   100%
src / tracekit / pipeline / composition.py compose   100% 8 0 0   100% 4 0   100%
src / tracekit / pipeline / composition.py compose.composed   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py pipe   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py Composable.__rshift__   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py make_composable   100% 3 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py make_composable.wrapper   100% 4 0 0   100% 2 0   100%
src / tracekit / pipeline / composition.py make_composable.wrapper.partial_func   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py curry   100% 3 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py curry.curried   100% 4 0 0   100% 2 0   100%
src / tracekit / pipeline / composition.py curry.curried.partial   100% 3 0 0   100% 0 0   100%
src / tracekit / pipeline / composition.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline.__init__   100% 8 0 0   100% 2 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline._analyze_dependencies   100% 7 0 0   100% 4 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline._compute_execution_order   92% 13 1 0   83% 6 1   89%
src / tracekit / pipeline / parallel.py ParallelPipeline._get_max_workers   100% 6 0 0   100% 4 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline.transform   50% 22 11 0   38% 8 1   47%
src / tracekit / pipeline / parallel.py ParallelPipeline.fit   100% 2 0 0   100% 0 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline.clone   100% 2 0 0   100% 0 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline.get_dependency_graph   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline.get_execution_order   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / parallel.py ParallelPipeline.set_parallel_config   100% 7 0 0   100% 6 0   100%
src / tracekit / pipeline / parallel.py (no function)   100% 17 0 5   100% 0 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.__init__   100% 15 0 0   100% 10 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.fit   100% 5 0 0   100% 2 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.transform   100% 6 0 0   100% 2 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.get_intermediate   100% 8 0 0   100% 6 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.has_intermediate   100% 6 0 0   100% 4 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.list_intermediates   100% 11 0 0   100% 8 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.get_params   100% 7 0 0   100% 6 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.set_params   100% 12 0 0   100% 8 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.clone   100% 2 0 0   100% 0 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / pipeline / pipeline.py Pipeline.__getitem__   100% 3 0 0   100% 2 0   100%
src / tracekit / pipeline / pipeline.py (no function)   100% 16 0 4   100% 0 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline.__init__   100% 11 0 0   100% 0 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline.analyze   100% 38 0 0   92% 12 1   98%
src / tracekit / pipeline / reverse_engineering.py REPipeline.analyze_pcap   100% 6 0 0   100% 2 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline.generate_report   100% 6 0 0   100% 4 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline._stage_flow_extraction   88% 40 5 0   80% 20 4   85%
src / tracekit / pipeline / reverse_engineering.py REPipeline._stage_payload_analysis   91% 22 2 0   100% 8 0   93%
src / tracekit / pipeline / reverse_engineering.py REPipeline._stage_pattern_discovery   54% 26 12 0   44% 16 1   50%
src / tracekit / pipeline / reverse_engineering.py REPipeline._stage_field_inference   50% 18 9 0   62% 8 1   54%
src / tracekit / pipeline / reverse_engineering.py REPipeline._stage_protocol_detection   86% 37 5 0   83% 24 4   85%
src / tracekit / pipeline / reverse_engineering.py REPipeline._stage_state_machine   67% 18 6 0   88% 8 1   73%
src / tracekit / pipeline / reverse_engineering.py REPipeline._report_progress   100% 2 0 0   100% 2 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline._load_checkpoint   60% 5 2 0   100% 0 0   60%
src / tracekit / pipeline / reverse_engineering.py REPipeline._save_checkpoint   80% 10 2 0   100% 2 0   83%
src / tracekit / pipeline / reverse_engineering.py REPipeline._build_message_types   100% 13 0 0   100% 4 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline._build_statistics   100% 5 0 0   100% 0 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline._generate_json_report   100% 3 0 0   100% 0 0   100%
src / tracekit / pipeline / reverse_engineering.py REPipeline._generate_markdown_report   79% 14 3 0   60% 10 2   71%
src / tracekit / pipeline / reverse_engineering.py REPipeline._generate_html_report   80% 15 3 0   60% 10 2   72%
src / tracekit / pipeline / reverse_engineering.py analyze   100% 2 0 0   100% 0 0   100%
src / tracekit / pipeline / reverse_engineering.py (no function)   100% 78 0 0   100% 0 0   100%
src / tracekit / plugins / __init__.py (no function)   100% 9 0 0   100% 0 0   100%
src / tracekit / plugins / base.py PluginMetadata.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / plugins / base.py PluginMetadata.qualified_name   0% 1 1 0   100% 0 0   0%
src / tracekit / plugins / base.py PluginMetadata.is_compatible_with   67% 6 2 0   100% 0 0   67%
src / tracekit / plugins / base.py PluginBase.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / plugins / base.py PluginBase.metadata   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / base.py PluginBase.on_load   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / base.py PluginBase.on_configure   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / base.py PluginBase.on_enable   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / base.py PluginBase.on_disable   0% 1 1 0   100% 0 0   0%
src / tracekit / plugins / base.py PluginBase.on_unload   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / base.py PluginBase.register_protocol   0% 4 4 0   0% 2 0   0%
src / tracekit / plugins / base.py PluginBase.register_algorithm   0% 4 4 0   0% 2 0   0%
src / tracekit / plugins / base.py PluginBase.get_config   0% 1 1 0   100% 0 0   0%
src / tracekit / plugins / base.py (no function)   100% 60 0 5   100% 0 0   100%
src / tracekit / plugins / cli.py PluginInstaller.__init__   100% 5 0 0   100% 2 0   100%
src / tracekit / plugins / cli.py PluginInstaller.install_from_url   100% 7 0 0   100% 4 0   100%
src / tracekit / plugins / cli.py PluginInstaller._install_from_git   95% 20 1 0   88% 8 1   93%
src / tracekit / plugins / cli.py PluginInstaller._install_from_archive   100% 25 0 0   100% 8 0   100%
src / tracekit / plugins / cli.py PluginInstaller._compute_file_checksum   100% 5 0 0   100% 2 0   100%
src / tracekit / plugins / cli.py PluginInstaller._compute_directory_checksum   100% 10 0 0   100% 6 0   100%
src / tracekit / plugins / cli.py PluginInstaller.validate_integrity   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / cli.py cli_list_plugins   100% 20 0 0   100% 12 0   100%
src / tracekit / plugins / cli.py cli_plugin_info   96% 28 1 0   86% 22 3   92%
src / tracekit / plugins / cli.py cli_enable_plugin   100% 7 0 0   100% 0 0   100%
src / tracekit / plugins / cli.py cli_disable_plugin   100% 7 0 0   100% 0 0   100%
src / tracekit / plugins / cli.py cli_validate_plugin   90% 21 2 0   90% 10 1   90%
src / tracekit / plugins / cli.py cli_install_plugin   100% 7 0 0   100% 0 0   100%
src / tracekit / plugins / cli.py (no function)   100% 28 0 0   100% 0 0   100%
src / tracekit / plugins / discovery.py get_plugin_paths   88% 17 2 0   75% 8 2   84%
src / tracekit / plugins / discovery.py discover_plugins   100% 17 0 0   88% 16 2   94%
src / tracekit / plugins / discovery.py scan_directory   100% 19 0 0   89% 18 2   95%
src / tracekit / plugins / discovery.py scan_entry_points   95% 20 1 0   80% 10 2   90%
src / tracekit / plugins / discovery.py _load_plugin_from_yaml   100% 30 0 0   82% 28 5   91%
src / tracekit / plugins / discovery.py _load_plugin_from_module   86% 35 5 0   75% 16 4   82%
src / tracekit / plugins / discovery.py (no function)   100% 28 0 4   100% 0 0   100%
src / tracekit / plugins / isolation.py ResourceLimits.to_rlimit_dict   100% 13 0 0   100% 8 0   100%
src / tracekit / plugins / isolation.py PermissionSet.grant   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py PermissionSet.deny   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py PermissionSet.has_permission   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py PermissionSet.check   100% 2 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py PluginSandbox.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / plugins / isolation.py PluginSandbox.execute   71% 17 5 1   100% 4 0   76%
src / tracekit / plugins / isolation.py PluginSandbox._apply_limits   25% 8 6 0   50% 2 1   30%
src / tracekit / plugins / isolation.py PluginSandbox._restore_limits   33% 6 4 0   50% 2 1   38%
src / tracekit / plugins / isolation.py PluginSandbox._timeout_handler   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / isolation.py PluginSandbox.check_permission   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / isolation.py IsolationManager.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / plugins / isolation.py IsolationManager.create_sandbox   100% 6 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py IsolationManager.get_sandbox   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / isolation.py IsolationManager.remove_sandbox   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py get_isolation_manager   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / isolation.py (no function)   100% 62 0 2   100% 0 0   100%
src / tracekit / plugins / lifecycle.py DependencyGraph.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py DependencyGraph.add_plugin   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / lifecycle.py DependencyGraph.add_dependency   100% 6 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py DependencyGraph.resolve_order   100% 15 0 0   100% 8 0   100%
src / tracekit / plugins / lifecycle.py DependencyGraph._find_cycle   89% 9 1 0   50% 6 3   73%
src / tracekit / plugins / lifecycle.py DependencyGraph._find_cycle.dfs   79% 14 3 0   60% 10 4   71%
src / tracekit / plugins / lifecycle.py DependencyGraph.get_dependencies   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py DependencyGraph.get_dependents   100% 5 0 0   100% 4 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.discover_plugins   100% 15 0 0   90% 10 1   96%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._register_lazy_loader   100% 9 0 0   75% 4 1   92%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._register_lazy_loader.loader   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._load_plugin_from_path   92% 13 1 0   88% 8 1   90%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.load_plugin   100% 32 0 0   100% 8 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._resolve_dependencies   92% 13 1 0   90% 10 1   91%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.configure_plugin   100% 20 0 0   83% 6 1   96%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.enable_plugin   100% 18 0 0   90% 10 1   96%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.disable_plugin   92% 13 1 0   67% 6 2   84%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.unload_plugin   100% 17 0 0   83% 6 1   96%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.reload_plugin   100% 22 0 0   100% 10 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._save_plugin_state   100% 2 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._restore_plugin_state   100% 4 0 0   50% 2 1   83%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._cleanup_plugin_references   100% 5 0 0   50% 2 1   86%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.check_for_changes   83% 12 2 0   80% 10 2   82%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.auto_reload_changed   100% 9 0 0   100% 2 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.graceful_degradation   100% 11 0 0   92% 12 1   96%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.get_handle   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.get_enabled_plugins   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager.on_state_change   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._notify_state_change   100% 5 0 0   100% 2 0   100%
src / tracekit / plugins / lifecycle.py PluginLifecycleManager._get_plugin_path   88% 8 1 0   83% 6 1   86%
src / tracekit / plugins / lifecycle.py get_lifecycle_manager   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / lifecycle.py set_plugin_directories   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / lifecycle.py (no function)   100% 78 0 2   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.__init__   100% 9 0 0   100% 2 0   100%
src / tracekit / plugins / manager.py PluginManager.discover_and_load   89% 18 2 0   100% 6 0   92%
src / tracekit / plugins / manager.py PluginManager.register_plugin   100% 13 0 0   88% 8 1   95%
src / tracekit / plugins / manager.py PluginManager.unregister_plugin   100% 4 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.get_plugin   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.get_plugin_metadata   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.list_plugins   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / manager.py PluginManager.enable_plugin   100% 8 0 0   75% 4 1   92%
src / tracekit / plugins / manager.py PluginManager.disable_plugin   100% 8 0 0   75% 4 1   92%
src / tracekit / plugins / manager.py PluginManager.reload_plugin   100% 10 0 0   100% 6 0   100%
src / tracekit / plugins / manager.py PluginManager.is_enabled   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / manager.py PluginManager.is_compatible   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.get_plugin_dependencies   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / manager.py PluginManager.get_plugin_dependents   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.resolve_dependency_order   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.get_providers   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.create_sandbox   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.get_sandbox   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py PluginManager.check_plugin_health   100% 5 0 0   100% 2 0   100%
src / tracekit / plugins / manager.py PluginManager.apply_migration   100% 7 0 0   75% 4 1   91%
src / tracekit / plugins / manager.py get_plugin_manager   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / manager.py reset_plugin_manager   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / manager.py (no function)   100% 35 0 2   100% 0 0   100%
src / tracekit / plugins / registry.py PluginConflictError.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginVersionError.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginDependencyError.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginRegistry.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginRegistry.register   95% 20 1 0   92% 12 1   94%
src / tracekit / plugins / registry.py PluginRegistry.unregister   100% 11 0 0   83% 6 1   94%
src / tracekit / plugins / registry.py PluginRegistry.get   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginRegistry.get_metadata   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginRegistry.list_plugins   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / registry.py PluginRegistry.has_plugin   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py PluginRegistry.is_compatible   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / registry.py PluginRegistry.discover_and_load   82% 17 3 0   88% 8 1   84%
src / tracekit / plugins / registry.py PluginRegistry.get_providers   100% 6 0 0   83% 6 1   92%
src / tracekit / plugins / registry.py get_plugin_registry   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / registry.py register_plugin   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py get_plugin   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py list_plugins   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py is_compatible   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / registry.py (no function)   100% 29 0 2   100% 0 0   100%
src / tracekit / plugins / versioning.py VersionRange.matches   100% 31 0 0   100% 14 0   100%
src / tracekit / plugins / versioning.py VersionRange._parse_version   100% 11 0 0   100% 2 0   100%
src / tracekit / plugins / versioning.py Migration.apply   100% 2 0 0   100% 0 0   100%
src / tracekit / plugins / versioning.py VersionCompatibilityLayer.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / plugins / versioning.py VersionCompatibilityLayer.set_api_version   100% 2 0 0   100% 0 0   100%
src / tracekit / plugins / versioning.py VersionCompatibilityLayer.register_adapter   100% 2 0 0   100% 0 0   100%
src / tracekit / plugins / versioning.py VersionCompatibilityLayer.call_adapted   100% 6 0 0   100% 2 0   100%
src / tracekit / plugins / versioning.py MigrationManager.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / plugins / versioning.py MigrationManager.register_migration   100% 4 0 0   100% 2 0   100%
src / tracekit / plugins / versioning.py MigrationManager.get_migration_path   100% 16 0 0   100% 10 0   100%
src / tracekit / plugins / versioning.py MigrationManager.migrate   100% 7 0 0   100% 4 0   100%
src / tracekit / plugins / versioning.py get_migration_manager   100% 3 0 0   100% 2 0   100%
src / tracekit / plugins / versioning.py (no function)   100% 30 0 3   100% 0 0   100%
src / tracekit / quality / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / tracekit / quality / ensemble.py EnsembleResult.__post_init__   100% 4 0 0   100% 4 0   100%
src / tracekit / quality / ensemble.py EnsembleResult.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / quality / ensemble.py EnsembleAggregator.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / quality / ensemble.py EnsembleAggregator.aggregate   100% 8 0 0   100% 4 0   100%
src / tracekit / quality / ensemble.py EnsembleAggregator.aggregate_numeric   85% 55 8 0   80% 20 4   84%
src / tracekit / quality / ensemble.py EnsembleAggregator.aggregate_categorical   81% 21 4 0   62% 8 3   76%
src / tracekit / quality / ensemble.py EnsembleAggregator.detect_outlier_methods   94% 16 1 0   88% 8 1   92%
src / tracekit / quality / ensemble.py create_frequency_ensemble   84% 44 7 0   83% 12 2   84%
src / tracekit / quality / ensemble.py create_edge_ensemble   86% 51 7 0   94% 16 1   88%
src / tracekit / quality / ensemble.py (no function)   100% 40 0 2   100% 0 0   100%
src / tracekit / quality / explainer.py ResultExplanation.to_narrative   0% 24 24 0   0% 16 0   0%
src / tracekit / quality / explainer.py ResultExplanation._format_value   0% 5 5 0   0% 4 0   0%
src / tracekit / quality / explainer.py ResultExplainer.explain   0% 9 9 0   0% 2 0   0%
src / tracekit / quality / explainer.py ResultExplainer._get_method_key   0% 8 8 0   0% 6 0   0%
src / tracekit / quality / explainer.py ResultExplainer._generate_reliable_reasons   0% 9 9 0   0% 6 0   0%
src / tracekit / quality / explainer.py ResultExplainer._generate_unreliable_reasons   0% 9 9 0   0% 6 0   0%
src / tracekit / quality / explainer.py explain_result   0% 3 3 1   100% 0 0   0%
src / tracekit / quality / explainer.py (no function)   100% 22 0 2   100% 0 0   100%
src / tracekit / quality / scoring.py ReliabilityCategory.from_confidence   29% 7 5 0   17% 6 1   23%
src / tracekit / quality / scoring.py AnalysisQualityScore.__post_init__   60% 5 2 0   67% 6 2   64%
src / tracekit / quality / scoring.py AnalysisQualityScore.is_reliable   0% 1 1 0   100% 0 0   0%
src / tracekit / quality / scoring.py AnalysisQualityScore.explain   0% 18 18 0   0% 14 0   0%
src / tracekit / quality / scoring.py AnalysisQualityScore.get_recommendations   0% 12 12 0   0% 10 0   0%
src / tracekit / quality / scoring.py AnalysisQualityScore.to_dict   0% 1 1 0   100% 0 0   0%
src / tracekit / quality / scoring.py calculate_quality_score   0% 9 9 0   0% 4 0   0%
src / tracekit / quality / scoring.py DataQualityMetrics.to_factor   0% 12 12 0   0% 6 0   0%
src / tracekit / quality / scoring.py assess_data_quality   88% 25 3 0   50% 6 3   81%
src / tracekit / quality / scoring.py score_analysis_result   0% 31 31 0   0% 16 0   0%
src / tracekit / quality / scoring.py _score_result_value   0% 18 18 0   0% 16 0   0%
src / tracekit / quality / scoring.py combine_quality_scores   86% 14 2 0   67% 6 2   80%
src / tracekit / quality / scoring.py (no function)   100% 46 0 2   100% 0 0   100%
src / tracekit / quality / warnings.py QualityWarning.__str__   100% 7 0 0   75% 4 1   91%
src / tracekit / quality / warnings.py SignalQualityAnalyzer.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / quality / warnings.py SignalQualityAnalyzer.analyze   100% 13 0 0   100% 6 0   100%
src / tracekit / quality / warnings.py check_clipping   100% 18 0 0   100% 6 0   100%
src / tracekit / quality / warnings.py check_saturation   100% 16 0 0   100% 6 0   100%
src / tracekit / quality / warnings.py check_noise   100% 12 0 0   100% 6 0   100%
src / tracekit / quality / warnings.py check_undersampling   100% 14 0 0   100% 4 0   100%
src / tracekit / quality / warnings.py (no function)   100% 21 0 3   100% 0 0   100%
src / tracekit / reporting / __init__.py (no function)   100% 26 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py CustomTemplate.validate_data   100% 8 0 0   100% 8 0   100%
src / tracekit / reporting / advanced.py CustomTemplate.render   100% 6 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py InteractiveElement.to_html   100% 10 0 0   100% 6 0   100%
src / tracekit / reporting / advanced.py Annotation.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AnnotationManager.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AnnotationManager.add   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AnnotationManager.remove   100% 5 0 0   75% 4 1   89%
src / tracekit / reporting / advanced.py AnnotationManager.get_for_target   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AnnotationManager.export   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportSchedule.calculate_next_run   90% 10 1 0   88% 8 1   89%
src / tracekit / reporting / advanced.py ReportScheduler.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportScheduler.add_schedule   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportScheduler.remove_schedule   100% 4 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ReportScheduler.get_pending   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportScheduler.execute_pending   100% 9 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ReportDistributor.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportDistributor.register_handler   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportDistributor.distribute   100% 12 0 0   100% 4 0   100%
src / tracekit / reporting / advanced.py ReportArchive.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportArchive.archive   100% 10 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportArchive.retrieve   100% 3 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ReportArchive.cleanup_expired   100% 9 0 0   100% 4 0   100%
src / tracekit / reporting / advanced.py ReportSearchIndex.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportSearchIndex.index_report   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportSearchIndex.search   100% 9 0 0   100% 4 0   100%
src / tracekit / reporting / advanced.py ReportVersionControl.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportVersionControl.commit   100% 12 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ReportVersionControl.get_version   100% 5 0 0   83% 6 1   91%
src / tracekit / reporting / advanced.py ReportVersionControl.get_history   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportVersionControl.diff   100% 10 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ApprovalWorkflow.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ApprovalWorkflow.submit_for_review   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ApprovalWorkflow.approve   100% 9 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ApprovalWorkflow.reject   100% 9 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ApprovalWorkflow.on_status_change   100% 3 0 0   50% 2 1   80%
src / tracekit / reporting / advanced.py ApprovalWorkflow._trigger_callbacks   100% 5 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ComplianceChecker.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ComplianceChecker.add_rule   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ComplianceChecker.check   100% 11 0 0   100% 6 0   100%
src / tracekit / reporting / advanced.py ReportLocalizer.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportLocalizer._register_defaults   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportLocalizer.get_string   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportLocalizer.format_number   100% 6 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py add_accessibility_features   100% 7 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ReportEncryption.encrypt_content   100% 5 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py ReportEncryption.decrypt_content   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportEncryption.encrypt_file   100% 5 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py ReportEncryption.decrypt_file   100% 5 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py add_watermark   100% 5 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AuditTrail.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AuditTrail.log   100% 5 0 0   100% 2 0   100%
src / tracekit / reporting / advanced.py AuditTrail.get_for_report   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AuditTrail.get_by_user   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / advanced.py AuditTrail.export   67% 3 1 0   50% 2 1   60%
src / tracekit / reporting / advanced.py AuditTrail._persist   100% 3 0 0   50% 2 1   80%
src / tracekit / reporting / advanced.py (no function)   100% 233 0 3   100% 0 0   100%
src / tracekit / reporting / analyze.py analyze   85% 71 11 0   71% 24 5   81%
src / tracekit / reporting / analyze.py _detect_input_type_from_file   94% 17 1 0   90% 10 1   93%
src / tracekit / reporting / analyze.py _detect_input_type_from_data   75% 16 4 0   70% 10 3   73%
src / tracekit / reporting / analyze.py _load_input_file   0% 19 19 0   0% 10 0   0%
src / tracekit / reporting / analyze.py _report_progress   100% 3 0 0   100% 2 0   100%
src / tracekit / reporting / analyze.py _get_version   100% 3 0 2   100% 0 0   100%
src / tracekit / reporting / analyze.py (no function)   100% 19 0 2   100% 0 0   100%
src / tracekit / reporting / auto_report.py Report.save_pdf   100% 11 0 0   75% 4 1   93%
src / tracekit / reporting / auto_report.py Report.save_html   100% 15 0 0   88% 8 1   96%
src / tracekit / reporting / auto_report.py Report.save_markdown   100% 17 0 0   88% 8 1   96%
src / tracekit / reporting / auto_report.py Report.add_section   100% 5 0 0   100% 2 0   100%
src / tracekit / reporting / auto_report.py Report.include_plots   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / auto_report.py Report.set_metadata   100% 10 0 0   90% 10 1   95%
src / tracekit / reporting / auto_report.py _generate_executive_summary   100% 17 0 0   75% 8 2   92%
src / tracekit / reporting / auto_report.py _generate_key_findings   100% 15 0 0   80% 10 2   92%
src / tracekit / reporting / auto_report.py _generate_methodology   100% 12 0 0   100% 4 0   100%
src / tracekit / reporting / auto_report.py _generate_detailed_results   100% 11 0 0   100% 0 0   100%
src / tracekit / reporting / auto_report.py generate_report   100% 27 0 0   94% 16 1   98%
src / tracekit / reporting / auto_report.py (no function)   100% 34 0 2   100% 0 0   100%
src / tracekit / reporting / batch.py BatchReportResult.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / reporting / batch.py BatchReportResult.dut_yield   100% 3 0 0   100% 2 0   100%
src / tracekit / reporting / batch.py batch_report   81% 52 10 0   92% 12 1   83%
src / tracekit / reporting / batch.py batch_report.dut_id_extractor   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / batch.py _default_analysis   57% 7 3 0   50% 2 1   56%
src / tracekit / reporting / batch.py _generate_individual_report   100% 16 0 0   50% 2 1   94%
src / tracekit / reporting / batch.py _save_report   0% 7 7 0   0% 4 0   0%
src / tracekit / reporting / batch.py generate_batch_report   100% 19 0 0   100% 8 0   100%
src / tracekit / reporting / batch.py _generate_batch_summary   100% 20 0 0   100% 10 0   100%
src / tracekit / reporting / batch.py _create_yield_analysis_section   100% 28 0 0   88% 16 2   95%
src / tracekit / reporting / batch.py _create_batch_statistics_section   100% 23 0 0   81% 16 3   92%
src / tracekit / reporting / batch.py _create_outlier_detection_section   100% 32 0 0   96% 24 1   98%
src / tracekit / reporting / batch.py _create_dut_section   100% 12 0 0   100% 4 0   100%
src / tracekit / reporting / batch.py aggregate_batch_measurements   100% 10 0 0   100% 10 0   100%
src / tracekit / reporting / batch.py (no function)   100% 24 0 3   100% 0 0   100%
src / tracekit / reporting / chart_selection.py auto_select_chart   100% 31 0 0   97% 30 1   98%
src / tracekit / reporting / chart_selection.py recommend_chart_with_reasoning   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / chart_selection.py get_axis_scaling   100% 11 0 0   100% 6 0   100%
src / tracekit / reporting / chart_selection.py (no function)   100% 8 0 2   100% 0 0   100%
src / tracekit / reporting / comparison.py generate_comparison_report   100% 13 0 0   100% 4 0   100%
src / tracekit / reporting / comparison.py _generate_comparison_summary   100% 36 0 0   100% 18 0   100%
src / tracekit / reporting / comparison.py _create_changes_section   100% 12 0 0   75% 8 2   90%
src / tracekit / reporting / comparison.py _create_violations_comparison_section   100% 22 0 0   100% 14 0   100%
src / tracekit / reporting / comparison.py _create_detailed_comparison_section   100% 26 0 0   100% 8 0   100%
src / tracekit / reporting / comparison.py compare_waveforms   100% 14 0 0   100% 2 0   100%
src / tracekit / reporting / comparison.py (no function)   100% 10 0 0   100% 0 0   100%
src / tracekit / reporting / config.py AnalysisConfig.get_domain_config   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / config.py AnalysisConfig.is_domain_enabled   100% 7 0 0   100% 6 0   100%
src / tracekit / reporting / config.py AnalysisConfig.get_effective_sample_rate   33% 9 6 0   25% 8 2   29%
src / tracekit / reporting / config.py AnalysisResult.open_index   0% 4 4 0   0% 2 0   0%
src / tracekit / reporting / config.py AnalysisResult.get_domain_results   0% 3 3 0   0% 2 0   0%
src / tracekit / reporting / config.py AnalysisResult.success_rate   0% 3 3 0   0% 2 0   0%
src / tracekit / reporting / config.py get_available_analyses   100% 7 0 0   100% 4 0   100%
src / tracekit / reporting / config.py (no function)   100% 127 0 1   100% 0 0   100%
src / tracekit / reporting / content / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / tracekit / reporting / content / executive.py generate_executive_summary   100% 29 0 0   100% 16 0   100%
src / tracekit / reporting / content / executive.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / reporting / content / filtering.py filter_by_severity   100% 15 0 0   100% 6 0   100%
src / tracekit / reporting / content / filtering.py filter_by_audience   100% 9 0 0   100% 6 0   100%
src / tracekit / reporting / content / filtering.py calculate_relevance_score   100% 14 0 0   100% 10 0   100%
src / tracekit / reporting / content / filtering.py (no function)   100% 22 0 0   100% 0 0   100%
src / tracekit / reporting / content / minimal.py generate_compact_text   100% 18 0 0   100% 6 0   100%
src / tracekit / reporting / content / minimal.py auto_caption   100% 24 0 0   100% 14 0   100%
src / tracekit / reporting / content / minimal.py remove_filler_text   100% 9 0 0   100% 6 0   100%
src / tracekit / reporting / content / minimal.py conditional_section   73% 11 3 0   70% 10 1   71%
src / tracekit / reporting / content / minimal.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / reporting / content / verbosity.py VerbosityController.should_include_section   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / content / verbosity.py VerbosityController.get_max_pages   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / content / verbosity.py apply_verbosity_level   100% 11 0 0   100% 10 0   100%
src / tracekit / reporting / content / verbosity.py (no function)   100% 17 0 2   100% 0 0   100%
src / tracekit / reporting / core.py Report.add_section   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / core.py Report.add_table   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / core.py Report.add_figure   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / core.py Report.generate_executive_summary   100% 19 0 0   100% 14 0   100%
src / tracekit / reporting / core.py Report.to_markdown   94% 31 2 0   85% 20 3   90%
src / tracekit / reporting / core.py Report._table_to_markdown   100% 12 0 0   100% 6 0   100%
src / tracekit / reporting / core.py Report.save   100% 9 0 0   100% 4 0   100%
src / tracekit / reporting / core.py Report.to_html   94% 18 1 0   86% 14 2   91%
src / tracekit / reporting / core.py Report._table_to_html   100% 19 0 0   100% 10 0   100%
src / tracekit / reporting / core.py generate_report   100% 19 0 0   93% 14 1   97%
src / tracekit / reporting / core.py _add_results_section   100% 11 0 0   100% 4 0   100%
src / tracekit / reporting / core.py _add_methodology_section   100% 8 0 0   100% 6 0   100%
src / tracekit / reporting / core.py _add_raw_data_section   100% 5 0 0   100% 4 0   100%
src / tracekit / reporting / core.py (no function)   100% 47 0 2   100% 0 0   100%
src / tracekit / reporting / core_formats / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / core_formats / multi_format.py detect_format_from_extension   0% 4 4 0   100% 0 0   0%
src / tracekit / reporting / core_formats / multi_format.py render_all_formats   0% 23 23 0   0% 14 0   0%
src / tracekit / reporting / core_formats / multi_format.py _render_pdf   0% 2 2 0   100% 0 0   0%
src / tracekit / reporting / core_formats / multi_format.py _render_html   0% 2 2 0   100% 0 0   0%
src / tracekit / reporting / core_formats / multi_format.py _render_markdown   0% 14 14 0   0% 12 0   0%
src / tracekit / reporting / core_formats / multi_format.py _render_docx   0% 1 1 0   100% 0 0   0%
src / tracekit / reporting / core_formats / multi_format.py _render_json   0% 3 3 0   100% 0 0   0%
src / tracekit / reporting / core_formats / multi_format.py (no function)   100% 19 0 2   100% 0 0   100%
src / tracekit / reporting / engine.py AnalysisEngine.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / engine.py AnalysisEngine.detect_input_type   88% 25 3 0   83% 24 2   86%
src / tracekit / reporting / engine.py AnalysisEngine.run   80% 64 13 0   83% 30 5   81%
src / tracekit / reporting / engine.py AnalysisEngine._execute_domain   50% 42 21 0   40% 20 4   47%
src / tracekit / reporting / engine.py AnalysisEngine._preprocess_for_domain   100% 3 0 0   100% 2 0   100%
src / tracekit / reporting / engine.py AnalysisEngine._get_effective_sample_rate   100% 8 0 0   75% 4 1   92%
src / tracekit / reporting / engine.py AnalysisEngine._preprocess_for_eye_domain   91% 35 3 0   88% 16 2   90%
src / tracekit / reporting / engine.py AnalysisEngine._detect_unit_interval_fft   78% 23 5 0   67% 6 2   76%
src / tracekit / reporting / engine.py AnalysisEngine._detect_unit_interval_zero_crossing   75% 12 3 0   100% 2 0   79%
src / tracekit / reporting / engine.py AnalysisEngine._detect_baud_rate_from_filename   0% 15 15 0   0% 8 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._detect_logic_family   0% 14 14 0   0% 8 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._detect_frequency_range   0% 15 15 0   0% 2 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._detect_noise_floor   0% 9 9 5   100% 0 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._detect_protocol_hints   0% 25 25 0   0% 12 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._execute_function   0% 26 26 0   0% 12 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._add_quality_score   0% 15 15 0   0% 8 0   0%
src / tracekit / reporting / engine.py AnalysisEngine._prepare_arguments   21% 206 163 0   24% 130 19   22%
src / tracekit / reporting / engine.py (no function)   100% 34 0 0   100% 0 0   100%
src / tracekit / reporting / export.py export_report   100% 19 0 0   100% 14 0   100%
src / tracekit / reporting / export.py _export_pdf   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / export.py _export_html   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / export.py _export_markdown   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / export.py _export_docx   97% 34 1 2   83% 24 4   91%
src / tracekit / reporting / export.py _add_table_to_docx   96% 24 1 0   94% 18 1   95%
src / tracekit / reporting / export.py export_multiple_reports   100% 8 0 0   100% 2 0   100%
src / tracekit / reporting / export.py batch_export_formats   100% 7 0 0   100% 2 0   100%
src / tracekit / reporting / export.py create_archive   100% 17 0 0   100% 8 0   100%
src / tracekit / reporting / export.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / reporting / formatting.py NumberFormatter.format   0% 13 13 0   0% 12 0   0%
src / tracekit / reporting / formatting.py NumberFormatter._format_engineering   0% 21 21 0   0% 10 0   0%
src / tracekit / reporting / formatting.py NumberFormatter._format_scaled   0% 1 1 0   100% 0 0   0%
src / tracekit / reporting / formatting.py NumberFormatter._format_plain   0% 4 4 0   0% 2 0   0%
src / tracekit / reporting / formatting.py NumberFormatter.format_percentage   0% 3 3 0   0% 2 0   0%
src / tracekit / reporting / formatting.py NumberFormatter.format_range   0% 11 11 0   100% 0 0   0%
src / tracekit / reporting / formatting.py format_value   0% 2 2 0   100% 0 0   0%
src / tracekit / reporting / formatting.py format_with_units   0% 1 1 0   100% 0 0   0%
src / tracekit / reporting / formatting.py format_with_context   0% 23 23 0   0% 12 0   0%
src / tracekit / reporting / formatting.py format_pass_fail   0% 5 5 0   0% 4 0   0%
src / tracekit / reporting / formatting.py format_margin   0% 13 13 0   0% 8 0   0%
src / tracekit / reporting / formatting.py format_with_locale   0% 28 28 0   0% 16 0   0%
src / tracekit / reporting / formatting.py (no function)   0% 29 29 0   100% 0 0   0%
src / tracekit / reporting / formatting / __init__.py format_margin   100% 18 0 0   100% 10 0   100%
src / tracekit / reporting / formatting / __init__.py format_pass_fail   88% 8 1 0   75% 4 1   83%
src / tracekit / reporting / formatting / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py bold   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py italic   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py underline   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py color   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py format_severity   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py format_callout_box   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / emphasis.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / numbers.py NumberFormatter.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / numbers.py NumberFormatter.format   91% 44 4 0   88% 34 2   90%
src / tracekit / reporting / formatting / numbers.py NumberFormatter.format_percentage   100% 3 0 0   100% 2 0   100%
src / tracekit / reporting / formatting / numbers.py NumberFormatter.format_range   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / numbers.py format_value   100% 7 0 0   100% 2 0   100%
src / tracekit / reporting / formatting / numbers.py format_with_units   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / numbers.py format_with_context   94% 18 1 0   90% 10 1   93%
src / tracekit / reporting / formatting / numbers.py format_percentage   0% 3 3 0   0% 2 0   0%
src / tracekit / reporting / formatting / numbers.py format_range   0% 1 1 0   100% 0 0   0%
src / tracekit / reporting / formatting / numbers.py format_with_locale   95% 20 1 0   94% 16 1   94%
src / tracekit / reporting / formatting / numbers.py (no function)   100% 17 0 0   100% 0 0   100%
src / tracekit / reporting / formatting / standards.py apply_formatting_standards   100% 3 0 0   100% 2 0   100%
src / tracekit / reporting / formatting / standards.py (no function)   100% 27 0 0   100% 0 0   100%
src / tracekit / reporting / html.py generate_html_report   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / html.py _generate_html_header   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / html.py _generate_html_styles   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / html.py _generate_html_scripts   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / html.py _generate_html_nav   100% 6 0 0   100% 4 0   100%
src / tracekit / reporting / html.py _generate_metadata_section   100% 7 0 0   75% 4 1   91%
src / tracekit / reporting / html.py _generate_html_content   94% 32 2 0   81% 26 5   88%
src / tracekit / reporting / html.py _table_to_html   100% 26 0 0   94% 16 1   98%
src / tracekit / reporting / html.py _figure_to_html   100% 11 0 0   100% 4 0   100%
src / tracekit / reporting / html.py save_html_report   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / html.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / reporting / index.py TemplateEngine.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / index.py TemplateEngine.render   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / index.py TemplateEngine._process_variables   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / index.py TemplateEngine._process_variables.replace_var   64% 14 5 0   60% 10 2   62%
src / tracekit / reporting / index.py TemplateEngine._process_if_blocks   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / index.py TemplateEngine._process_if_blocks.replace_if   100% 6 0 0   100% 2 0   100%
src / tracekit / reporting / index.py TemplateEngine._process_each_blocks   90% 29 3 0   92% 12 1   90%
src / tracekit / reporting / index.py TemplateEngine._find_matching_end   88% 17 2 0   75% 8 2   84%
src / tracekit / reporting / index.py IndexGenerator.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / index.py IndexGenerator.generate   92% 13 1 0   83% 6 1   89%
src / tracekit / reporting / index.py IndexGenerator._build_context   87% 38 5 0   68% 22 5   80%
src / tracekit / reporting / index.py IndexGenerator._extract_key_findings   69% 13 4 0   58% 12 3   64%
src / tracekit / reporting / index.py IndexGenerator._format_plots   0% 4 4 0   0% 2 0   0%
src / tracekit / reporting / index.py IndexGenerator._format_data_files   0% 5 5 0   0% 2 0   0%
src / tracekit / reporting / index.py IndexGenerator._format_size   40% 15 9 0   38% 8 1   39%
src / tracekit / reporting / index.py IndexGenerator._format_duration   100% 9 0 0   100% 4 0   100%
src / tracekit / reporting / index.py IndexGenerator._render_html   80% 5 1 0   50% 2 1   71%
src / tracekit / reporting / index.py IndexGenerator._render_markdown   80% 5 1 0   50% 2 1   71%
src / tracekit / reporting / index.py (no function)   100% 23 0 3   100% 0 0   100%
src / tracekit / reporting / multichannel.py generate_multichannel_report   100% 15 0 0   100% 8 0   100%
src / tracekit / reporting / multichannel.py _generate_multichannel_summary   100% 23 0 0   100% 12 0   100%
src / tracekit / reporting / multichannel.py _create_aggregate_statistics_section   100% 23 0 0   94% 16 1   97%
src / tracekit / reporting / multichannel.py _create_channel_comparison_section   96% 24 1 0   83% 12 2   92%
src / tracekit / reporting / multichannel.py _create_channel_section   100% 10 0 0   100% 4 0   100%
src / tracekit / reporting / multichannel.py create_channel_crosstalk_section   100% 19 0 0   100% 8 0   100%
src / tracekit / reporting / multichannel.py (no function)   100% 10 0 0   100% 0 0   100%
src / tracekit / reporting / output.py _sanitize_for_serialization   49% 61 31 0   55% 42 13   51%
src / tracekit / reporting / output.py OutputManager.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.root   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.timestamp   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.timestamp_str   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.create   100% 5 0 0   100% 2 0   100%
src / tracekit / reporting / output.py OutputManager.create_domain_dir   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.save_json   100% 6 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.save_yaml   100% 7 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.save_plot   100% 6 0 0   100% 0 0   100%
src / tracekit / reporting / output.py OutputManager.save_text   100% 5 0 0   100% 0 0   100%
src / tracekit / reporting / output.py (no function)   100% 23 0 0   100% 0 0   100%
src / tracekit / reporting / pdf.py generate_pdf_report   93% 28 2 0   79% 14 3   88%
src / tracekit / reporting / pdf.py _create_styles   100% 14 0 0   100% 0 0   100%
src / tracekit / reporting / pdf.py _format_metadata   100% 7 0 0   75% 4 1   91%
src / tracekit / reporting / pdf.py _add_pdf_section   100% 30 0 0   82% 22 4   92%
src / tracekit / reporting / pdf.py _create_pdf_table   100% 22 0 0   100% 16 0   100%
src / tracekit / reporting / pdf.py save_pdf_report   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / pdf.py (no function)   100% 17 0 4   100% 0 0   100%
src / tracekit / reporting / plots.py PlotGenerator.__init__   67% 3 1 0   50% 2 1   60%
src / tracekit / reporting / plots.py PlotGenerator.generate_plots   0% 39 39 0   0% 24 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_spectral_plots   0% 32 32 0   0% 12 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_waveform_plots   0% 22 22 0   0% 8 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_digital_plots   0% 12 12 0   0% 4 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_statistics_plots   0% 12 12 0   0% 4 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_jitter_plots   0% 10 10 0   0% 2 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_eye_plots   0% 1 1 0   100% 0 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_pattern_plots   0% 12 12 0   0% 4 0   0%
src / tracekit / reporting / plots.py PlotGenerator._generate_power_plots   0% 10 10 0   0% 2 0   0%
src / tracekit / reporting / plots.py PlotGenerator._plot_spectrum   0% 30 30 0   0% 12 0   0%
src / tracekit / reporting / plots.py PlotGenerator._plot_histogram   0% 17 17 0   0% 4 0   0%
src / tracekit / reporting / plots.py PlotGenerator._plot_time_series   0% 26 26 0   0% 8 0   0%
src / tracekit / reporting / plots.py PlotGenerator._plot_spectrogram   0% 44 44 0   0% 16 0   0%
src / tracekit / reporting / plots.py register_plot   0% 2 2 1   100% 0 0   0%
src / tracekit / reporting / plots.py register_plot.decorator   0% 4 4 0   0% 2 0   0%
src / tracekit / reporting / plots.py (no function)   100% 30 0 6   100% 0 0   100%
src / tracekit / reporting / pptx_export.py PPTXPresentation.add_slide   100% 3 0 0   100% 0 0   100%
src / tracekit / reporting / pptx_export.py export_pptx   23% 22 17 0   10% 10 1   19%
src / tracekit / reporting / pptx_export.py _add_title_slide   0% 10 10 0   0% 8 0   0%
src / tracekit / reporting / pptx_export.py _add_summary_slide   0% 8 8 0   0% 6 0   0%
src / tracekit / reporting / pptx_export.py _add_findings_slide   0% 12 12 0   0% 8 0   0%
src / tracekit / reporting / pptx_export.py _add_measurement_slides   0% 19 19 0   0% 10 0   0%
src / tracekit / reporting / pptx_export.py _add_plot_slide   0% 10 10 0   0% 6 0   0%
src / tracekit / reporting / pptx_export.py _create_stub_pptx   100% 11 0 0   100% 0 0   100%
src / tracekit / reporting / pptx_export.py generate_presentation_from_report   100% 4 0 0   100% 2 0   100%
src / tracekit / reporting / pptx_export.py (no function)   94% 34 2 3   100% 0 0   94%
src / tracekit / reporting / renderers / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / renderers / pdf.py render_to_pdf   100% 7 0 0   100% 2 0   100%
src / tracekit / reporting / renderers / pdf.py (no function)   100% 13 0 2   100% 0 0   100%
src / tracekit / reporting / sections.py create_title_section   100% 10 0 0   100% 6 0   100%
src / tracekit / reporting / sections.py create_executive_summary_section   100% 30 0 0   95% 22 1   98%
src / tracekit / reporting / sections.py create_measurement_results_section   100% 8 0 0   100% 2 0   100%
src / tracekit / reporting / sections.py create_plots_section   100% 4 0 0   100% 2 0   100%
src / tracekit / reporting / sections.py create_methodology_section   100% 25 0 0   100% 22 0   100%
src / tracekit / reporting / sections.py create_conclusions_section   100% 24 0 0   100% 16 0   100%
src / tracekit / reporting / sections.py create_appendix_section   100% 12 0 0   100% 8 0   100%
src / tracekit / reporting / sections.py create_violations_section   100% 11 0 0   100% 4 0   100%
src / tracekit / reporting / sections.py create_standard_report_sections   100% 16 0 0   100% 14 0   100%
src / tracekit / reporting / sections.py (no function)   100% 13 0 0   100% 0 0   100%
src / tracekit / reporting / standards.py FormatStandards.to_css   0% 1 1 0   100% 0 0   0%
src / tracekit / reporting / standards.py VisualEmphasis.format_pass_fail   0% 11 11 0   0% 4 0   0%
src / tracekit / reporting / standards.py VisualEmphasis.format_severity   0% 14 14 0   0% 8 0   0%
src / tracekit / reporting / standards.py VisualEmphasis.format_margin   0% 24 24 0   0% 10 0   0%
src / tracekit / reporting / standards.py VisualEmphasis.create_callout_box   0% 2 2 0   100% 0 0   0%
src / tracekit / reporting / standards.py _extract_key_findings   0% 15 15 0   0% 10 0   0%
src / tracekit / reporting / standards.py _build_summary_text   0% 18 18 0   0% 12 0   0%
src / tracekit / reporting / standards.py generate_executive_summary   0% 9 9 0   100% 0 0   0%
src / tracekit / reporting / standards.py format_executive_summary_html   0% 10 10 0   0% 4 0   0%
src / tracekit / reporting / standards.py (no function)   100% 60 0 0   100% 0 0   100%
src / tracekit / reporting / summary_generator.py _estimate_grade_level   95% 21 1 0   90% 10 1   94%
src / tracekit / reporting / summary_generator.py _characterize_signal_type   100% 14 0 0   88% 8 1   95%
src / tracekit / reporting / summary_generator.py _assess_quality   100% 26 0 0   94% 18 1   98%
src / tracekit / reporting / summary_generator.py _format_frequency   100% 7 0 0   100% 6 0   100%
src / tracekit / reporting / summary_generator.py generate_summary   98% 46 1 0   90% 20 2   95%
src / tracekit / reporting / summary_generator.py (no function)   100% 24 0 2   100% 0 0   100%
src / tracekit / reporting / tables.py create_measurement_table   100% 50 0 0   88% 34 4   95%
src / tracekit / reporting / tables.py create_comparison_table   97% 39 1 0   79% 24 5   90%
src / tracekit / reporting / tables.py create_statistics_table   96% 26 1 0   95% 22 1   96%
src / tracekit / reporting / tables.py _format_markdown_table   100% 6 0 0   100% 2 0   100%
src / tracekit / reporting / tables.py _format_html_table   100% 19 0 0   100% 10 0   100%
src / tracekit / reporting / tables.py _format_csv_table   100% 8 0 0   100% 2 0   100%
src / tracekit / reporting / tables.py format_batch_summary_table   96% 23 1 0   90% 10 1   94%
src / tracekit / reporting / tables.py (no function)   100% 11 0 2   100% 0 0   100%
src / tracekit / reporting / template_system.py register_template   80% 5 1 0   75% 4 1   78%
src / tracekit / reporting / template_system.py unregister_template   100% 4 0 0   100% 2 0   100%
src / tracekit / reporting / template_system.py extend_template   91% 22 2 0   85% 20 3   88%
src / tracekit / reporting / template_system.py _resolve_inheritance   96% 23 1 0   93% 14 1   95%
src / tracekit / reporting / template_system.py load_template   94% 16 1 0   92% 12 1   93%
src / tracekit / reporting / template_system.py _load_template_file   100% 8 0 0   100% 2 0   100%
src / tracekit / reporting / template_system.py list_templates   100% 4 0 0   100% 2 0   100%
src / tracekit / reporting / template_system.py get_template_info   75% 8 2 0   75% 4 1   75%
src / tracekit / reporting / template_system.py save_template   100% 4 0 0   100% 0 0   100%
src / tracekit / reporting / template_system.py create_template   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / template_system.py (no function)   100% 39 0 0   100% 0 0   100%
src / tracekit / reporting / templates / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / reporting / templates / definition.py load_template   100% 13 0 0   100% 6 0   100%
src / tracekit / reporting / templates / definition.py validate_template   100% 13 0 0   100% 12 0   100%
src / tracekit / reporting / templates / definition.py list_builtin_templates   100% 1 0 0   100% 0 0   100%
src / tracekit / reporting / templates / definition.py (no function)   100% 28 0 2   100% 0 0   100%
src / tracekit / schemas / __init__.py get_schema_path   86% 7 1 0   75% 4 1   82%
src / tracekit / schemas / __init__.py load_schema   100% 4 0 0   100% 0 0   100%
src / tracekit / schemas / __init__.py validate_config   100% 1 0 0   100% 0 0   100%
src / tracekit / schemas / __init__.py register_builtin_schemas   77% 13 3 0   62% 8 3   71%
src / tracekit / schemas / __init__.py (no function)   100% 12 0 0   100% 0 0   100%
src / tracekit / search / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / search / anomaly.py find_anomalies   100% 15 0 0   92% 12 1   96%
src / tracekit / search / anomaly.py _detect_glitches   97% 36 1 0   89% 18 2   94%
src / tracekit / search / anomaly.py _detect_timing_violations   97% 33 1 0   93% 14 1   96%
src / tracekit / search / anomaly.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / search / context.py extract_context   100% 30 0 0   100% 18 0   100%
src / tracekit / search / context.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / search / pattern.py find_pattern   100% 50 0 0   100% 32 0   100%
src / tracekit / search / pattern.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / session / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / session / annotations.py Annotation.__post_init__   71% 7 2 0   62% 8 3   67%
src / tracekit / session / annotations.py Annotation.start_time   100% 3 0 0   100% 2 0   100%
src / tracekit / session / annotations.py Annotation.end_time   100% 3 0 0   100% 2 0   100%
src / tracekit / session / annotations.py Annotation.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / session / annotations.py Annotation.from_dict   100% 5 0 0   50% 2 1   86%
src / tracekit / session / annotations.py AnnotationLayer.add   100% 6 0 0   100% 4 0   100%
src / tracekit / session / annotations.py AnnotationLayer.remove   57% 7 3 0   50% 2 1   56%
src / tracekit / session / annotations.py AnnotationLayer.find_at_time   100% 8 0 0   88% 8 1   94%
src / tracekit / session / annotations.py AnnotationLayer.find_in_range   100% 7 0 0   100% 4 0   100%
src / tracekit / session / annotations.py AnnotationLayer.clear   0% 5 5 0   0% 2 0   0%
src / tracekit / session / annotations.py AnnotationLayer.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / session / annotations.py AnnotationLayer.from_dict   100% 2 0 0   100% 0 0   100%
src / tracekit / session / annotations.py (no function)   100% 50 0 0   100% 0 0   100%
src / tracekit / session / history.py HistoryEntry.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / session / history.py HistoryEntry._serialize_result   44% 9 5 0   38% 8 1   41%
src / tracekit / session / history.py HistoryEntry.from_dict   100% 4 0 0   50% 2 1   83%
src / tracekit / session / history.py HistoryEntry.to_code   100% 7 0 0   100% 4 0   100%
src / tracekit / session / history.py OperationHistory.record   100% 5 0 0   100% 2 0   100%
src / tracekit / session / history.py OperationHistory.undo   67% 3 1 0   50% 2 1   60%
src / tracekit / session / history.py OperationHistory.clear   0% 3 3 0   100% 0 0   0%
src / tracekit / session / history.py OperationHistory.find   90% 10 1 0   88% 8 1   89%
src / tracekit / session / history.py OperationHistory.to_script   91% 11 1 0   62% 8 3   79%
src / tracekit / session / history.py OperationHistory.summary   90% 10 1 0   75% 4 1   86%
src / tracekit / session / history.py OperationHistory.to_dict   100% 1 0 0   100% 0 0   100%
src / tracekit / session / history.py OperationHistory.from_dict   100% 5 0 0   50% 2 1   86%
src / tracekit / session / history.py (no function)   100% 36 0 0   100% 0 0   100%
src / tracekit / session / session.py Session.__post_init__   100% 2 0 0   50% 2 1   75%
src / tracekit / session / session.py Session.load_trace   0% 9 9 0   0% 2 0   0%
src / tracekit / session / session.py Session.add_trace   0% 7 7 0   0% 4 0   0%
src / tracekit / session / session.py Session.remove_trace   0% 5 5 0   0% 2 0   0%
src / tracekit / session / session.py Session.get_trace   0% 1 1 0   100% 0 0   0%
src / tracekit / session / session.py Session.list_traces   100% 1 0 0   100% 0 0   100%
src / tracekit / session / session.py Session.annotate   100% 5 0 0   100% 2 0   100%
src / tracekit / session / session.py Session.get_annotations   86% 7 1 0   75% 4 1   82%
src / tracekit / session / session.py Session.record_measurement   100% 3 0 0   100% 0 0   100%
src / tracekit / session / session.py Session.get_measurements   100% 1 0 0   100% 0 0   100%
src / tracekit / session / session.py Session.save   77% 13 3 0   50% 4 2   71%
src / tracekit / session / session.py Session._to_dict   75% 8 2 0   75% 4 1   75%
src / tracekit / session / session.py Session._from_dict   88% 16 2 0   50% 14 5   70%
src / tracekit / session / session.py Session._mark_modified   100% 1 0 0   100% 0 0   100%
src / tracekit / session / session.py Session.summary   100% 2 0 0   100% 0 0   100%
src / tracekit / session / session.py load_session   70% 10 3 0   100% 0 0   70%
src / tracekit / session / session.py (no function)   100% 39 0 0   100% 0 0   100%
src / tracekit / streaming / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / streaming / chunked.py load_trace_chunks   100% 25 0 1   88% 8 1   97%
src / tracekit / streaming / chunked.py StreamingAnalyzer.__init__   100% 11 0 0   100% 0 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.accumulate_statistics   100% 6 0 0   100% 0 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.accumulate_psd   100% 8 0 0   100% 4 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.accumulate_histogram   100% 5 0 0   100% 2 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.get_statistics   100% 6 0 0   100% 2 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.get_psd   100% 4 0 0   100% 2 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.get_histogram   100% 3 0 0   100% 2 0   100%
src / tracekit / streaming / chunked.py StreamingAnalyzer.reset   100% 11 0 0   100% 0 0   100%
src / tracekit / streaming / chunked.py chunked_spectrogram   97% 39 1 0   86% 14 2   94%
src / tracekit / streaming / chunked.py chunked_fft   95% 41 2 0   83% 12 2   92%
src / tracekit / streaming / chunked.py (no function)   100% 19 0 3   100% 0 0   100%
src / tracekit / streaming / progressive.py StreamingProgress.progress_percent   100% 3 0 0   100% 2 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer.__init__   100% 13 0 0   100% 0 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer.reset   100% 10 0 0   100% 0 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer.subscribe   100% 1 0 0   100% 0 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer.process_chunk   100% 14 0 0   100% 6 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer.finalize   100% 9 0 0   50% 2 1   91%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._update_statistics   100% 4 0 0   100% 0 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._update_frequency_estimation   100% 6 0 0   100% 4 0   100%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._update_confidence   100% 9 0 0   75% 4 1   92%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._update_results   100% 12 0 0   83% 6 1   94%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._detect_frequency_fft   73% 11 3 0   50% 2 1   69%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._get_status_message   86% 7 1 0   83% 6 1   85%
src / tracekit / streaming / progressive.py ProgressiveAnalyzer._notify   100% 5 0 0   100% 2 0   100%
src / tracekit / streaming / progressive.py create_progressive_analyzer   100% 2 0 0   100% 0 0   100%
src / tracekit / streaming / progressive.py (no function)   100% 43 0 2   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeConfig.validate   100% 12 0 0   100% 12 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.write   100% 16 0 0   100% 10 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.read   100% 11 0 0   100% 8 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer._wait_for_data   100% 8 0 0   100% 6 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.get_available   100% 2 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.get_stats   100% 2 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.clear   100% 4 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeBuffer.close   100% 1 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeSource.start   100% 1 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeSource.stop   100% 1 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeAnalyzer.__init__   100% 9 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeAnalyzer.accumulate   100% 16 0 0   100% 8 0   100%
src / tracekit / streaming / realtime.py RealtimeAnalyzer.get_statistics   100% 7 0 0   100% 2 0   100%
src / tracekit / streaming / realtime.py RealtimeAnalyzer.reset   100% 5 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeStream.__init__   100% 9 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeStream.start   83% 6 1 0   50% 2 1   75%
src / tracekit / streaming / realtime.py RealtimeStream.stop   100% 6 0 0   75% 4 1   90%
src / tracekit / streaming / realtime.py RealtimeStream.iter_chunks   84% 19 3 0   60% 10 2   76%
src / tracekit / streaming / realtime.py RealtimeStream.get_statistics   100% 4 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeStream.get_buffer_stats   100% 1 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeStream.get_chunk_count   100% 1 0 0   100% 0 0   100%
src / tracekit / streaming / realtime.py RealtimeStream._acquire_loop   100% 8 0 0   83% 6 1   93%
src / tracekit / streaming / realtime.py (no function)   100% 52 0 4   100% 0 0   100%
src / tracekit / testing / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator.generate_packets   100% 27 0 0   100% 16 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator.generate_digital_signal   100% 24 0 0   100% 8 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator.generate_protocol_messages   100% 49 0 0   100% 20 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator.add_noise   100% 11 0 0   100% 2 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator.corrupt_packets   100% 7 0 0   100% 4 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator._calculate_crc16   100% 8 0 0   100% 6 0   100%
src / tracekit / testing / synthetic.py SyntheticDataGenerator._generate_uart_signal   91% 22 2 0   80% 10 2   88%
src / tracekit / testing / synthetic.py generate_packets   100% 3 0 0   100% 0 0   100%
src / tracekit / testing / synthetic.py generate_digital_signal   100% 6 0 0   100% 0 0   100%
src / tracekit / testing / synthetic.py generate_protocol_messages   100% 3 0 0   100% 0 0   100%
src / tracekit / testing / synthetic.py generate_test_dataset   100% 28 0 0   100% 4 0   100%
src / tracekit / testing / synthetic.py (no function)   100% 55 0 0   100% 0 0   100%
src / tracekit / triggering / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / triggering / base.py Trigger.find_first   100% 2 0 0   100% 0 0   100%
src / tracekit / triggering / base.py Trigger.count_events   100% 1 0 0   100% 0 0   100%
src / tracekit / triggering / base.py find_triggers   75% 20 5 0   75% 12 3   75%
src / tracekit / triggering / base.py interpolate_crossing   75% 8 2 0   50% 4 2   67%
src / tracekit / triggering / base.py (no function)   100% 30 0 11   100% 0 0   100%
src / tracekit / triggering / edge.py EdgeTrigger.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / triggering / edge.py EdgeTrigger.find_events   100% 9 0 0   100% 4 0   100%
src / tracekit / triggering / edge.py EdgeTrigger._find_edges_simple   100% 16 0 0   100% 10 0   100%
src / tracekit / triggering / edge.py EdgeTrigger._find_edges_with_hysteresis   100% 16 0 0   100% 10 0   100%
src / tracekit / triggering / edge.py find_rising_edges   100% 7 0 0   100% 4 0   100%
src / tracekit / triggering / edge.py find_falling_edges   100% 7 0 0   100% 4 0   100%
src / tracekit / triggering / edge.py find_all_edges   100% 7 0 0   100% 2 0   100%
src / tracekit / triggering / edge.py edge_count   100% 4 0 0   100% 2 0   100%
src / tracekit / triggering / edge.py edge_rate   100% 5 0 0   100% 2 0   100%
src / tracekit / triggering / edge.py (no function)   100% 16 0 2   100% 0 0   100%
src / tracekit / triggering / pattern.py PatternTrigger.__init__   100% 6 0 0   100% 4 0   100%
src / tracekit / triggering / pattern.py PatternTrigger.find_events   100% 10 0 0   100% 4 0   100%
src / tracekit / triggering / pattern.py PatternTrigger._get_level   100% 5 0 0   100% 4 0   100%
src / tracekit / triggering / pattern.py PatternTrigger._find_sequence_matches   100% 13 0 0   100% 8 0   100%
src / tracekit / triggering / pattern.py PatternTrigger._find_exact_matches   100% 12 0 0   100% 6 0   100%
src / tracekit / triggering / pattern.py MultiChannelPatternTrigger.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / triggering / pattern.py MultiChannelPatternTrigger.find_events   96% 24 1 0   94% 16 1   95%
src / tracekit / triggering / pattern.py find_pattern   100% 5 0 0   100% 2 0   100%
src / tracekit / triggering / pattern.py find_bit_sequence   100% 11 0 0   100% 8 0   100%
src / tracekit / triggering / pattern.py (no function)   100% 18 0 2   100% 0 0   100%
src / tracekit / triggering / pulse.py PulseWidthTrigger.__init__   83% 6 1 0   50% 2 1   75%
src / tracekit / triggering / pulse.py PulseWidthTrigger.find_events   89% 9 1 0   83% 6 1   87%
src / tracekit / triggering / pulse.py PulseWidthTrigger._find_all_pulses   92% 37 3 0   79% 14 3   88%
src / tracekit / triggering / pulse.py GlitchTrigger.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / triggering / pulse.py GlitchTrigger.find_events   100% 5 0 0   100% 2 0   100%
src / tracekit / triggering / pulse.py RuntTrigger.__init__   80% 5 1 0   50% 2 1   71%
src / tracekit / triggering / pulse.py RuntTrigger.find_events   71% 35 10 0   59% 22 5   67%
src / tracekit / triggering / pulse.py RuntTrigger.find_events.get_zone   100% 5 0 0   100% 4 0   100%
src / tracekit / triggering / pulse.py find_pulses   75% 4 1 0   50% 2 1   67%
src / tracekit / triggering / pulse.py find_glitches   75% 4 1 0   50% 2 1   67%
src / tracekit / triggering / pulse.py find_runt_pulses   50% 8 4 0   50% 4 2   50%
src / tracekit / triggering / pulse.py pulse_statistics   75% 8 2 0   50% 4 2   67%
src / tracekit / triggering / pulse.py (no function)   100% 31 0 0   100% 0 0   100%
src / tracekit / triggering / window.py WindowTrigger.__init__   100% 5 0 0   100% 2 0   100%
src / tracekit / triggering / window.py WindowTrigger.find_events   100% 13 0 0   100% 10 0   100%
src / tracekit / triggering / window.py ZoneTrigger.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / triggering / window.py ZoneTrigger.find_events   100% 20 0 0   100% 16 0   100%
src / tracekit / triggering / window.py find_window_violations   100% 2 0 0   100% 0 0   100%
src / tracekit / triggering / window.py find_zone_events   100% 7 0 0   100% 4 0   100%
src / tracekit / triggering / window.py check_limits   100% 8 0 0   100% 0 0   100%
src / tracekit / triggering / window.py MaskTrigger.__init__   100% 4 0 0   100% 2 0   100%
src / tracekit / triggering / window.py MaskTrigger.find_events   100% 19 0 0   100% 10 0   100%
src / tracekit / triggering / window.py (no function)   100% 26 0 2   100% 0 0   100%
src / tracekit / ui / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / tracekit / ui / formatters.py FormattedText.__str__   100% 6 0 0   100% 4 0   100%
src / tracekit / ui / formatters.py colorize   100% 9 0 0   100% 2 0   100%
src / tracekit / ui / formatters.py truncate   100% 4 0 0   100% 2 0   100%
src / tracekit / ui / formatters.py align_text   100% 7 0 0   100% 6 0   100%
src / tracekit / ui / formatters.py format_text   100% 6 0 0   100% 4 0   100%
src / tracekit / ui / formatters.py format_table   100% 35 0 0   100% 24 0   100%
src / tracekit / ui / formatters.py format_status   100% 9 0 0   100% 2 0   100%
src / tracekit / ui / formatters.py format_percentage   100% 9 0 0   100% 4 0   100%
src / tracekit / ui / formatters.py format_duration   100% 13 0 0   100% 8 0   100%
src / tracekit / ui / formatters.py format_size   86% 7 1 0   75% 4 1   82%
src / tracekit / ui / formatters.py format_list   100% 9 0 0   100% 8 0   100%
src / tracekit / ui / formatters.py format_key_value_pairs   100% 7 0 0   100% 4 0   100%
src / tracekit / ui / formatters.py format_code_block   100% 9 0 0   100% 4 0   100%
src / tracekit / ui / formatters.py (no function)   100% 39 0 0   100% 0 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.summary   100% 1 0 0   100% 0 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.details   100% 12 0 0   100% 6 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.expert   100% 9 0 0   100% 4 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.has_level3   100% 1 0 0   100% 0 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.expand_section   100% 4 0 0   100% 4 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.collapse_section   100% 4 0 0   100% 4 0   100%
src / tracekit / ui / progressive_display.py ProgressiveOutput.export   100% 7 0 0   100% 4 0   100%
src / tracekit / ui / progressive_display.py ProgressiveDisplay.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / ui / progressive_display.py ProgressiveDisplay.render   100% 52 0 0   100% 34 0   100%
src / tracekit / ui / progressive_display.py (no function)   100% 28 0 0   100% 0 0   100%
src / tracekit / utils / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / autodetect.py detect_baud_rate   97% 29 1 0   94% 18 1   96%
src / tracekit / utils / autodetect.py _detect_via_pulse_width   94% 17 1 0   83% 6 1   91%
src / tracekit / utils / autodetect.py _detect_via_edge_timing   84% 19 3 0   62% 8 3   78%
src / tracekit / utils / autodetect.py _detect_via_autocorrelation   100% 17 0 0   100% 8 0   100%
src / tracekit / utils / autodetect.py detect_logic_family   100% 21 0 0   100% 6 0   100%
src / tracekit / utils / autodetect.py (no function)   100% 11 0 2   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.__init__   100% 7 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py CircularBuffer.capacity   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.count   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.is_empty   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.is_full   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.append   100% 4 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py CircularBuffer.extend   100% 2 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py CircularBuffer.get_last   100% 10 0 0   100% 6 0   100%
src / tracekit / utils / buffer.py CircularBuffer.get_first   100% 11 0 0   100% 6 0   100%
src / tracekit / utils / buffer.py CircularBuffer.get_all   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.__getitem__   100% 13 0 0   100% 8 0   100%
src / tracekit / utils / buffer.py CircularBuffer.__len__   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.clear   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py CircularBuffer.mean   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py CircularBuffer.std   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py CircularBuffer.min   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py CircularBuffer.max   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py SlidingWindow.__init__   100% 7 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py SlidingWindow.add   100% 5 0 0   100% 4 0   100%
src / tracekit / utils / buffer.py SlidingWindow.is_ready   100% 7 0 0   100% 4 0   100%
src / tracekit / utils / buffer.py SlidingWindow.get_data   100% 11 0 0   100% 4 0   100%
src / tracekit / utils / buffer.py SlidingWindow.get_times   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / buffer.py SlidingWindow.clear   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / buffer.py (no function)   100% 32 0 6   100% 0 0   100%
src / tracekit / utils / lazy.py LazyProxy.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py LazyProxy.compute   100% 4 0 0   100% 2 0   100%
src / tracekit / utils / lazy.py LazyProxy.is_computed   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py LazyProxy.reset   0% 2 2 0   100% 0 0   0%
src / tracekit / utils / lazy.py LazyArray.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py LazyArray._evaluate   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py LazyArray.__len__   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / lazy.py LazyArray.__getitem__   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / lazy.py LazyArray.shape   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / lazy.py LazyArray.dtype   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / lazy.py LazyOperation.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py LazyOperation._evaluate   100% 6 0 0   100% 4 0   100%
src / tracekit / utils / lazy.py lazy_operation   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py auto_preview   100% 4 0 0   100% 2 0   100%
src / tracekit / utils / lazy.py select_roi   75% 16 4 0   57% 14 6   67%
src / tracekit / utils / lazy.py ProgressiveResolution.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py ProgressiveResolution.get_preview   71% 7 2 0   25% 4 1   55%
src / tracekit / utils / lazy.py ProgressiveResolution.get_roi   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py ProgressiveResolution.sample_rate   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / lazy.py (no function)   100% 31 0 4   100% 0 0   100%
src / tracekit / utils / memory.py MemoryCheckError.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / memory.py detect_wsl   100% 6 0 0   100% 0 0   100%
src / tracekit / utils / memory.py get_total_memory   100% 3 0 10   100% 0 0   100%
src / tracekit / utils / memory.py get_available_memory   94% 16 1 14   83% 6 1   91%
src / tracekit / utils / memory.py get_swap_available   100% 3 0 10   100% 0 0   100%
src / tracekit / utils / memory.py get_memory_pressure   100% 3 0 4   100% 0 0   100%
src / tracekit / utils / memory.py estimate_memory   100% 43 0 0   100% 12 0   100%
src / tracekit / utils / memory.py check_memory_available   92% 12 1 0   83% 6 1   89%
src / tracekit / utils / memory.py require_memory   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / memory.py _next_power_of_2   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / memory.py set_max_memory   92% 13 1 0   90% 10 1   91%
src / tracekit / utils / memory.py get_max_memory   100% 8 0 0   83% 6 1   93%
src / tracekit / utils / memory.py gc_collect   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory.py get_memory_info   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory.py MemoryConfig.__post_init__   100% 6 0 0   100% 6 0   100%
src / tracekit / utils / memory.py configure_memory   83% 18 3 0   81% 16 1   82%
src / tracekit / utils / memory.py get_memory_config   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory.py suggest_downsampling   100% 12 0 0   100% 2 0   100%
src / tracekit / utils / memory.py MemoryMonitor.__init__   94% 16 1 0   88% 8 1   92%
src / tracekit / utils / memory.py MemoryMonitor.__enter__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / memory.py MemoryMonitor.__exit__   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory.py MemoryMonitor.check   89% 9 1 0   75% 4 1   85%
src / tracekit / utils / memory.py MemoryMonitor._get_process_memory   100% 4 0 2   100% 0 0   100%
src / tracekit / utils / memory.py MemoryMonitor.get_stats   100% 1 0 1   100% 0 0   100%
src / tracekit / utils / memory.py ProgressInfo.percent   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / memory.py ProgressInfo.format_progress   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory.py (no function)   100% 73 0 2   100% 0 0   100%
src / tracekit / utils / memory_advanced.py QualityModeConfig.for_mode   86% 7 1 0   83% 6 1   85%
src / tracekit / utils / memory_advanced.py set_quality_mode   100% 4 0 0   50% 2 1   83%
src / tracekit / utils / memory_advanced.py get_quality_mode   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py get_quality_config   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py GCController.__init__   100% 3 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py GCController.aggressive   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py GCController.aggressive   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py GCController.collect   86% 7 1 0   50% 2 1   78%
src / tracekit / utils / memory_advanced.py GCController.collect_after_operation   0% 3 3 0   0% 2 0   0%
src / tracekit / utils / memory_advanced.py GCController.get_stats   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py gc_aggressive   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py force_gc   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py WSLSwapChecker.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py WSLSwapChecker._detect_wsl   67% 6 2 0   100% 0 0   67%
src / tracekit / utils / memory_advanced.py WSLSwapChecker.is_wsl   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py WSLSwapChecker.get_wsl_memory_limit   11% 19 17 0   8% 12 1   10%
src / tracekit / utils / memory_advanced.py WSLSwapChecker.get_wsl_swap_limit   40% 5 3 0   25% 4 1   33%
src / tracekit / utils / memory_advanced.py WSLSwapChecker._parse_size   0% 7 7 0   0% 4 0   0%
src / tracekit / utils / memory_advanced.py WSLSwapChecker.get_safe_memory   30% 10 7 0   25% 4 1   29%
src / tracekit / utils / memory_advanced.py get_wsl_memory_limits   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MemoryLogger.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MemoryLogger.enable   100% 6 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MemoryLogger.disable   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MemoryLogger.log_operation   89% 9 1 0   50% 2 1   82%
src / tracekit / utils / memory_advanced.py MemoryLogger.flush   75% 8 2 0   50% 4 2   67%
src / tracekit / utils / memory_advanced.py MemoryLogger._write_csv   89% 9 1 0   75% 4 1   85%
src / tracekit / utils / memory_advanced.py MemoryLogger._write_json   0% 4 4 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py MemoryLogger.get_summary   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py AdaptiveMeasurementSelector.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py AdaptiveMeasurementSelector.is_enabled   100% 4 0 0   100% 2 0   100%
src / tracekit / utils / memory_advanced.py AdaptiveMeasurementSelector.get_recommendations   100% 11 0 0   90% 10 1   95%
src / tracekit / utils / memory_advanced.py adaptive_measurements   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py CacheEntry.is_expired   67% 3 1 0   50% 2 1   60%
src / tracekit / utils / memory_advanced.py CacheEntry.age_seconds   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy._compute_hash   40% 5 3 0   25% 4 1   33%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.get   68% 25 8 0   67% 12 2   68%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.set   80% 5 1 0   50% 2 1   71%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.invalidate   80% 5 1 0   50% 2 1   71%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.invalidate_by_source   0% 8 8 0   0% 2 0   0%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.clear   0% 4 4 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.cleanup_expired   0% 7 7 0   0% 2 0   0%
src / tracekit / utils / memory_advanced.py CacheInvalidationStrategy.get_stats   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py DiskCache.__init__   100% 8 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py DiskCache._get_cache_path   0% 2 2 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py DiskCache._estimate_size   100% 3 0 0   100% 2 0   100%
src / tracekit / utils / memory_advanced.py DiskCache.get   24% 21 16 0   12% 8 1   21%
src / tracekit / utils / memory_advanced.py DiskCache._add_to_memory   57% 7 3 0   50% 2 1   56%
src / tracekit / utils / memory_advanced.py DiskCache._write_to_disk   0% 7 7 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py DiskCache._cleanup_disk   0% 11 11 0   0% 6 0   0%
src / tracekit / utils / memory_advanced.py DiskCache.set   75% 4 1 0   50% 2 1   67%
src / tracekit / utils / memory_advanced.py DiskCache.clear   67% 6 2 0   50% 2 1   62%
src / tracekit / utils / memory_advanced.py BackpressureController.__init__   100% 7 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py BackpressureController.is_paused   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py BackpressureController.buffer_usage   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py BackpressureController.dropped_count   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py BackpressureController.push   83% 12 2 0   83% 6 1   83%
src / tracekit / utils / memory_advanced.py BackpressureController.pop   83% 6 1 0   50% 2 1   75%
src / tracekit / utils / memory_advanced.py BackpressureController.pop_all   100% 5 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py BackpressureController.signal_backpressure   0% 2 2 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py BackpressureController.get_stats   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MultiChannelMemoryManager.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MultiChannelMemoryManager.estimate_channel_memory   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MultiChannelMemoryManager.can_load_all   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_advanced.py MultiChannelMemoryManager.get_channel_batches   100% 6 0 0   100% 2 0   100%
src / tracekit / utils / memory_advanced.py MultiChannelMemoryManager.suggest_subset   83% 6 1 0   50% 2 1   75%
src / tracekit / utils / memory_advanced.py MultiChannelMemoryManager.iterate_channels   0% 2 2 0   100% 0 0   0%
src / tracekit / utils / memory_advanced.py (no function)   100% 134 0 2   100% 0 0   100%
src / tracekit / utils / memory_extensions.py ResourceManager.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py ResourceManager.__enter__   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py ResourceManager.__exit__   100% 4 0 0   50% 2 1   83%
src / tracekit / utils / memory_extensions.py ArrayManager.__init__   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py LRUCache.__init__   100% 6 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py LRUCache.get   100% 7 0 0   100% 2 0   100%
src / tracekit / utils / memory_extensions.py LRUCache.put   73% 11 3 0   75% 8 2   74%
src / tracekit / utils / memory_extensions.py LRUCache._evict_oldest   100% 3 0 0   50% 2 1   80%
src / tracekit / utils / memory_extensions.py LRUCache.clear   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py LRUCache._estimate_size   29% 7 5 0   17% 6 1   23%
src / tracekit / utils / memory_extensions.py LRUCache.stats   100% 3 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py LRUCache.__len__   0% 1 1 0   100% 0 0   0%
src / tracekit / utils / memory_extensions.py get_result_cache   100% 4 0 0   100% 2 0   100%
src / tracekit / utils / memory_extensions.py clear_cache   100% 2 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py show_cache_stats   0% 2 2 0   100% 0 0   0%
src / tracekit / utils / memory_extensions.py cache_key   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py load_hdf5_lazy   0% 13 13 2   0% 4 0   0%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.__enter__   100% 5 0 2   100% 0 0   100%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.__exit__   100% 4 0 0   50% 2 1   83%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.__getitem__   67% 3 1 0   50% 2 1   60%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.shape   67% 3 1 0   50% 2 1   60%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.dtype   67% 3 1 0   50% 2 1   60%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.size   0% 3 3 0   0% 2 0   0%
src / tracekit / utils / memory_extensions.py LazyHDF5Array.__len__   0% 3 3 0   0% 2 0   0%
src / tracekit / utils / memory_extensions.py (no function)   100% 43 0 4   100% 0 0   100%
src / tracekit / utils / progressive.py create_preview   100% 19 0 0   100% 4 0   100%
src / tracekit / utils / progressive.py select_roi   100% 14 0 0   100% 4 0   100%
src / tracekit / utils / progressive.py analyze_roi   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / progressive.py progressive_analysis   100% 6 0 1   100% 2 0   100%
src / tracekit / utils / progressive.py estimate_optimal_preview_factor   100% 4 0 0   100% 0 0   100%
src / tracekit / utils / progressive.py (no function)   100% 27 0 4   100% 0 0   100%
src / tracekit / utils / windowing.py rectangular   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py hann   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py hamming   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py blackman   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py kaiser   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py flattop   100% 8 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py bartlett   100% 1 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py blackman_harris   100% 7 0 0   100% 0 0   100%
src / tracekit / utils / windowing.py get_window   100% 13 0 0   100% 10 0   100%
src / tracekit / utils / windowing.py window_properties   100% 10 0 0   100% 2 0   100%
src / tracekit / utils / windowing.py (no function)   100% 18 0 2   100% 0 0   100%
src / tracekit / visualization / __init__.py (no function)   100% 25 0 0   100% 0 0   100%
src / tracekit / visualization / accessibility.py get_colorblind_palette   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py get_multi_line_styles   100% 8 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py format_pass_fail   100% 11 0 0   100% 4 0   100%
src / tracekit / visualization / accessibility.py generate_alt_text   100% 26 0 0   100% 20 0   100%
src / tracekit / visualization / accessibility.py add_plot_aria_attributes   100% 6 0 0   100% 4 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler.__init__   100% 9 0 0   100% 0 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler.enable   100% 3 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler.disable   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler._on_key_press   100% 18 0 0   100% 20 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler._move_cursor   100% 8 0 0   100% 4 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler._update_cursor   100% 5 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler._zoom   100% 9 0 0   100% 0 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler._jump_to_start   100% 5 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py KeyboardHandler._jump_to_end   100% 5 0 0   100% 2 0   100%
src / tracekit / visualization / accessibility.py (no function)   100% 23 0 5   100% 0 0   100%
src / tracekit / visualization / annotations.py Annotation.__post_init__   100% 2 0 0   100% 2 0   100%
src / tracekit / visualization / annotations.py place_annotations   100% 31 0 0   100% 24 0   100%
src / tracekit / visualization / annotations.py _check_collision   100% 5 0 0   100% 0 0   100%
src / tracekit / visualization / annotations.py _move_annotation   95% 19 1 0   75% 4 1   91%
src / tracekit / visualization / annotations.py _generate_leader_line   100% 8 0 0   100% 2 0   100%
src / tracekit / visualization / annotations.py filter_by_zoom_level   100% 10 0 0   100% 4 0   100%
src / tracekit / visualization / annotations.py create_priority_annotation   100% 3 0 0   100% 0 0   100%
src / tracekit / visualization / annotations.py (no function)   100% 29 0 0   100% 0 0   100%
src / tracekit / visualization / axis_scaling.py calculate_axis_limits   100% 26 0 0   100% 10 0   100%
src / tracekit / visualization / axis_scaling.py calculate_multi_channel_limits   96% 25 1 0   93% 14 1   95%
src / tracekit / visualization / axis_scaling.py _round_to_nice_number   100% 22 0 0   92% 12 1   97%
src / tracekit / visualization / axis_scaling.py suggest_tick_spacing   100% 13 0 0   100% 8 0   100%
src / tracekit / visualization / axis_scaling.py (no function)   100% 8 0 2   100% 0 0   100%
src / tracekit / visualization / colors.py select_optimal_palette   89% 27 3 0   83% 18 3   87%
src / tracekit / visualization / colors.py _auto_select_palette_type   100% 7 0 0   100% 6 0   100%
src / tracekit / visualization / colors.py _relative_luminance   100% 9 0 0   100% 0 0   100%
src / tracekit / visualization / colors.py _relative_luminance.to_linear   100% 3 0 0   100% 2 0   100%
src / tracekit / visualization / colors.py _contrast_ratio   100% 3 0 0   100% 0 0   100%
src / tracekit / visualization / colors.py _adjust_for_contrast   73% 30 8 0   50% 10 3   68%
src / tracekit / visualization / colors.py _rgb_to_hsl   100% 17 0 0   100% 6 0   100%
src / tracekit / visualization / colors.py _hsl_to_rgb   100% 11 0 0   100% 2 0   100%
src / tracekit / visualization / colors.py _hsl_to_rgb.hue_to_rgb   100% 11 0 0   100% 10 0   100%
src / tracekit / visualization / colors.py _generate_qualitative   0% 6 6 0   0% 2 0   0%
src / tracekit / visualization / colors.py _interpolate_colors   0% 19 19 0   0% 8 0   0%
src / tracekit / visualization / colors.py (no function)   100% 16 0 0   100% 0 0   100%
src / tracekit / visualization / digital.py plot_timing   93% 60 4 0   87% 38 5   91%
src / tracekit / visualization / digital.py _add_protocol_annotations   0% 22 22 0   0% 14 0   0%
src / tracekit / visualization / digital.py plot_logic_analyzer   75% 8 2 0   67% 6 2   71%
src / tracekit / visualization / digital.py (no function)   100% 12 0 7   100% 0 0   100%
src / tracekit / visualization / eye.py plot_eye   90% 58 6 0   76% 34 6   85%
src / tracekit / visualization / eye.py _calculate_eye_metrics   93% 30 2 0   62% 8 3   87%
src / tracekit / visualization / eye.py _add_eye_measurements   100% 12 0 0   50% 10 5   77%
src / tracekit / visualization / eye.py plot_bathtub   77% 22 5 0   50% 8 2   70%
src / tracekit / visualization / eye.py (no function)   100% 13 0 7   100% 0 0   100%
src / tracekit / visualization / histogram.py calculate_optimal_bins   95% 20 1 0   94% 16 1   94%
src / tracekit / visualization / histogram.py calculate_bin_edges   77% 13 3 0   62% 8 3   71%
src / tracekit / visualization / histogram.py _sturges_bins   100% 3 0 0   100% 0 0   100%
src / tracekit / visualization / histogram.py _freedman_diaconis_bins   91% 11 1 0   75% 4 1   87%
src / tracekit / visualization / histogram.py _scott_bins   80% 10 2 0   50% 4 2   71%
src / tracekit / visualization / histogram.py _auto_select_method   91% 11 1 0   83% 6 1   88%
src / tracekit / visualization / histogram.py (no function)   100% 10 0 2   100% 0 0   100%
src / tracekit / visualization / interactive.py enable_zoom_pan   100% 18 0 0   100% 6 0   100%
src / tracekit / visualization / interactive.py enable_zoom_pan.on_scroll   100% 25 0 0   100% 8 0   100%
src / tracekit / visualization / interactive.py enable_zoom_pan.on_press   100% 6 0 0   100% 4 0   100%
src / tracekit / visualization / interactive.py enable_zoom_pan.on_release   100% 1 0 0   100% 0 0   100%
src / tracekit / visualization / interactive.py enable_zoom_pan.on_motion   95% 19 1 0   88% 8 1   93%
src / tracekit / visualization / interactive.py plot_with_cursors   100% 25 0 0   100% 14 0   100%
src / tracekit / visualization / interactive.py add_measurement_cursors   100% 7 0 0   100% 2 0   100%
src / tracekit / visualization / interactive.py add_measurement_cursors.onselect   100% 13 0 0   50% 4 2   88%
src / tracekit / visualization / interactive.py add_measurement_cursors.get_measurement   100% 11 0 0   100% 2 0   100%
src / tracekit / visualization / interactive.py plot_phase   100% 26 0 0   100% 10 0   100%
src / tracekit / visualization / interactive.py plot_bode   100% 39 0 0   100% 16 0   100%
src / tracekit / visualization / interactive.py plot_waterfall   92% 38 3 0   85% 20 3   90%
src / tracekit / visualization / interactive.py plot_histogram   100% 40 0 0   100% 14 0   100%
src / tracekit / visualization / interactive.py (no function)   100% 35 0 7   100% 0 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator.__init__   100% 10 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator.connect   100% 2 0 0   100% 0 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator.disconnect   100% 3 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._on_key   100% 25 0 0   100% 22 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._pan   100% 8 0 0   100% 0 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._zoom   100% 8 0 0   100% 0 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._reset_view   100% 4 0 0   100% 0 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._cycle_axes   100% 7 0 0   100% 4 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._highlight_active_axes   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._unhighlight_axes   100% 3 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._show_help   100% 5 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py KeyboardNavigator._hide_help   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py enable_keyboard_navigation   100% 5 0 0   100% 2 0   100%
src / tracekit / visualization / keyboard.py (no function)   100% 18 0 4   100% 0 0   100%
src / tracekit / visualization / layout.py layout_stacked_channels   100% 20 0 0   100% 8 0   100%
src / tracekit / visualization / layout.py optimize_annotation_placement   90% 51 5 0   88% 24 3   89%
src / tracekit / visualization / layout.py _generate_leader_line   0% 8 8 0   0% 2 0   0%
src / tracekit / visualization / layout.py (no function)   100% 32 0 2   100% 0 0   100%
src / tracekit / visualization / optimization.py calculate_optimal_y_range   89% 38 4 0   79% 14 3   87%
src / tracekit / visualization / optimization.py calculate_optimal_x_window   66% 35 12 0   50% 14 5   61%
src / tracekit / visualization / optimization.py calculate_grid_spacing   93% 27 2 0   92% 12 1   92%
src / tracekit / visualization / optimization.py _calculate_nice_number   67% 12 4 0   50% 8 2   60%
src / tracekit / visualization / optimization.py optimize_db_range   94% 16 1 0   88% 8 1   92%
src / tracekit / visualization / optimization.py decimate_for_display   82% 17 3 0   79% 14 3   81%
src / tracekit / visualization / optimization.py _decimate_minmax   100% 15 0 0   83% 6 1   95%
src / tracekit / visualization / optimization.py _decimate_lttb   91% 33 3 0   80% 10 2   88%
src / tracekit / visualization / optimization.py detect_interesting_regions   95% 19 1 0   83% 6 1   92%
src / tracekit / visualization / optimization.py _detect_edges   100% 25 0 0   90% 10 1   97%
src / tracekit / visualization / optimization.py _detect_glitches   95% 20 1 0   88% 8 1   93%
src / tracekit / visualization / optimization.py _detect_anomalies   85% 26 4 0   90% 10 1   86%
src / tracekit / visualization / optimization.py _detect_pattern_changes   90% 20 2 0   80% 10 2   87%
src / tracekit / visualization / optimization.py (no function)   100% 28 0 2   100% 0 0   100%
src / tracekit / visualization / palettes.py get_palette   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / palettes.py get_colormap   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / palettes.py get_line_styles   100% 7 0 0   100% 2 0   100%
src / tracekit / visualization / palettes.py get_pass_fail_symbols   100% 1 0 0   100% 0 0   100%
src / tracekit / visualization / palettes.py get_pass_fail_colors   100% 3 0 0   100% 2 0   100%
src / tracekit / visualization / palettes.py show_palette   100% 27 0 0   100% 6 0   100%
src / tracekit / visualization / palettes.py create_custom_palette   100% 9 0 0   100% 4 0   100%
src / tracekit / visualization / palettes.py simulate_colorblindness   100% 20 0 0   100% 6 0   100%
src / tracekit / visualization / palettes.py (no function)   100% 17 0 2   100% 0 0   100%
src / tracekit / visualization / plot.py plot_trace   0% 1 1 0   100% 0 0   0%
src / tracekit / visualization / plot.py add_annotation   0% 3 3 0   100% 0 0   0%
src / tracekit / visualization / plot.py (no function)   100% 10 0 2   100% 0 0   100%
src / tracekit / visualization / power.py plot_power_profile   98% 100 2 0   89% 54 6   95%
src / tracekit / visualization / power.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / visualization / presets.py apply_preset   100% 12 0 0   100% 8 0   100%
src / tracekit / visualization / presets.py get_preset_colors   100% 11 0 0   100% 8 0   100%
src / tracekit / visualization / presets.py list_presets   100% 1 0 0   100% 0 0   100%
src / tracekit / visualization / presets.py create_custom_preset   100% 5 0 0   100% 2 0   100%
src / tracekit / visualization / presets.py (no function)   100% 31 0 4   100% 0 0   100%
src / tracekit / visualization / render.py configure_dpi_rendering   100% 29 0 0   100% 10 0   100%
src / tracekit / visualization / render.py apply_rendering_config   0% 3 3 2   100% 0 0   0%
src / tracekit / visualization / render.py (no function)   100% 6 0 0   100% 0 0   100%
src / tracekit / visualization / rendering.py render_with_lod   100% 14 0 0   100% 12 0   100%
src / tracekit / visualization / rendering.py _decimate_uniform   100% 4 0 0   100% 0 0   100%
src / tracekit / visualization / rendering.py _decimate_minmax_envelope   89% 18 2 0   75% 8 2   85%
src / tracekit / visualization / rendering.py _decimate_lttb   90% 31 3 0   80% 10 2   88%
src / tracekit / visualization / rendering.py progressive_render   100% 10 0 0   100% 4 0   100%
src / tracekit / visualization / rendering.py estimate_memory_usage   100% 9 0 0   100% 6 0   100%
src / tracekit / visualization / rendering.py downsample_for_memory   100% 6 0 0   100% 2 0   100%
src / tracekit / visualization / rendering.py StreamingRenderer.__init__   100% 4 0 0   100% 0 0   100%
src / tracekit / visualization / rendering.py StreamingRenderer.append   100% 4 0 0   100% 2 0   100%
src / tracekit / visualization / rendering.py StreamingRenderer._decimate_buffer   100% 5 0 0   100% 0 0   100%
src / tracekit / visualization / rendering.py StreamingRenderer.get_render_data   100% 1 0 0   100% 0 0   100%
src / tracekit / visualization / rendering.py StreamingRenderer.clear   100% 2 0 0   100% 0 0   100%
src / tracekit / visualization / rendering.py (no function)   100% 17 0 2   100% 0 0   100%
src / tracekit / visualization / specialized.py plot_protocol_timing   98% 52 1 0   97% 30 1   98%
src / tracekit / visualization / specialized.py _plot_wavedrom_signal   100% 21 0 0   83% 18 3   92%
src / tracekit / visualization / specialized.py _plot_classic_signal   100% 2 0 0   100% 0 0   100%
src / tracekit / visualization / specialized.py plot_state_machine   98% 46 1 0   94% 18 1   97%
src / tracekit / visualization / specialized.py _calculate_state_positions   100% 23 0 0   100% 10 0   100%
src / tracekit / visualization / specialized.py _draw_self_loop   100% 5 0 0   50% 2 1   86%
src / tracekit / visualization / specialized.py (no function)   100% 28 0 6   100% 0 0   100%
src / tracekit / visualization / spectral.py plot_spectrum   100% 54 0 0   100% 36 0   100%
src / tracekit / visualization / spectral.py plot_spectrogram   100% 56 0 0   97% 36 1   99%
src / tracekit / visualization / spectral.py plot_psd   100% 33 0 0   94% 18 1   98%
src / tracekit / visualization / spectral.py plot_fft   100% 27 0 0   100% 20 0   100%
src / tracekit / visualization / spectral.py (no function)   100% 12 0 6   100% 0 0   100%
src / tracekit / visualization / styles.py apply_style_preset   92% 12 1 0   88% 8 1   90%
src / tracekit / visualization / styles.py _preset_to_rcparams   80% 5 1 0   50% 2 1   71%
src / tracekit / visualization / styles.py create_custom_preset   80% 5 1 0   50% 2 1   71%
src / tracekit / visualization / styles.py register_preset   100% 1 0 0   100% 0 0   100%
src / tracekit / visualization / styles.py list_presets   100% 1 0 0   100% 0 0   100%
src / tracekit / visualization / styles.py (no function)   100% 36 0 4   100% 0 0   100%
src / tracekit / visualization / thumbnails.py render_thumbnail   88% 41 5 0   75% 24 6   83%
src / tracekit / visualization / thumbnails.py _decimate_uniform   100% 6 0 0   100% 2 0   100%
src / tracekit / visualization / thumbnails.py render_thumbnail_multichannel   76% 41 10 0   58% 26 11   69%
src / tracekit / visualization / thumbnails.py (no function)   100% 11 0 5   100% 0 0   100%
src / tracekit / visualization / time_axis.py select_time_unit   100% 9 0 0   100% 8 0   100%
src / tracekit / visualization / time_axis.py convert_time_values   100% 7 0 0   100% 4 0   100%
src / tracekit / visualization / time_axis.py format_time_labels   100% 13 0 0   100% 8 0   100%
src / tracekit / visualization / time_axis.py create_relative_time   100% 5 0 0   100% 4 0   100%
src / tracekit / visualization / time_axis.py calculate_major_ticks   100% 18 0 0   100% 4 0   100%
src / tracekit / visualization / time_axis.py _round_to_nice_time   100% 12 0 0   100% 4 0   100%
src / tracekit / visualization / time_axis.py format_cursor_readout   100% 9 0 0   100% 4 0   100%
src / tracekit / visualization / time_axis.py (no function)   100% 12 0 2   100% 0 0   100%
src / tracekit / visualization / waveform.py plot_waveform   100% 42 0 0   100% 30 0   100%
src / tracekit / visualization / waveform.py plot_multi_channel   100% 43 0 0   100% 28 0   100%
src / tracekit / visualization / waveform.py plot_xy   100% 22 0 0   100% 8 0   100%
src / tracekit / visualization / waveform.py _add_measurement_annotations   100% 12 0 0   100% 10 0   100%
src / tracekit / visualization / waveform.py (no function)   100% 12 0 6   100% 0 0   100%
src / tracekit / workflow / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.__init__   100% 2 0 0   100% 0 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.add_task   100% 15 0 0   100% 12 0   100%
src / tracekit / workflow / dag.py WorkflowDAG._has_cycle   100% 4 0 0   100% 0 0   100%
src / tracekit / workflow / dag.py WorkflowDAG._has_cycle.dfs   100% 10 0 0   100% 8 0   100%
src / tracekit / workflow / dag.py WorkflowDAG._topological_sort   100% 16 0 0   100% 10 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.execute   100% 9 0 0   100% 6 0   100%
src / tracekit / workflow / dag.py WorkflowDAG._execute_level_sequential   100% 11 0 0   100% 4 0   100%
src / tracekit / workflow / dag.py WorkflowDAG._execute_level_parallel   100% 14 0 0   100% 4 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.get_result   100% 6 0 0   100% 4 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.reset   100% 3 0 0   100% 2 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.to_graphviz   100% 11 0 0   100% 6 0   100%
src / tracekit / workflow / dag.py WorkflowDAG.__str__   100% 6 0 0   100% 2 0   100%
src / tracekit / workflow / dag.py (no function)   100% 26 0 3   100% 0 0   100%
src / tracekit / workflows / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / tracekit / workflows / compliance.py emc_compliance_test   100% 26 0 0   100% 8 0   100%
src / tracekit / workflows / compliance.py _load_emc_mask   100% 5 0 0   100% 2 0   100%
src / tracekit / workflows / compliance.py _generate_compliance_report   100% 10 0 0   100% 4 0   100%
src / tracekit / workflows / compliance.py (no function)   100% 8 0 2   100% 0 0   100%
src / tracekit / workflows / digital.py characterize_buffer   100% 53 0 0   100% 22 0   100%
src / tracekit / workflows / digital.py _get_logic_specs   100% 2 0 0   100% 0 0   100%
src / tracekit / workflows / digital.py _generate_buffer_report   100% 3 0 0   100% 0 0   100%
src / tracekit / workflows / digital.py (no function)   100% 8 0 2   100% 0 0   100%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow.__init__   0% 11 11 0   0% 4 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._discover_files   0% 7 7 0   0% 4 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._load_trace   0% 14 14 0   0% 6 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._iter_traces   0% 11 11 0   0% 8 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow.align   0% 10 10 0   0% 8 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._align_by_trigger   0% 12 12 0   0% 8 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._align_by_time   0% 2 2 0   0% 2 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._align_by_correlation   0% 2 2 0   0% 2 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._align_manual   0% 4 4 0   0% 2 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow.measure   0% 5 5 0   0% 4 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._measure_sequential   0% 11 11 0   0% 4 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._measure_parallel   0% 12 12 0   0% 4 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._measure_trace   0% 7 7 0   0% 2 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._perform_measurement   0% 1 1 0   100% 0 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow.aggregate   0% 14 14 0   0% 12 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow.export_report   0% 7 7 0   0% 6 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._export_json   0% 4 4 0   100% 0 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._export_pdf   0% 1 1 0   100% 0 0   0%
src / tracekit / workflows / multi_trace.py MultiTraceWorkflow._export_html   0% 1 1 0   100% 0 0   0%
src / tracekit / workflows / multi_trace.py load_all   0% 4 4 0   0% 2 0   0%
src / tracekit / workflows / multi_trace.py (no function)   100% 49 0 0   100% 0 0   100%
src / tracekit / workflows / power.py power_analysis   100% 22 0 0   100% 8 0   100%
src / tracekit / workflows / power.py _generate_power_report   100% 6 0 0   100% 2 0   100%
src / tracekit / workflows / power.py (no function)   100% 7 0 2   100% 0 0   100%
src / tracekit / workflows / protocol.py debug_protocol   100% 28 0 0   100% 12 0   100%
src / tracekit / workflows / protocol.py _to_digital   100% 6 0 0   100% 2 0   100%
src / tracekit / workflows / protocol.py _get_default_protocol_config   100% 2 0 0   100% 0 0   100%
src / tracekit / workflows / protocol.py _extract_context   100% 9 0 0   100% 4 0   100%
src / tracekit / workflows / protocol.py _decode_uart   100% 20 0 0   100% 8 0   100%
src / tracekit / workflows / protocol.py _decode_spi   95% 22 1 0   88% 8 1   93%
src / tracekit / workflows / protocol.py _decode_i2c   96% 26 1 0   93% 14 1   95%
src / tracekit / workflows / protocol.py _decode_can   95% 19 1 0   88% 8 1   93%
src / tracekit / workflows / protocol.py (no function)   100% 14 0 0   100% 0 0   100%
src / tracekit / workflows / signal_integrity.py signal_integrity_audit   100% 44 0 6   100% 12 0   100%
src / tracekit / workflows / signal_integrity.py _generate_si_report   100% 3 0 0   100% 0 0   100%
src / tracekit / workflows / signal_integrity.py (no function)   100% 6 0 2   100% 0 0   100%
Total     86% 51811 7061 1244   77% 19250 1924   84%

No items found using the specified filter.

43 empty functions skipped.