Skip to content

Commit 12ec95c

Browse files
attack68mikelync
andauthored
ENH: Typing and fx-options setup (#168) (#1092)
Co-authored-by: Mike Lync <[email protected]> Co-authored-by: JHM Darbyshire (M1) <[email protected]>
1 parent 564d93e commit 12ec95c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1303
-398
lines changed

pyproject.toml

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,26 @@ max-complexity = 14
149149
files = ["python/"]
150150
exclude = [
151151
"python/tests",
152-
# "/scheduling/wrappers.py"
153-
# "/instruments/fx_volatility/strategies.py",
154-
# "/instruments/generics.py",
155-
# "/instruments/rates/inflation.py",
156-
# "solver.py",
152+
"/instruments/components/bonds",
153+
"/instruments/components/fx_options",
154+
# "/instruments/components/protocols",
155+
"/instruments/components/cds.py",
156+
"/instruments/components/fly.py",
157+
"/instruments/components/fra.py",
158+
"/instruments/components/fx_forward.py",
159+
"/instruments/components/fx_swap.py",
160+
"/instruments/components/fx_vol_value.py",
161+
"/instruments/components/iirs.py",
162+
# "/instruments/components/irs.py",
163+
"/instruments/components/ndf.py",
164+
"/instruments/components/portfolio.py",
165+
"/instruments/components/sbs.py",
166+
"/instruments/components/spread.py",
167+
"/instruments/components/stir_future.py",
168+
"/instruments/components/value.py",
169+
"/instruments/components/xcs.py",
170+
"/instruments/components/zcis.py",
171+
"/instruments/components/zcs.py",
157172
]
158173
strict = true
159174
#packages = [

python/rateslib/instruments/components/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
from rateslib.instruments.components.fly import Fly
1010
from rateslib.instruments.components.fra import FRA
1111
from rateslib.instruments.components.fx_forward import FXForward
12+
from rateslib.instruments.components.fx_options import (
13+
FXCall,
14+
FXPut,
15+
)
1216
from rateslib.instruments.components.fx_swap import FXSwap
1317
from rateslib.instruments.components.fx_vol_value import FXVolValue
1418
from rateslib.instruments.components.iirs import IIRS
@@ -46,4 +50,6 @@
4650
"IndexFixedRateBond",
4751
"BondFuture",
4852
"Bill",
53+
"FXPut",
54+
"FXCall",
4955
]

python/rateslib/instruments/components/bonds/bill.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from rateslib.instruments.components.protocols.kwargs import _convert_to_schedule_kwargs, _KWArgs
1616
from rateslib.instruments.components.protocols.pricing import (
1717
_Curves,
18-
_get_maybe_curve_maybe_from_solver,
18+
_maybe_get_curve_or_dict_maybe_from_solver,
1919
)
2020
from rateslib.legs.components import FixedLeg
2121
from rateslib.scheduling.frequency import _get_frequency
@@ -340,7 +340,7 @@ def rate(
340340
-------
341341
float, Dual, Dual2
342342
"""
343-
disc_curve_ = _get_maybe_curve_maybe_from_solver(
343+
disc_curve_ = _maybe_get_curve_or_dict_maybe_from_solver(
344344
solver=solver,
345345
name="disc_curve",
346346
curves=self._parse_curves(curves),

python/rateslib/instruments/components/bonds/fixed_rate_bond.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from rateslib.instruments.components.protocols.kwargs import _convert_to_schedule_kwargs, _KWArgs
1313
from rateslib.instruments.components.protocols.pricing import (
1414
_Curves,
15-
_get_maybe_curve_maybe_from_solver,
15+
_maybe_get_curve_or_dict_maybe_from_solver,
1616
)
1717
from rateslib.legs.components import FixedLeg
1818

@@ -299,7 +299,7 @@ def rate(
299299
metric_ = _drb(self.kwargs.meta["metric"], metric).lower()
300300
if metric_ in ["clean_price", "dirty_price", "ytm"]:
301301
_curves = self._parse_curves(curves)
302-
disc_curve = _get_maybe_curve_maybe_from_solver(
302+
disc_curve = _maybe_get_curve_or_dict_maybe_from_solver(
303303
curves_meta=self.kwargs.meta["curves"],
304304
curves=_curves,
305305
name="disc_curve",

python/rateslib/instruments/components/bonds/float_rate_note.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from rateslib.instruments.components.protocols.kwargs import _convert_to_schedule_kwargs, _KWArgs
1414
from rateslib.instruments.components.protocols.pricing import (
1515
_Curves,
16-
_get_maybe_curve_maybe_from_solver,
16+
_maybe_get_curve_or_dict_maybe_from_solver,
1717
)
1818
from rateslib.legs.components import FloatLeg
1919
from rateslib.periods.components import FloatPeriod
@@ -309,13 +309,13 @@ def rate(
309309
metric = _drb(self.kwargs.meta["metric"], metric).lower()
310310
_curves = self._parse_curves(curves)
311311
if metric in ["clean_price", "dirty_price", "spread", "ytm"]:
312-
disc_curve = _get_maybe_curve_maybe_from_solver(
312+
disc_curve = _maybe_get_curve_or_dict_maybe_from_solver(
313313
solver=solver,
314314
curves=_curves,
315315
curves_meta=self.kwargs.meta["curves"],
316316
name="disc_curve",
317317
)
318-
rate_curve = _get_maybe_curve_maybe_from_solver(
318+
rate_curve = _maybe_get_curve_or_dict_maybe_from_solver(
319319
solver=solver,
320320
curves=_curves,
321321
curves_meta=self.kwargs.meta["curves"],

python/rateslib/instruments/components/bonds/index_fixed_rate_bond.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from rateslib.instruments.components.protocols.kwargs import _convert_to_schedule_kwargs, _KWArgs
1313
from rateslib.instruments.components.protocols.pricing import (
1414
_Curves,
15-
_get_maybe_curve_maybe_from_solver,
15+
_maybe_get_curve_or_dict_maybe_from_solver,
1616
)
1717
from rateslib.legs.components import FixedLeg
1818
from rateslib.periods.components.parameters import _IndexParams
@@ -418,13 +418,13 @@ def rate(
418418
"index_dirty_price",
419419
]:
420420
_curves = self._parse_curves(curves)
421-
disc_curve = _get_maybe_curve_maybe_from_solver(
421+
disc_curve = _maybe_get_curve_or_dict_maybe_from_solver(
422422
curves_meta=self.kwargs.meta["curves"],
423423
curves=_curves,
424424
name="disc_curve",
425425
solver=solver,
426426
)
427-
index_curve = _get_maybe_curve_maybe_from_solver(
427+
index_curve = _maybe_get_curve_or_dict_maybe_from_solver(
428428
curves_meta=self.kwargs.meta["curves"],
429429
curves=_curves,
430430
name="index_curve",

python/rateslib/instruments/components/bonds/protocols/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from rateslib.instruments.components.bonds.protocols.ytm import _WithYTM
1212
from rateslib.instruments.components.protocols import _BaseInstrument
1313
from rateslib.instruments.components.protocols.pricing import (
14-
_get_maybe_curve_maybe_from_solver,
14+
_maybe_get_curve_or_dict_maybe_from_solver,
1515
)
1616

1717
if TYPE_CHECKING:
@@ -50,7 +50,7 @@ def npv(
5050
forward: datetime_ = NoInput(0),
5151
) -> DualTypes | dict[str, DualTypes]:
5252
_curves = self._parse_curves(curves)
53-
disc_curve = _get_maybe_curve_maybe_from_solver(
53+
disc_curve = _maybe_get_curve_or_dict_maybe_from_solver(
5454
curves_meta=self.kwargs.meta["curves"], curves=_curves, name="disc_curve", solver=solver
5555
)
5656
if isinstance(settlement, NoInput):
@@ -130,7 +130,7 @@ def analytic_delta(
130130
) -> DualTypes | dict[str, DualTypes]:
131131
settlement_ = self._maybe_get_settlement(
132132
settlement=settlement,
133-
disc_curve=_get_maybe_curve_maybe_from_solver(
133+
disc_curve=_maybe_get_curve_or_dict_maybe_from_solver(
134134
curves_meta=self.kwargs.meta["curves"],
135135
curves=self._parse_curves(curves),
136136
name="disc_curve",

python/rateslib/instruments/components/bonds/protocols/oaspread.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from rateslib.enums.generics import NoInput, _drb
1212
from rateslib.instruments.components.bonds.protocols import _WithAccrued
1313
from rateslib.instruments.components.protocols.pricing import (
14-
_get_maybe_curve_maybe_from_solver,
14+
_maybe_get_curve_or_dict_maybe_from_solver,
1515
)
1616

1717
if TYPE_CHECKING:
@@ -166,12 +166,12 @@ def s_with_args(
166166
_shifted_discount_curve = disc_curve.shift(g)
167167
return self.rate(curves=[curve, _shifted_discount_curve], metric=metric)
168168

169-
disc_curve_ = _get_maybe_curve_maybe_from_solver(
169+
disc_curve_ = _maybe_get_curve_or_dict_maybe_from_solver(
170170
self.kwargs.meta["curves"], _curves, "disc_curve", solver
171171
)
172172

173173
_ad_disc = _maybe_set_ad_order(disc_curve_, 0)
174-
rate_curve_ = _get_maybe_curve_maybe_from_solver(
174+
rate_curve_ = _maybe_get_curve_or_dict_maybe_from_solver(
175175
self.kwargs.meta["curves"], _curves, "rate_curve", solver
176176
)
177177

python/rateslib/instruments/components/cds.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from rateslib.instruments.components.protocols.kwargs import _convert_to_schedule_kwargs, _KWArgs
1010
from rateslib.instruments.components.protocols.pricing import (
1111
_Curves,
12-
_get_maybe_curve_maybe_from_solver,
12+
_maybe_get_curve_or_dict_maybe_from_solver,
1313
)
1414
from rateslib.legs.components import CreditPremiumLeg, CreditProtectionLeg
1515
from rateslib.scheduling import Frequency
@@ -188,10 +188,10 @@ def rate(
188188
_curves = self._parse_curves(curves)
189189

190190
leg2_npv: DualTypes = self.leg2.local_npv(
191-
rate_curve=_get_maybe_curve_maybe_from_solver(
191+
rate_curve=_maybe_get_curve_or_dict_maybe_from_solver(
192192
self.kwargs.meta["curves"], _curves, "leg2_rate_curve", solver
193193
),
194-
disc_curve=_get_maybe_curve_maybe_from_solver(
194+
disc_curve=_maybe_get_curve_or_dict_maybe_from_solver(
195195
self.kwargs.meta["curves"], _curves, "leg2_disc_curve", solver
196196
),
197197
index_curve=NoInput(0),
@@ -201,10 +201,10 @@ def rate(
201201
return (
202202
self.leg1.spread(
203203
target_npv=-leg2_npv,
204-
rate_curve=_get_maybe_curve_maybe_from_solver(
204+
rate_curve=_maybe_get_curve_or_dict_maybe_from_solver(
205205
self.kwargs.meta["curves"], _curves, "rate_curve", solver
206206
),
207-
disc_curve=_get_maybe_curve_maybe_from_solver(
207+
disc_curve=_maybe_get_curve_or_dict_maybe_from_solver(
208208
self.kwargs.meta["curves"], _curves, "disc_curve", solver
209209
),
210210
index_curve=NoInput(0),

python/rateslib/instruments/components/fra.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from rateslib.instruments.components.protocols.kwargs import _convert_to_schedule_kwargs, _KWArgs
1111
from rateslib.instruments.components.protocols.pricing import (
1212
_Curves,
13-
_get_maybe_curve_maybe_from_solver,
13+
_maybe_get_curve_or_dict_maybe_from_solver,
1414
)
1515
from rateslib.legs.components import FixedLeg, FloatLeg
1616
from rateslib.scheduling import Adjuster
@@ -315,7 +315,7 @@ def npv(
315315
)
316316
_curves: _Curves = self._parse_curves(curves)
317317
_curves_meta: _Curves = self.kwargs.meta["curves"]
318-
leg2_rate_curve = _get_maybe_curve_maybe_from_solver(
318+
leg2_rate_curve = _maybe_get_curve_or_dict_maybe_from_solver(
319319
solver=solver, curves_meta=_curves_meta, curves=_curves, name="leg2_rate_curve"
320320
)
321321
fra_scalar = self._fra_rate_scalar(leg2_rate_curve=leg2_rate_curve)
@@ -369,10 +369,10 @@ def rate(
369369
metric_ = _drb(self.kwargs.meta["metric"], metric).lower()
370370

371371
leg2_npv: DualTypes = self.leg2.local_npv(
372-
rate_curve=_get_maybe_curve_maybe_from_solver(
372+
rate_curve=_maybe_get_curve_or_dict_maybe_from_solver(
373373
self.kwargs.meta["curves"], _curves, "leg2_rate_curve", solver
374374
),
375-
disc_curve=_get_maybe_curve_maybe_from_solver(
375+
disc_curve=_maybe_get_curve_or_dict_maybe_from_solver(
376376
self.kwargs.meta["curves"], _curves, "leg2_disc_curve", solver
377377
),
378378
settlement=settlement,
@@ -382,7 +382,7 @@ def rate(
382382
self.leg1.spread(
383383
target_npv=-leg2_npv,
384384
rate_curve=NoInput(0),
385-
disc_curve=_get_maybe_curve_maybe_from_solver(
385+
disc_curve=_maybe_get_curve_or_dict_maybe_from_solver(
386386
self.kwargs.meta["curves"], _curves, "disc_curve", solver
387387
),
388388
index_curve=NoInput(0),
@@ -411,7 +411,7 @@ def analytic_delta(
411411
) -> DualTypes | dict[str, DualTypes]:
412412
_curves: _Curves = self._parse_curves(curves)
413413
_curves_meta: _Curves = self.kwargs.meta["curves"]
414-
leg2_rate_curve = _get_maybe_curve_maybe_from_solver(
414+
leg2_rate_curve = _maybe_get_curve_or_dict_maybe_from_solver(
415415
solver=solver, curves_meta=_curves_meta, curves=_curves, name="leg2_rate_curve"
416416
)
417417
fra_scalar = self._fra_rate_scalar(leg2_rate_curve=leg2_rate_curve)
@@ -448,7 +448,7 @@ def local_analytic_rate_fixings(
448448
_curves: _Curves = self._parse_curves(curves)
449449
_curves_meta: _Curves = self.kwargs.meta["curves"]
450450
return df * self._fra_rate_scalar(
451-
leg2_rate_curve=_get_maybe_curve_maybe_from_solver(
451+
leg2_rate_curve=_maybe_get_curve_or_dict_maybe_from_solver(
452452
solver=solver, curves_meta=_curves_meta, curves=_curves, name="leg2_rate_curve"
453453
)
454454
)
@@ -476,7 +476,7 @@ def cashflows(
476476

477477
_curves: _Curves = self._parse_curves(curves)
478478
_curves_meta: _Curves = self.kwargs.meta["curves"]
479-
leg2_rate_curve = _get_maybe_curve_maybe_from_solver(
479+
leg2_rate_curve = _maybe_get_curve_or_dict_maybe_from_solver(
480480
solver=solver, curves_meta=_curves_meta, curves=_curves, name="leg2_rate_curve"
481481
)
482482
scalar = _dual_float(self._fra_rate_scalar(leg2_rate_curve=leg2_rate_curve))

0 commit comments

Comments
 (0)