[ "tests/test_flow_algo.py::test_downtrend_has_negative_cmf_and_obv", "tests/test_flow_algo.py::test_empty_frame_returns_none", "tests/test_flow_algo.py::test_factor_dict_round_trip", "tests/test_flow_algo.py::test_factors_finite_and_bounded", "tests/test_flow_algo.py::test_too_short_returns_none", "tests/test_flow_algo.py::test_uptrend_has_positive_cmf_and_obv", "tests/test_flow_algo.py::test_vwap_dev_positive_when_close_above_average", "tests/test_history.py::test_latest_snapshot_returns_newest", "tests/test_history.py::test_save_and_list_snapshots", "tests/test_history.py::test_save_empty_df_returns_none", "tests/test_history.py::test_snapshot_summary_lists_saved_runs", "tests/test_history.py::test_with_delta_computes_difference", "tests/test_history.py::test_with_delta_no_previous", "tests/test_intraday_factor.py::test_aggression_persistence_negative_when_recent_selling", "tests/test_intraday_factor.py::test_aggression_persistence_positive_when_recent_buying", "tests/test_intraday_factor.py::test_aggression_persistence_short_history_uses_all", "tests/test_intraday_factor.py::test_batch", "tests/test_intraday_factor.py::test_clipped_to_range", "tests/test_intraday_factor.py::test_empty_returns_zeros", "tests/test_intraday_factor.py::test_stub_synthesises", "tests/test_intraday_factor.py::test_vwap_dev_positive_when_above_vwap", "tests/test_intraday_factor.py::test_vwap_dev_zero_when_price_equals_vwap", "tests/test_l2_factor.py::test_ask_heavy_book_is_negative", "tests/test_l2_factor.py::test_balanced_book_is_near_zero", "tests/test_l2_factor.py::test_batch_returns_all_tickers", "tests/test_l2_factor.py::test_bid_heavy_book_is_positive", "tests/test_l2_factor.py::test_book_lying_detection", "tests/test_l2_factor.py::test_book_lying_discounts_factor", "tests/test_l2_factor.py::test_clipped_to_range", "tests/test_l2_factor.py::test_empty_book_returns_zero", "tests/test_l2_factor.py::test_spoofed_orders_ignored", "tests/test_l2_factor.py::test_stub_data_source_synthesises", "tests/test_options_factor.py::test_batch", "tests/test_options_factor.py::test_call_otm_spike_is_positive", "tests/test_options_factor.py::test_call_otm_weighted_heaviest", "tests/test_options_factor.py::test_empty_returns_zero", "tests/test_options_factor.py::test_put_otm_spike_is_negative", "tests/test_options_factor.py::test_steady_chain_is_near_zero", "tests/test_options_factor.py::test_stub_data_source_synthesises", "tests/test_options_factor.py::test_zscore_constant_returns_zero", "tests/test_options_factor.py::test_zscore_uses_today_vs_history", "tests/test_performance.py::test_auto_improve_end_to_end_with_signal", "tests/test_performance.py::test_auto_improve_handles_no_data", "tests/test_performance.py::test_collect_eval_tables_with_explicit_cache", "tests/test_performance.py::test_evaluate_returns_metrics_dict", "tests/test_performance.py::test_ic_signal_factor_is_predictive", "tests/test_performance.py::test_load_learned_weights_missing", "tests/test_performance.py::test_load_learned_weights_round_trip", "tests/test_performance.py::test_optimize_finds_signal_factor", "tests/test_performance.py::test_optimize_without_enough_history_returns_baseline", "tests/test_performance.py::test_performance_log_grows", "tests/test_scorer.py::test_empty_factors_returns_empty_df", "tests/test_scorer.py::test_ratings_assignment", "tests/test_scorer.py::test_robust_zscore_degenerate_series", "tests/test_scorer.py::test_robust_zscore_on_outliers", "tests/test_scorer.py::test_score_dataframe_shape", "tests/test_scorer.py::test_score_range_and_ordering", "tests/test_scorer.py::test_top_n_buy_and_sell", "tests/test_scorer.py::test_uptrend_scores_higher_than_downtrend", "tests/test_scorer.py::test_weights_change_ordering", "tests/test_tick_factor.py::test_batch", "tests/test_tick_factor.py::test_block_aggression_negative_when_block_sells", "tests/test_tick_factor.py::test_block_aggression_positive_when_block_buys", "tests/test_tick_factor.py::test_block_share_calculation", "tests/test_tick_factor.py::test_bucket_boundaries", "tests/test_tick_factor.py::test_buy_ratio_in_unit_interval", "tests/test_tick_factor.py::test_empty_ticks", "tests/test_tick_factor.py::test_no_bid_ask_falls_back_to_rolling_mid", "tests/test_tick_factor.py::test_sign_at_ask_is_buy", "tests/test_tick_factor.py::test_sign_at_bid_is_sell", "tests/test_tick_factor.py::test_sign_at_mid_carries_forward", "tests/test_tick_factor.py::test_stub_synthesises", "tests/test_universe.py::test_cached_sectors_for_returns_only_known", "tests/test_universe.py::test_fresh_filter_excludes_stale", "tests/test_universe.py::test_save_and_load_cache", "tests/test_watchlist.py::test_load_malformed_returns_empty", "tests/test_watchlist.py::test_load_missing_returns_empty", "tests/test_watchlist.py::test_parse_caps_at_max", "tests/test_watchlist.py::test_parse_empty_or_none", "tests/test_watchlist.py::test_parse_lowercase_and_dedup", "tests/test_watchlist.py::test_parse_mixed_delimiters", "tests/test_watchlist.py::test_parse_rejects_invalid_symbols", "tests/test_watchlist.py::test_parse_simple", "tests/test_watchlist.py::test_save_and_load_round_trip" ]