1313# limitations under the License.
1414
1515
16- import aesara .tensor as at
1716import numpy as np
1817import pymc as pm
18+ import pytensor .tensor as pt
1919from pymc .gp .util import JITTER_DEFAULT , cholesky , solve_lower , solve_upper , stabilize
2020
2121
@@ -42,7 +42,7 @@ def _build_prior(self, name, X, Xu, jitter=JITTER_DEFAULT, **kwargs):
4242 u = pm .Deterministic (name + "_u" , L @ v )
4343
4444 Kfu = self .cov_func (X , Xu )
45- Kuuiu = solve_upper (at .transpose (L ), solve_lower (L , u ))
45+ Kuuiu = solve_upper (pt .transpose (L ), solve_lower (L , u ))
4646
4747 return pm .Deterministic (name , mu + Kfu @ Kuuiu ), Kuuiu , L
4848
@@ -62,8 +62,8 @@ def prior(self, name, X, Xu=None, jitter=JITTER_DEFAULT, **kwargs):
6262 def _build_conditional (self , name , Xnew , Xu , L , Kuuiu , jitter , ** kwargs ):
6363 Ksu = self .cov_func (Xnew , Xu )
6464 mu = self .mean_func (Xnew ) + Ksu @ Kuuiu
65- tmp = solve_lower (L , at .transpose (Ksu ))
66- Qss = at .transpose (tmp ) @ tmp # Qss = tt.dot(tt.dot(Ksu, tt.nlinalg.pinv(Kuu)), Ksu.T)
65+ tmp = solve_lower (L , pt .transpose (Ksu ))
66+ Qss = pt .transpose (tmp ) @ tmp # Qss = tt.dot(tt.dot(Ksu, tt.nlinalg.pinv(Kuu)), Ksu.T)
6767 Kss = self .cov_func (Xnew )
6868 Lss = cholesky (stabilize (Kss - Qss , jitter ))
6969 return mu , Lss
@@ -100,42 +100,42 @@ def prior(self, name, X, **kwargs):
100100 return f
101101
102102 def _generate_basis (self , X , L ):
103- indices = at .arange (1 , self .M + 1 )
104- m1 = (np .pi / (2.0 * L )) * at .tile (L + X , self .M )
105- m2 = at .diag (indices )
106- Phi = at .sin (m1 @ m2 ) / at .sqrt (L )
103+ indices = pt .arange (1 , self .M + 1 )
104+ m1 = (np .pi / (2.0 * L )) * pt .tile (L + X , self .M )
105+ m2 = pt .diag (indices )
106+ Phi = pt .sin (m1 @ m2 ) / pt .sqrt (L )
107107 omega = (np .pi * indices ) / (2.0 * L )
108108 return Phi , omega
109109
110110 def _build_prior (self , name , X , ** kwargs ):
111111 n_obs = np .shape (X )[0 ]
112112
113113 # standardize input scale
114- X = at .as_tensor_variable (X )
115- Xmu = at .mean (X , axis = 0 )
116- Xsd = at .std (X , axis = 0 )
114+ X = pt .as_tensor_variable (X )
115+ Xmu = pt .mean (X , axis = 0 )
116+ Xsd = pt .std (X , axis = 0 )
117117 Xz = (X - Xmu ) / Xsd
118118
119119 # define L using Xz and c
120- La = at .abs (at .min (Xz )) # .eval()?
121- Lb = at .max (Xz )
122- L = self .c * at .max ([La , Lb ])
120+ La = pt .abs (pt .min (Xz )) # .eval()?
121+ Lb = pt .max (Xz )
122+ L = self .c * pt .max ([La , Lb ])
123123
124124 # make basis and omega, spectral density
125125 Phi , omega = self ._generate_basis (Xz , L )
126126 scale , ls , spectral_density = self ._validate_cov_func (self .cov_func )
127127 spd = scale * spectral_density (omega , ls / Xsd ).flatten ()
128128
129129 beta = pm .Normal (f"{ name } _coeffs_" , size = self .M )
130- f = pm .Deterministic (name , self .mean_func (X ) + at .dot (Phi * at .sqrt (spd ), beta ))
130+ f = pm .Deterministic (name , self .mean_func (X ) + pt .dot (Phi * pt .sqrt (spd ), beta ))
131131 return f , Phi , L , spd , beta , Xmu , Xsd
132132
133133 def _build_conditional (self , Xnew , Xmu , Xsd , L , beta ):
134134 Xnewz = (Xnew - Xmu ) / Xsd
135135 Phi , omega = self ._generate_basis (Xnewz , L )
136136 scale , ls , spectral_density = self ._validate_cov_func (self .cov_func )
137137 spd = scale * spectral_density (omega , ls / Xsd ).flatten ()
138- return self .mean_func (Xnew ) + at .dot (Phi * at .sqrt (spd ), beta )
138+ return self .mean_func (Xnew ) + pt .dot (Phi * pt .sqrt (spd ), beta )
139139
140140 def conditional (self , name , Xnew ):
141141 # warn about extrapolation
@@ -147,15 +147,15 @@ class ExpQuad(pm.gp.cov.ExpQuad):
147147 @staticmethod
148148 def spectral_density (omega , ls ):
149149 # univariate spectral denisty, implement multi
150- return at .sqrt (2 * np .pi ) * ls * at .exp (- 0.5 * ls ** 2 * omega ** 2 )
150+ return pt .sqrt (2 * np .pi ) * ls * pt .exp (- 0.5 * ls ** 2 * omega ** 2 )
151151
152152
153153class Matern52 (pm .gp .cov .Matern52 ):
154154 @staticmethod
155155 def spectral_density (omega , ls ):
156156 # univariate spectral denisty, implement multi
157157 # https://arxiv.org/pdf/1611.06740.pdf
158- lam = at .sqrt (5 ) * (1.0 / ls )
158+ lam = pt .sqrt (5 ) * (1.0 / ls )
159159 return (16.0 / 3.0 ) * lam ** 5 * (1.0 / (lam ** 2 + omega ** 2 ) ** 3 )
160160
161161
@@ -165,7 +165,7 @@ def spectral_density(omega, ls):
165165 # univariate spectral denisty, implement multi
166166 # https://arxiv.org/pdf/1611.06740.pdf
167167 lam = np .sqrt (3.0 ) * (1.0 / ls )
168- return 4.0 * lam ** 3 * (1.0 / at .square (lam ** 2 + omega ** 2 ))
168+ return 4.0 * lam ** 3 * (1.0 / pt .square (lam ** 2 + omega ** 2 ))
169169
170170
171171class Matern12 (pm .gp .cov .Matern12 ):
@@ -193,7 +193,7 @@ def __init__(
193193 def _build_prior (self , name , X , jitter = 1e-6 , ** kwargs ):
194194 mu = self .mean_func (X )
195195 Kxx = pm .gp .util .stabilize (self .cov_func (X ), jitter )
196- vals , vecs = at .linalg .eigh (Kxx )
196+ vals , vecs = pt .linalg .eigh (Kxx )
197197 ## NOTE: REMOVED PRECISION CUTOFF
198198 if self .variance_limit is None :
199199 n_eigs = self .n_eigs
@@ -204,7 +204,7 @@ def _build_prior(self, name, X, jitter=1e-6, **kwargs):
204204 n_eigs = ((vals [::- 1 ].cumsum () / vals .sum ()) > self .variance_limit ).nonzero ()[0 ][0 ]
205205 U = vecs [:, - n_eigs :]
206206 s = vals [- n_eigs :]
207- basis = U * at .sqrt (s )
207+ basis = U * pt .sqrt (s )
208208
209209 coefs_raw = pm .Normal (f"_gp_{ name } _coefs" , mu = 0 , sigma = 1 , size = n_eigs )
210210 # weight = pm.HalfNormal(f"_gp_{name}_sd")
@@ -222,7 +222,7 @@ def prior(self, name, X, jitter=1e-6, **kwargs):
222222 def _build_conditional (self , Xnew , X , f , U , s , jitter ):
223223 Kxs = self .cov_func (X , Xnew )
224224 Kss = self .cov_func (Xnew )
225- Kxxpinv = U @ at .diag (1.0 / s ) @ U .T
225+ Kxxpinv = U @ pt .diag (1.0 / s ) @ U .T
226226 mus = Kxs .T @ Kxxpinv @ f
227227 K = Kss - Kxs .T @ Kxxpinv @ Kxs
228228 L = pm .gp .util .cholesky (pm .gp .util .stabilize (K , jitter ))
0 commit comments