proof-of-portfolio 0.0.50__tar.gz → 0.0.52__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.52}/PKG-INFO +1 -1
  2. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/__init__.py +6 -0
  3. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/_version.py +1 -1
  4. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/proof_generator.py +44 -4
  5. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio.egg-info/PKG-INFO +1 -1
  6. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/pyproject.toml +1 -1
  7. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/README.md +0 -0
  8. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/analyze_data.py +0 -0
  9. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/Nargo.toml +0 -0
  10. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/Nargo.toml +0 -0
  11. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/calmar.nr +0 -0
  12. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/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.52}/proof_of_portfolio/circuits/components/src/core/drawdown.nr +0 -0
  14. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/merkle.nr +0 -0
  15. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/mod.nr +0 -0
  16. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/omega.nr +0 -0
  17. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/position.nr +0 -0
  18. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/sharpe.nr +0 -0
  19. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/sortino.nr +0 -0
  20. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/core/tstat.nr +0 -0
  21. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/float/Nargo.toml +0 -0
  22. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/float/Verifier.toml +0 -0
  23. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/float/src/lib.nr +0 -0
  24. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/lib.nr +0 -0
  25. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/nrstat.nr +0 -0
  26. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/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.52}/proof_of_portfolio/circuits/components/src/utils/ann_volatility.nr +0 -0
  28. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/utils/average.nr +0 -0
  29. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/utils/constants.nr +0 -0
  30. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/utils/mod.nr +0 -0
  31. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/utils/sqrt.nr +0 -0
  32. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/utils/variance.nr +0 -0
  33. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/components/src/utils/weighting_distribution.nr +0 -0
  34. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/generate_inputs.py +0 -0
  35. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/proof/proof +0 -0
  36. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/proof/public_inputs +0 -0
  37. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/src/main.nr +0 -0
  38. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/target/circuits.json +0 -0
  39. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/circuits/vk/vk +0 -0
  40. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_calmar/Nargo.toml +0 -0
  41. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_calmar/src/main.nr +0 -0
  42. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_calmar/target/just_calmar.json +0 -0
  43. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/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.52}/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.52}/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.52}/proof_of_portfolio/demo/just_drawdown/Nargo.toml +0 -0
  47. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_drawdown/src/main.nr +0 -0
  48. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_drawdown/target/just_drawdown.json +0 -0
  49. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_omega/Nargo.toml +0 -0
  50. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_omega/src/main.nr +0 -0
  51. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_omega/target/just_omega.json +0 -0
  52. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_sharpe/Nargo.toml +0 -0
  53. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_sharpe/src/main.nr +0 -0
  54. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_sharpe/target/just_sharpe.json +0 -0
  55. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_sortino/Nargo.toml +0 -0
  56. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_sortino/src/main.nr +0 -0
  57. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_sortino/target/just_sortino.json +0 -0
  58. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_tstat/Nargo.toml +0 -0
  59. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_tstat/src/main.nr +0 -0
  60. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/just_tstat/target/just_tstat.json +0 -0
  61. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/merkle_generator/Nargo.toml +0 -0
  62. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demo/merkle_generator/src/main.nr +0 -0
  63. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/all.py +0 -0
  64. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/calmar.py +0 -0
  65. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/drawdown.py +0 -0
  66. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/generate_input_data.py +0 -0
  67. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/log_returns.py +0 -0
  68. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/main.py +0 -0
  69. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/omega.py +0 -0
  70. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/sharpe.py +0 -0
  71. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/sortino.py +0 -0
  72. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/tstat.py +0 -0
  73. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/demos/utils.py +0 -0
  74. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/main.py +0 -0
  75. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/min_metrics.py +0 -0
  76. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/miner.py +0 -0
  77. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/parsing_utils.py +0 -0
  78. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/post_install.py +0 -0
  79. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/returns_generator/Nargo.toml +0 -0
  80. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/returns_generator/src/main.nr +0 -0
  81. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/returns_generator/target/returns_generator.json +0 -0
  82. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/signal_processor.py +0 -0
  83. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/tree_generator/Nargo.toml +0 -0
  84. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/tree_generator/src/main.nr +0 -0
  85. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/tree_generator/target/tree_generator.json +0 -0
  86. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/tree_generator/target.gz +0 -0
  87. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio/validator.py +0 -0
  88. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio.egg-info/SOURCES.txt +0 -0
  89. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio.egg-info/dependency_links.txt +0 -0
  90. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio.egg-info/entry_points.txt +0 -0
  91. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio.egg-info/requires.txt +0 -0
  92. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/proof_of_portfolio.egg-info/top_level.txt +0 -0
  93. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/setup.cfg +0 -0
  94. {proof_of_portfolio-0.0.50 → proof_of_portfolio-0.0.52}/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.52
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
@@ -59,6 +59,7 @@ def _prove_worker(
59
59
  annual_risk_free_percentage=4.19,
60
60
  use_weighting=False,
61
61
  bypass_confidence=False,
62
+ daily_checkpoints=2,
62
63
  ):
63
64
  """
64
65
  Worker function to run proof generation in a separate process.
@@ -73,6 +74,7 @@ def _prove_worker(
73
74
  annual_risk_free_percentage=annual_risk_free_percentage,
74
75
  use_weighting=use_weighting,
75
76
  bypass_confidence=bypass_confidence,
77
+ daily_checkpoints=daily_checkpoints,
76
78
  )
77
79
 
78
80
  return {
@@ -102,6 +104,7 @@ async def prove(
102
104
  annual_risk_free_percentage=4.19,
103
105
  use_weighting=False,
104
106
  bypass_confidence=False,
107
+ daily_checkpoints=2,
105
108
  ):
106
109
  """
107
110
  Generate zero-knowledge proof for miner portfolio data asynchronously.
@@ -127,6 +130,7 @@ async def prove(
127
130
  annual_risk_free_percentage,
128
131
  use_weighting,
129
132
  bypass_confidence,
133
+ daily_checkpoints,
130
134
  )
131
135
  return result
132
136
  except Exception as e:
@@ -144,6 +148,7 @@ def prove_sync(
144
148
  annual_risk_free_percentage=4.19,
145
149
  use_weighting=False,
146
150
  bypass_confidence=False,
151
+ daily_checkpoints=2,
147
152
  ):
148
153
  """
149
154
  Synchronous wrapper for the prove function for backward compatibility.
@@ -163,4 +168,5 @@ def prove_sync(
163
168
  annual_risk_free_percentage,
164
169
  use_weighting,
165
170
  bypass_confidence,
171
+ daily_checkpoints,
166
172
  )
@@ -1,2 +1,2 @@
1
1
  # This file is auto-generated during build
2
- __version__ = "0.0.50"
2
+ __version__ = "0.0.52"
@@ -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.52
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.52"
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" }]