<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="1" tests="76" time="2.806" timestamp="2026-04-26T19:43:55.214347+08:00" hostname="HenryLin-SFP7"><testcase classname="tests.src.core.math.test_golden_precision.TestCoreMathGoldenPrecision" name="test_consecutive_down_weeks_baseline" time="0.003" /><testcase classname="tests.src.core.math.test_golden_precision.TestCoreMathGoldenPrecision" name="test_consecutive_down_weeks_nan_defense" time="0.001" /><testcase classname="tests.src.core.math.test_golden_precision.TestCoreMathGoldenPrecision" name="test_calmar_ratio_baseline" time="0.002" /><testcase classname="tests.src.core.math.test_golden_precision.TestCoreMathGoldenPrecision" name="test_early_return_for_empty_array" time="0.001" /><testcase classname="tests.src.core.math.test_golden_precision.TestCoreMathGoldenPrecision" name="test_early_return_for_shorter_than_window" time="0.001" /><testcase classname="tests.src.core.math.test_golden_precision.TestCoreMathGoldenPrecision" name="test_all_nan_input_isolation" time="0.001" /><testcase classname="tests.src.core.math.test_zscore.TestStandardizationMath" name="test_normal_zscore_broadcasting" time="0.001" /><testcase classname="tests.src.core.math.test_zscore.TestStandardizationMath" name="test_ieee754_division_by_zero_intercept" time="0.001" /><testcase classname="tests.src.core.math.test_zscore.TestStandardizationMath" name="test_mad_clip_functionality" time="0.001" /><testcase classname="tests.src.core.sql.test_aligner.TestDuckDBTimeAligner" name="test_output_contains_math_anchor" time="0.001" /><testcase classname="tests.src.core.sql.test_aligner.TestDuckDBTimeAligner" name="test_output_contains_bigint_cast" time="0.002" /><testcase classname="tests.src.core.sql.test_aligner.TestDuckDBTimeAligner" name="test_output_bans_stateful_functions" time="0.001" /><testcase classname="tests.src.core.sql.test_aligner.TestDuckDBTimeAligner" name="test_input_col_interpolated" time="0.001" /><testcase classname="tests.src.core.storage.test_contract" name="test_sink_parquet_injects_strict_params" time="0.005" /><testcase classname="tests.src.core.stream.test_engine" name="test_stream_engine_normal_flow" time="0.003" /><testcase classname="tests.src.core.stream.test_engine" name="test_stream_engine_memory_limit_triggered" time="0.003" /><testcase classname="tests.src.core.test_config_loader" name="test_load_valid_config" time="0.015" /><testcase classname="tests.src.core.test_config_loader" name="test_load_missing_file" time="0.003" /><testcase classname="tests.src.core.test_config_loader" name="test_load_empty_whitelist_triggered" time="0.008" /><testcase classname="tests.src.core.test_config_loader" name="test_load_invalid_spearman_mode" time="0.006" /><testcase classname="tests.src.core.test_config_loader" name="test_load_missing_required_field" time="0.008" /><testcase classname="tests.src.core.test_constants.TestPhysicalConstants" name="test_time_alignment_constants" time="0.001" /><testcase classname="tests.src.core.test_constants.TestPhysicalConstants" name="test_storage_contract_constants" time="0.001" /><testcase classname="tests.src.core.test_constants.TestPhysicalConstants" name="test_label_math_bounds" time="0.001" /><testcase classname="tests.src.core.test_schema_symmetry" name="test_s2_s3_s4_schema_symmetry" time="0.001"><skipped type="pytest.skip" message="等待 S2/S3/S4 业务骨架就绪后解除封印">C:\Users\huaru\project\pers_website\pers-website-fund-selection-system\tests\src\core\test_schema_symmetry.py:10: 等待 S2/S3/S4 业务骨架就绪后解除封印</skipped></testcase><testcase classname="tests.src.core.test_telemetry.TestProfileStep" name="test_preserves_return_value" time="0.001" /><testcase classname="tests.src.core.test_telemetry.TestProfileStep" name="test_json_output_to_stderr_only" time="0.002" /><testcase classname="tests.src.core.test_telemetry.TestProfileStep" name="test_json_structure_completeness" time="0.001" /><testcase classname="tests.src.core.test_telemetry.TestProfileStep" name="test_duration_sec_non_negative" time="0.001" /><testcase classname="tests.src.core.test_telemetry.TestProfileStep" name="test_peak_rss_mb_equals_max_of_start_and_end" time="0.001" /><testcase classname="tests.src.pipelines.s2.test_step_1_1.TestTranscodeCsvToParquet" name="test_polars_forces_utf8_and_date" time="0.015" /><testcase classname="tests.src.pipelines.s2.test_step_1_1.TestTranscodeCsvToParquet" name="test_net_value_forces_float64" time="0.007" /><testcase classname="tests.src.pipelines.s2.test_step_1_1.TestExecuteStep1_1" name="test_d1_whitelist_blocks_invalid_funds" time="0.043" /><testcase classname="tests.src.pipelines.s2.test_step_1_1.TestExecuteStep1_1" name="test_math_aligned_monday_and_max_value" time="0.041" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutBasic" name="test_no_gap_single_segment" time="0.011" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutBasic" name="test_long_gap_triggers_cut" time="0.010" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutBoundary" name="test_gap_exactly_5_no_cut" time="0.010" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutBoundary" name="test_gap_exactly_6_cuts" time="0.008" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutMultiFund" name="test_multiple_funds_independent_segments" time="0.011" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutMultiFund" name="test_single_row_fund" time="0.009" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutSchemaAssertion" name="test_invalid_column_name_raises" time="0.007" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutSchemaAssertion" name="test_invalid_column_type_raises" time="0.008" /><testcase classname="tests.src.pipelines.s2.test_step_1_2.TestSegmentCutDataIntegrity" name="test_zero_rows_dropped" time="0.008" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationBasic" name="test_no_missing_weeks_first_return_is_null" time="0.008" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationBasic" name="test_single_missing_week_filled_and_nullified" time="0.005" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationDefense" name="test_first_row_null_silently_discarded" time="0.006" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationDefense" name="test_nan_mid_segment_triggers_cut" time="0.006" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationDefense" name="test_non_positive_nv_triggers_cut" time="0.006" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationDefense" name="test_phantom_zero_return_physically_blocked" time="0.007" /><testcase classname="tests.src.pipelines.s2.test_step_1_3.TestSegmentImputationIsolation" name="test_multi_segment_no_cross_contamination" time="0.006" /><testcase classname="tests.src.pipelines.s2.test_step_1_4.TestYearlyPartitionWriterBasic" name="test_single_year_writes_one_file" time="0.008" /><testcase classname="tests.src.pipelines.s2.test_step_1_4.TestYearlyPartitionWriterBasic" name="test_multi_year_creates_correct_partitions" time="0.015" /><testcase classname="tests.src.pipelines.s2.test_step_1_4.TestYearlyPartitionWriterBasic" name="test_partition_preserves_all_rows" time="0.014" /><testcase classname="tests.src.pipelines.s2.test_step_1_4.TestYearlyPartitionWriterBasic" name="test_output_schema_matches_contract" time="0.007" /><testcase classname="tests.src.pipelines.s2.test_step_1_4.TestSchemaSymmetryGuard" name="test_missing_column_raises" time="0.006" /><testcase classname="tests.src.pipelines.s2.test_step_1_4.TestSchemaSymmetryGuard" name="test_extra_column_raises" time="0.006" /><testcase classname="tests.src.pipelines.s3.test_s3_schema_drift" name="test_s3_schema_symmetry_drift" time="0.015" /><testcase classname="tests.src.pipelines.s3.test_step_s3_integration.TestS3SegmentClosure" name="test_output_schema_has_38_features" time="0.002" /><testcase classname="tests.src.pipelines.s3.test_step_s3_integration.TestS3SegmentClosure" name="test_output_length_matches_input" time="0.007" /><testcase classname="tests.src.pipelines.s3.test_step_s3_integration.TestS3SegmentClosure" name="test_nan_isolation_topology" time="0.001" /><testcase classname="tests.src.pipelines.s3.test_step_s3_integration.TestS3PipelineIO" name="test_execute_s3_end_to_end_with_mock_io" time="0.025" /><testcase classname="tests.src.pipelines.s4.test_step_s4_label_generation" name="test_label_normal_hit" time="0.002" /><testcase classname="tests.src.pipelines.s4.test_step_s4_label_generation" name="test_label_long_tail_miss" time="0.002" /><testcase classname="tests.src.pipelines.s4.test_step_s4_label_generation" name="test_label_exact_150_boundary" time="0.001" /><testcase classname="tests.src.pipelines.s4.test_step_s4_label_generation" name="test_assert_corrupted_nv_fails" time="0.001" /><testcase classname="tests.src.pipelines.s4.test_step_s4_label_generation" name="test_execute_s4_end_to_end_success" time="0.013" /><testcase classname="tests.src.pipelines.s4.test_step_s4_label_generation" name="test_execute_s4_missing_cols_raises" time="0.005" /><testcase classname="tests.src.pipelines.s5.test_step_4_1.TestStep4_1CrossSectionAggregation" name="test_schema_symmetry_and_output_shape" time="0.025" /><testcase classname="tests.src.pipelines.s5.test_step_4_1.TestStep4_1CrossSectionAggregation" name="test_mad_clip_bounds_math_equivalence" time="0.202" /><testcase classname="tests.src.pipelines.s5.test_step_4_1.TestStep4_1CrossSectionAggregation" name="test_production_ready_sentinel_normal_case" time="0.026" /><testcase classname="tests.src.pipelines.s5.test_step_4_1.TestStep4_1CrossSectionAggregation" name="test_production_ready_sentinel_toxic_case" time="0.024" /><testcase classname="tests.src.pipelines.s5.test_step_4_1.TestStep4_1CrossSectionAggregation" name="test_empty_directory_raises_fatal" time="0.010" /><testcase classname="tests.src.pipelines.s5.test_step_4_1.TestStep4_1CrossSectionAggregation" name="test_ddof_1_enforcement" time="0.036" /><testcase classname="tests.src.pipelines.s5.test_step_4_2.TestStep4_2StandardizationApply" name="test_wide_params_t1_alignment_and_long_params_ffill" time="0.064" /><testcase classname="tests.src.pipelines.s5.test_step_4_2.TestStep4_2StandardizationApply" name="test_ieee754_intercept_and_mad_clip" time="0.063" /><testcase classname="tests.src.pipelines.s5.test_step_4_2.TestStep4_2StandardizationApply" name="test_toxic_cross_section_null_penetration" time="0.069" /></testsuite></testsuites>