11"""
22Test Gaussian Model
33"""
4+
45import numpy as np
56import pandas as pd
67import pytest
7-
88from regmod .data import Data
99from regmod .function import fun_dict
10- from regmod .models import GaussianModel
11- from regmod .prior import (GaussianPrior , SplineGaussianPrior ,
12- SplineUniformPrior , UniformPrior )
10+ from regmod .models import create_gaussian_model
11+ from regmod .prior import (
12+ GaussianPrior ,
13+ SplineGaussianPrior ,
14+ SplineUniformPrior ,
15+ UniformPrior ,
16+ )
1317from regmod .utils import SplineSpecs
1418from regmod .variable import SplineVariable , Variable
1519
1923@pytest .fixture
2024def data ():
2125 num_obs = 5
22- df = pd .DataFrame ({
23- "obs" : np . random . randn ( num_obs ),
24- "cov0 " : np .random .randn (num_obs ),
25- "cov1 " : np .random .randn (num_obs )
26- })
27- return Data ( col_obs = "obs" ,
28- col_covs = [ "cov0" , "cov1" ],
29- df = df )
26+ df = pd .DataFrame (
27+ {
28+ "obs " : np .random .randn (num_obs ),
29+ "cov0 " : np .random .randn (num_obs ),
30+ "cov1" : np . random . randn ( num_obs ),
31+ }
32+ )
33+ return Data ( col_obs = "obs" , col_covs = [ "cov0" , "cov1" ], df = df )
3034
3135
3236@pytest .fixture
@@ -41,9 +45,9 @@ def uprior():
4145
4246@pytest .fixture
4347def spline_specs ():
44- return SplineSpecs (knots = np . linspace ( 0.0 , 1.0 , 5 ),
45- degree = 3 ,
46- knots_type = "rel_domain" )
48+ return SplineSpecs (
49+ knots = np . linspace ( 0.0 , 1.0 , 5 ), degree = 3 , knots_type = "rel_domain"
50+ )
4751
4852
4953@pytest .fixture
@@ -58,20 +62,21 @@ def spline_uprior():
5862
5963@pytest .fixture
6064def var_cov0 (gprior , uprior ):
61- return Variable (name = "cov0" ,
62- priors = [gprior , uprior ])
65+ return Variable (name = "cov0" , priors = [gprior , uprior ])
6366
6467
6568@pytest .fixture
6669def var_cov1 (spline_gprior , spline_uprior , spline_specs ):
67- return SplineVariable (name = "cov1" ,
68- spline_specs = spline_specs ,
69- priors = [ spline_gprior , spline_uprior ] )
70+ return SplineVariable (
71+ name = "cov1" , spline_specs = spline_specs , priors = [ spline_gprior , spline_uprior ]
72+ )
7073
7174
7275@pytest .fixture
7376def model (data , var_cov0 , var_cov1 ):
74- return GaussianModel (data , param_specs = {"mu" : {"variables" : [var_cov0 , var_cov1 ]}})
77+ return create_gaussian_model (
78+ data , param_specs = {"mu" : {"variables" : [var_cov0 , var_cov1 ]}}
79+ )
7580
7681
7782def test_model_result (model ):
@@ -117,7 +122,7 @@ def test_model_gradient(model, inv_link):
117122 tr_grad = np .zeros (model .size )
118123 for i in range (model .size ):
119124 coefs_c [i ] += 1e-16j
120- tr_grad [i ] = model .objective (coefs_c ).imag / 1e-16
125+ tr_grad [i ] = model .objective (coefs_c ).imag / 1e-16
121126 coefs_c [i ] -= 1e-16j
122127 assert np .allclose (my_grad , tr_grad )
123128
@@ -132,7 +137,7 @@ def test_model_hessian(model, inv_link):
132137 for i in range (model .size ):
133138 for j in range (model .size ):
134139 coefs_c [j ] += 1e-16j
135- tr_hess [i ][j ] = model .gradient (coefs_c ).imag [i ]/ 1e-16
140+ tr_hess [i ][j ] = model .gradient (coefs_c ).imag [i ] / 1e-16
136141 coefs_c [j ] -= 1e-16j
137142
138143 assert np .allclose (my_hess , tr_hess )
@@ -152,25 +157,27 @@ def test_model_jacobian2(model):
152157
153158 mat = model .mat [0 ].to_numpy ()
154159 param = model .get_params (beta )[0 ]
155- residual = (model .data .obs - param )* np .sqrt (model .data .weights )
156- jacobian = mat .T * residual
160+ residual = (model .data .obs - param ) * np .sqrt (model .data .weights )
161+ jacobian = mat .T * residual
157162 true_jacobian2 = jacobian .dot (jacobian .T ) + model .hessian_from_gprior ()
158163
159164 assert np .allclose (jacobian2 , true_jacobian2 )
160165
161166
162167def test_model_no_variables ():
163168 num_obs = 5
164- df = pd .DataFrame ({
165- "obs" : np .random .randn (num_obs ),
166- "offset" : np .ones (num_obs ),
167- })
169+ df = pd .DataFrame (
170+ {
171+ "obs" : np .random .randn (num_obs ),
172+ "offset" : np .ones (num_obs ),
173+ }
174+ )
168175 data = Data (
169176 col_obs = "obs" ,
170177 col_offset = "offset" ,
171178 df = df ,
172179 )
173- model = GaussianModel (data , param_specs = {"mu" : {"offset" : "offset" }})
180+ model = create_gaussian_model (data , param_specs = {"mu" : {"offset" : "offset" }})
174181 coefs = np .array ([])
175182 grad = model .gradient (coefs )
176183 hessian = model .hessian (coefs )
0 commit comments