proof-of-portfolio 0.0.93__tar.gz → 0.0.94__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 (92) hide show
  1. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/PKG-INFO +1 -1
  2. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/_version.py +1 -1
  3. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/calmar.nr +8 -5
  4. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/omega.nr +36 -24
  5. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/src/main.nr +2 -0
  6. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/target/circuits.json +1 -1
  7. proof_of_portfolio-0.0.94/proof_of_portfolio/circuits/vk/vk +0 -0
  8. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/proof_generator.py +4 -1
  9. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio.egg-info/PKG-INFO +1 -1
  10. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/pyproject.toml +1 -1
  11. proof_of_portfolio-0.0.93/proof_of_portfolio/circuits/vk/vk +0 -0
  12. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/README.md +0 -0
  13. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/__init__.py +0 -0
  14. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/analyze_data.py +0 -0
  15. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/Nargo.toml +0 -0
  16. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/Nargo.toml +0 -0
  17. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/drawdown.nr +0 -0
  18. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/merkle.nr +0 -0
  19. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/mod.nr +0 -0
  20. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/pnl_score.nr +0 -0
  21. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/position.nr +0 -0
  22. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/sharpe.nr +0 -0
  23. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/sortino.nr +0 -0
  24. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/core/tstat.nr +0 -0
  25. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/lib.nr +0 -0
  26. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/ann_excess_return.nr +0 -0
  27. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/ann_volatility.nr +0 -0
  28. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/average.nr +0 -0
  29. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/constants.nr +0 -0
  30. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/mod.nr +0 -0
  31. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/risk_normalization.nr +0 -0
  32. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/sqrt.nr +0 -0
  33. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/variance.nr +0 -0
  34. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/components/src/utils/weighting_distribution.nr +0 -0
  35. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/circuits/generate_inputs.py +0 -0
  36. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_calmar/Nargo.toml +0 -0
  37. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_calmar/src/main.nr +0 -0
  38. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_calmar/target/just_calmar.json +0 -0
  39. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_cps_to_log_return/Nargo.toml +0 -0
  40. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_cps_to_log_return/src/main.nr +0 -0
  41. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_cps_to_log_return/target/just_cps_to_log_return.json +0 -0
  42. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_drawdown/Nargo.toml +0 -0
  43. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_drawdown/src/main.nr +0 -0
  44. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_drawdown/target/just_drawdown.json +0 -0
  45. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_omega/Nargo.toml +0 -0
  46. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_omega/src/main.nr +0 -0
  47. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_omega/target/just_omega.json +0 -0
  48. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_pnl/Nargo.toml +0 -0
  49. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_pnl/src/main.nr +0 -0
  50. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_sharpe/Nargo.toml +0 -0
  51. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_sharpe/src/main.nr +0 -0
  52. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_sharpe/target/just_sharpe.json +0 -0
  53. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_sortino/Nargo.toml +0 -0
  54. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_sortino/src/main.nr +0 -0
  55. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_sortino/target/just_sortino.json +0 -0
  56. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_tstat/Nargo.toml +0 -0
  57. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_tstat/src/main.nr +0 -0
  58. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/just_tstat/target/just_tstat.json +0 -0
  59. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/merkle_generator/Nargo.toml +0 -0
  60. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demo/merkle_generator/src/main.nr +0 -0
  61. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/all.py +0 -0
  62. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/calmar.py +0 -0
  63. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/drawdown.py +0 -0
  64. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/generate_input_data.py +0 -0
  65. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/log_returns.py +0 -0
  66. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/main.py +0 -0
  67. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/omega.py +0 -0
  68. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/sharpe.py +0 -0
  69. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/sortino.py +0 -0
  70. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/tstat.py +0 -0
  71. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/demos/utils.py +0 -0
  72. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/main.py +0 -0
  73. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/min_metrics.py +0 -0
  74. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/miner.py +0 -0
  75. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/parsing_utils.py +0 -0
  76. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/post_install.py +0 -0
  77. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/returns_generator/Nargo.toml +0 -0
  78. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/returns_generator/src/main.nr +0 -0
  79. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/returns_generator/target/returns_generator.json +0 -0
  80. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/signal_processor.py +0 -0
  81. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/tree_generator/Nargo.toml +0 -0
  82. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/tree_generator/src/main.nr +0 -0
  83. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/tree_generator/target/tree_generator.json +0 -0
  84. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/tree_generator/target.gz +0 -0
  85. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio/validator.py +0 -0
  86. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio.egg-info/SOURCES.txt +0 -0
  87. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio.egg-info/dependency_links.txt +0 -0
  88. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio.egg-info/entry_points.txt +0 -0
  89. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio.egg-info/requires.txt +0 -0
  90. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/proof_of_portfolio.egg-info/top_level.txt +0 -0
  91. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/setup.cfg +0 -0
  92. {proof_of_portfolio-0.0.93 → proof_of_portfolio-0.0.94}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.93
3
+ Version: 0.0.94
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.93"
2
+ __version__ = "0.0.94"
@@ -18,6 +18,7 @@ pub fn calmar(
18
18
  avg_daily_return: i64,
19
19
  variance_val: i64,
20
20
  ann_excess_return_val: i64,
21
+ calmar_cap: i64,
21
22
  ) -> i64 {
22
23
  if !bypass_confidence & actual_len < STATISTICAL_CONFIDENCE_MINIMUM_N {
23
24
  CALMAR_NOCONFIDENCE_VALUE
@@ -29,13 +30,11 @@ pub fn calmar(
29
30
  if drawdown_normalization_factor == 0 {
30
31
  0
31
32
  } else {
32
- let raw_calmar = ((base_return_percentage * drawdown_normalization_factor) / SCALE)
33
- * RATIO_SCALE_FACTOR;
34
- let calmar_cap = 10 * RATIO_SCALE_FACTOR;
33
+ let raw_calmar = (base_return_percentage * drawdown_normalization_factor) / SCALE;
35
34
  if raw_calmar > calmar_cap {
36
- calmar_cap
35
+ calmar_cap * RATIO_SCALE_FACTOR
37
36
  } else {
38
- raw_calmar
37
+ raw_calmar * RATIO_SCALE_FACTOR
39
38
  }
40
39
  }
41
40
  }
@@ -67,6 +66,7 @@ fn test_calmar_normal_case() {
67
66
  avg,
68
67
  variance_val,
69
68
  ann_excess,
69
+ 1,
70
70
  );
71
71
  assert(result != 0);
72
72
  }
@@ -91,6 +91,7 @@ fn test_calmar_insufficient_data() {
91
91
  avg,
92
92
  variance_val,
93
93
  ann_excess,
94
+ 1,
94
95
  );
95
96
  assert(result == 0);
96
97
  }
@@ -116,6 +117,7 @@ fn test_calmar_exactly_30_days() {
116
117
  avg,
117
118
  variance_val,
118
119
  ann_excess,
120
+ 1,
119
121
  );
120
122
  assert(result != 0);
121
123
  }
@@ -141,6 +143,7 @@ fn test_calmar_negative_returns() {
141
143
  avg,
142
144
  variance_val,
143
145
  ann_excess,
146
+ 1,
144
147
  );
145
148
  assert(result != 0);
146
149
  }
@@ -33,46 +33,58 @@ pub fn omega(
33
33
  }
34
34
  }
35
35
 
36
- if sum_weights_positive == 0 {
37
- sum_weights_positive = OMEGA_LOSS_MINIMUM;
38
- }
39
- if sum_weights_negative == 0 {
40
- sum_weights_negative = OMEGA_LOSS_MINIMUM;
41
- }
42
-
43
- let positive_sum_u128 = (product_sum_positive as u128) * (sum_weights_negative as u128);
44
- let negative_sum_u128 = ((-product_sum_negative) as u128) * (sum_weights_positive as u128);
45
-
46
- let positive_sum = (positive_sum_u128 / 1000000) as i64;
47
- let negative_sum = (negative_sum_u128 / 1000000) as i64;
36
+ let mean_pos = if sum_weights_positive != 0 {
37
+ product_sum_positive / sum_weights_positive
38
+ } else {
39
+ 0
40
+ };
41
+ let mean_neg = if sum_weights_negative != 0 {
42
+ (-product_sum_negative) / sum_weights_negative
43
+ } else {
44
+ 0
45
+ };
48
46
 
49
- let effective_denominator = if negative_sum >= OMEGA_LOSS_MINIMUM {
50
- negative_sum
47
+ let effective_denominator = if mean_neg >= OMEGA_LOSS_MINIMUM {
48
+ mean_neg
51
49
  } else {
52
50
  OMEGA_LOSS_MINIMUM
53
51
  };
54
- let final_calc = ((positive_sum as u128) * (RATIO_SCALE_FACTOR as u128)) / (effective_denominator as u128);
55
- final_calc as i64
52
+ (mean_pos * RATIO_SCALE_FACTOR) / effective_denominator
56
53
  } else {
57
- let mut positive_sum: u64 = 0;
58
- let mut negative_sum: u64 = 0;
54
+ let mut positive_sum: i64 = 0;
55
+ let mut negative_sum: i64 = 0;
56
+ let mut count_pos: u32 = 0;
57
+ let mut count_neg: u32 = 0;
59
58
 
60
59
  for i in 0..ARRAY_SIZE {
61
60
  if (i as u32) < actual_len {
62
61
  if log_returns[i] > 0 {
63
- positive_sum = positive_sum + (log_returns[i] as u64);
62
+ positive_sum += log_returns[i];
63
+ count_pos += 1;
64
64
  } else if log_returns[i] < 0 {
65
- negative_sum = negative_sum + ((-log_returns[i]) as u64);
65
+ negative_sum += (-log_returns[i]);
66
+ count_neg += 1;
66
67
  }
67
68
  }
68
69
  }
69
70
 
70
- let effective_denominator = if negative_sum >= OMEGA_LOSS_MINIMUM as u64 {
71
- negative_sum
71
+ let mean_pos = if count_pos > 0 {
72
+ positive_sum / (count_pos as i64)
73
+ } else {
74
+ 0
75
+ };
76
+ let mean_neg = if count_neg > 0 {
77
+ negative_sum / (count_neg as i64)
72
78
  } else {
73
- OMEGA_LOSS_MINIMUM as u64
79
+ 0
80
+ };
81
+
82
+ let effective_denominator = if mean_neg >= OMEGA_LOSS_MINIMUM {
83
+ mean_neg
84
+ } else {
85
+ OMEGA_LOSS_MINIMUM
74
86
  };
75
- ((positive_sum * RATIO_SCALE_FACTOR as u64) / effective_denominator) as i64
87
+ (mean_pos * RATIO_SCALE_FACTOR) / effective_denominator
76
88
  }
77
89
  }
78
90
  }
@@ -26,6 +26,7 @@ fn main(
26
26
  bypass_confidence: pub bool,
27
27
  account_size: i64,
28
28
  weights: [i64; ARRAY_SIZE],
29
+ calmar_cap: i64,
29
30
  ) -> pub [Field; 9] {
30
31
  // Verify all trading signals are included in the merkle tree
31
32
  let mut all_verified = true;
@@ -141,6 +142,7 @@ fn main(
141
142
  avg_daily_return,
142
143
  variance_val,
143
144
  ann_excess_return_val,
145
+ calmar_cap,
144
146
  );
145
147
  let omega_ratio = omega(
146
148
  returns_array,