reflectorch 1.3.0__py3-none-any.whl → 1.5.0__py3-none-any.whl
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.
Potentially problematic release.
This version of reflectorch might be problematic. Click here for more details.
- reflectorch/__init__.py +17 -17
- reflectorch/data_generation/__init__.py +128 -126
- reflectorch/data_generation/dataset.py +210 -210
- reflectorch/data_generation/likelihoods.py +80 -80
- reflectorch/data_generation/noise.py +470 -470
- reflectorch/data_generation/priors/__init__.py +60 -60
- reflectorch/data_generation/priors/base.py +55 -55
- reflectorch/data_generation/priors/exp_subprior_sampler.py +298 -298
- reflectorch/data_generation/priors/independent_priors.py +195 -195
- reflectorch/data_generation/priors/multilayer_models.py +311 -311
- reflectorch/data_generation/priors/multilayer_structures.py +104 -104
- reflectorch/data_generation/priors/no_constraints.py +206 -206
- reflectorch/data_generation/priors/parametric_models.py +841 -841
- reflectorch/data_generation/priors/parametric_subpriors.py +369 -369
- reflectorch/data_generation/priors/params.py +252 -252
- reflectorch/data_generation/priors/sampler_strategies.py +369 -369
- reflectorch/data_generation/priors/scaler_mixin.py +65 -65
- reflectorch/data_generation/priors/subprior_sampler.py +371 -371
- reflectorch/data_generation/priors/utils.py +118 -118
- reflectorch/data_generation/process_data.py +41 -41
- reflectorch/data_generation/q_generator.py +280 -246
- reflectorch/data_generation/reflectivity/__init__.py +102 -102
- reflectorch/data_generation/reflectivity/abeles.py +97 -97
- reflectorch/data_generation/reflectivity/kinematical.py +70 -70
- reflectorch/data_generation/reflectivity/memory_eff.py +105 -105
- reflectorch/data_generation/reflectivity/numpy_implementations.py +120 -120
- reflectorch/data_generation/reflectivity/smearing.py +138 -138
- reflectorch/data_generation/reflectivity/smearing_pointwise.py +109 -109
- reflectorch/data_generation/scale_curves.py +112 -112
- reflectorch/data_generation/smearing.py +98 -98
- reflectorch/data_generation/utils.py +223 -222
- reflectorch/extensions/jupyter/__init__.py +11 -6
- reflectorch/extensions/jupyter/api.py +85 -0
- reflectorch/extensions/jupyter/callbacks.py +34 -34
- reflectorch/extensions/jupyter/components.py +758 -0
- reflectorch/extensions/jupyter/custom_select.py +268 -0
- reflectorch/extensions/jupyter/log_widget.py +241 -0
- reflectorch/extensions/jupyter/model_selection.py +495 -0
- reflectorch/extensions/jupyter/plotly_plot_manager.py +329 -0
- reflectorch/extensions/jupyter/widget.py +625 -0
- reflectorch/extensions/matplotlib/__init__.py +5 -5
- reflectorch/extensions/matplotlib/losses.py +32 -32
- reflectorch/extensions/refnx/refnx_conversion.py +76 -76
- reflectorch/inference/__init__.py +28 -24
- reflectorch/inference/inference_model.py +847 -851
- reflectorch/inference/input_interface.py +239 -0
- reflectorch/inference/loading_data.py +37 -0
- reflectorch/inference/multilayer_fitter.py +171 -171
- reflectorch/inference/multilayer_inference_model.py +193 -193
- reflectorch/inference/plotting.py +524 -98
- reflectorch/inference/preprocess_exp/__init__.py +6 -6
- reflectorch/inference/preprocess_exp/attenuation.py +36 -36
- reflectorch/inference/preprocess_exp/cut_with_q_ratio.py +31 -31
- reflectorch/inference/preprocess_exp/footprint.py +81 -81
- reflectorch/inference/preprocess_exp/interpolation.py +19 -16
- reflectorch/inference/preprocess_exp/normalize.py +21 -21
- reflectorch/inference/preprocess_exp/preprocess.py +121 -121
- reflectorch/inference/query_matcher.py +81 -81
- reflectorch/inference/record_time.py +43 -43
- reflectorch/inference/sampler_solution.py +56 -56
- reflectorch/inference/scipy_fitter.py +272 -248
- reflectorch/inference/torch_fitter.py +87 -87
- reflectorch/ml/__init__.py +32 -32
- reflectorch/ml/basic_trainer.py +292 -292
- reflectorch/ml/callbacks.py +80 -80
- reflectorch/ml/dataloaders.py +26 -26
- reflectorch/ml/loggers.py +55 -55
- reflectorch/ml/schedulers.py +355 -355
- reflectorch/ml/trainers.py +200 -191
- reflectorch/ml/utils.py +2 -2
- reflectorch/models/__init__.py +15 -14
- reflectorch/models/activations.py +50 -50
- reflectorch/models/encoders/__init__.py +19 -17
- reflectorch/models/encoders/conv_encoder.py +218 -218
- reflectorch/models/encoders/conv_res_net.py +115 -115
- reflectorch/models/encoders/fno.py +133 -133
- reflectorch/models/encoders/integral_kernel_embedding.py +390 -0
- reflectorch/models/networks/__init__.py +14 -14
- reflectorch/models/networks/mlp_networks.py +434 -428
- reflectorch/models/networks/residual_net.py +156 -156
- reflectorch/paths.py +29 -27
- reflectorch/runs/__init__.py +31 -31
- reflectorch/runs/config.py +25 -25
- reflectorch/runs/slurm_utils.py +93 -93
- reflectorch/runs/train.py +78 -78
- reflectorch/runs/utils.py +404 -401
- reflectorch/test_config.py +4 -4
- reflectorch/train.py +4 -4
- reflectorch/train_on_cluster.py +4 -4
- reflectorch/utils.py +98 -68
- {reflectorch-1.3.0.dist-info → reflectorch-1.5.0.dist-info}/METADATA +129 -125
- reflectorch-1.5.0.dist-info/RECORD +96 -0
- {reflectorch-1.3.0.dist-info → reflectorch-1.5.0.dist-info}/WHEEL +1 -1
- {reflectorch-1.3.0.dist-info → reflectorch-1.5.0.dist-info}/licenses/LICENSE.txt +20 -20
- reflectorch-1.3.0.dist-info/RECORD +0 -86
- {reflectorch-1.3.0.dist-info → reflectorch-1.5.0.dist-info}/top_level.txt +0 -0
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
from tqdm import trange
|
|
2
|
-
|
|
3
|
-
import torch
|
|
4
|
-
from torch import nn, Tensor
|
|
5
|
-
|
|
6
|
-
from reflectorch.data_generation import LogLikelihood, reflectivity, PriorSampler
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class ReflGradientFit(object):
|
|
10
|
-
"""Directly optimizes the thin film parameters using a Pytorch optimizer
|
|
11
|
-
|
|
12
|
-
Args:
|
|
13
|
-
q (Tensor): the q positions
|
|
14
|
-
exp_curve (Tensor): the experimental reflectivity curve
|
|
15
|
-
prior_sampler (PriorSampler): the prior sampler
|
|
16
|
-
params (Tensor): the initial thin film parameters
|
|
17
|
-
fit_indices (Tensor): the indices of the thin film parameters which are to be fitted
|
|
18
|
-
sigmas (Tensor, optional): error bars of the reflectivity curve, if not provided they are derived from ``rel_err`` and ``abs_err``. Defaults to None.
|
|
19
|
-
optim_cls (Type[torch.optim.Optimizer], optional): the Pytorch optimizer class. Defaults to None.
|
|
20
|
-
lr (float, optional): the learning rate. Defaults to 1e-2.
|
|
21
|
-
rel_err (float, optional): the relative error in the reflectivity curve. Defaults to 0.1.
|
|
22
|
-
abs_err (float, optional): the absolute error in the reflectivity curve. Defaults to 1e-7.
|
|
23
|
-
"""
|
|
24
|
-
def __init__(self,
|
|
25
|
-
q: Tensor,
|
|
26
|
-
exp_curve: Tensor,
|
|
27
|
-
prior_sampler: PriorSampler,
|
|
28
|
-
params: Tensor,
|
|
29
|
-
fit_indices: Tensor,
|
|
30
|
-
sigmas: Tensor = None,
|
|
31
|
-
optim_cls=None,
|
|
32
|
-
lr: float = 1e-2,
|
|
33
|
-
rel_err: float = 0.1,
|
|
34
|
-
abs_err: float = 1e-7,
|
|
35
|
-
):
|
|
36
|
-
self.q = q
|
|
37
|
-
|
|
38
|
-
if sigmas is None:
|
|
39
|
-
sigmas = exp_curve * rel_err + abs_err
|
|
40
|
-
|
|
41
|
-
self.likelihood = LogLikelihood(q, exp_curve, prior_sampler, sigmas)
|
|
42
|
-
|
|
43
|
-
self.num_layers = params.shape[-1] // 3
|
|
44
|
-
self.fit_indices = fit_indices
|
|
45
|
-
self.init_params = params.clone()
|
|
46
|
-
self.params_to_fit = nn.Parameter(self.init_params[fit_indices].clone())
|
|
47
|
-
|
|
48
|
-
optim_cls = optim_cls or torch.optim.Adam
|
|
49
|
-
self.optim = optim_cls([self.params_to_fit], lr)
|
|
50
|
-
|
|
51
|
-
self.losses = []
|
|
52
|
-
|
|
53
|
-
@property
|
|
54
|
-
def params(self):
|
|
55
|
-
params = self.init_params.clone()
|
|
56
|
-
params[self.fit_indices] = self.params_to_fit
|
|
57
|
-
return params
|
|
58
|
-
|
|
59
|
-
def calc_log_likelihood(self):
|
|
60
|
-
return self.likelihood.calc_log_likelihood(self.refl())
|
|
61
|
-
|
|
62
|
-
def calc_log_prob_loss(self):
|
|
63
|
-
return - self.calc_log_likelihood().mean()
|
|
64
|
-
|
|
65
|
-
def refl(self):
|
|
66
|
-
d, sigma, rho = torch.split(self.params, [self.num_layers, self.num_layers + 1, self.num_layers + 1], -1)
|
|
67
|
-
return reflectivity(self.q, d, sigma, rho)
|
|
68
|
-
|
|
69
|
-
def run(self, num_iterations: int = 500, disable_tqdm: bool = False):
|
|
70
|
-
"""Runs the optimization process
|
|
71
|
-
|
|
72
|
-
Args:
|
|
73
|
-
num_iterations (int, optional): number of iterations the optimization is run for. Defaults to 500.
|
|
74
|
-
disable_tqdm (bool, optional): whether to disable the prograss bar. Defaults to False.
|
|
75
|
-
"""
|
|
76
|
-
pbar = trange(num_iterations, disable=disable_tqdm)
|
|
77
|
-
|
|
78
|
-
for _ in pbar:
|
|
79
|
-
self.optim.zero_grad()
|
|
80
|
-
loss = self.calc_log_prob_loss()
|
|
81
|
-
loss.backward()
|
|
82
|
-
self.optim.step()
|
|
83
|
-
self.losses.append(loss.item())
|
|
84
|
-
pbar.set_description(f'Loss = {loss.item():.2e}')
|
|
85
|
-
|
|
86
|
-
def clear(self):
|
|
87
|
-
self.losses.clear()
|
|
1
|
+
from tqdm import trange
|
|
2
|
+
|
|
3
|
+
import torch
|
|
4
|
+
from torch import nn, Tensor
|
|
5
|
+
|
|
6
|
+
from reflectorch.data_generation import LogLikelihood, reflectivity, PriorSampler
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ReflGradientFit(object):
|
|
10
|
+
"""Directly optimizes the thin film parameters using a Pytorch optimizer
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
q (Tensor): the q positions
|
|
14
|
+
exp_curve (Tensor): the experimental reflectivity curve
|
|
15
|
+
prior_sampler (PriorSampler): the prior sampler
|
|
16
|
+
params (Tensor): the initial thin film parameters
|
|
17
|
+
fit_indices (Tensor): the indices of the thin film parameters which are to be fitted
|
|
18
|
+
sigmas (Tensor, optional): error bars of the reflectivity curve, if not provided they are derived from ``rel_err`` and ``abs_err``. Defaults to None.
|
|
19
|
+
optim_cls (Type[torch.optim.Optimizer], optional): the Pytorch optimizer class. Defaults to None.
|
|
20
|
+
lr (float, optional): the learning rate. Defaults to 1e-2.
|
|
21
|
+
rel_err (float, optional): the relative error in the reflectivity curve. Defaults to 0.1.
|
|
22
|
+
abs_err (float, optional): the absolute error in the reflectivity curve. Defaults to 1e-7.
|
|
23
|
+
"""
|
|
24
|
+
def __init__(self,
|
|
25
|
+
q: Tensor,
|
|
26
|
+
exp_curve: Tensor,
|
|
27
|
+
prior_sampler: PriorSampler,
|
|
28
|
+
params: Tensor,
|
|
29
|
+
fit_indices: Tensor,
|
|
30
|
+
sigmas: Tensor = None,
|
|
31
|
+
optim_cls=None,
|
|
32
|
+
lr: float = 1e-2,
|
|
33
|
+
rel_err: float = 0.1,
|
|
34
|
+
abs_err: float = 1e-7,
|
|
35
|
+
):
|
|
36
|
+
self.q = q
|
|
37
|
+
|
|
38
|
+
if sigmas is None:
|
|
39
|
+
sigmas = exp_curve * rel_err + abs_err
|
|
40
|
+
|
|
41
|
+
self.likelihood = LogLikelihood(q, exp_curve, prior_sampler, sigmas)
|
|
42
|
+
|
|
43
|
+
self.num_layers = params.shape[-1] // 3
|
|
44
|
+
self.fit_indices = fit_indices
|
|
45
|
+
self.init_params = params.clone()
|
|
46
|
+
self.params_to_fit = nn.Parameter(self.init_params[fit_indices].clone())
|
|
47
|
+
|
|
48
|
+
optim_cls = optim_cls or torch.optim.Adam
|
|
49
|
+
self.optim = optim_cls([self.params_to_fit], lr)
|
|
50
|
+
|
|
51
|
+
self.losses = []
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def params(self):
|
|
55
|
+
params = self.init_params.clone()
|
|
56
|
+
params[self.fit_indices] = self.params_to_fit
|
|
57
|
+
return params
|
|
58
|
+
|
|
59
|
+
def calc_log_likelihood(self):
|
|
60
|
+
return self.likelihood.calc_log_likelihood(self.refl())
|
|
61
|
+
|
|
62
|
+
def calc_log_prob_loss(self):
|
|
63
|
+
return - self.calc_log_likelihood().mean()
|
|
64
|
+
|
|
65
|
+
def refl(self):
|
|
66
|
+
d, sigma, rho = torch.split(self.params, [self.num_layers, self.num_layers + 1, self.num_layers + 1], -1)
|
|
67
|
+
return reflectivity(self.q, d, sigma, rho)
|
|
68
|
+
|
|
69
|
+
def run(self, num_iterations: int = 500, disable_tqdm: bool = False):
|
|
70
|
+
"""Runs the optimization process
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
num_iterations (int, optional): number of iterations the optimization is run for. Defaults to 500.
|
|
74
|
+
disable_tqdm (bool, optional): whether to disable the prograss bar. Defaults to False.
|
|
75
|
+
"""
|
|
76
|
+
pbar = trange(num_iterations, disable=disable_tqdm)
|
|
77
|
+
|
|
78
|
+
for _ in pbar:
|
|
79
|
+
self.optim.zero_grad()
|
|
80
|
+
loss = self.calc_log_prob_loss()
|
|
81
|
+
loss.backward()
|
|
82
|
+
self.optim.step()
|
|
83
|
+
self.losses.append(loss.item())
|
|
84
|
+
pbar.set_description(f'Loss = {loss.item():.2e}')
|
|
85
|
+
|
|
86
|
+
def clear(self):
|
|
87
|
+
self.losses.clear()
|
reflectorch/ml/__init__.py
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
from reflectorch.ml.basic_trainer import *
|
|
2
|
-
from reflectorch.ml.callbacks import *
|
|
3
|
-
from reflectorch.ml.trainers import *
|
|
4
|
-
from reflectorch.ml.loggers import *
|
|
5
|
-
from reflectorch.ml.schedulers import *
|
|
6
|
-
from reflectorch.ml.dataloaders import *
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
'Trainer',
|
|
10
|
-
'TrainerCallback',
|
|
11
|
-
'DataLoader',
|
|
12
|
-
'PeriodicTrainerCallback',
|
|
13
|
-
'SaveBestModel',
|
|
14
|
-
'LogLosses',
|
|
15
|
-
'Logger',
|
|
16
|
-
'Loggers',
|
|
17
|
-
'PrintLogger',
|
|
18
|
-
'TensorBoardLogger',
|
|
19
|
-
'ScheduleBatchSize',
|
|
20
|
-
'ScheduleLR',
|
|
21
|
-
'StepLR',
|
|
22
|
-
'CyclicLR',
|
|
23
|
-
'LogCyclicLR',
|
|
24
|
-
'ReduceLROnPlateau',
|
|
25
|
-
'OneCycleLR',
|
|
26
|
-
'CosineAnnealingWithWarmup',
|
|
27
|
-
'ReflectivityDataLoader',
|
|
28
|
-
'MultilayerDataLoader',
|
|
29
|
-
'RealTimeSimTrainer',
|
|
30
|
-
'DenoisingAETrainer',
|
|
31
|
-
'PointEstimatorTrainer',
|
|
32
|
-
]
|
|
1
|
+
from reflectorch.ml.basic_trainer import *
|
|
2
|
+
from reflectorch.ml.callbacks import *
|
|
3
|
+
from reflectorch.ml.trainers import *
|
|
4
|
+
from reflectorch.ml.loggers import *
|
|
5
|
+
from reflectorch.ml.schedulers import *
|
|
6
|
+
from reflectorch.ml.dataloaders import *
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
'Trainer',
|
|
10
|
+
'TrainerCallback',
|
|
11
|
+
'DataLoader',
|
|
12
|
+
'PeriodicTrainerCallback',
|
|
13
|
+
'SaveBestModel',
|
|
14
|
+
'LogLosses',
|
|
15
|
+
'Logger',
|
|
16
|
+
'Loggers',
|
|
17
|
+
'PrintLogger',
|
|
18
|
+
'TensorBoardLogger',
|
|
19
|
+
'ScheduleBatchSize',
|
|
20
|
+
'ScheduleLR',
|
|
21
|
+
'StepLR',
|
|
22
|
+
'CyclicLR',
|
|
23
|
+
'LogCyclicLR',
|
|
24
|
+
'ReduceLROnPlateau',
|
|
25
|
+
'OneCycleLR',
|
|
26
|
+
'CosineAnnealingWithWarmup',
|
|
27
|
+
'ReflectivityDataLoader',
|
|
28
|
+
'MultilayerDataLoader',
|
|
29
|
+
'RealTimeSimTrainer',
|
|
30
|
+
'DenoisingAETrainer',
|
|
31
|
+
'PointEstimatorTrainer',
|
|
32
|
+
]
|