Skip to content

Commit fc616a8

Browse files
committed
initial take
1 parent e202d67 commit fc616a8

11 files changed

Lines changed: 1296 additions & 1 deletion

File tree

quantammsim/core_simulator/dynamic_inputs.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class DynamicInputFrames:
1414
arb_fees: Optional[Any] = None
1515
lp_supply: Optional[Any] = None
1616
reclamm_price_ratio_updates: Optional[Any] = None
17+
oracle_prices: Optional[Any] = None
1718

1819

1920
class DynamicInputArrays(NamedTuple):
@@ -25,6 +26,7 @@ class DynamicInputArrays(NamedTuple):
2526
arb_fees: jnp.ndarray
2627
lp_supply: jnp.ndarray
2728
reclamm_price_ratio_updates: jnp.ndarray
29+
oracle_prices: jnp.ndarray = jnp.ones((1, 1))
2830

2931

3032
def default_dynamic_input_flags() -> dict:
@@ -37,6 +39,7 @@ def default_dynamic_input_flags() -> dict:
3739
"has_dynamic_arb_fees": False,
3840
"has_lp_supply": False,
3941
"has_reclamm_price_ratio_updates": False,
42+
"has_oracle_prices": False,
4043
}
4144

4245

@@ -55,6 +58,7 @@ def dynamic_input_flags_from_frames(dynamic_input_frames: Optional[DynamicInputF
5558
"has_reclamm_price_ratio_updates": (
5659
dynamic_input_frames.reclamm_price_ratio_updates is not None
5760
),
61+
"has_oracle_prices": dynamic_input_frames.oracle_prices is not None,
5862
}
5963
flags["use_dynamic_inputs"] = any(flags.values())
6064
return flags
@@ -83,6 +87,7 @@ def empty_dynamic_input_arrays() -> DynamicInputArrays:
8387
lp_supply=jnp.ones((1,)),
8488
# Columns: has_event, target_price_ratio, end_step, start_price_ratio_override
8589
reclamm_price_ratio_updates=jnp.array([[0.0, 0.0, 0.0, jnp.nan]]),
90+
oracle_prices=jnp.ones((1, 1)),
8691
)
8792

8893

@@ -117,9 +122,14 @@ def resolve_dynamic_input_components(
117122
),
118123
"reclamm_price_ratio_updates": (
119124
arrays.reclamm_price_ratio_updates
120-
if dynamic_input_flags["has_reclamm_price_ratio_updates"]
125+
if dynamic_input_flags.get("has_reclamm_price_ratio_updates", False)
121126
else empty_dynamic_input_arrays().reclamm_price_ratio_updates
122127
),
128+
"oracle_prices": (
129+
arrays.oracle_prices
130+
if dynamic_input_flags.get("has_oracle_prices", False)
131+
else empty_dynamic_input_arrays().oracle_prices
132+
),
123133
}
124134

125135

@@ -160,6 +170,7 @@ def materialize_dynamic_inputs(
160170
"has_dynamic_arb_fees": True,
161171
"has_lp_supply": True,
162172
"has_reclamm_price_ratio_updates": True,
173+
"has_oracle_prices": True,
163174
}
164175
else:
165176
flags = resolve_dynamic_input_flags(dynamic_inputs, dynamic_input_flags)
@@ -192,4 +203,10 @@ def materialize_dynamic_inputs(
192203
scan_len,
193204
dtype,
194205
),
206+
oracle_prices=_broadcast_dynamic_input_leaf(
207+
"oracle_prices",
208+
resolved["oracle_prices"],
209+
scan_len,
210+
dtype,
211+
),
195212
)

quantammsim/core_simulator/forward_pass.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,6 +1280,7 @@ def forward_pass_nograd(
12801280
reclamm_price_ratio_updates=stop_gradient(
12811281
dynamic_inputs.reclamm_price_ratio_updates
12821282
),
1283+
oracle_prices=stop_gradient(dynamic_inputs.oracle_prices),
12831284
)
12841285
return forward_pass(
12851286
params,

quantammsim/hooks/dynamic_fee_base_hook.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def calculate_reserves_with_fees(
125125
arb_fees=jnp.asarray(run_fingerprint["arb_fees"], dtype=jnp.float64),
126126
lp_supply=empty_inputs.lp_supply,
127127
reclamm_price_ratio_updates=empty_inputs.reclamm_price_ratio_updates,
128+
oracle_prices=empty_inputs.oracle_prices,
128129
)
129130

130131
return self.calculate_reserves_with_dynamic_inputs(

0 commit comments

Comments
 (0)