volax 0.1.0__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.
volax-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,42 @@
1
+ Metadata-Version: 2.3
2
+ Name: volax
3
+ Version: 0.1.0
4
+ Summary: A library for differentiable option pricing.
5
+ Author: VolSight
6
+ Author-email: VolSight <volsight.inquiries@gmail.com>
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.11
9
+ Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: Programming Language :: Python :: 3.14
12
+ Requires-Dist: jax>=0.7.0
13
+ Requires-Dist: chex>=0.1.89
14
+ Requires-Dist: optax>=0.2.8
15
+ Requires-Dist: jax[cuda12] ; extra == 'cuda12'
16
+ Requires-Dist: jax[cuda13] ; extra == 'cuda13'
17
+ Requires-Python: >=3.11
18
+ Provides-Extra: cuda12
19
+ Provides-Extra: cuda13
20
+ Description-Content-Type: text/markdown
21
+
22
+ # volax: A python library for differentiable option pricing.
23
+
24
+ ## Table of Contents
25
+ 1. [Introduction](#introduction)
26
+ 2. [Installation](#installation)
27
+
28
+ ## Introduction
29
+
30
+ This library implements option pricing models in a manner which allows for differentiation by [JAX](https://docs.jax.dev/en/latest/)'s AutoGrad functionality.
31
+
32
+ ## Installation
33
+
34
+ The easist way to install the library is via the pip package for your platform:
35
+
36
+ | Platform | Instructions |
37
+ |---------------------------|---------------------------------------|
38
+ | CPU | `pip install -U volax` |
39
+ | NVIDIA GPU w/CUDA12 | `pip install -U "volax[cuda12]"` |
40
+ | NVIDIA GPU w/CUDA13 | `pip install -U "volax[cuda13]"` |
41
+
42
+ The difference between each package is the version of JAX that will be installed.
volax-0.1.0/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # volax: A python library for differentiable option pricing.
2
+
3
+ ## Table of Contents
4
+ 1. [Introduction](#introduction)
5
+ 2. [Installation](#installation)
6
+
7
+ ## Introduction
8
+
9
+ This library implements option pricing models in a manner which allows for differentiation by [JAX](https://docs.jax.dev/en/latest/)'s AutoGrad functionality.
10
+
11
+ ## Installation
12
+
13
+ The easist way to install the library is via the pip package for your platform:
14
+
15
+ | Platform | Instructions |
16
+ |---------------------------|---------------------------------------|
17
+ | CPU | `pip install -U volax` |
18
+ | NVIDIA GPU w/CUDA12 | `pip install -U "volax[cuda12]"` |
19
+ | NVIDIA GPU w/CUDA13 | `pip install -U "volax[cuda13]"` |
20
+
21
+ The difference between each package is the version of JAX that will be installed.
@@ -0,0 +1,40 @@
1
+ [project]
2
+ name = "volax"
3
+ version = "0.1.0"
4
+ description = "A library for differentiable option pricing."
5
+ authors = [{ name = "VolSight", email = "volsight.inquiries@gmail.com" }]
6
+ requires-python = ">= 3.11"
7
+ readme = "README.md"
8
+ classifiers = [
9
+ "Programming Language :: Python :: 3",
10
+ "Programming Language :: Python :: 3.11",
11
+ "Programming Language :: Python :: 3.12",
12
+ "Programming Language :: Python :: 3.13",
13
+ "Programming Language :: Python :: 3.14",
14
+ ]
15
+ dependencies = [
16
+ "jax>= 0.7.0",
17
+ "chex>= 0.1.89",
18
+ "optax>=0.2.8",
19
+ ]
20
+
21
+ [project.optional-dependencies]
22
+ cuda13 = [
23
+ "jax[cuda13]",
24
+ ]
25
+ cuda12 = [
26
+ "jax[cuda12]",
27
+ ]
28
+
29
+ [dependency-groups]
30
+ test = ["pytest>= 8.3.5"]
31
+
32
+ [tool.uv]
33
+ default-groups = "all"
34
+
35
+ [tool.uv.build-backend]
36
+ module-root = ""
37
+
38
+ [build-system]
39
+ requires = ["uv_build>=0.10.11,<0.12.0"]
40
+ build-backend = "uv_build"
@@ -0,0 +1,13 @@
1
+ from volax import models
2
+ from volax import math
3
+ from volax import contract
4
+ from volax import greek
5
+ from volax import vol
6
+
7
+ _allowed_symbols = [
8
+ 'models',
9
+ 'math',
10
+ 'contract',
11
+ 'greek',
12
+ 'vol'
13
+ ]
@@ -0,0 +1,472 @@
1
+ from jax import grad
2
+
3
+ from jax import Array
4
+ from jax.typing import ArrayLike
5
+ from typing import Callable
6
+
7
+ __all__ = [
8
+ 'delta',
9
+ 'gamma',
10
+ 'vega',
11
+ 'theta',
12
+ 'rho',
13
+ 'phi',
14
+ 'charm',
15
+ 'vanna',
16
+ 'volga',
17
+ 'veta',
18
+ 'vera',
19
+ 'speed',
20
+ 'zomma',
21
+ 'color',
22
+ 'ultima',
23
+ 'parmicharma'
24
+ ]
25
+
26
+ def delta(
27
+ model: Callable,
28
+ volatilities: ArrayLike,
29
+ strikes: ArrayLike,
30
+ expiries: ArrayLike,
31
+ spots: ArrayLike | None = None,
32
+ forwards: ArrayLike | None = None,
33
+ discount_rates: ArrayLike | None = None,
34
+ dividend_rates: ArrayLike | None = None,
35
+ discount_factors: ArrayLike | None = None,
36
+ is_call_options: ArrayLike | None = None,
37
+ *args,
38
+ **kwargs
39
+ ) -> Array:
40
+ return grad(model, 3)(
41
+ volatilities,
42
+ strikes,
43
+ expiries,
44
+ spots,
45
+ forwards,
46
+ discount_rates,
47
+ dividend_rates,
48
+ discount_factors,
49
+ is_call_options,
50
+ *args,
51
+ **kwargs
52
+ )
53
+
54
+ def gamma(
55
+ model: Callable,
56
+ volatilities: ArrayLike,
57
+ strikes: ArrayLike,
58
+ expiries: ArrayLike,
59
+ spots: ArrayLike | None = None,
60
+ forwards: ArrayLike | None = None,
61
+ discount_rates: ArrayLike | None = None,
62
+ dividend_rates: ArrayLike | None = None,
63
+ discount_factors: ArrayLike | None = None,
64
+ is_call_options: ArrayLike | None = None,
65
+ *args,
66
+ **kwargs
67
+ ) -> Array:
68
+ return grad(grad(model, 3), 3)(
69
+ volatilities,
70
+ strikes,
71
+ expiries,
72
+ spots,
73
+ forwards,
74
+ discount_rates,
75
+ dividend_rates,
76
+ discount_factors,
77
+ is_call_options,
78
+ *args,
79
+ **kwargs
80
+ )
81
+
82
+ def vega(
83
+ model: Callable,
84
+ volatilities: ArrayLike,
85
+ strikes: ArrayLike,
86
+ expiries: ArrayLike,
87
+ spots: ArrayLike | None = None,
88
+ forwards: ArrayLike | None = None,
89
+ discount_rates: ArrayLike | None = None,
90
+ dividend_rates: ArrayLike | None = None,
91
+ discount_factors: ArrayLike | None = None,
92
+ is_call_options: ArrayLike | None = None,
93
+ *args,
94
+ **kwargs
95
+ ) -> Array:
96
+ return grad(model, 0)(
97
+ volatilities,
98
+ strikes,
99
+ expiries,
100
+ spots,
101
+ forwards,
102
+ discount_rates,
103
+ dividend_rates,
104
+ discount_factors,
105
+ is_call_options,
106
+ *args,
107
+ **kwargs
108
+ )
109
+
110
+ def theta(
111
+ model: Callable,
112
+ volatilities: ArrayLike,
113
+ strikes: ArrayLike,
114
+ expiries: ArrayLike,
115
+ spots: ArrayLike | None = None,
116
+ forwards: ArrayLike | None = None,
117
+ discount_rates: ArrayLike | None = None,
118
+ dividend_rates: ArrayLike | None = None,
119
+ discount_factors: ArrayLike | None = None,
120
+ is_call_options: ArrayLike | None = None,
121
+ *args,
122
+ **kwargs
123
+ ) -> Array:
124
+ return grad(model, 2)(
125
+ volatilities,
126
+ strikes,
127
+ expiries,
128
+ spots,
129
+ forwards,
130
+ discount_rates,
131
+ dividend_rates,
132
+ discount_factors,
133
+ is_call_options,
134
+ *args,
135
+ **kwargs
136
+ )
137
+
138
+ def rho(
139
+ model: Callable,
140
+ volatilities: ArrayLike,
141
+ strikes: ArrayLike,
142
+ expiries: ArrayLike,
143
+ spots: ArrayLike | None = None,
144
+ forwards: ArrayLike | None = None,
145
+ discount_rates: ArrayLike | None = None,
146
+ dividend_rates: ArrayLike | None = None,
147
+ discount_factors: ArrayLike | None = None,
148
+ is_call_options: ArrayLike | None = None,
149
+ *args,
150
+ **kwargs
151
+ ) -> Array:
152
+ return grad(model, 5)(
153
+ volatilities,
154
+ strikes,
155
+ expiries,
156
+ spots,
157
+ forwards,
158
+ discount_rates,
159
+ dividend_rates,
160
+ discount_factors,
161
+ is_call_options,
162
+ *args,
163
+ **kwargs
164
+ )
165
+
166
+ def phi(
167
+ model: Callable,
168
+ volatilities: ArrayLike,
169
+ strikes: ArrayLike,
170
+ expiries: ArrayLike,
171
+ spots: ArrayLike | None = None,
172
+ forwards: ArrayLike | None = None,
173
+ discount_rates: ArrayLike | None = None,
174
+ dividend_rates: ArrayLike | None = None,
175
+ discount_factors: ArrayLike | None = None,
176
+ is_call_options: ArrayLike | None = None,
177
+ *args,
178
+ **kwargs
179
+ ) -> Array:
180
+ return grad(model, 6)(
181
+ volatilities,
182
+ strikes,
183
+ expiries,
184
+ spots,
185
+ forwards,
186
+ discount_rates,
187
+ dividend_rates,
188
+ discount_factors,
189
+ is_call_options,
190
+ *args,
191
+ **kwargs
192
+ )
193
+
194
+ def charm(
195
+ model: Callable,
196
+ volatilities: ArrayLike,
197
+ strikes: ArrayLike,
198
+ expiries: ArrayLike,
199
+ spots: ArrayLike | None = None,
200
+ forwards: ArrayLike | None = None,
201
+ discount_rates: ArrayLike | None = None,
202
+ dividend_rates: ArrayLike | None = None,
203
+ discount_factors: ArrayLike | None = None,
204
+ is_call_options: ArrayLike | None = None,
205
+ *args,
206
+ **kwargs
207
+ ) -> Array:
208
+ return grad(grad(model, 3), 2)(
209
+ volatilities,
210
+ strikes,
211
+ expiries,
212
+ spots,
213
+ forwards,
214
+ discount_rates,
215
+ dividend_rates,
216
+ discount_factors,
217
+ is_call_options,
218
+ *args,
219
+ **kwargs
220
+ )
221
+
222
+ def vanna(
223
+ model: Callable,
224
+ volatilities: ArrayLike,
225
+ strikes: ArrayLike,
226
+ expiries: ArrayLike,
227
+ spots: ArrayLike | None = None,
228
+ forwards: ArrayLike | None = None,
229
+ discount_rates: ArrayLike | None = None,
230
+ dividend_rates: ArrayLike | None = None,
231
+ discount_factors: ArrayLike | None = None,
232
+ is_call_options: ArrayLike | None = None,
233
+ *args,
234
+ **kwargs
235
+ ) -> Array:
236
+ return grad(grad(model, 0), 3)(
237
+ volatilities,
238
+ strikes,
239
+ expiries,
240
+ spots,
241
+ forwards,
242
+ discount_rates,
243
+ dividend_rates,
244
+ discount_factors,
245
+ is_call_options,
246
+ *args,
247
+ **kwargs
248
+ )
249
+
250
+ def volga(
251
+ model: Callable,
252
+ volatilities: ArrayLike,
253
+ strikes: ArrayLike,
254
+ expiries: ArrayLike,
255
+ spots: ArrayLike | None = None,
256
+ forwards: ArrayLike | None = None,
257
+ discount_rates: ArrayLike | None = None,
258
+ dividend_rates: ArrayLike | None = None,
259
+ discount_factors: ArrayLike | None = None,
260
+ is_call_options: ArrayLike | None = None,
261
+ *args,
262
+ **kwargs
263
+ ) -> Array:
264
+ return grad(grad(model, 0), 0)(
265
+ volatilities,
266
+ strikes,
267
+ expiries,
268
+ spots,
269
+ forwards,
270
+ discount_rates,
271
+ dividend_rates,
272
+ discount_factors,
273
+ is_call_options,
274
+ *args,
275
+ **kwargs
276
+ )
277
+
278
+ def veta(
279
+ model: Callable,
280
+ volatilities: ArrayLike,
281
+ strikes: ArrayLike,
282
+ expiries: ArrayLike,
283
+ spots: ArrayLike | None = None,
284
+ forwards: ArrayLike | None = None,
285
+ discount_rates: ArrayLike | None = None,
286
+ dividend_rates: ArrayLike | None = None,
287
+ discount_factors: ArrayLike | None = None,
288
+ is_call_options: ArrayLike | None = None,
289
+ *args,
290
+ **kwargs
291
+ ) -> Array:
292
+ return grad(grad(model, 0), 2)(
293
+ volatilities,
294
+ strikes,
295
+ expiries,
296
+ spots,
297
+ forwards,
298
+ discount_rates,
299
+ dividend_rates,
300
+ discount_factors,
301
+ is_call_options,
302
+ *args,
303
+ **kwargs
304
+ )
305
+
306
+ def vera(
307
+ model: Callable,
308
+ volatilities: ArrayLike,
309
+ strikes: ArrayLike,
310
+ expiries: ArrayLike,
311
+ spots: ArrayLike | None = None,
312
+ forwards: ArrayLike | None = None,
313
+ discount_rates: ArrayLike | None = None,
314
+ dividend_rates: ArrayLike | None = None,
315
+ discount_factors: ArrayLike | None = None,
316
+ is_call_options: ArrayLike | None = None,
317
+ *args,
318
+ **kwargs
319
+ ) -> Array:
320
+ return grad(grad(model, 0), 5)(
321
+ volatilities,
322
+ strikes,
323
+ expiries,
324
+ spots,
325
+ forwards,
326
+ discount_rates,
327
+ dividend_rates,
328
+ discount_factors,
329
+ is_call_options,
330
+ *args,
331
+ **kwargs
332
+ )
333
+
334
+ def speed(
335
+ model: Callable,
336
+ volatilities: ArrayLike,
337
+ strikes: ArrayLike,
338
+ expiries: ArrayLike,
339
+ spots: ArrayLike | None = None,
340
+ forwards: ArrayLike | None = None,
341
+ discount_rates: ArrayLike | None = None,
342
+ dividend_rates: ArrayLike | None = None,
343
+ discount_factors: ArrayLike | None = None,
344
+ is_call_options: ArrayLike | None = None,
345
+ *args,
346
+ **kwargs
347
+ ) -> Array:
348
+ return grad(grad(grad(model, 3), 3), 3)(
349
+ volatilities,
350
+ strikes,
351
+ expiries,
352
+ spots,
353
+ forwards,
354
+ discount_rates,
355
+ dividend_rates,
356
+ discount_factors,
357
+ is_call_options,
358
+ *args,
359
+ **kwargs
360
+ )
361
+
362
+ def zomma(
363
+ model: Callable,
364
+ volatilities: ArrayLike,
365
+ strikes: ArrayLike,
366
+ expiries: ArrayLike,
367
+ spots: ArrayLike | None = None,
368
+ forwards: ArrayLike | None = None,
369
+ discount_rates: ArrayLike | None = None,
370
+ dividend_rates: ArrayLike | None = None,
371
+ discount_factors: ArrayLike | None = None,
372
+ is_call_options: ArrayLike | None = None,
373
+ *args,
374
+ **kwargs
375
+ ) -> Array:
376
+ return grad(grad(grad(model, 3), 3), 0)(
377
+ volatilities,
378
+ strikes,
379
+ expiries,
380
+ spots,
381
+ forwards,
382
+ discount_rates,
383
+ dividend_rates,
384
+ discount_factors,
385
+ is_call_options,
386
+ *args,
387
+ **kwargs
388
+ )
389
+
390
+ def color(
391
+ model: Callable,
392
+ volatilities: ArrayLike,
393
+ strikes: ArrayLike,
394
+ expiries: ArrayLike,
395
+ spots: ArrayLike | None = None,
396
+ forwards: ArrayLike | None = None,
397
+ discount_rates: ArrayLike | None = None,
398
+ dividend_rates: ArrayLike | None = None,
399
+ discount_factors: ArrayLike | None = None,
400
+ is_call_options: ArrayLike | None = None,
401
+ *args,
402
+ **kwargs
403
+ ) -> Array:
404
+ return grad(grad(grad(model, 3), 3), 2)(
405
+ volatilities,
406
+ strikes,
407
+ expiries,
408
+ spots,
409
+ forwards,
410
+ discount_rates,
411
+ dividend_rates,
412
+ discount_factors,
413
+ is_call_options,
414
+ *args,
415
+ **kwargs
416
+ )
417
+
418
+ def ultima(
419
+ model: Callable,
420
+ volatilities: ArrayLike,
421
+ strikes: ArrayLike,
422
+ expiries: ArrayLike,
423
+ spots: ArrayLike | None = None,
424
+ forwards: ArrayLike | None = None,
425
+ discount_rates: ArrayLike | None = None,
426
+ dividend_rates: ArrayLike | None = None,
427
+ discount_factors: ArrayLike | None = None,
428
+ is_call_options: ArrayLike | None = None,
429
+ *args,
430
+ **kwargs
431
+ ) -> Array:
432
+ return grad(grad(grad(model, 0), 0), 0)(
433
+ volatilities,
434
+ strikes,
435
+ expiries,
436
+ spots,
437
+ forwards,
438
+ discount_rates,
439
+ dividend_rates,
440
+ discount_factors,
441
+ is_call_options,
442
+ *args,
443
+ **kwargs
444
+ )
445
+
446
+ def parmicharma(
447
+ model: Callable,
448
+ volatilities: ArrayLike,
449
+ strikes: ArrayLike,
450
+ expiries: ArrayLike,
451
+ spots: ArrayLike | None = None,
452
+ forwards: ArrayLike | None = None,
453
+ discount_rates: ArrayLike | None = None,
454
+ dividend_rates: ArrayLike | None = None,
455
+ discount_factors: ArrayLike | None = None,
456
+ is_call_options: ArrayLike | None = None,
457
+ *args,
458
+ **kwargs
459
+ ) -> Array:
460
+ return grad(grad(grad(model, 3), 2), 2)(
461
+ volatilities,
462
+ strikes,
463
+ expiries,
464
+ spots,
465
+ forwards,
466
+ discount_rates,
467
+ dividend_rates,
468
+ discount_factors,
469
+ is_call_options,
470
+ *args,
471
+ **kwargs
472
+ )
@@ -0,0 +1,5 @@
1
+ from volax.math import integration
2
+
3
+ _allowed_symbols = [
4
+ 'integration',
5
+ ]
@@ -0,0 +1,5 @@
1
+ from volax.math.integration import gauss_legendre
2
+
3
+ _allowed_symbols = [
4
+ 'gauss_legendre'
5
+ ]