reflectorch 1.2.1__py3-none-any.whl → 1.3.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.

Files changed (37) hide show
  1. reflectorch/data_generation/__init__.py +2 -0
  2. reflectorch/data_generation/dataset.py +27 -7
  3. reflectorch/data_generation/noise.py +115 -9
  4. reflectorch/data_generation/priors/parametric_models.py +90 -15
  5. reflectorch/data_generation/priors/parametric_subpriors.py +28 -7
  6. reflectorch/data_generation/priors/sampler_strategies.py +67 -3
  7. reflectorch/data_generation/q_generator.py +31 -11
  8. reflectorch/data_generation/reflectivity/__init__.py +53 -11
  9. reflectorch/data_generation/reflectivity/kinematical.py +4 -5
  10. reflectorch/data_generation/reflectivity/smearing.py +25 -10
  11. reflectorch/data_generation/reflectivity/smearing_pointwise.py +110 -0
  12. reflectorch/data_generation/smearing.py +42 -11
  13. reflectorch/data_generation/utils.py +92 -18
  14. reflectorch/extensions/refnx/refnx_conversion.py +77 -0
  15. reflectorch/inference/inference_model.py +216 -103
  16. reflectorch/inference/plotting.py +98 -0
  17. reflectorch/inference/scipy_fitter.py +84 -7
  18. reflectorch/ml/__init__.py +2 -0
  19. reflectorch/ml/basic_trainer.py +18 -6
  20. reflectorch/ml/callbacks.py +5 -4
  21. reflectorch/ml/loggers.py +25 -0
  22. reflectorch/ml/schedulers.py +116 -0
  23. reflectorch/ml/trainers.py +122 -23
  24. reflectorch/models/__init__.py +1 -1
  25. reflectorch/models/encoders/__init__.py +0 -2
  26. reflectorch/models/encoders/conv_encoder.py +54 -40
  27. reflectorch/models/encoders/fno.py +23 -16
  28. reflectorch/models/networks/__init__.py +2 -0
  29. reflectorch/models/networks/mlp_networks.py +324 -152
  30. reflectorch/models/networks/residual_net.py +31 -5
  31. reflectorch/runs/train.py +0 -1
  32. reflectorch/runs/utils.py +43 -9
  33. {reflectorch-1.2.1.dist-info → reflectorch-1.3.0.dist-info}/METADATA +19 -17
  34. {reflectorch-1.2.1.dist-info → reflectorch-1.3.0.dist-info}/RECORD +37 -34
  35. {reflectorch-1.2.1.dist-info → reflectorch-1.3.0.dist-info}/WHEEL +1 -1
  36. {reflectorch-1.2.1.dist-info → reflectorch-1.3.0.dist-info/licenses}/LICENSE.txt +0 -0
  37. {reflectorch-1.2.1.dist-info → reflectorch-1.3.0.dist-info}/top_level.txt +0 -0
@@ -18,15 +18,21 @@ class ResidualMLP(nn.Module):
18
18
  repeats_per_block: int = 2,
19
19
  activation: str = 'relu',
20
20
  use_batch_norm: bool = True,
21
+ use_layer_norm: bool = False,
21
22
  dropout_rate: float = 0.0,
22
23
  residual: bool = True,
23
24
  adaptive_activation: bool = False,
24
25
  conditioning: str = 'glu',
26
+ concat_condition_first_layer: bool = True,
27
+ film_with_tanh: bool = False,
25
28
  ):
26
29
  super().__init__()
27
30
 
28
- dim_first_layer = dim_in + dim_condition
31
+ self.concat_condition_first_layer = concat_condition_first_layer
32
+
33
+ dim_first_layer = dim_in + dim_condition if concat_condition_first_layer else dim_in
29
34
  self.first_layer = nn.Linear(dim_first_layer, layer_width)
35
+
30
36
  self.blocks = nn.ModuleList(
31
37
  [
32
38
  ResidualBlock(
@@ -35,24 +41,28 @@ class ResidualMLP(nn.Module):
35
41
  repeats_per_block=repeats_per_block,
36
42
  activation=activation,
37
43
  use_batch_norm=use_batch_norm,
44
+ use_layer_norm=use_layer_norm,
38
45
  dropout_rate=dropout_rate,
39
46
  residual=residual,
40
47
  adaptive_activation=adaptive_activation,
41
48
  conditioning = conditioning,
49
+ film_with_tanh = film_with_tanh,
42
50
  )
43
51
  for _ in range(num_blocks)
44
52
  ]
45
53
  )
54
+
46
55
  self.last_layer = nn.Linear(layer_width, dim_out)
47
56
 
48
57
  def forward(self, x, condition=None):
49
- if condition is None:
50
- x = self.first_layer(x)
51
- else:
58
+ if self.concat_condition_first_layer and condition is not None:
52
59
  x = self.first_layer(torch.cat([x, condition], dim=-1))
60
+ else:
61
+ x = self.first_layer(x)
53
62
 
54
63
  for block in self.blocks:
55
64
  x = block(x, condition=condition)
65
+
56
66
  x = self.last_layer(x)
57
67
 
58
68
  return x
@@ -68,19 +78,23 @@ class ResidualBlock(nn.Module):
68
78
  repeats_per_block: int = 2,
69
79
  activation: str = 'relu',
70
80
  use_batch_norm: bool = False,
81
+ use_layer_norm: bool = False,
71
82
  dropout_rate: float = 0.0,
72
83
  residual: bool = True,
73
84
  adaptive_activation: bool = False,
74
85
  conditioning: str = 'glu',
86
+ film_with_tanh: bool = False,
75
87
  ):
76
88
  super().__init__()
77
89
 
78
90
  self.residual = residual
79
91
  self.repeats_per_block = repeats_per_block
80
92
  self.use_batch_norm = use_batch_norm
93
+ self.use_layer_norm = use_layer_norm
81
94
  self.dropout_rate = dropout_rate
82
95
  self.adaptive_activation = adaptive_activation
83
96
  self.conditioning = conditioning
97
+ self.film_with_tanh = film_with_tanh
84
98
 
85
99
  if not adaptive_activation:
86
100
  self.activation = activation_by_name(activation)()
@@ -92,7 +106,11 @@ class ResidualBlock(nn.Module):
92
106
  if use_batch_norm:
93
107
  self.batch_norm_layers = nn.ModuleList(
94
108
  [nn.BatchNorm1d(layer_width, eps=1e-3) for _ in range(repeats_per_block)]
95
- )
109
+ )
110
+ elif use_layer_norm:
111
+ self.layer_norm_layers = nn.ModuleList(
112
+ [nn.LayerNorm(layer_width) for _ in range(repeats_per_block)]
113
+ )
96
114
 
97
115
  if dim_condition:
98
116
  if conditioning == 'glu':
@@ -113,12 +131,17 @@ class ResidualBlock(nn.Module):
113
131
  for i in range(self.repeats_per_block):
114
132
  if self.use_batch_norm:
115
133
  x = self.batch_norm_layers[i](x)
134
+ elif self.use_layer_norm:
135
+ x = self.layer_norm_layers[i](x)
136
+
116
137
  if not self.adaptive_activation:
117
138
  x = self.activation(x)
118
139
  else:
119
140
  x = self.activation_layers[i](x)
141
+
120
142
  if self.dropout_rate > 0 and i == self.repeats_per_block - 1:
121
143
  x = self.dropout(x)
144
+
122
145
  x = self.linear_layers[i](x)
123
146
 
124
147
  if condition is not None:
@@ -126,6 +149,9 @@ class ResidualBlock(nn.Module):
126
149
  x = F.glu(torch.cat((x, self.condition_layer(condition)), dim=-1), dim=-1)
127
150
  elif self.conditioning == 'film':
128
151
  gamma, beta = torch.chunk(self.condition_layer(condition), chunks=2, dim=-1)
152
+ if self.film_with_tanh:
153
+ tanh = nn.Tanh()
154
+ gamma, beta = tanh(gamma), tanh(beta)
129
155
  x = x * gamma + beta
130
156
 
131
157
  return x0 + x if self.residual else x
reflectorch/runs/train.py CHANGED
@@ -72,7 +72,6 @@ def run_train_on_cluster(config_name: str):
72
72
 
73
73
  def _change_to_test_config(config, batch_size: int, num_iterations: int):
74
74
  config = dict(config)
75
- config['training']['logger']['use_neptune'] = False
76
75
  config['training']['num_iterations'] = num_iterations
77
76
  config['training']['batch_size'] = batch_size
78
77
  config['training']['update_tqdm_freq'] = 1
reflectorch/runs/utils.py CHANGED
@@ -136,7 +136,7 @@ def get_callbacks_from_config(config: dict, folder_paths: dict = None) -> Tuple[
136
136
  if callback:
137
137
  callbacks.append(callback)
138
138
 
139
- if train_conf['logger']['use_neptune']:
139
+ if 'logger' in train_conf.keys():
140
140
  callbacks.append(LogLosses())
141
141
 
142
142
  return tuple(callbacks)
@@ -162,9 +162,9 @@ def get_trainer_from_config(config: dict, folder_paths: dict = None):
162
162
 
163
163
  optim_cls = getattr(torch.optim, train_conf['optimizer'])
164
164
 
165
- logger = None
165
+ logger_conf = train_conf.get('logger', None)
166
+ logger = init_from_conf(logger_conf) if logger_conf and logger_conf.get('cls') else None
166
167
 
167
- train_with_q_input = train_conf.get('train_with_q_input', False)
168
168
  clip_grad_norm_max = train_conf.get('clip_grad_norm_max', None)
169
169
 
170
170
  trainer_cls = globals().get(train_conf['trainer_cls']) if 'trainer_cls' in train_conf else PointEstimatorTrainer
@@ -173,10 +173,13 @@ def get_trainer_from_config(config: dict, folder_paths: dict = None):
173
173
 
174
174
  trainer = trainer_cls(
175
175
  model, dset, train_conf['lr'], train_conf['batch_size'], clip_grad_norm_max=clip_grad_norm_max,
176
- logger=logger, optim_cls=optim_cls, train_with_q_input=train_with_q_input,
176
+ logger=logger, optim_cls=optim_cls,
177
177
  **trainer_kwargs
178
178
  )
179
179
 
180
+ if train_conf.get('train_with_q_input', False) and getattr(trainer, 'train_with_q_input', None) is not None: #only for back-compatibility with configs in older versions
181
+ trainer.train_with_q_input = True
182
+
180
183
  return trainer
181
184
 
182
185
 
@@ -187,7 +190,7 @@ def get_trainer_by_name(config_name, config_dir=None, model_path=None, load_weig
187
190
  Args:
188
191
  config_name (str): name of the configuration file
189
192
  config_dir (str): path of the configuration directory
190
- model_path (str, optional): path to the network weights.
193
+ model_path (str, optional): path to the network weights. The default path is 'saved_models' located in the package directory
191
194
  load_weights (bool, optional): if True the saved network weights are loaded into the network. Defaults to True.
192
195
  inference_device (str, optional): overwrites the device in the configuration file for the purpose of inference on a different device then the training was performed on. Defaults to 'cuda'.
193
196
 
@@ -195,8 +198,7 @@ def get_trainer_by_name(config_name, config_dir=None, model_path=None, load_weig
195
198
  Trainer: the trainer object
196
199
  """
197
200
  config = load_config(config_name, config_dir)
198
- config['model']['network']['pretrained_name'] = None
199
- config['training']['logger']['use_neptune'] = False
201
+ #config['model']['network']['pretrained_name'] = None
200
202
 
201
203
  config['model']['network']['device'] = inference_device
202
204
  config['dset']['prior_sampler']['kwargs']['device'] = inference_device
@@ -219,7 +221,7 @@ def get_trainer_by_name(config_name, config_dir=None, model_path=None, load_weig
219
221
 
220
222
  if str(model_path).endswith('.pt'):
221
223
  try:
222
- state_dict = torch.load(model_path, map_location=inference_device)
224
+ state_dict = torch.load(model_path, map_location=inference_device, weights_only=False)
223
225
  except Exception as err:
224
226
  raise RuntimeError(f'Could not load model from {model_path}') from err
225
227
 
@@ -238,7 +240,7 @@ def get_trainer_by_name(config_name, config_dir=None, model_path=None, load_weig
238
240
  raise RuntimeError('Weigths file with unknown extension')
239
241
 
240
242
  return trainer
241
-
243
+
242
244
  def get_callbacks_by_name(config_name, config_dir=None):
243
245
  """Initializes the trainer callbacks based on a configuration file
244
246
 
@@ -362,6 +364,38 @@ def convert_pt_to_safetensors(input_dir):
362
364
 
363
365
  safetensors.torch.save_file(tensors=model_state_dict, filename=safetensors_file_path)
364
366
 
367
+ def convert_files_to_safetensors(files):
368
+ """
369
+ Converts specified .pt files to .safetensors format.
370
+
371
+ Args:
372
+ files (str or list of str): Path(s) to .pt files containing model state dictionaries.
373
+ """
374
+ if isinstance(files, str):
375
+ files = [files]
376
+
377
+ for pt_file_path in files:
378
+ if not pt_file_path.endswith('.pt'):
379
+ print(f"Skipping {pt_file_path}: not a .pt file.")
380
+ continue
381
+
382
+ if not os.path.exists(pt_file_path):
383
+ print(f"File {pt_file_path} does not exist.")
384
+ continue
385
+
386
+ safetensors_file_path = pt_file_path[:-3] + '.safetensors'
387
+
388
+ if os.path.exists(safetensors_file_path):
389
+ print(f"Skipping {pt_file_path}: .safetensors version already exists.")
390
+ continue
391
+
392
+ print(f"Converting {pt_file_path} to .safetensors format.")
393
+ data_pt = torch.load(pt_file_path, weights_only=False)
394
+ model_state_dict = data_pt["model"]
395
+ model_state_dict = split_complex_tensors(model_state_dict)
396
+
397
+ safetensors.torch.save_file(tensors=model_state_dict, filename=safetensors_file_path)
398
+
365
399
  def load_state_dict_safetensors(model, filename, device):
366
400
  state_dict = safetensors.torch.load_file(filename=filename, device=device)
367
401
  state_dict = recombine_complex_tensors(state_dict)
@@ -1,9 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: reflectorch
3
- Version: 1.2.1
3
+ Version: 1.3.0
4
4
  Summary: A Pytorch-based package for the analysis of reflectometry data
5
5
  Author-email: Vladimir Starostin <vladimir.starostin@uni-tuebingen.de>, Valentin Munteanu <valentin.munteanu@uni-tuebingen.de>
6
6
  Maintainer-email: Valentin Munteanu <valentin.munteanu@uni-tuebingen.de>, Vladimir Starostin <vladimir.starostin@uni-tuebingen.de>, Alexander Hinderhofer <alexander.hinderhofer@uni-tuebingen.de>
7
+ License-Expression: MIT
7
8
  Project-URL: Source, https://github.com/schreiber-lab/reflectorch/
8
9
  Project-URL: Issues, https://github.com/schreiber-lab/reflectorch/issues
9
10
  Project-URL: Documentation, https://schreiber-lab.github.io/reflectorch/
@@ -11,32 +12,33 @@ Keywords: reflectometry,machine learning
11
12
  Classifier: Programming Language :: Python :: 3
12
13
  Classifier: Operating System :: OS Independent
13
14
  Classifier: Environment :: GPU :: NVIDIA CUDA
14
- Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
15
15
  Classifier: Development Status :: 4 - Beta
16
16
  Classifier: Topic :: Scientific/Engineering :: Physics
17
17
  Classifier: Intended Audience :: Science/Research
18
18
  Requires-Python: >=3.7
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.txt
21
- Requires-Dist: numpy <2.0,>=1.18.1
22
- Requires-Dist: torch >=1.8.1
21
+ Requires-Dist: numpy
22
+ Requires-Dist: torch>=1.8.1
23
23
  Requires-Dist: scipy
24
24
  Requires-Dist: tqdm
25
25
  Requires-Dist: PyYAML
26
26
  Requires-Dist: click
27
27
  Requires-Dist: matplotlib
28
28
  Requires-Dist: ipywidgets
29
- Requires-Dist: huggingface-hub
29
+ Requires-Dist: huggingface_hub
30
30
  Requires-Dist: safetensors
31
- Provides-Extra: build
32
- Requires-Dist: build ; extra == 'build'
33
- Requires-Dist: twine ; extra == 'build'
34
- Provides-Extra: docs
35
- Requires-Dist: jupyter-book ; extra == 'docs'
36
- Requires-Dist: sphinx ; extra == 'docs'
31
+ Requires-Dist: tensorboard
37
32
  Provides-Extra: tests
38
- Requires-Dist: pytest ; extra == 'tests'
39
- Requires-Dist: pytest-cov ; extra == 'tests'
33
+ Requires-Dist: pytest; extra == "tests"
34
+ Requires-Dist: pytest-cov; extra == "tests"
35
+ Provides-Extra: docs
36
+ Requires-Dist: jupyter-book; extra == "docs"
37
+ Requires-Dist: sphinx; extra == "docs"
38
+ Provides-Extra: build
39
+ Requires-Dist: build; extra == "build"
40
+ Requires-Dist: twine; extra == "build"
41
+ Dynamic: license-file
40
42
 
41
43
  # Reflectorch
42
44
 
@@ -50,7 +52,7 @@ Requires-Dist: pytest-cov ; extra == 'tests'
50
52
  [![Python version](https://img.shields.io/badge/python-3.7%7C3.8%7C3.9%7C3.10%7C3.11%7C3.12-blue.svg)](https://www.python.org/)
51
53
  ![CI workflow status](https://github.com/schreiber-lab/reflectorch/actions/workflows/ci.yml/badge.svg)
52
54
  ![Repos size](https://img.shields.io/github/repo-size/schreiber-lab/reflectorch)
53
- [![CodeFactor](https://www.codefactor.io/repository/github/schreiber-lab/reflectorch/badge)](https://www.codefactor.io/repository/github/schreiber-lab/reflectorch)
55
+ <!-- [![CodeFactor](https://www.codefactor.io/repository/github/schreiber-lab/reflectorch/badge)](https://www.codefactor.io/repository/github/schreiber-lab/reflectorch) -->
54
56
  [![Jupyter Book Documentation](https://jupyterbook.org/badge.svg)](https://jupyterbook.org/)
55
57
  [![Documentation Page](https://img.shields.io/badge/Documentation%20Page-%23FFDD33.svg?style=flat&logo=read-the-docs&logoColor=black)](https://schreiber-lab.github.io/reflectorch/)
56
58
  <!-- [![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) -->
@@ -101,8 +103,8 @@ We provide an interactive Google Colab notebook for exploring the basic function
101
103
  [![Hugging Face](https://img.shields.io/badge/Hugging%20Face-%23FFD700.svg?style=flat&logo=huggingface&logoColor=black)](https://huggingface.co/valentinsingularity/reflectivity)
102
104
  Configuration files and the corresponding pretrained model weights are hosted on Huggingface: [https://huggingface.co/valentinsingularity/reflectivity](https://huggingface.co/valentinsingularity/reflectivity).
103
105
 
104
- [![Docker](https://img.shields.io/badge/Docker-2496ED.svg?style=flat&logo=docker&logoColor=white)](https://hub.docker.com/)
105
- Docker images for reflectorch *will* be hosted on Dockerhub.
106
+ <!-- [![Docker](https://img.shields.io/badge/Docker-2496ED.svg?style=flat&logo=docker&logoColor=white)](https://hub.docker.com/)
107
+ Docker images for reflectorch *will* be hosted on Dockerhub. -->
106
108
 
107
109
 
108
110
  ## Citation
@@ -4,15 +4,15 @@ reflectorch/test_config.py,sha256=1T7pMJ-WYLEu-4WtYMQxcJrqXvgdpvJ1yi2qINd0kNA,99
4
4
  reflectorch/train.py,sha256=-c8ac1fpjrCiEwnAaXg_rcBNl1stO1V5p5afx_78xHs,87
5
5
  reflectorch/train_on_cluster.py,sha256=aG3_g5_rzL8iL1tvtdY9ueJTo1f2Pn8lGJgudrrRknU,109
6
6
  reflectorch/utils.py,sha256=ehG5dU02_WIFPIVGPsSjHl3Ji10MQ8-jsCwRkwUO7D4,1993
7
- reflectorch/data_generation/__init__.py,sha256=TcF7kf16GCsQpp6cIXj-s4vb_gjrtv7tgXwLSeI8Xy8,3353
8
- reflectorch/data_generation/dataset.py,sha256=wEHMIzA1XQGQkzkN8WQRNqG53lyzxIVc80nMJKs0mgI,7273
7
+ reflectorch/data_generation/__init__.py,sha256=4FuuBfhzgEGh_YkFmLBqjyjhlqI3D5It8iu6DqGmf4g,3419
8
+ reflectorch/data_generation/dataset.py,sha256=f2uYb8j8H88owZJhg9aMP7qen00_o2cXmDvA69yJwr8,8316
9
9
  reflectorch/data_generation/likelihoods.py,sha256=gnqmsEfsZnCC6WuPcIe9rFl4SeiLv_LyNlTVM-5YTE8,2862
10
- reflectorch/data_generation/noise.py,sha256=c4ytClId3t3T5FO8r0NqAVz-x_zYWAJ2VkpxcvssrVY,16159
10
+ reflectorch/data_generation/noise.py,sha256=Ps9lDKUjtjcpUfJ_L9zTmlj88GyicjNs962lLVEg2aI,22090
11
11
  reflectorch/data_generation/process_data.py,sha256=iBvWB4_X5TTIZTacsq9baBZPyGCRyI1G-J3l1BVMuD4,1180
12
- reflectorch/data_generation/q_generator.py,sha256=Etlp_6Tj2it2nK8PQSWgQZBLh8_459P985GrZs9U1lE,8529
12
+ reflectorch/data_generation/q_generator.py,sha256=_WGCqdu1M3kSUlSbAGMPXDIU82SBYT2pcmnUPqctkyo,9279
13
13
  reflectorch/data_generation/scale_curves.py,sha256=hNZoGkA9FMdLUarp0fwj5nCDYvpy9NbSiO85_rCaNr8,4084
14
- reflectorch/data_generation/smearing.py,sha256=MfHQ2sa-wPu5stO835m8i1-3NnJYvxS3qpzNs1jXWAE,3109
15
- reflectorch/data_generation/utils.py,sha256=3Di6I5Ihy2rm8NMeCEvIVqH0IXFEX2bcxkHSc6y9WgU,5607
14
+ reflectorch/data_generation/smearing.py,sha256=ZQ4bzHegUOVhNWOTHAi3KfNau85bchp1FX1NV0Kp7s8,4538
15
+ reflectorch/data_generation/utils.py,sha256=gYJFxSj_YYHXk8kCYIagGaugUv9SrxmZvGeR9gJQMVc,8500
16
16
  reflectorch/data_generation/priors/__init__.py,sha256=ZUaQUgNR44MQGYcPVJaSzzoE270710RqdKAPcaBNHWo,1941
17
17
  reflectorch/data_generation/priors/base.py,sha256=JNa2A3F4IWaEwV7gyTQjVdCRevUI43UUpTOm1U3XA8k,1705
18
18
  reflectorch/data_generation/priors/exp_subprior_sampler.py,sha256=hjHey_32HGgZ4ojOAhmmx8jcQPCyvcPRgxMlfthSdOo,11551
@@ -20,32 +20,35 @@ reflectorch/data_generation/priors/independent_priors.py,sha256=ZdFCW4Ea6cK9f0Pn
20
20
  reflectorch/data_generation/priors/multilayer_models.py,sha256=lAf-HJPbIDnbD1ecDTvx03TfA4jLN5tTLbwaBCiYgWM,7763
21
21
  reflectorch/data_generation/priors/multilayer_structures.py,sha256=b1LTkzMK_R2hgbAmif96zRRzZRV2V-dD7eSTaNalMU8,3693
22
22
  reflectorch/data_generation/priors/no_constraints.py,sha256=qioTThJ17NixCaMIIf4dusPtvcK_uI2jOoysyXKnkZ4,7292
23
- reflectorch/data_generation/priors/parametric_models.py,sha256=vaAGcm9Ky-coidNliE4R1YvoqCcbNwEwJVCwwmkKI4E,25139
24
- reflectorch/data_generation/priors/parametric_subpriors.py,sha256=mN4MELBOQurNponknB_1n46fiNncXkI5PnnPL3hJee4,14352
23
+ reflectorch/data_generation/priors/parametric_models.py,sha256=RBB67T5skHyC6ZlVtzRwuTis8VsCwFyIOoe5OsfMiu4,29300
24
+ reflectorch/data_generation/priors/parametric_subpriors.py,sha256=KPW3Y12A5ba405ofGdGny_FIzoFMd90IkQcvVcYhpxE,15164
25
25
  reflectorch/data_generation/priors/params.py,sha256=JpH-LRxTztc0QP-3QwjLdu0MsVc1rSixtcscYGs_2Ew,8238
26
- reflectorch/data_generation/priors/sampler_strategies.py,sha256=U-v5dXpFLJq939aQKvNl7n1Lih-y97K8WJCXBFRQiA0,13059
26
+ reflectorch/data_generation/priors/sampler_strategies.py,sha256=ls9NRwjIsQJlgqv_m9l9MVm3tu4Ivafq5OzG2Q0sI3w,15791
27
27
  reflectorch/data_generation/priors/scaler_mixin.py,sha256=gI64v2KOZugSJWaLKASR34fn6qVFl-aoeVA1BR5yXNg,2648
28
28
  reflectorch/data_generation/priors/subprior_sampler.py,sha256=TE8DOQhxVr69VmWSjwHyElpgVjOhZKBIPChFWNVYzRc,14769
29
29
  reflectorch/data_generation/priors/utils.py,sha256=bmIZYHq95gG68kETfNH6ygR39oitUEJ0eCO_Fb8maH0,3836
30
- reflectorch/data_generation/reflectivity/__init__.py,sha256=MxVtNqO52iORdual2TtmSRN41TC9VmVSFH5ov-wuAJc,3202
30
+ reflectorch/data_generation/reflectivity/__init__.py,sha256=ryblJgCvnjBVPLpmOVovtZtdkEfJ_H26dqthdHfIqQ4,5209
31
31
  reflectorch/data_generation/reflectivity/abeles.py,sha256=Pcov-m0HImw1DOR57t0OsBOLZs3MA6fk7RePf_VCEZU,3097
32
- reflectorch/data_generation/reflectivity/kinematical.py,sha256=78E128l3DQif_vz2Ae6hjRg-69kRz7cbN0Ak5dOc5PM,2625
32
+ reflectorch/data_generation/reflectivity/kinematical.py,sha256=AKZqdA4dRU6Gvs7sq6ODLToMmImrMZWMCOMrzpoX2D4,2639
33
33
  reflectorch/data_generation/reflectivity/memory_eff.py,sha256=pbsXkcGwDorey6qVx2SlBK6IlzNJY1FeeF84cEJB_hY,4023
34
34
  reflectorch/data_generation/reflectivity/numpy_implementations.py,sha256=QBzn4yVnOdlkHeeR-ZFPS115GnLdO9lMTGO2d3YhG9I,3177
35
- reflectorch/data_generation/reflectivity/smearing.py,sha256=pc95Lig9NIWtHDCKnKbLp7G_kmL7_3YB6ZpDphgC2D8,4001
35
+ reflectorch/data_generation/reflectivity/smearing.py,sha256=qxaEi43Wv9OZHRQr-nQJbtPJEIaXb2NEA1q3evRhCCc,4395
36
+ reflectorch/data_generation/reflectivity/smearing_pointwise.py,sha256=y3iSc0wKh6wF4xzD24Zz2OmerwV8HKQZAg0Y3kpzPuU,3688
36
37
  reflectorch/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
38
  reflectorch/extensions/jupyter/__init__.py,sha256=bs6RQQ8LRcKAJu2I9K8BZEMQSll3kLdirRvxLbgsY9w,72
38
39
  reflectorch/extensions/jupyter/callbacks.py,sha256=K4Z8Mlm_Pa80YDsNOdMZLIJZyVrg09kBVzVdFHKgQFk,1074
39
40
  reflectorch/extensions/matplotlib/__init__.py,sha256=ARmc228xbZUj4fWNq5fVxZ8PN444fjDNxNP4ytVCyfo,104
40
41
  reflectorch/extensions/matplotlib/losses.py,sha256=H2vrjNqzmQ0BP4377uN4uhlH88aS5OAfA7pwRM2WHqA,686
42
+ reflectorch/extensions/refnx/refnx_conversion.py,sha256=XBHT2zL9XOgL5h2Q-_yDJScUBAsBd0xlivXEMeVGmao,3450
41
43
  reflectorch/inference/__init__.py,sha256=i0KNn83XN33mLrV7bpHdLd0SXxuGCKfbQcIoa247Uts,834
42
- reflectorch/inference/inference_model.py,sha256=uxzdL2S01CN6lN737B4x5L_NIFnaCkHrNUQKwh4xNW0,36739
44
+ reflectorch/inference/inference_model.py,sha256=1OBZA00xXNchFKxYxpaPFLdFPTcQYlxR3h7q7wSK9WE,44243
43
45
  reflectorch/inference/multilayer_fitter.py,sha256=0CxDpLOEp1terR4N39yFlxhvA8qAbHf_01NbmvYadck,5510
44
46
  reflectorch/inference/multilayer_inference_model.py,sha256=hH_-dJGdMOox8GHXdM_nODXDlNgh_v449xW5FmklRdo,7575
47
+ reflectorch/inference/plotting.py,sha256=zycWd2j9soe1NwoIE4X1iiGV-ghHH3M9TnFCsKN2jEQ,3868
45
48
  reflectorch/inference/query_matcher.py,sha256=Dk49dW0XreeCjufzYBTKchfTdVbG6759ryV6I-wQL60,3387
46
49
  reflectorch/inference/record_time.py,sha256=3er-aoR8Sd_Kc4qNwUmRqkEz4FYhVxdi1ARnBohybzM,1140
47
50
  reflectorch/inference/sampler_solution.py,sha256=DeJM3EXEb6S5EiASj3mmdNI-Y07Cr5UzzA5oq-vEB-Q,2288
48
- reflectorch/inference/scipy_fitter.py,sha256=339M33OdmfgOpifJGLYk4KVcnnNJrY6_aH7Lz6Vtt24,5404
51
+ reflectorch/inference/scipy_fitter.py,sha256=5xUZ1JDRXbdQF1yZotMaDFQnxYioqycoZknCWyGvZOY,8201
49
52
  reflectorch/inference/torch_fitter.py,sha256=j1NzkzLCmQ4H6LfIi82LsSBmIdunnWzm3kbGx-hqvDs,3391
50
53
  reflectorch/inference/preprocess_exp/__init__.py,sha256=bR6H-xgBD96z4P9P1T2ECnWvalrimdMTfTNArIWPLy0,383
51
54
  reflectorch/inference/preprocess_exp/attenuation.py,sha256=UKDfUjCKKMgAuEs5Ttyo0KEQmpvHZI52UgVflh7T81A,1518
@@ -54,30 +57,30 @@ reflectorch/inference/preprocess_exp/footprint.py,sha256=xc409M5X-QW0Ce_6dEZdj8N
54
57
  reflectorch/inference/preprocess_exp/interpolation.py,sha256=o2v-mlfRYzeaaikeQVeY7EA7j-K42dMfT12oN3mk51k,694
55
58
  reflectorch/inference/preprocess_exp/normalize.py,sha256=09v7nZdtw6SnW_67xFrPnqzOA5AtFBGarjK4Pfn4VoE,695
56
59
  reflectorch/inference/preprocess_exp/preprocess.py,sha256=pyyq8fSvcm1bWAShzGHYnKOc55Rofh4FIw1AC7Smq-U,5111
57
- reflectorch/ml/__init__.py,sha256=TJERkE_itNOH3GwtC-9Xv0rZ70qEkMukFLD1qXsMdOQ,730
58
- reflectorch/ml/basic_trainer.py,sha256=2z_3Iy_9dEgOha8da69RjiMQ_89C2SoJM9omh0WO-ek,9647
59
- reflectorch/ml/callbacks.py,sha256=blZNFubtRQkcx5sQrTNkARiPj75T8VdCn6CYJNN7hKg,2743
60
+ reflectorch/ml/__init__.py,sha256=0LVWweeidkoZLqbDYKi-wx5BvG7DYwsR9IRKM3TZoOM,790
61
+ reflectorch/ml/basic_trainer.py,sha256=GbSs4ie5yzY7nhGiqHO5D4HZCqB-taKenaswf1dIvok,10073
62
+ reflectorch/ml/callbacks.py,sha256=u9jNvxVEIA0a_SpmT-gnP8qoC6-C8p0F4TvIuBQr-ek,2801
60
63
  reflectorch/ml/dataloaders.py,sha256=IvKmsH5gX_b-00KRFeL-x3keEfBcvYkQFWGWd8Caj-I,1073
61
- reflectorch/ml/loggers.py,sha256=oYZskGMbbWfW3sOXOC-4F-DIL-cLhYrRFeggrmPtPGM,743
62
- reflectorch/ml/schedulers.py,sha256=AO-dS1bZgn7p-gGJJhocmL6Vc8XLMwynZxvko4BCEsw,10048
63
- reflectorch/ml/trainers.py,sha256=DXO0_ue3iVQKi8vDttEQZbNLcn3xwkRBIFrw0XTomn4,3643
64
+ reflectorch/ml/loggers.py,sha256=Dvjte9rmDxoA8AB_7cFWWxkvaQBdhn2_ag2jYCM0uSQ,1478
65
+ reflectorch/ml/schedulers.py,sha256=p_Z-TqGsu45KencD_EwX6hGMMsvvTUnQtkwC98kKTDI,14227
66
+ reflectorch/ml/trainers.py,sha256=-1I4asSg2hYvsT6w5yru2RNG59OZWnykANTlAiHpubg,8142
64
67
  reflectorch/ml/utils.py,sha256=_OKkc6o5od7vnfBNZKWsGApJxA62TrAlLok92s0nG4k,71
65
- reflectorch/models/__init__.py,sha256=vsGXi1BoLVyki_OF_Ezv9GXCpuJ22liGwolVZ0rxyyM,335
68
+ reflectorch/models/__init__.py,sha256=jJUUjyFJBIZHXqCeaxxnlazDLAE5VbPrdYUYRAI95lo,345
66
69
  reflectorch/models/activations.py,sha256=LDiIxCnLFb8r_TRBZSt6vdOZmexCWAGa5DfE_SotUL8,1431
67
- reflectorch/models/encoders/__init__.py,sha256=X9cHeWjJGVXNFwii9ZJasNbqrV4kt9QyJYPdKfxgp04,443
68
- reflectorch/models/encoders/conv_encoder.py,sha256=Xa9Yo2lDctFWlnz8vIIdzwakcE_cgBR_J92UL59XhbA,7653
70
+ reflectorch/models/encoders/__init__.py,sha256=_cGxemTtkDZa5SoCGiz-1o9J1J4FyuRAqH_PyTmiXVI,413
71
+ reflectorch/models/encoders/conv_encoder.py,sha256=LLvqnt268VR6C_1UDR24qka_9ijHc1hvvciJaV8AmQo,7910
69
72
  reflectorch/models/encoders/conv_res_net.py,sha256=VP1CCKdNqsva2R4l-IV6d63mQk6bI4Aresfd6b6_YKU,3343
70
- reflectorch/models/encoders/fno.py,sha256=s_S7hnpLE7iGfyvnQ-QvTh0rKO5KFiy5tUYau4sJbvI,4693
71
- reflectorch/models/networks/__init__.py,sha256=zHUvrlb0KVOpRrwVjwjR1g8sVWX6VH80FLGqu4jiux8,291
72
- reflectorch/models/networks/mlp_networks.py,sha256=C7py6qCBVaYYt0FMEf8gbT4lndArKpUYYgTN1001-T8,11614
73
- reflectorch/models/networks/residual_net.py,sha256=msDJaDw7qL9ebEW1Avw6Qw0lgni68AMgF4kXiJKzeaQ,4637
73
+ reflectorch/models/encoders/fno.py,sha256=G1Iav7IYVdvogK40dlKK1zsCTRIkesffrcVTywRZKjI,5115
74
+ reflectorch/models/networks/__init__.py,sha256=QeNcWShZ7i-hoEFOLnOoq7U6WzBoXj7UIHCCJnZ99KA,341
75
+ reflectorch/models/networks/mlp_networks.py,sha256=5Sr6Rg4uZca5ghj9mJAHMtB9MXAcdGUIAR8EHU9MdH4,20441
76
+ reflectorch/models/networks/residual_net.py,sha256=oEPJTWjvKO1yniLTT9B54Z_ZbZv4i1uHsP9ongbn-ko,5643
74
77
  reflectorch/runs/__init__.py,sha256=xjuZGjqZuEovlpe9Jj5d8Nn5ii-5jvAYdeHT5oYaYVI,723
75
78
  reflectorch/runs/config.py,sha256=8YtUOXr_DvNvgpu59CNAr3KrQijx1AGDE95gYrsuwsM,804
76
79
  reflectorch/runs/slurm_utils.py,sha256=Zyj4_K5YpiWNJhgpFLWYHsSaaI-mgVEWsN15Gd_BhI0,2600
77
- reflectorch/runs/train.py,sha256=e-Jj0fwYlUB2NLDxCzy0cLsSrJbNqd5pN5T1L7-Eiig,2560
78
- reflectorch/runs/utils.py,sha256=bp3Nwd6pfX5yFlTVX28zDtSTo2gg2JZh9HCpZpvnJWk,12637
79
- reflectorch-1.2.1.dist-info/LICENSE.txt,sha256=2kX9kLKiIRiQRqUXwk3J-Ba3fqmztNu8ORskLBlAuKM,1098
80
- reflectorch-1.2.1.dist-info/METADATA,sha256=ANjKriMGr9vTl5pvhgqpsCL40aZxh1ryKrfy66Eh_wU,7805
81
- reflectorch-1.2.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
82
- reflectorch-1.2.1.dist-info/top_level.txt,sha256=2EyIWrt4SeZ3hNadLXvEVpPFhyoZ4An7YflP4y_E3Fc,12
83
- reflectorch-1.2.1.dist-info/RECORD,,
80
+ reflectorch/runs/train.py,sha256=7BLjKjI3H2ZwqMhmlO4ebsz6X804e_O9XU73xKyOJW0,2503
81
+ reflectorch/runs/utils.py,sha256=maeHHXK3CdEnewPZTWpDO6lr_a8gwEyup6aSLGw_MGM,14055
82
+ reflectorch-1.3.0.dist-info/licenses/LICENSE.txt,sha256=2kX9kLKiIRiQRqUXwk3J-Ba3fqmztNu8ORskLBlAuKM,1098
83
+ reflectorch-1.3.0.dist-info/METADATA,sha256=rFJSL1nVJTbJu0Fo1DenYTpRmLbILtf-I5SLXq8ExaQ,7800
84
+ reflectorch-1.3.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
85
+ reflectorch-1.3.0.dist-info/top_level.txt,sha256=2EyIWrt4SeZ3hNadLXvEVpPFhyoZ4An7YflP4y_E3Fc,12
86
+ reflectorch-1.3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.1.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5