rust-pyfunc 0.44.0__tar.gz → 0.44.1__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 (133) hide show
  1. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/Cargo.lock +1 -1
  2. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/Cargo.toml +1 -1
  3. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/PKG-INFO +1 -1
  4. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/simple_parallel.rs +39 -13
  5. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/.github/workflows/CI.yml +0 -0
  6. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/.github/workflows/deploy.yml +0 -0
  7. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/.gitignore +0 -0
  8. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/CLAUDE.md +0 -0
  9. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/CRUSH.md +0 -0
  10. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/FACTOR_NEUTRALIZATION_REQUIREMENTS.md +0 -0
  11. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/README.md +0 -0
  12. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/alter.sh +0 -0
  13. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/PriceTree.html +0 -0
  14. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/PriceTreeViz.html +0 -0
  15. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/RollingFutureAccessor.html +0 -0
  16. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/TRADE_PEAK_ANALYSIS_README.md +0 -0
  17. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/brachistochrone_curve.html +0 -0
  18. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/calculate_shannon_entropy_change.html +0 -0
  19. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/calculate_shannon_entropy_change_at_low.html +0 -0
  20. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/compute_max_eigenvalue.html +0 -0
  21. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/dtw_distance.html +0 -0
  22. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/find_follow_volume_sum_same_price.html +0 -0
  23. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/find_follow_volume_sum_same_price_and_flag.html +0 -0
  24. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/find_half_energy_time.html +0 -0
  25. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/find_local_peaks_within_window.html +0 -0
  26. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/find_max_range_product.html +0 -0
  27. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/identify_segments.html +0 -0
  28. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/index.html +0 -0
  29. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/jaccard_similarity.html +0 -0
  30. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/mark_follow_groups.html +0 -0
  31. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/mark_follow_groups_with_flag.html +0 -0
  32. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/max_range_loop.html +0 -0
  33. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/min_range_loop.html +0 -0
  34. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/min_word_edit_distance.html +0 -0
  35. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/ols.html +0 -0
  36. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/ols_predict.html +0 -0
  37. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/ols_residuals.html +0 -0
  38. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/parallel_computing_system.md +0 -0
  39. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/rolling_cv.html +0 -0
  40. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/rolling_qcv.html +0 -0
  41. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/rolling_volatility.html +0 -0
  42. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/rolling_window_stat.html +0 -0
  43. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/search_data.json +0 -0
  44. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/static/search.js +0 -0
  45. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/static/style.css +0 -0
  46. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/sum_as_string.html +0 -0
  47. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/transfer_entropy.html +0 -0
  48. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/trend.html +0 -0
  49. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/trend_fast.html +0 -0
  50. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/vectorize_sentences.html +0 -0
  51. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs/vectorize_sentences_list.html +0 -0
  52. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs//344/275/277/347/224/250/350/257/264/346/230/216.md" +0 -0
  53. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs//345/256/214/346/210/220/346/200/273/347/273/223.md" +0 -0
  54. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/docs_generator.py +0 -0
  55. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/hmm_visualizer.py +0 -0
  56. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/pyproject.toml +0 -0
  57. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/__init__.py +0 -0
  58. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/__init__.pyi +0 -0
  59. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/core_functions.pyi +0 -0
  60. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/pandas_correlation.py +0 -0
  61. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/pandas_correlation.pyi +0 -0
  62. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/pandas_corrwith.py +0 -0
  63. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/pandas_extensions.pyi +0 -0
  64. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/pandas_merge.py +0 -0
  65. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/pandas_rank.py +0 -0
  66. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/parallel_computing.pyi +0 -0
  67. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/rolling_future.py +0 -0
  68. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/rolling_past.py +0 -0
  69. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/statistical_analysis.pyi +0 -0
  70. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/text_analysis.pyi +0 -0
  71. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/time_series.pyi +0 -0
  72. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/trading_analysis.pyi +0 -0
  73. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/tree_structures.pyi +0 -0
  74. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/treevisual.py +0 -0
  75. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/web_manager.py +0 -0
  76. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/python/rust_pyfunc/web_manager.pyi +0 -0
  77. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/abnormal_asks_analyzer.rs +0 -0
  78. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/backup_reader.rs +0 -0
  79. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/column_correlation.rs +0 -0
  80. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/difference_matrix.rs +0 -0
  81. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/entropy_analysis.rs +0 -0
  82. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/error/mod.rs +0 -0
  83. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/factor_neutralization_io_optimized.rs +0 -0
  84. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/frontier_dist.rs +0 -0
  85. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/gp_correlation_dimension.rs +0 -0
  86. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/grouping.rs +0 -0
  87. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/lagged_regression.rs +0 -0
  88. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/lagged_regression_incremental.rs +0 -0
  89. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/lagged_regression_optimized.rs +0 -0
  90. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/lagged_regression_simd.rs +0 -0
  91. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/lib.rs +0 -0
  92. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/lz_complexity.rs +0 -0
  93. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/market_correlation.rs +0 -0
  94. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/order_contamination.rs +0 -0
  95. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/order_neighborhood.rs +0 -0
  96. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/order_records_ultra_sorted.rs +0 -0
  97. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/pandas_ext/mod.rs +0 -0
  98. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/parallel_computing.rs +0 -0
  99. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/permutation_analysis_v0816_fixed.rs +0 -0
  100. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/price_breakthrough_stats.rs +0 -0
  101. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/price_cycle_b_segments_enhanced.rs +0 -0
  102. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/safe_eigenvalue.rs +0 -0
  103. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/sequence/mod.rs +0 -0
  104. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/series_rank.rs +0 -0
  105. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/eigenvalue_analysis.rs +0 -0
  106. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/eigenvalue_analysis_modified.rs +0 -0
  107. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/fast_correlation.rs +0 -0
  108. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/fast_correlation_v2.rs +0 -0
  109. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/hmm_trend_prediction.rs +0 -0
  110. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/local_correlation.rs +0 -0
  111. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/mod.rs +0 -0
  112. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/rolling_correlation_mean.rs +0 -0
  113. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/rolling_window_core_feature.rs +0 -0
  114. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/rolling_window_core_feature_optimized.rs +0 -0
  115. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/rolling_window_core_feature_simd.rs +0 -0
  116. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/statistics/rolling_window_core_feature_ultra.rs +0 -0
  117. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/text/mod.rs +0 -0
  118. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/text/string_proximity.rs +0 -0
  119. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/time_series/fast_extreme.rs +0 -0
  120. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/time_series/lyapunov.rs +0 -0
  121. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/time_series/mod.rs +0 -0
  122. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/time_series/retreat_advance.rs +0 -0
  123. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/time_series/retreat_advance_v2.rs +0 -0
  124. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/time_series/super_extreme.rs +0 -0
  125. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/trade_analysis_ultra_turbo.rs +0 -0
  126. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/trade_peak_analysis.rs +0 -0
  127. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/trade_records_ultra_sorted.rs +0 -0
  128. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/tree/mod.rs +0 -0
  129. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/vector_similarity.rs +0 -0
  130. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/src/vector_similarity_optimized.rs +0 -0
  131. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/templates/base.html +0 -0
  132. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/templates/function.html +0 -0
  133. {rust_pyfunc-0.44.0 → rust_pyfunc-0.44.1}/templates/index.html +0 -0
@@ -2024,7 +2024,7 @@ checksum = "082f11ffa03bbef6c2c6ea6bea1acafaade2fd9050ae0234ab44a2153742b058"
2024
2024
 
2025
2025
  [[package]]
2026
2026
  name = "rust_pyfunc"
2027
- version = "0.44.0"
2027
+ version = "0.44.1"
2028
2028
  dependencies = [
2029
2029
  "arrow",
2030
2030
  "base64 0.21.7",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rust_pyfunc"
3
- version = "0.44.0"
3
+ version = "0.44.1"
4
4
  edition = "2021"
5
5
  description = "A collection of high-performance Python functions implemented in Rust"
6
6
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rust_pyfunc
3
- Version: 0.44.0
3
+ Version: 0.44.1
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -10,6 +10,7 @@ use std::env;
10
10
  use std::io::Write;
11
11
  use std::path::Path;
12
12
  use std::process::{Command, Stdio};
13
+ use std::io::{self,BufRead, BufReader};
13
14
  use std::thread;
14
15
  use std::time::Instant;
15
16
 
@@ -116,6 +117,8 @@ import sys
116
117
  import msgpack
117
118
  import struct
118
119
  import os
120
+ import textwrap
121
+ import traceback
119
122
 
120
123
  def main():
121
124
  while True:
@@ -140,6 +143,7 @@ def main():
140
143
  task = task_data['task']
141
144
  date = task['date']
142
145
  code = task['code']
146
+ func_code = textwrap.dedent(func_code)
143
147
 
144
148
  # 执行任务
145
149
  try:
@@ -153,9 +157,19 @@ def main():
153
157
  if user_functions:
154
158
  func = namespace[user_functions[0]]
155
159
  func(date, code) # 执行函数,不收集结果
160
+
161
+ # 任务完成后,发送确认信号到 stdout
162
+ sys.stdout.buffer.write(b'DONE\n')
163
+ sys.stdout.buffer.flush()
164
+
156
165
  except Exception as e:
157
- # 静默失败,不打印错误
158
- pass
166
+ error_msg = traceback.format_exc()
167
+ print(f"❌ Worker任务失败: {date}, {code} -> {e}", file=sys.stderr, flush=True)
168
+ print(error_msg, file=sys.stderr, flush=True)
169
+
170
+ # 即使出错也发送确认信号,避免阻塞
171
+ sys.stdout.buffer.write(b'DONE\n')
172
+ sys.stdout.buffer.flush()
159
173
 
160
174
  except Exception:
161
175
  break
@@ -185,7 +199,7 @@ fn run_simple_worker(
185
199
  let mut child = match Command::new(&python_path)
186
200
  .arg(&script_path)
187
201
  .stdin(Stdio::piped())
188
- .stdout(Stdio::null())
202
+ .stdout(Stdio::piped()) // 需要读取stdout来获取确认信号
189
203
  .stderr(Stdio::null())
190
204
  .spawn()
191
205
  {
@@ -198,6 +212,8 @@ fn run_simple_worker(
198
212
  };
199
213
 
200
214
  let mut stdin = child.stdin.take().expect("Failed to get stdin");
215
+ let mut stdout = child.stdout.take().expect("Failed to get stdout");
216
+ let mut reader = BufReader::new(stdout);
201
217
 
202
218
  // 处理所有任务
203
219
  while let Ok(task) = task_queue.recv() {
@@ -226,8 +242,19 @@ fn run_simple_worker(
226
242
  break;
227
243
  }
228
244
 
229
- // 通知主线程完成一个任务
230
- let _ = completion_sender.send(());
245
+ // 等待Python子进程完成任务并读取确认信号
246
+ let mut line = String::new();
247
+ if reader.read_line(&mut line).is_err() {
248
+ break;
249
+ }
250
+
251
+ // 只有收到确认信号后才通知主线程完成任务
252
+ if line.trim() == "DONE" {
253
+ let _ = completion_sender.send(());
254
+ } else {
255
+ // 如果没有收到正确的确认信号,跳过这个任务
256
+ continue;
257
+ }
231
258
  }
232
259
 
233
260
  // 发送终止信号
@@ -326,14 +353,13 @@ pub fn run_pools_simple(python_function: PyObject, args: &PyList, n_jobs: usize)
326
353
  let mut completed = 0;
327
354
  while completion_receiver.recv().is_ok() {
328
355
  completed += 1;
329
- if completed % 1000 == 0 {
330
- println!(
331
- "[{}] 📊 已完成 {}/{} 个任务",
332
- Local::now().format("%Y-%m-%d %H:%M:%S"),
333
- completed,
334
- total_tasks
335
- );
336
- }
356
+ print!(
357
+ "[{}] 📊 已完成 {}/{} 个任务",
358
+ Local::now().format("%Y-%m-%d %H:%M:%S"),
359
+ completed,
360
+ total_tasks
361
+ );
362
+ io::stdout().flush().unwrap();
337
363
  }
338
364
 
339
365
  // 等待所有workers完成
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes