quantcli 0.1.12__tar.gz → 0.1.13__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 (101) hide show
  1. {quantcli-0.1.12/quantcli.egg-info → quantcli-0.1.13}/PKG-INFO +1 -1
  2. {quantcli-0.1.12 → quantcli-0.1.13}/pyproject.toml +1 -1
  3. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/path.py +21 -18
  4. {quantcli-0.1.12 → quantcli-0.1.13/quantcli.egg-info}/PKG-INFO +1 -1
  5. {quantcli-0.1.12 → quantcli-0.1.13}/LICENSE +0 -0
  6. {quantcli-0.1.12 → quantcli-0.1.13}/README.md +0 -0
  7. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/cli.py +0 -0
  8. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/core/__init__.py +0 -0
  9. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/core/backtest.py +0 -0
  10. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/core/data.py +0 -0
  11. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/core/factor.py +0 -0
  12. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/__init__.py +0 -0
  13. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/akshare.py +0 -0
  14. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/baostock.py +0 -0
  15. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/base.py +0 -0
  16. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/cache.py +0 -0
  17. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/fundamentals/__init__.py +0 -0
  18. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/fundamentals/provider.py +0 -0
  19. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/mixed.py +0 -0
  20. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/mysql.py +0 -0
  21. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/sync/__init__.py +0 -0
  22. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/sync/akshare.py +0 -0
  23. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/sync/base.py +0 -0
  24. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/sync/gm.py +0 -0
  25. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/datasources/sync/gm_fundamental.py +0 -0
  26. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/__init__.py +0 -0
  27. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_001.yaml +0 -0
  28. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_002.yaml +0 -0
  29. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_003.yaml +0 -0
  30. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_004.yaml +0 -0
  31. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_005.yaml +0 -0
  32. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_006.yaml +0 -0
  33. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_007.yaml +0 -0
  34. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_008.yaml +0 -0
  35. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_009.yaml +0 -0
  36. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_010.yaml +0 -0
  37. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_011.yaml +0 -0
  38. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_012.yaml +0 -0
  39. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_013.yaml +0 -0
  40. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_014.yaml +0 -0
  41. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_015.yaml +0 -0
  42. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_016.yaml +0 -0
  43. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_017.yaml +0 -0
  44. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_018.yaml +0 -0
  45. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_019.yaml +0 -0
  46. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_020.yaml +0 -0
  47. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_021.yaml +0 -0
  48. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_022.yaml +0 -0
  49. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_023.yaml +0 -0
  50. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_024.yaml +0 -0
  51. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_025.yaml +0 -0
  52. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_026.yaml +0 -0
  53. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_027.yaml +0 -0
  54. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_028.yaml +0 -0
  55. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_029.yaml +0 -0
  56. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_030.yaml +0 -0
  57. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_031.yaml +0 -0
  58. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_032.yaml +0 -0
  59. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_033.yaml +0 -0
  60. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_034.yaml +0 -0
  61. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_035.yaml +0 -0
  62. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_036.yaml +0 -0
  63. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_037.yaml +0 -0
  64. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_038.yaml +0 -0
  65. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_039.yaml +0 -0
  66. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/alpha101/alpha_040.yaml +0 -0
  67. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/base.py +0 -0
  68. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/compute.py +0 -0
  69. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/loader.py +0 -0
  70. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/pipeline.py +0 -0
  71. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/ranking.py +0 -0
  72. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/ranking_executor.py +0 -0
  73. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/screening.py +0 -0
  74. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/factors/screening_executor.py +0 -0
  75. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/models/bar.py +0 -0
  76. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/parser/__init__.py +0 -0
  77. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/parser/constants.py +0 -0
  78. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/parser/formula.py +0 -0
  79. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/__init__.py +0 -0
  80. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/env.py +0 -0
  81. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/logger.py +0 -0
  82. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/symbol_utils.py +0 -0
  83. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/time.py +0 -0
  84. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli/utils/validate.py +0 -0
  85. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli.egg-info/SOURCES.txt +0 -0
  86. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli.egg-info/dependency_links.txt +0 -0
  87. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli.egg-info/entry_points.txt +0 -0
  88. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli.egg-info/requires.txt +0 -0
  89. {quantcli-0.1.12 → quantcli-0.1.13}/quantcli.egg-info/top_level.txt +0 -0
  90. {quantcli-0.1.12 → quantcli-0.1.13}/setup.cfg +0 -0
  91. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_akshare_integration.py +0 -0
  92. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_builtin_factors.py +0 -0
  93. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_cli.py +0 -0
  94. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_datasources.py +0 -0
  95. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_factors.py +0 -0
  96. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_gm_executors.py +0 -0
  97. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_mixed_datasource.py +0 -0
  98. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_multi_factor.py +0 -0
  99. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_pipeline_integration.py +0 -0
  100. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_symbol_utils.py +0 -0
  101. {quantcli-0.1.12 → quantcli-0.1.13}/tests/test_time.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantcli
3
- Version: 0.1.12
3
+ Version: 0.1.13
4
4
  Summary: 面向AI的多因子量化选股策略挖掘工具,AI Agent 友好 CLI
5
5
  Author-email: QuantCLI Team <quantcli@example.com>
6
6
  Project-URL: repository, https://github.com/wumu2013/quantcli
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "quantcli"
7
- version = "0.1.12"
7
+ version = "0.1.13"
8
8
  description = "面向AI的多因子量化选股策略挖掘工具,AI Agent 友好 CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -76,6 +76,7 @@ def set_project_root(path: Union[str, Path]):
76
76
  # 目录快捷方式
77
77
  # =============================================================================
78
78
 
79
+
79
80
  def data_dir(sub: str = "") -> Path:
80
81
  """数据目录
81
82
 
@@ -115,26 +116,20 @@ def factors_dir() -> Path:
115
116
  def builtin_factors_dir() -> Path:
116
117
  """内置因子目录 (quantcli/factors/)
117
118
 
118
- 兼容可编辑安装模式。
119
- 对于可编辑安装,包在 project_root/quantcli/ 目录下。
120
- 对于标准安装,包在 site-packages/quantcli/ 目录下。
119
+ 标准安装: quantcli 在 site-packages 目录下。
120
+ 返回 quantcli/factors/alpha101/ 作为内置因子目录。
121
121
 
122
122
  Returns:
123
- 内置因子目录 Path
123
+ 内置因子目录 Path (quantcli/factors/)
124
124
  """
125
- root = project_root()
126
- cli_path = root / "quantcli"
125
+ import importlib.util
127
126
 
128
- # 可编辑安装: quantcli 是项目子目录
129
- if cli_path.exists():
130
- return cli_path / "factors"
127
+ spec = importlib.util.find_spec("quantcli")
128
+ if spec is None or spec.submodule_search_locations is None:
129
+ raise RuntimeError("quantcli package location not found")
131
130
 
132
- # 标准安装: quantcli 在 site-packages
133
- import quantcli
134
- try:
135
- return Path(quantcli.__file__).parent / "factors"
136
- except (TypeError, AttributeError):
137
- return root / "factors"
131
+ # 取第一个搜索位置
132
+ return Path(spec.submodule_search_locations[0]) / "factors"
138
133
 
139
134
 
140
135
  def strategies_dir() -> Path:
@@ -171,6 +166,7 @@ def tests_dir() -> Path:
171
166
  # 目录操作
172
167
  # =============================================================================
173
168
 
169
+
174
170
  def ensure_dir(path: Union[str, Path]) -> Path:
175
171
  """确保目录存在
176
172
 
@@ -250,12 +246,14 @@ def copy_dir(src: Union[str, Path], dst: Union[str, Path]):
250
246
  copy_dir(item, src_path)
251
247
  else:
252
248
  import shutil
249
+
253
250
  shutil.copy2(item, src_path)
254
251
 
255
252
 
256
253
  def move_dir(src: Union[str, Path], dst: Union[str, Path]):
257
254
  """移动目录"""
258
255
  import shutil
256
+
259
257
  shutil.move(str(src), str(dst))
260
258
 
261
259
 
@@ -263,10 +261,9 @@ def move_dir(src: Union[str, Path], dst: Union[str, Path]):
263
261
  # 文件操作
264
262
  # =============================================================================
265
263
 
264
+
266
265
  def find_files(
267
- pattern: str,
268
- root: Optional[Path] = None,
269
- recursive: bool = True
266
+ pattern: str, root: Optional[Path] = None, recursive: bool = True
270
267
  ) -> List[Path]:
271
268
  """查找文件
272
269
 
@@ -319,6 +316,7 @@ def file_age(path: Union[str, Path]) -> float:
319
316
  文件创建时间距今的秒数
320
317
  """
321
318
  import time
319
+
322
320
  path = Path(path)
323
321
  if not path.exists():
324
322
  return float("inf")
@@ -350,6 +348,7 @@ def format_size(size: int) -> str:
350
348
  # 路径工具
351
349
  # =============================================================================
352
350
 
351
+
353
352
  def normpath(path: Union[str, Path]) -> Path:
354
353
  """规范化路径"""
355
354
  return Path(os.path.normpath(path))
@@ -393,6 +392,7 @@ def is_subpath(path: Union[str, Path], parent: Union[str, Path]) -> bool:
393
392
  # 扩展名处理
394
393
  # =============================================================================
395
394
 
395
+
396
396
  def get_extension(path: Union[str, Path]) -> str:
397
397
  """获取文件扩展名 (含点)"""
398
398
  return Path(path).suffix
@@ -415,6 +415,7 @@ def replace_extension(path: Union[str, Path], new_ext: str) -> Path:
415
415
  # 临时文件
416
416
  # =============================================================================
417
417
 
418
+
418
419
  def temp_dir(sub: str = "") -> Path:
419
420
  """获取临时目录
420
421
 
@@ -425,6 +426,7 @@ def temp_dir(sub: str = "") -> Path:
425
426
  临时目录路径
426
427
  """
427
428
  import tempfile
429
+
428
430
  base = tempfile.gettempdir()
429
431
  path = Path(base) / "quantcli"
430
432
  if sub:
@@ -442,6 +444,7 @@ def temp_file(suffix: str = "") -> Path:
442
444
  临时文件路径
443
445
  """
444
446
  import tempfile
447
+
445
448
  fd, path = tempfile.mkstemp(suffix=suffix)
446
449
  os.close(fd)
447
450
  return Path(path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantcli
3
- Version: 0.1.12
3
+ Version: 0.1.13
4
4
  Summary: 面向AI的多因子量化选股策略挖掘工具,AI Agent 友好 CLI
5
5
  Author-email: QuantCLI Team <quantcli@example.com>
6
6
  Project-URL: repository, https://github.com/wumu2013/quantcli
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes