rust-pyfunc 0.77.0__tar.gz → 0.80.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/.gitignore +1 -0
  2. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/Cargo.lock +35 -1
  3. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/Cargo.toml +9 -2
  4. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/PKG-INFO +1 -1
  5. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/alter.sh +5 -0
  6. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/__init__.pyi +19 -0
  7. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/core_functions.pyi +101 -0
  8. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/factor_taskd.py +1 -1
  9. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/statistical_analysis.pyi +47 -0
  10. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/trading_data_utils.py +30 -19
  11. rust_pyfunc-0.80.0/src/agent_validation/factors_extra.rs +1634 -0
  12. rust_pyfunc-0.80.0/src/agent_validation/mod.rs +862 -0
  13. rust_pyfunc-0.80.0/src/agent_validation/py_bindings.rs +99 -0
  14. rust_pyfunc-0.80.0/src/bin/worker_pipeline.rs +101 -0
  15. rust_pyfunc-0.80.0/src/cross_stock_regression.rs +824 -0
  16. rust_pyfunc-0.80.0/src/cross_stock_regression_fast.rs +466 -0
  17. rust_pyfunc-0.80.0/src/cross_stock_regression_peak.rs +390 -0
  18. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/factor_neutralization_io_optimized.rs +37 -25
  19. rust_pyfunc-0.80.0/src/factor_pipeline.rs +684 -0
  20. rust_pyfunc-0.80.0/src/fast_csv_reader.rs +822 -0
  21. rust_pyfunc-0.80.0/src/features.rs +645 -0
  22. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lib.rs +71 -1
  23. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lz_complexity.rs +2 -2
  24. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_pair_metrics.rs +131 -34
  25. rust_pyfunc-0.80.0/src/order_pair_metrics_pipeline.rs +1968 -0
  26. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/parallel_computing_date_only.rs +3 -2
  27. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/mod.rs +1 -1
  28. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/tail_v4_pipeline.rs +4 -3
  29. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/trend_mod.rs +1 -1
  30. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/.factory/settings.json +0 -0
  31. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/.github/workflows/CI.yml +0 -0
  32. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/.github/workflows/deploy.yml +0 -0
  33. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/FACTOR_NEUTRALIZATION_REQUIREMENTS.md +0 -0
  34. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/README.md +0 -0
  35. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/agents/skills/agent-trading-builder/SKILL.md +0 -0
  36. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/PriceTree.html +0 -0
  37. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/PriceTreeViz.html +0 -0
  38. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/RollingFutureAccessor.html +0 -0
  39. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/TRADE_PEAK_ANALYSIS_README.md +0 -0
  40. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/brachistochrone_curve.html +0 -0
  41. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/calculate_shannon_entropy_change.html +0 -0
  42. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/calculate_shannon_entropy_change_at_low.html +0 -0
  43. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/compute_max_eigenvalue.html +0 -0
  44. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/dct_basis_functions.html +0 -0
  45. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/dct_path_patterns.html +0 -0
  46. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/dct_reconstruction.html +0 -0
  47. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/dct_visualization.py +0 -0
  48. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/dtw_distance.html +0 -0
  49. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/find_follow_volume_sum_same_price.html +0 -0
  50. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/find_follow_volume_sum_same_price_and_flag.html +0 -0
  51. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/find_half_energy_time.html +0 -0
  52. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/find_local_peaks_within_window.html +0 -0
  53. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/find_max_range_product.html +0 -0
  54. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/identify_segments.html +0 -0
  55. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/index.html +0 -0
  56. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/jaccard_similarity.html +0 -0
  57. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/mark_follow_groups.html +0 -0
  58. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/mark_follow_groups_with_flag.html +0 -0
  59. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/max_range_loop.html +0 -0
  60. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/min_range_loop.html +0 -0
  61. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/min_word_edit_distance.html +0 -0
  62. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/ols.html +0 -0
  63. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/ols_predict.html +0 -0
  64. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/ols_residuals.html +0 -0
  65. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/parallel_computing_system.md +0 -0
  66. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/rolling_cv.html +0 -0
  67. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/rolling_qcv.html +0 -0
  68. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/rolling_volatility.html +0 -0
  69. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/rolling_window_stat.html +0 -0
  70. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/search_data.json +0 -0
  71. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/static/search.js +0 -0
  72. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/static/style.css +0 -0
  73. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/sum_as_string.html +0 -0
  74. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/transfer_entropy.html +0 -0
  75. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/trend.html +0 -0
  76. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/trend_fast.html +0 -0
  77. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/vectorize_sentences.html +0 -0
  78. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs/vectorize_sentences_list.html +0 -0
  79. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs//344/275/277/347/224/250/350/257/264/346/230/216.md" +0 -0
  80. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs//345/256/214/346/210/220/346/200/273/347/273/223.md" +0 -0
  81. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/docs_generator.py +0 -0
  82. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/ds_plan_true.md +0 -0
  83. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/freeze_version.sh +0 -0
  84. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/hmm_visualizer.py +0 -0
  85. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/pyproject.toml +0 -0
  86. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/__init__.py +0 -0
  87. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/abm_analysis.py +0 -0
  88. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/agent_simulator.pyi +0 -0
  89. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/agent_trading_daily.py +0 -0
  90. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/agent_trading_daily.pyi +0 -0
  91. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/copula.pyi +0 -0
  92. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/factor_task.py +0 -0
  93. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/minute_data_reader.py +0 -0
  94. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/pandas_correlation.py +0 -0
  95. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/pandas_correlation.pyi +0 -0
  96. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/pandas_corrwith.py +0 -0
  97. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/pandas_extensions.pyi +0 -0
  98. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/pandas_merge.py +0 -0
  99. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/pandas_rank.py +0 -0
  100. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/parallel_computing.pyi +0 -0
  101. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/rolling_future.py +0 -0
  102. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/rolling_past.py +0 -0
  103. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/text_analysis.pyi +0 -0
  104. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/theme_cluster_factors.pyi +0 -0
  105. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/theme_feature_expansion.pyi +0 -0
  106. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/theme_feature_expansion_data.py +0 -0
  107. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/theme_feature_expansion_data.pyi +0 -0
  108. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/time_series.pyi +0 -0
  109. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/trading_analysis.pyi +0 -0
  110. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/trading_data_utils.pyi +0 -0
  111. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/trading_day.py +0 -0
  112. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/tree_structures.pyi +0 -0
  113. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/treevisual.py +0 -0
  114. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/web_manager.py +0 -0
  115. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/python/rust_pyfunc/web_manager.pyi +0 -0
  116. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/rust-toolchain.toml +0 -0
  117. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/abnormal_asks_analyzer.rs +0 -0
  118. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/acceleration_follow_agent.rs +0 -0
  119. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/bottom_fishing_agent.rs +0 -0
  120. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/buy_ratio_agent.rs +0 -0
  121. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/exhaustion_reversal_agent.rs +0 -0
  122. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/follow_flow_agent.rs +0 -0
  123. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/mod.rs +0 -0
  124. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/momentum_agent.rs +0 -0
  125. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/py_bindings.rs +0 -0
  126. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/simulator.rs +0 -0
  127. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/trait_def.rs +0 -0
  128. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/types.rs +0 -0
  129. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_simulator/utils.rs +0 -0
  130. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_trading_features/core.rs +0 -0
  131. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_trading_features/metrics.rs +0 -0
  132. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_trading_features/mod.rs +0 -0
  133. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_trading_features/py_bindings.rs +0 -0
  134. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/agent_trading_features/types.rs +0 -0
  135. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/allo_microstructure.rs +0 -0
  136. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/allo_microstructure_v2.rs +0 -0
  137. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/allo_microstructure_v3.rs +0 -0
  138. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/backup_column_cache.rs +0 -0
  139. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/backup_reader.rs +0 -0
  140. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/backup_writer.rs +0 -0
  141. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/column_correlation.rs +0 -0
  142. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/copula.rs +0 -0
  143. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/corr_diff_features.rs +0 -0
  144. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/dct_transform.rs +0 -0
  145. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/difference_matrix.rs +0 -0
  146. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/effective_memory_length.rs +0 -0
  147. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/entropy_analysis.rs +0 -0
  148. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/error/mod.rs +0 -0
  149. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/frontier_dist.rs +0 -0
  150. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/ghost_market_maker.rs +0 -0
  151. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/gp_correlation_dimension.rs +0 -0
  152. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/grouping.rs +0 -0
  153. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/hawkes_advisor.rs +0 -0
  154. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/hawkes_analysis.rs +0 -0
  155. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/illusion_liquidity_distance.rs +0 -0
  156. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/integer_small_peak_features.rs +0 -0
  157. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lagged_regression.rs +0 -0
  158. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lagged_regression_incremental.rs +0 -0
  159. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lagged_regression_optimized.rs +0 -0
  160. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lagged_regression_simd.rs +0 -0
  161. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/limit_order_lifecycle.rs +0 -0
  162. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/limit_order_lifecycle_v2.rs +0 -0
  163. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/long_order_analysis.rs +0 -0
  164. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/lz_complexity_detailed.rs +0 -0
  165. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/market_correlation.rs +0 -0
  166. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/microstructure_pattern_features.rs +0 -0
  167. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/microstructure_pattern_features_optimized.rs +0 -0
  168. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/microstructure_pattern_features_v2.rs +0 -0
  169. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/mutual_information.rs +0 -0
  170. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/mutual_information_2d.rs +0 -0
  171. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/mutual_information_2d_final.rs +0 -0
  172. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/mutual_information_2d_fixed.rs +0 -0
  173. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_contamination.rs +0 -0
  174. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_neighborhood.rs +0 -0
  175. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_price_statistics.rs +0 -0
  176. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_price_statistics_bucketed.rs +0 -0
  177. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_price_statistics_order_level.rs +0 -0
  178. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_records_ultra_sorted.rs +0 -0
  179. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_records_ultra_sorted_bucketed.rs +0 -0
  180. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_records_ultra_sorted_v2_optimized.rs +0 -0
  181. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/order_records_ultra_sorted_v3.rs +0 -0
  182. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/orderbook_volume_cov_factors.rs +0 -0
  183. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/pandas_ext/mod.rs +0 -0
  184. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/parallel_computing.rs +0 -0
  185. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/passive_order_features.rs +0 -0
  186. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/permutation_analysis_v0816_fixed.rs +0 -0
  187. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/personalized_meeting_features.rs +0 -0
  188. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/price_breakthrough_stats.rs +0 -0
  189. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/price_cycle_b_segments_enhanced.rs +0 -0
  190. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/safe_eigenvalue.rs +0 -0
  191. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/sequence/mod.rs +0 -0
  192. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/series_rank.rs +0 -0
  193. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/simple_parallel.rs +0 -0
  194. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/skewness.rs +0 -0
  195. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/eigenvalue_analysis.rs +0 -0
  196. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/eigenvalue_analysis_modified.rs +0 -0
  197. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/fast_correlation.rs +0 -0
  198. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/fast_correlation_v2.rs +0 -0
  199. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/hmm_trend_prediction.rs +0 -0
  200. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/local_correlation.rs +0 -0
  201. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/rolling_correlation_mean.rs +0 -0
  202. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/rolling_window_core_feature.rs +0 -0
  203. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/rolling_window_core_feature_optimized.rs +0 -0
  204. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/rolling_window_core_feature_simd.rs +0 -0
  205. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/statistics/rolling_window_core_feature_ultra.rs +0 -0
  206. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/tail_v2_backtest_block.rs +0 -0
  207. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/tail_v2_block_neutralizer.rs +0 -0
  208. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/tail_v2_ic_corr_filter.rs +0 -0
  209. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/tail_v2_rank_roll_factor.rs +0 -0
  210. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/text/mod.rs +0 -0
  211. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/text/string_proximity.rs +0 -0
  212. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/theme_cluster_factors.rs +0 -0
  213. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/theme_cluster_factors_batch.rs +0 -0
  214. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/theme_feature_expansion.rs +0 -0
  215. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_irreversibility.rs +0 -0
  216. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/fast_extreme.rs +0 -0
  217. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/lyapunov.rs +0 -0
  218. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/mod.rs +0 -0
  219. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/retreat_advance.rs +0 -0
  220. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/retreat_advance_v2.rs +0 -0
  221. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/time_series/super_extreme.rs +0 -0
  222. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/topk_corr_matrix.rs +0 -0
  223. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/trade_analysis_ultra_turbo.rs +0 -0
  224. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/trade_peak_analysis.rs +0 -0
  225. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/trade_records_ultra_sorted.rs +0 -0
  226. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/tree/mod.rs +0 -0
  227. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/vector_similarity.rs +0 -0
  228. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/vector_similarity_optimized.rs +0 -0
  229. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/yand_affine_centroid.rs +0 -0
  230. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/src/yand_divergence.rs +0 -0
  231. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/templates/base.html +0 -0
  232. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/templates/function.html +0 -0
  233. {rust_pyfunc-0.77.0 → rust_pyfunc-0.80.0}/templates/index.html +0 -0
@@ -239,3 +239,4 @@ docs/theme_feature_expansion_explanation.md
239
239
  .mindfs/sessions/session-list.db
240
240
  .maturin_zig/*
241
241
  dist_versions/*
242
+ python/rust_pyfunc/rust_pyfunc_worker
@@ -550,6 +550,17 @@ version = "0.8.7"
550
550
  source = "registry+https://github.com/rust-lang/crates.io-index"
551
551
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
552
552
 
553
+ [[package]]
554
+ name = "core_affinity"
555
+ version = "0.8.3"
556
+ source = "registry+https://github.com/rust-lang/crates.io-index"
557
+ checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342"
558
+ dependencies = [
559
+ "libc",
560
+ "num_cpus",
561
+ "winapi",
562
+ ]
563
+
553
564
  [[package]]
554
565
  name = "cpufeatures"
555
566
  version = "0.2.17"
@@ -2181,12 +2192,13 @@ checksum = "082f11ffa03bbef6c2c6ea6bea1acafaade2fd9050ae0234ab44a2153742b058"
2181
2192
 
2182
2193
  [[package]]
2183
2194
  name = "rust_pyfunc"
2184
- version = "0.77.0"
2195
+ version = "0.80.0"
2185
2196
  dependencies = [
2186
2197
  "arrow",
2187
2198
  "base64 0.21.7",
2188
2199
  "bincode",
2189
2200
  "chrono",
2201
+ "core_affinity",
2190
2202
  "criterion",
2191
2203
  "crossbeam",
2192
2204
  "csv",
@@ -2671,6 +2683,22 @@ dependencies = [
2671
2683
  "safe_arch",
2672
2684
  ]
2673
2685
 
2686
+ [[package]]
2687
+ name = "winapi"
2688
+ version = "0.3.9"
2689
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2690
+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
2691
+ dependencies = [
2692
+ "winapi-i686-pc-windows-gnu",
2693
+ "winapi-x86_64-pc-windows-gnu",
2694
+ ]
2695
+
2696
+ [[package]]
2697
+ name = "winapi-i686-pc-windows-gnu"
2698
+ version = "0.4.0"
2699
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2700
+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
2701
+
2674
2702
  [[package]]
2675
2703
  name = "winapi-util"
2676
2704
  version = "0.1.9"
@@ -2680,6 +2708,12 @@ dependencies = [
2680
2708
  "windows-sys 0.59.0",
2681
2709
  ]
2682
2710
 
2711
+ [[package]]
2712
+ name = "winapi-x86_64-pc-windows-gnu"
2713
+ version = "0.4.0"
2714
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2715
+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
2716
+
2683
2717
  [[package]]
2684
2718
  name = "windows-core"
2685
2719
  version = "0.61.2"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rust_pyfunc"
3
- version = "0.77.0"
3
+ version = "0.80.0"
4
4
  edition = "2021"
5
5
  description = "A collection of high-performance Python functions implemented in Rust"
6
6
  readme = "README.md"
@@ -46,9 +46,15 @@ log = "0.4"
46
46
  once_cell = "1.19"
47
47
  csv = "1.3"
48
48
  ndarray-npy = "0.8"
49
+ core_affinity = "0.8"
49
50
  hdf5-metno = { version = "0.12", features = ["static", "zlib"], optional = true }
50
51
  zstd = "0.13"
51
52
 
53
+ # Worker 二进制(多进程因子流水线)
54
+ [[bin]]
55
+ name = "rust_pyfunc_worker"
56
+ path = "src/bin/worker_pipeline.rs"
57
+
52
58
  [features]
53
59
  default = ["hdf5"]
54
60
  hdf5 = ["hdf5-metno"]
@@ -65,8 +71,9 @@ criterion = "0.5"
65
71
  [profile.release]
66
72
  lto = true
67
73
  codegen-units = 1
68
- panic = "abort"
69
74
  opt-level = 3
75
+ # 注意:不用 panic = "abort",因为 worker bin 需要 catch_unwind 捕获计算 panic,
76
+ # 避免整个 worker 进程崩溃重启。pyo3 0.18 在 unwind 下正常工作。
70
77
 
71
78
  [build-dependencies]
72
79
  pkg-config = "0.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rust_pyfunc
3
- Version: 0.77.0
3
+ Version: 0.80.0
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -26,5 +26,10 @@ conda activate chenzongwei311
26
26
  export PATH="/home/chenzongwei/.local/bin:$PATH"
27
27
  /home/chenzongwei/.local/bin/mold -run maturin develop --release
28
28
 
29
+ # 5. 编译并部署 worker 二进制(多进程因子流水线 mode="multiprocess" 需要)
30
+ /home/chenzongwei/.local/bin/mold -run cargo build --release --bin rust_pyfunc_worker
31
+ cp target/release/rust_pyfunc_worker python/rust_pyfunc/rust_pyfunc_worker
32
+ echo "✅ worker 二进制已部署到 python/rust_pyfunc/rust_pyfunc_worker"
33
+
29
34
  # 如果需要,你也可以在脚本结束时停用环境
30
35
  # conda deactivate
@@ -76,6 +76,24 @@ def compute_corr_diff_features(
76
76
  ) -> Tuple[List[float], object]:
77
77
  ...
78
78
 
79
+ def compute_agent_validation_factors_py(
80
+ market_timestamps: object,
81
+ market_prices: object,
82
+ market_volumes: object,
83
+ market_flags: object,
84
+ ob_timestamps: object,
85
+ ob_bid_prc1: object,
86
+ ob_ask_prc1: object,
87
+ ob_bid_vol1: object,
88
+ ob_ask_vol1: object,
89
+ per_agent_market_indices: List[object],
90
+ per_agent_directions: List[object],
91
+ per_agent_volumes: List[object],
92
+ fwd_horizons_sec: List[float],
93
+ pt_horizons_sec: List[float],
94
+ ) -> List[float]:
95
+ ...
96
+
79
97
 
80
98
  # 版本信息
81
99
  __version__ = "0.18.0"
@@ -181,6 +199,7 @@ __all__ = [
181
199
  "compute_agent_trading_daily_feature_table_multi",
182
200
  "compute_agent_trading_daily_feature_table_for_get_features_factors",
183
201
  "compute_agent_trading_daily_feature_table_multi_for_get_features_factors",
202
+ "compute_agent_validation_factors_py",
184
203
  # 统计分析函数
185
204
  "calculate_base_entropy",
186
205
  "calculate_shannon_entropy_change",
@@ -2288,3 +2288,104 @@ def compute_ts_stats(series: List[float]) -> List[float]:
2288
2288
  数据不足5个时返回空列表
2289
2289
  """
2290
2290
  ...
2291
+
2292
+
2293
+ def read_trade_fast(
2294
+ code: str,
2295
+ date: int,
2296
+ with_retreat: int = 0,
2297
+ with_afternoon_adjust: bool = False,
2298
+ ) -> NDArray[np.float64]:
2299
+ """高速读取逐笔成交数据(Rust 多线程实现,替代 read_trade 的加速版)。
2300
+
2301
+ 用 memmap2 内存映射文件,大文件按字节块切分并行解析(rayon),
2302
+ 读取时即完成全部预处理:flag!=32 过滤、exchtime 微秒整数→epoch 秒、
2303
+ 可选的下午时段平移(adjust_afternoon)。
2304
+
2305
+ 与 read_trade 的差异:
2306
+ - 直接返回 (n, 7) float64 numpy 数组,跳过 DataFrame 构造与 Timestamp 往返转换
2307
+ - with_afternoon_adjust=True 时在读时一步完成下午时段平移并过滤非盘中数据
2308
+ - time_sec 列为 epoch 秒(与 prepare() 中 exchtime.astype(int64)//1e9 一致)
2309
+
2310
+ 列顺序(n×7 矩阵):
2311
+ [0] time_sec 成交时间,epoch 秒
2312
+ [1] price 成交价
2313
+ [2] volume 成交量
2314
+ [3] turnover 成交额
2315
+ [4] flag 成交标志(66=主买, 83=主卖;32=撤单,已被过滤)
2316
+ [5] bid_order 买方订单号
2317
+ [6] ask_order 卖方订单号
2318
+
2319
+ Parameters
2320
+ ----------
2321
+ code : str
2322
+ 股票代码,如 "000001"
2323
+ date : int
2324
+ 交易日,如 20260605
2325
+ with_retreat : int, 默认 0
2326
+ 1 时保留 flag==32 的撤单记录,0 时过滤(与 read_trade 默认一致)
2327
+ with_afternoon_adjust : bool, 默认 False
2328
+ True 时做 adjust_afternoon 平移:保留 [09:30,11:30],下午 [13:00,14:57]
2329
+ 整体前移 90 分钟,过滤集合竞价前/收盘后的数据
2330
+
2331
+ Returns
2332
+ -------
2333
+ numpy.ndarray
2334
+ (n, 7) float64 数组
2335
+ """
2336
+ ...
2337
+
2338
+
2339
+ def run_factor_pipeline(
2340
+ pipeline: str,
2341
+ tasks: List,
2342
+ n_jobs: int,
2343
+ backup_file: str,
2344
+ expected_result_length: int,
2345
+ trading_days: List[int],
2346
+ params: object = None,
2347
+ update_mode: bool = False,
2348
+ bind_cores: bool = True,
2349
+ backup_batch_size: int = 2000,
2350
+ progress_log: bool = False,
2351
+ ) -> None:
2352
+ """纯 Rust 因子流水线引擎(run_factor_pipeline 优化方案 Phase 3)。
2353
+
2354
+ 把 go 函数(如 hm90.go)的整条链路在 Rust 内部一气呵成,消除 Python worker、
2355
+ pandas、pyo3 往返、msgpack 等所有流转浪费。并行控制采用自适应嵌套并行 + 核绑定,
2356
+ 总线程恒定 = n_jobs。
2357
+
2358
+ backup 格式与现有 run_pools_queue 完全兼容(复用 backup_writer),
2359
+ 后续 query_backup / query_backup_factor_only_ultra_fast 无需改动。
2360
+
2361
+ Parameters
2362
+ ----------
2363
+ pipeline : str
2364
+ 流水线标识,目前支持 "order_pair_hm90"(hm90.go 的 Rust 翻译)
2365
+ tasks : List[[int, str]]
2366
+ 任务列表,每个元素 [date, code]
2367
+ n_jobs : int
2368
+ 并行线程数(总 CPU 占用 ≈ n_jobs × 100%,默认生产用 200)
2369
+ backup_file : str
2370
+ 备份文件路径(与 run_pools_queue 的 backup_file 格式兼容)
2371
+ expected_result_length : int
2372
+ 每个任务的预期结果长度(因子数)
2373
+ trading_days : List[int]
2374
+ 交易日历数组(由 rp.td.trading_days.tolist() 提供,用于 last_trading_day 查找)
2375
+ params : dict, 可选
2376
+ 流水线参数,如 {"tolerance_v1": 0.001, "tolerance_v2": 0.00001}
2377
+ update_mode : bool, 默认 False
2378
+ 断点续算:True 时跳过 backup 中已完成的任务
2379
+ bind_cores : bool, 默认 True
2380
+ 核绑定:把 n_jobs 个线程各绑定到一个物理核,CPU 占用精确稳定
2381
+ backup_batch_size : int, 默认 2000
2382
+ 每攒满 N 个结果写一次 backup(批量 zstd 压缩)
2383
+ progress_log : bool, 默认 False
2384
+ 每 500 个任务打印一次进度
2385
+
2386
+ Notes
2387
+ -----
2388
+ "order_pair_hm90" 流水线关闭了 lyapunov 特征(原 get_features_factors 默认开启,
2389
+ 但花 69% 时间只产生 2.3% 特征)。如需 lyapunov,仍可用原 run_pools_queue。
2390
+ """
2391
+ ...
@@ -343,7 +343,7 @@ def cancel_task(task_id: int):
343
343
 
344
344
  # 快照当前进度后标记为取消
345
345
  progress = None
346
- if row.get("backup_prefix"):
346
+ if row["backup_prefix"]:
347
347
  progress = _read_progress(row["backup_prefix"], task_id)
348
348
  db.execute(
349
349
  "UPDATE tasks SET status='cancelled', finished_at=?, progress_snapshot=? WHERE id=?",
@@ -1797,3 +1797,50 @@ def mutual_information_2d_knn_final(
1797
1797
  >>> # print(f"成交量与金额的平均互信息: {np.mean(mi):.4f}")
1798
1798
  """
1799
1799
  ...
1800
+
1801
+ def cross_stock_autoreg_38(
1802
+ data_prev: NDArray[np.float64],
1803
+ data_today: NDArray[np.float64],
1804
+ n_lags: int,
1805
+ ) -> NDArray[np.float64]:
1806
+ """用前一日数据拟合自回归系数,在今日数据上做跨股票迁移预测,提取38个统计量。
1807
+
1808
+ data_prev: (T, N) 前一日分钟数据(已标准化)
1809
+ data_today: (T, N) 今日分钟数据(已标准化)
1810
+ n_lags: 自回归滞后阶数(5或15)
1811
+
1812
+ 返回: (38, N) 每只股票38个统计量
1813
+
1814
+ 统计量顺序:
1815
+ 0: corr_in_out 1: r2_in_uprate 2: r2_out_uprate 3: trans_out_uprate
1816
+ 4: in_mean 5: out_mean 6: in_ab_mean 7: out_ab_mean
1817
+ 8: trans_mean 9: in_std 10: out_std 11: in_ab_std
1818
+ 12: out_ab_std 13: trans_std 14: in_skew 15: out_skew
1819
+ 16: in_ab_skew 17: out_ab_skew 18: trans_skew 19: in_kurt
1820
+ 20: out_kurt 21: in_ab_kurt 22: out_ab_kurt 23: trans_kurt
1821
+ 24: in_median 25: out_median 26: in_ab_median 27: out_ab_median
1822
+ 28: trans_median 29: in_max 30: in_ab_max 31: out_ab_max
1823
+ 32: trans_max 33: in_min 34: out_min 35: in_ab_min
1824
+ 36: out_ab_min 37: trans_min
1825
+ """
1826
+ ...
1827
+
1828
+
1829
+ def cross_stock_crossvar_38(
1830
+ y_prev: NDArray[np.float64],
1831
+ x_prev: NDArray[np.float64],
1832
+ y_today: NDArray[np.float64],
1833
+ x_today: NDArray[np.float64],
1834
+ n_lags: int,
1835
+ ) -> NDArray[np.float64]:
1836
+ """用前一日数据拟合交叉变量回归系数,在今日数据上做跨股票迁移预测,提取38个统计量。
1837
+
1838
+ 模型: y ~ y_lag1..n_lags + x_lag1..n_lags
1839
+
1840
+ y_prev/x_prev: (T, N) 前一日因变量/自变量(已标准化)
1841
+ y_today/x_today: (T, N) 今日因变量/自变量(已标准化)
1842
+ n_lags: 每变量滞后阶数
1843
+
1844
+ 返回: (38, N) 统计量矩阵,顺序同 cross_stock_autoreg_38
1845
+ """
1846
+ ...
@@ -1,3 +1,4 @@
1
+ import mmap
1
2
  import os
2
3
 
3
4
 
@@ -48,6 +49,21 @@ def _resolve_stock_path(date: int, subdir: str, filename: str) -> str:
48
49
  )
49
50
 
50
51
 
52
+ def _read_csv_nocache(file_path: str, **kwargs):
53
+ """mmap + MADV_SEQUENTIAL:避免一次性读出的 CSV 数据占据页缓存"""
54
+ fd = os.open(file_path, os.O_RDONLY)
55
+ mm = None
56
+ try:
57
+ mm = mmap.mmap(fd, 0, access=mmap.ACCESS_READ)
58
+ mm.madvise(mmap.MADV_SEQUENTIAL)
59
+ df = pd.read_csv(mm, **kwargs)
60
+ return df
61
+ finally:
62
+ if mm is not None:
63
+ mm.close()
64
+ os.close(fd)
65
+
66
+
51
67
  def _to_exchange_timestamp(series: pd.Series) -> pd.Series:
52
68
  return pd.to_timedelta(series / 1e6, unit="s") + _TRADE_EPOCH_OFFSET
53
69
 
@@ -68,43 +84,38 @@ def adjust_afternoon(df: pd.DataFrame, only_inday: int = 1) -> pd.DataFrame:
68
84
  return df
69
85
 
70
86
 
71
- def read_trade(symbol: str, date: int, with_retreat: int = 0) -> pd.DataFrame:
87
+ def read_trade(symbol: str, date: int, with_retreat: int = 0, no_cache: bool = False) -> pd.DataFrame:
72
88
  file_name = f"{symbol}_{date}_transaction.csv"
73
89
  file_path = _resolve_stock_path(date, "transaction", file_name)
74
- df = pd.read_csv(
75
- file_path,
90
+ csv_kwargs = dict(
76
91
  dtype={"symbol": str},
77
92
  usecols=[
78
- "exchtime",
79
- "price",
80
- "volume",
81
- "turnover",
82
- "flag",
83
- "index",
84
- "localtime",
85
- "ask_order",
86
- "bid_order",
93
+ "exchtime", "price", "volume", "turnover", "flag",
94
+ "index", "localtime", "ask_order", "bid_order",
87
95
  ],
88
- memory_map=True,
89
- engine="c",
90
96
  low_memory=False,
91
97
  )
98
+ if no_cache:
99
+ df = _read_csv_nocache(file_path, **csv_kwargs)
100
+ else:
101
+ df = pd.read_csv(file_path, memory_map=True, engine="c", **csv_kwargs)
92
102
  if not with_retreat:
93
103
  df = df[df.flag != 32]
94
104
  df.exchtime = _to_exchange_timestamp(df.exchtime)
95
105
  return df
96
106
 
97
107
 
98
- def read_market(symbol: str, date: int, with_high_low_limited: int = 0) -> pd.DataFrame:
108
+ def read_market(symbol: str, date: int, with_high_low_limited: int = 0, no_cache: bool = False) -> pd.DataFrame:
99
109
  file_name = f"{symbol}_{date}_market_data.csv"
100
110
  file_path = _resolve_stock_path(date, "market_data", file_name)
101
- df = pd.read_csv(
102
- file_path,
111
+ csv_kwargs = dict(
103
112
  dtype={"symbol": str},
104
- memory_map=True,
105
- engine="c",
106
113
  low_memory=False,
107
114
  )
115
+ if no_cache:
116
+ df = _read_csv_nocache(file_path, **csv_kwargs)
117
+ else:
118
+ df = pd.read_csv(file_path, memory_map=True, engine="c", **csv_kwargs)
108
119
  df.exchtime = _to_exchange_timestamp(df.exchtime)
109
120
  if not with_high_low_limited:
110
121
  df = df[(df.ask_prc1 != 0) & (df.bid_prc1 != 0)]