proof-of-portfolio 0.0.50__tar.gz → 0.0.51__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 (94) hide show
  1. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/PKG-INFO +1 -1
  2. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/_version.py +1 -1
  3. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/proof_generator.py +44 -4
  4. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio.egg-info/PKG-INFO +1 -1
  5. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/pyproject.toml +1 -1
  6. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/README.md +0 -0
  7. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/__init__.py +0 -0
  8. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/analyze_data.py +0 -0
  9. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/Nargo.toml +0 -0
  10. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/Nargo.toml +0 -0
  11. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/calmar.nr +0 -0
  12. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/cps_to_log_returns.nr +0 -0
  13. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/drawdown.nr +0 -0
  14. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/merkle.nr +0 -0
  15. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/mod.nr +0 -0
  16. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/omega.nr +0 -0
  17. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/position.nr +0 -0
  18. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/sharpe.nr +0 -0
  19. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/sortino.nr +0 -0
  20. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/core/tstat.nr +0 -0
  21. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/float/Nargo.toml +0 -0
  22. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/float/Verifier.toml +0 -0
  23. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/float/src/lib.nr +0 -0
  24. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/lib.nr +0 -0
  25. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/nrstat.nr +0 -0
  26. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/ann_excess_return.nr +0 -0
  27. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/ann_volatility.nr +0 -0
  28. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/average.nr +0 -0
  29. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/constants.nr +0 -0
  30. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/mod.nr +0 -0
  31. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/sqrt.nr +0 -0
  32. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/variance.nr +0 -0
  33. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/components/src/utils/weighting_distribution.nr +0 -0
  34. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/generate_inputs.py +0 -0
  35. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/proof/proof +0 -0
  36. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/proof/public_inputs +0 -0
  37. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/src/main.nr +0 -0
  38. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/target/circuits.json +0 -0
  39. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/circuits/vk/vk +0 -0
  40. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_calmar/Nargo.toml +0 -0
  41. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_calmar/src/main.nr +0 -0
  42. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_calmar/target/just_calmar.json +0 -0
  43. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_cps_to_log_return/Nargo.toml +0 -0
  44. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_cps_to_log_return/src/main.nr +0 -0
  45. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_cps_to_log_return/target/just_cps_to_log_return.json +0 -0
  46. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_drawdown/Nargo.toml +0 -0
  47. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_drawdown/src/main.nr +0 -0
  48. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_drawdown/target/just_drawdown.json +0 -0
  49. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_omega/Nargo.toml +0 -0
  50. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_omega/src/main.nr +0 -0
  51. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_omega/target/just_omega.json +0 -0
  52. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_sharpe/Nargo.toml +0 -0
  53. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_sharpe/src/main.nr +0 -0
  54. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_sharpe/target/just_sharpe.json +0 -0
  55. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_sortino/Nargo.toml +0 -0
  56. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_sortino/src/main.nr +0 -0
  57. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_sortino/target/just_sortino.json +0 -0
  58. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_tstat/Nargo.toml +0 -0
  59. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_tstat/src/main.nr +0 -0
  60. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/just_tstat/target/just_tstat.json +0 -0
  61. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/merkle_generator/Nargo.toml +0 -0
  62. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demo/merkle_generator/src/main.nr +0 -0
  63. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/all.py +0 -0
  64. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/calmar.py +0 -0
  65. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/drawdown.py +0 -0
  66. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/generate_input_data.py +0 -0
  67. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/log_returns.py +0 -0
  68. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/main.py +0 -0
  69. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/omega.py +0 -0
  70. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/sharpe.py +0 -0
  71. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/sortino.py +0 -0
  72. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/tstat.py +0 -0
  73. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/demos/utils.py +0 -0
  74. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/main.py +0 -0
  75. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/min_metrics.py +0 -0
  76. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/miner.py +0 -0
  77. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/parsing_utils.py +0 -0
  78. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/post_install.py +0 -0
  79. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/returns_generator/Nargo.toml +0 -0
  80. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/returns_generator/src/main.nr +0 -0
  81. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/returns_generator/target/returns_generator.json +0 -0
  82. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/signal_processor.py +0 -0
  83. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/tree_generator/Nargo.toml +0 -0
  84. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/tree_generator/src/main.nr +0 -0
  85. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/tree_generator/target/tree_generator.json +0 -0
  86. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/tree_generator/target.gz +0 -0
  87. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio/validator.py +0 -0
  88. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio.egg-info/SOURCES.txt +0 -0
  89. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio.egg-info/dependency_links.txt +0 -0
  90. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio.egg-info/entry_points.txt +0 -0
  91. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio.egg-info/requires.txt +0 -0
  92. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/proof_of_portfolio.egg-info/top_level.txt +0 -0
  93. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/setup.cfg +0 -0
  94. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.51}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.50
3
+ Version: 0.0.51
4
4
  Summary: Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics
5
5
  Author-email: "Inference Labs, Inc." <info@inferencelabs.com>
6
6
  Requires-Python: >=3.10
@@ -1,2 +1,2 @@
1
1
  # This file is auto-generated during build
2
- __version__ = "0.0.50"
2
+ __version__ = "0.0.51"
@@ -253,6 +253,45 @@ def run_bb_prove(circuit_dir):
253
253
  return None, False
254
254
 
255
255
 
256
+ def aggregate_daily_returns(cps, target_duration, daily_checkpoints=2):
257
+ """
258
+ Aggregate checkpoint returns into daily returns following subnet's daily_return_log logic.
259
+ Only includes complete days with proper checkpoint accumulation.
260
+
261
+ Args:
262
+ cps: List of checkpoint dictionaries
263
+ target_duration: Target checkpoint duration in ms
264
+ daily_checkpoints: Number of checkpoints expected per day (from ValiConfig.DAILY_CHECKPOINTS)
265
+ """
266
+ from datetime import datetime, timezone
267
+
268
+ if not cps:
269
+ return []
270
+
271
+ TARGET_CHECKPOINT_DURATION_MS = target_duration
272
+
273
+ daily_groups = {}
274
+
275
+ for cp in cps:
276
+ start_time = cp["last_update_ms"] - cp["accum_ms"]
277
+ full_cell = cp["accum_ms"] == TARGET_CHECKPOINT_DURATION_MS
278
+
279
+ running_date = datetime.fromtimestamp(start_time / 1000, tz=timezone.utc).date()
280
+
281
+ if full_cell:
282
+ if running_date not in daily_groups:
283
+ daily_groups[running_date] = []
284
+ daily_groups[running_date].append(cp)
285
+
286
+ daily_returns = []
287
+ for running_date, day_checkpoints in sorted(daily_groups.items()):
288
+ if len(day_checkpoints) == daily_checkpoints:
289
+ daily_return = sum(cp["gain"] + cp["loss"] for cp in day_checkpoints)
290
+ daily_returns.append(daily_return)
291
+
292
+ return daily_returns
293
+
294
+
256
295
  def generate_proof(
257
296
  data=None,
258
297
  miner_hotkey=None,
@@ -260,6 +299,7 @@ def generate_proof(
260
299
  annual_risk_free_percentage=4.19,
261
300
  use_weighting=False,
262
301
  bypass_confidence=False,
302
+ daily_checkpoints=2,
263
303
  ):
264
304
  """
265
305
  Core proof generation logic.
@@ -274,6 +314,7 @@ def generate_proof(
274
314
  annual_risk_free_percentage: Annual risk-free rate percentage (default 4.19)
275
315
  use_weighting: Whether to use weighted calculations (default False)
276
316
  bypass_confidence: Whether to bypass confidence thresholds (default False)
317
+ daily_checkpoints: Number of checkpoints expected per day (default 2)
277
318
 
278
319
  Returns:
279
320
  Dictionary with proof results including status, portfolio_metrics, etc.
@@ -611,10 +652,9 @@ def generate_proof(
611
652
 
612
653
  # Calculate MinMetrics (Python) for comparison with ZK circuit
613
654
  try:
614
- # Extract raw sum values from checkpoint data (matching subnet's daily_return_log)
615
- daily_log_returns = []
616
- for cp in cps:
617
- daily_log_returns.append(cp["gain"] + cp["loss"])
655
+ daily_log_returns = aggregate_daily_returns(
656
+ cps, target_duration, daily_checkpoints
657
+ )
618
658
 
619
659
  if len(daily_log_returns) > 0:
620
660
  python_avg_daily_pnl = MinMetrics.average(daily_log_returns)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.50
3
+ Version: 0.0.51
4
4
  Summary: Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics
5
5
  Author-email: "Inference Labs, Inc." <info@inferencelabs.com>
6
6
  Requires-Python: >=3.10
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "proof-of-portfolio"
8
- version = "0.0.50"
8
+ version = "0.0.51"
9
9
  description = "Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics"
10
10
  readme = "README.md"
11
11
  authors = [{ name = "Inference Labs, Inc.", email = "info@inferencelabs.com" }]