proof-of-portfolio 0.0.79__tar.gz → 0.0.81__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 (90) hide show
  1. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/PKG-INFO +1 -1
  2. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/_version.py +1 -1
  3. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/proof_generator.py +53 -50
  4. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/PKG-INFO +1 -1
  5. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/pyproject.toml +1 -1
  6. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/README.md +0 -0
  7. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/__init__.py +0 -0
  8. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/analyze_data.py +0 -0
  9. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/Nargo.toml +0 -0
  10. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/Nargo.toml +0 -0
  11. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/calmar.nr +0 -0
  12. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/drawdown.nr +0 -0
  13. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/merkle.nr +0 -0
  14. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/mod.nr +0 -0
  15. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/omega.nr +0 -0
  16. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/pnl_score.nr +0 -0
  17. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/position.nr +0 -0
  18. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/sharpe.nr +0 -0
  19. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/sortino.nr +0 -0
  20. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/tstat.nr +0 -0
  21. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/lib.nr +0 -0
  22. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/ann_excess_return.nr +0 -0
  23. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/ann_volatility.nr +0 -0
  24. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/average.nr +0 -0
  25. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/constants.nr +0 -0
  26. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/mod.nr +0 -0
  27. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/sqrt.nr +0 -0
  28. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/variance.nr +0 -0
  29. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/weighting_distribution.nr +0 -0
  30. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/generate_inputs.py +0 -0
  31. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/src/main.nr +0 -0
  32. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/target/circuits.json +0 -0
  33. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/vk/vk +0 -0
  34. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_calmar/Nargo.toml +0 -0
  35. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_calmar/src/main.nr +0 -0
  36. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_calmar/target/just_calmar.json +0 -0
  37. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_cps_to_log_return/Nargo.toml +0 -0
  38. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_cps_to_log_return/src/main.nr +0 -0
  39. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_cps_to_log_return/target/just_cps_to_log_return.json +0 -0
  40. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_drawdown/Nargo.toml +0 -0
  41. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_drawdown/src/main.nr +0 -0
  42. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_drawdown/target/just_drawdown.json +0 -0
  43. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_omega/Nargo.toml +0 -0
  44. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_omega/src/main.nr +0 -0
  45. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_omega/target/just_omega.json +0 -0
  46. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_pnl/Nargo.toml +0 -0
  47. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_pnl/src/main.nr +0 -0
  48. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sharpe/Nargo.toml +0 -0
  49. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sharpe/src/main.nr +0 -0
  50. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sharpe/target/just_sharpe.json +0 -0
  51. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sortino/Nargo.toml +0 -0
  52. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sortino/src/main.nr +0 -0
  53. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sortino/target/just_sortino.json +0 -0
  54. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_tstat/Nargo.toml +0 -0
  55. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_tstat/src/main.nr +0 -0
  56. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_tstat/target/just_tstat.json +0 -0
  57. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/merkle_generator/Nargo.toml +0 -0
  58. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/merkle_generator/src/main.nr +0 -0
  59. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/all.py +0 -0
  60. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/calmar.py +0 -0
  61. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/drawdown.py +0 -0
  62. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/generate_input_data.py +0 -0
  63. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/log_returns.py +0 -0
  64. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/main.py +0 -0
  65. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/omega.py +0 -0
  66. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/sharpe.py +0 -0
  67. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/sortino.py +0 -0
  68. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/tstat.py +0 -0
  69. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/utils.py +0 -0
  70. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/main.py +0 -0
  71. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/min_metrics.py +0 -0
  72. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/miner.py +0 -0
  73. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/parsing_utils.py +0 -0
  74. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/post_install.py +0 -0
  75. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/returns_generator/Nargo.toml +0 -0
  76. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/returns_generator/src/main.nr +0 -0
  77. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/returns_generator/target/returns_generator.json +0 -0
  78. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/signal_processor.py +0 -0
  79. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/Nargo.toml +0 -0
  80. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/src/main.nr +0 -0
  81. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/target/tree_generator.json +0 -0
  82. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/target.gz +0 -0
  83. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio/validator.py +0 -0
  84. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/SOURCES.txt +0 -0
  85. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/dependency_links.txt +0 -0
  86. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/entry_points.txt +0 -0
  87. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/requires.txt +0 -0
  88. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/top_level.txt +0 -0
  89. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/setup.cfg +0 -0
  90. {proof_of_portfolio-0.0.79 → proof_of_portfolio-0.0.81}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.79
3
+ Version: 0.0.81
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.79"
2
+ __version__ = "0.0.81"
@@ -3,6 +3,7 @@ import toml
3
3
  import re
4
4
  import os
5
5
  import time
6
+ import json
6
7
  import bittensor as bt
7
8
 
8
9
  # Constants for the circuit
@@ -184,12 +185,12 @@ def run_bb_prove(circuit_dir):
184
185
  Runs barretenberg proving.
185
186
  Returns proof generation time and status.
186
187
  """
187
- print("\n--- Running Barretenberg Proof Generation ---")
188
+ bt.logging.info("\n--- Running Barretenberg Proof Generation ---")
188
189
 
189
190
  try:
190
191
  subprocess.run(["bb", "--version"], capture_output=True, check=True)
191
192
  except (subprocess.CalledProcessError, FileNotFoundError):
192
- print(
193
+ bt.logging.info(
193
194
  "Error: bb (Barretenberg) not found. Please install it using \n`curl -L https://raw.githubusercontent.com/AztecProtocol/aztec-packages/master/barretenberg/cpp/installation/install | bash`"
194
195
  )
195
196
  return None, False
@@ -217,8 +218,8 @@ def run_bb_prove(circuit_dir):
217
218
  prove_time = time.time() - prove_start
218
219
 
219
220
  if prove_result.returncode != 0:
220
- print("bb prove failed:")
221
- print(
221
+ bt.logging.info("bb prove failed:")
222
+ bt.logging.info(
222
223
  " ".join(
223
224
  [
224
225
  "bb",
@@ -232,15 +233,15 @@ def run_bb_prove(circuit_dir):
232
233
  ]
233
234
  )
234
235
  )
235
- print(prove_result.stdout)
236
- print(prove_result.stderr)
236
+ bt.logging.info(prove_result.stdout)
237
+ bt.logging.info(prove_result.stderr)
237
238
  return None, False
238
239
 
239
- print(f"Proof generated in {prove_time:.3f}s")
240
+ bt.logging.info(f"Proof generated in {prove_time:.3f}s")
240
241
  return prove_time, True
241
242
 
242
243
  except Exception as e:
243
- print(f"Error during proof generation/verification: {e}")
244
+ bt.logging.error(f"Error during proof generation/verification: {e}")
244
245
  return None, False
245
246
 
246
247
 
@@ -291,10 +292,9 @@ def generate_proof(
291
292
  if data is None:
292
293
  if verbose:
293
294
  bt.logging.info("Loading data from validator_checkpoint.json...")
294
- import json
295
295
 
296
- with open("validator_checkpoint.json", "r") as f:
297
- data = json.load(f)
296
+ with open("validator_checkpoint.json", "r") as f:
297
+ data = json.load(f)
298
298
  except Exception as e:
299
299
  bt.logging.error(f"Failed to load data {e}")
300
300
 
@@ -454,22 +454,22 @@ def generate_proof(
454
454
  )
455
455
 
456
456
  if verbose:
457
- print(f"Generated signals Merkle root: {signals_merkle_root}")
457
+ bt.logging.info(f"Generated signals Merkle root: {signals_merkle_root}")
458
458
  if isinstance(signals_merkle_root, str) and signals_merkle_root.startswith(
459
459
  "0x"
460
460
  ):
461
- print(f"Signals Merkle root (hex): {signals_merkle_root}")
461
+ bt.logging.info(f"Signals Merkle root (hex): {signals_merkle_root}")
462
462
  else:
463
- print(f"Signals Merkle root (int): {signals_merkle_root}")
463
+ bt.logging.info(f"Signals Merkle root (int): {signals_merkle_root}")
464
464
 
465
465
  if verbose:
466
- print("Returns Merkle root will be calculated within the circuit")
467
- print(f"Number of daily returns: {n_returns}")
466
+ bt.logging.info("Returns Merkle root will be calculated within the circuit")
467
+ bt.logging.info(f"Number of daily returns: {n_returns}")
468
468
 
469
469
  if verbose:
470
- print("Running main proof of portfolio circuit...")
470
+ bt.logging.info("Running main proof of portfolio circuit...")
471
471
  else:
472
- print(f"Generating witness for hotkey {miner_hotkey}...")
472
+ bt.logging.info(f"Generating witness for hotkey {miner_hotkey}...")
473
473
  main_circuit_dir = os.path.join(current_dir, "circuits")
474
474
 
475
475
  # Pass annual risk-free rate (to match ann_excess_return usage)
@@ -514,14 +514,14 @@ def generate_proof(
514
514
  toml.dump(main_prover_input, f)
515
515
 
516
516
  if verbose:
517
- print("Executing main circuit to generate witness...")
517
+ bt.logging.info("Executing main circuit to generate witness...")
518
518
  witness_start = time.time()
519
519
  output = run_command(
520
520
  ["nargo", "execute", "witness", "--silence-warnings"], main_circuit_dir, verbose
521
521
  )
522
522
  witness_time = time.time() - witness_start
523
523
  if verbose:
524
- print(f"Witness generation completed in {witness_time:.3f}s")
524
+ bt.logging.info(f"Witness generation completed in {witness_time:.3f}s")
525
525
 
526
526
  fields = parse_nargo_struct_output(output)
527
527
  if len(fields) < 9:
@@ -586,52 +586,55 @@ def generate_proof(
586
586
  if witness_only:
587
587
  prove_time, proving_success = None, True
588
588
  if verbose:
589
- print("Skipping barretenberg proof generation (witness_only=True)")
589
+ bt.logging.info(
590
+ "Skipping barretenberg proof generation (witness_only=True)"
591
+ )
590
592
  else:
591
593
  try:
592
594
  prove_time, proving_success = run_bb_prove(main_circuit_dir)
593
595
  if prove_time is None:
594
- if verbose:
595
- print("Barretenberg proof generation failed")
596
+ bt.logging.error("Barretenberg proof generation failed")
596
597
  prove_time, proving_success = None, False
597
598
  except Exception as e:
598
- print(f"Exception during proof generation: {e}")
599
+ bt.logging.error(f"Exception during proof generation: {e}")
599
600
  prove_time, proving_success = None, False
600
601
 
601
602
  # Always print key production info: hotkey and verification status
602
- print(f"Hotkey: {miner_hotkey}")
603
- print(f"Orders processed: {signals_count}")
604
- print(f"Signals Merkle Root: {signals_merkle_root}")
605
- print(f"Returns Merkle Root: {returns_merkle_root}")
606
- print(f"Average Daily PnL: {avg_daily_pnl_scaled:.9f}")
607
- print(f"Sharpe Ratio: {sharpe_ratio_scaled:.9f}")
603
+ bt.logging.info(f"Hotkey: {miner_hotkey}")
604
+ bt.logging.info(f"Orders processed: {signals_count}")
605
+ bt.logging.info(f"Signals Merkle Root: {signals_merkle_root}")
606
+ bt.logging.info(f"Returns Merkle Root: {returns_merkle_root}")
607
+ bt.logging.info(f"Average Daily PnL: {avg_daily_pnl_scaled:.9f}")
608
+ bt.logging.info(f"Sharpe Ratio: {sharpe_ratio_scaled:.9f}")
608
609
  # Convert drawdown factor to percentage: drawdown% = (1 - factor) * 100
609
610
  drawdown_percentage = (1 - max_drawdown_scaled) * 100
610
- print(f"Max Drawdown: {max_drawdown_scaled:.9f} ({drawdown_percentage:.6f}%)")
611
- print(f"Calmar Ratio: {calmar_ratio_scaled:.9f}")
612
- print(f"Omega Ratio: {omega_ratio_scaled:.9f}")
613
- print(f"Sortino Ratio: {sortino_ratio_scaled:.9f}")
614
- print(f"Statistical Confidence: {stat_confidence_scaled:.9f}")
615
- print(f"PnL Score: {pnl_score_scaled:.9f}")
611
+ bt.logging.info(
612
+ f"Max Drawdown: {max_drawdown_scaled:.9f} ({drawdown_percentage:.6f}%)"
613
+ )
614
+ bt.logging.info(f"Calmar Ratio: {calmar_ratio_scaled:.9f}")
615
+ bt.logging.info(f"Omega Ratio: {omega_ratio_scaled:.9f}")
616
+ bt.logging.info(f"Sortino Ratio: {sortino_ratio_scaled:.9f}")
617
+ bt.logging.info(f"Statistical Confidence: {stat_confidence_scaled:.9f}")
618
+ bt.logging.info(f"PnL Score: {pnl_score_scaled:.9f}")
616
619
 
617
620
  if verbose:
618
- print("\n--- Proof Generation Complete ---")
619
- print("\n=== MERKLE ROOTS ===")
620
- print(f"Signals Merkle Root: {signals_merkle_root}")
621
- print(f"Returns Merkle Root: {returns_merkle_root}")
622
-
623
- print("\n=== DATA SUMMARY ===")
624
- print(f"Daily returns processed: {n_returns}")
625
- print(f"Trading signals processed: {signals_count}")
626
- print("PnL calculated from cumulative returns in circuit")
627
-
628
- print("\n=== PROOF GENERATION RESULTS ===")
629
- print(f"Witness generation time: {witness_time:.3f}s")
621
+ bt.logging.info("\n--- Proof Generation Complete ---")
622
+ bt.logging.info("\n=== MERKLE ROOTS ===")
623
+ bt.logging.info(f"Signals Merkle Root: {signals_merkle_root}")
624
+ bt.logging.info(f"Returns Merkle Root: {returns_merkle_root}")
625
+
626
+ bt.logging.info("\n=== DATA SUMMARY ===")
627
+ bt.logging.info(f"Daily returns processed: {n_returns}")
628
+ bt.logging.info(f"Trading signals processed: {signals_count}")
629
+ bt.logging.info("PnL calculated from cumulative returns in circuit")
630
+
631
+ bt.logging.info("\n=== PROOF GENERATION RESULTS ===")
632
+ bt.logging.info(f"Witness generation time: {witness_time:.3f}s")
630
633
  if not witness_only:
631
634
  if prove_time is not None:
632
- print(f"Proof generation time: {prove_time:.3f}s")
635
+ bt.logging.info(f"Proof generation time: {prove_time:.3f}s")
633
636
  else:
634
- print("Unable to prove due to an error.")
637
+ bt.logging.info("Unable to prove due to an error.")
635
638
 
636
639
  # Return structured results for programmatic access
637
640
  return {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.79
3
+ Version: 0.0.81
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.79"
8
+ version = "0.0.81"
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" }]