| [ | |
| "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" | |
| ] |