proof-of-portfolio 0.0.107__py3-none-any.whl → 0.0.109__py3-none-any.whl
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.
- proof_of_portfolio/_version.py +1 -1
- proof_of_portfolio/circuits/components/src/core/omega.nr +15 -29
- proof_of_portfolio/circuits/target/circuits.json +1 -1
- proof_of_portfolio/proof_generator.py +1 -1
- {proof_of_portfolio-0.0.107.dist-info → proof_of_portfolio-0.0.109.dist-info}/METADATA +1 -1
- {proof_of_portfolio-0.0.107.dist-info → proof_of_portfolio-0.0.109.dist-info}/RECORD +9 -9
- {proof_of_portfolio-0.0.107.dist-info → proof_of_portfolio-0.0.109.dist-info}/WHEEL +0 -0
- {proof_of_portfolio-0.0.107.dist-info → proof_of_portfolio-0.0.109.dist-info}/entry_points.txt +0 -0
- {proof_of_portfolio-0.0.107.dist-info → proof_of_portfolio-0.0.109.dist-info}/top_level.txt +0 -0
proof_of_portfolio/_version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# This file is auto-generated during build
|
2
|
-
__version__ = "0.0.
|
2
|
+
__version__ = "0.0.109"
|
@@ -35,7 +35,6 @@ pub fn omega(
|
|
35
35
|
}
|
36
36
|
}
|
37
37
|
|
38
|
-
// Apply max with omega_loss_min like in Python reference
|
39
38
|
let sum_weights_positive = if sum_weights_positive_raw >= omega_loss_min {
|
40
39
|
sum_weights_positive_raw
|
41
40
|
} else {
|
@@ -47,20 +46,18 @@ pub fn omega(
|
|
47
46
|
omega_loss_min
|
48
47
|
};
|
49
48
|
|
50
|
-
|
51
|
-
// positive_sum = product_sum_positive * sum_weights_negative
|
52
|
-
// negative_sum = product_sum_negative * sum_weights_positive
|
53
|
-
// final = (positive_sum * RATIO_SCALE_FACTOR) / max(abs(negative_sum), omega_loss_min)
|
54
|
-
|
55
|
-
// Scale down product_sums first to prevent overflow in cross-multiplication
|
56
|
-
let scale_factor = 1000000; // Scale down by 1M to prevent overflow
|
49
|
+
let scale_factor = 1000000;
|
57
50
|
let product_sum_positive_scaled = product_sum_positive / scale_factor;
|
58
51
|
let product_sum_negative_scaled = product_sum_negative / scale_factor;
|
59
52
|
|
60
53
|
let positive_cross = product_sum_positive_scaled * sum_weights_negative;
|
61
54
|
let negative_cross = product_sum_negative_scaled * sum_weights_positive;
|
62
55
|
|
63
|
-
let abs_negative = if negative_cross >= 0 {
|
56
|
+
let abs_negative = if negative_cross >= 0 {
|
57
|
+
negative_cross
|
58
|
+
} else {
|
59
|
+
-negative_cross
|
60
|
+
};
|
64
61
|
let omega_loss_min_scaled = omega_loss_min / scale_factor;
|
65
62
|
let effective_denominator = if abs_negative >= omega_loss_min_scaled {
|
66
63
|
abs_negative
|
@@ -68,9 +65,6 @@ pub fn omega(
|
|
68
65
|
omega_loss_min_scaled
|
69
66
|
};
|
70
67
|
|
71
|
-
// Adjust final calculation to account for scale_factor
|
72
|
-
// Original formula: (positive_cross * RATIO_SCALE_FACTOR) / effective_denominator
|
73
|
-
// With scaling: (positive_cross_scaled * RATIO_SCALE_FACTOR * scale_factor) / effective_denominator_scaled
|
74
68
|
let adjusted_ratio_scale = RATIO_SCALE_FACTOR * scale_factor;
|
75
69
|
|
76
70
|
if effective_denominator >= adjusted_ratio_scale {
|
@@ -163,7 +157,7 @@ fn test_omega_ptn_parity() {
|
|
163
157
|
returns[1] = -20000000;
|
164
158
|
returns[2] = 0;
|
165
159
|
returns[3] = 15000000;
|
166
|
-
let weights = [0; ARRAY_SIZE];
|
160
|
+
let weights = [0; ARRAY_SIZE];
|
167
161
|
let result = omega(returns, 4, weights, false, true, 10000000, 0);
|
168
162
|
assert(result == 1250000);
|
169
163
|
}
|
@@ -171,13 +165,13 @@ fn test_omega_ptn_parity() {
|
|
171
165
|
#[test]
|
172
166
|
fn test_omega_scaling() {
|
173
167
|
let mut log_returns = [0; ARRAY_SIZE];
|
174
|
-
log_returns[0] = SCALE / 100;
|
175
|
-
log_returns[1] = -SCALE / 200;
|
168
|
+
log_returns[0] = SCALE / 100;
|
169
|
+
log_returns[1] = -SCALE / 200;
|
176
170
|
let actual_len = 60u32;
|
177
171
|
let weights = [100000; ARRAY_SIZE];
|
178
172
|
let use_weighting = false;
|
179
173
|
let bypass_confidence = true;
|
180
|
-
let omega_loss_min = SCALE / 10;
|
174
|
+
let omega_loss_min = SCALE / 10;
|
181
175
|
let daily_rf = 0;
|
182
176
|
let result = omega(
|
183
177
|
log_returns,
|
@@ -188,25 +182,17 @@ fn test_omega_scaling() {
|
|
188
182
|
omega_loss_min,
|
189
183
|
daily_rf,
|
190
184
|
);
|
191
|
-
assert(result > 0);
|
185
|
+
assert(result > 0);
|
192
186
|
}
|
193
187
|
|
194
188
|
#[test]
|
195
189
|
fn test_omega_parity() {
|
196
190
|
let mut returns = [0; ARRAY_SIZE];
|
197
|
-
returns[0] = 1000000i64;
|
198
|
-
returns[1] = -2000000i64;
|
199
|
-
returns[2] = 1500000i64;
|
191
|
+
returns[0] = 1000000i64;
|
192
|
+
returns[1] = -2000000i64;
|
193
|
+
returns[2] = 1500000i64;
|
200
194
|
let weights = [100000i64; ARRAY_SIZE];
|
201
|
-
let result = omega(
|
202
|
-
returns,
|
203
|
-
3u32,
|
204
|
-
weights,
|
205
|
-
false,
|
206
|
-
true,
|
207
|
-
10000000i64, // 0.1 * SCALE
|
208
|
-
0i64,
|
209
|
-
);
|
195
|
+
let result = omega(returns, 3u32, weights, false, true, 10000000i64, 0i64);
|
210
196
|
let expected = 250000i64;
|
211
197
|
let diff = if result > expected {
|
212
198
|
result - expected
|