Source code for graphax.examples.economics

import jax
import jax.numpy as jnp
import jax.scipy.special as jss

from graphax import jacve


[docs] def Phi(z): return (1. + jss.erf(z/jnp.sqrt(2.)))/2
[docs] def Black76(F, K, r, sigma, T): d1 = (jnp.log(F/K) + (sigma**2)/2.*T)/(sigma*jnp.sqrt(T)) d2 = d1 - sigma*jnp.sqrt(T) return jnp.exp(-r*T)*(F*Phi(d1) - K*Phi(d2))
[docs] def BlackScholes(S, K, r, sigma, T): F = jnp.exp(r*T)*S return Black76(F, K, r, sigma, T)
# Calculating the Jacobian of this gives the second-order greeks
[docs] def BlackScholes_Jacobian(S, K, r, sigma, T): return jacve(BlackScholes, order="rev", argnums=(0, 1, 2, 3, 4))(S, K, r, sigma, T)