fakecbed 0.2.0__tar.gz → 0.3.0__tar.gz

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.
Files changed (41) hide show
  1. {fakecbed-0.2.0 → fakecbed-0.3.0}/PKG-INFO +1 -1
  2. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/discretized.py +95 -61
  3. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/shapes.py +85 -116
  4. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/tds.py +6 -13
  5. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/version.py +2 -2
  6. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/PKG-INFO +1 -1
  7. {fakecbed-0.2.0 → fakecbed-0.3.0}/tests/test_discretized.py +29 -0
  8. {fakecbed-0.2.0 → fakecbed-0.3.0}/.coveragerc +0 -0
  9. {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/measure_code_coverage.yml +0 -0
  10. {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/publish_documentation_website.yml +0 -0
  11. {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/publish_release_to_pypi.yml +0 -0
  12. {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/test_library.yml +0 -0
  13. {fakecbed-0.2.0 → fakecbed-0.3.0}/.gitignore +0 -0
  14. {fakecbed-0.2.0 → fakecbed-0.3.0}/LICENSE +0 -0
  15. {fakecbed-0.2.0 → fakecbed-0.3.0}/README.md +0 -0
  16. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/INSTALL.rst +0 -0
  17. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/Makefile +0 -0
  18. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_static/readthedocs_custom.css +0 -0
  19. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_templates/custom_class_template.rst +0 -0
  20. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_templates/custom_module_template.rst +0 -0
  21. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_templates/versions.html +0 -0
  22. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/api.rst +0 -0
  23. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/build_docs.py +0 -0
  24. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/conf.py +0 -0
  25. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/examples.rst +0 -0
  26. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/index.rst +0 -0
  27. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/license.rst +0 -0
  28. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/literature.rst +0 -0
  29. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/make.bat +0 -0
  30. {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/private_members_to_publish_to_docs.rst +0 -0
  31. {fakecbed-0.2.0 → fakecbed-0.3.0}/examples/basic_usage.ipynb +0 -0
  32. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/__init__.py +0 -0
  33. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/SOURCES.txt +0 -0
  34. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/dependency_links.txt +0 -0
  35. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/requires.txt +0 -0
  36. {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/top_level.txt +0 -0
  37. {fakecbed-0.2.0 → fakecbed-0.3.0}/pyproject.toml +0 -0
  38. {fakecbed-0.2.0 → fakecbed-0.3.0}/setup.cfg +0 -0
  39. {fakecbed-0.2.0 → fakecbed-0.3.0}/setup.py +0 -0
  40. {fakecbed-0.2.0 → fakecbed-0.3.0}/tests/test_shapes.py +0 -0
  41. {fakecbed-0.2.0 → fakecbed-0.3.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: fakecbed
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: A Python library for generating quickly images that imitate convergent beam electron diffraction patterns.
5
5
  Author-email: Matthew Fitzpatrick <matthew.rc.fitzpatrick@gmail.com>
6
6
  Project-URL: Homepage, https://mrfitzpa.github.io/fakecbed
@@ -21,12 +21,6 @@
21
21
  ## Load libraries/packages/modules ##
22
22
  #####################################
23
23
 
24
- # For accessing attributes of functions.
25
- import inspect
26
-
27
- # For randomly selecting items in dictionaries.
28
- import random
29
-
30
24
  # For performing deep copies.
31
25
  import copy
32
26
 
@@ -74,9 +68,7 @@ __all__ = ["CBEDPattern"]
74
68
 
75
69
 
76
70
  def _check_and_convert_undistorted_tds_model(params):
77
- current_func_name = inspect.stack()[0][3]
78
- char_idx = 19
79
- obj_name = current_func_name[char_idx:]
71
+ obj_name = "undistorted_tds_model"
80
72
  obj = params[obj_name]
81
73
 
82
74
  accepted_types = (fakecbed.tds.Model, type(None))
@@ -95,7 +87,7 @@ def _check_and_convert_undistorted_tds_model(params):
95
87
 
96
88
 
97
89
  def _pre_serialize_undistorted_tds_model(undistorted_tds_model):
98
- obj_to_pre_serialize = random.choice(list(locals().values()))
90
+ obj_to_pre_serialize = undistorted_tds_model
99
91
  serializable_rep = obj_to_pre_serialize.pre_serialize()
100
92
 
101
93
  return serializable_rep
@@ -111,11 +103,11 @@ def _de_pre_serialize_undistorted_tds_model(serializable_rep):
111
103
 
112
104
 
113
105
  def _check_and_convert_undistorted_disks(params):
114
- current_func_name = inspect.stack()[0][3]
115
- char_idx = 19
116
- obj_name = current_func_name[char_idx:]
106
+ obj_name = "undistorted_disks"
117
107
  obj = params[obj_name]
118
108
 
109
+ current_func_name = "_check_and_convert_undistorted_disks"
110
+
119
111
  try:
120
112
  for undistorted_disk in obj:
121
113
  accepted_types = (fakecbed.shapes.NonuniformBoundedShape,)
@@ -147,7 +139,7 @@ def _check_and_convert_undistorted_disks(params):
147
139
 
148
140
 
149
141
  def _pre_serialize_undistorted_disks(undistorted_disks):
150
- obj_to_pre_serialize = random.choice(list(locals().values()))
142
+ obj_to_pre_serialize = undistorted_disks
151
143
  serializable_rep = tuple()
152
144
  for elem in obj_to_pre_serialize:
153
145
  serializable_rep += (elem.pre_serialize(),)
@@ -172,9 +164,7 @@ def _de_pre_serialize_undistorted_disks(serializable_rep):
172
164
 
173
165
 
174
166
  def _check_and_convert_undistorted_misc_shapes(params):
175
- current_func_name = inspect.stack()[0][3]
176
- char_idx = 19
177
- obj_name = current_func_name[char_idx:]
167
+ obj_name = "undistorted_misc_shapes"
178
168
  obj = params[obj_name]
179
169
 
180
170
  accepted_types = (fakecbed.shapes.Circle,
@@ -188,6 +178,8 @@ def _check_and_convert_undistorted_misc_shapes(params):
188
178
  fakecbed.shapes.Lune,
189
179
  fakecbed.shapes.NonuniformBoundedShape)
190
180
 
181
+ current_func_name = "_check_and_convert_undistorted_misc_shapes"
182
+
191
183
  try:
192
184
  for undistorted_misc_shape in obj:
193
185
  kwargs = {"obj": undistorted_misc_shape,
@@ -205,7 +197,7 @@ def _check_and_convert_undistorted_misc_shapes(params):
205
197
 
206
198
 
207
199
  def _pre_serialize_undistorted_misc_shapes(undistorted_misc_shapes):
208
- obj_to_pre_serialize = random.choice(list(locals().values()))
200
+ obj_to_pre_serialize = undistorted_misc_shapes
209
201
  serializable_rep = tuple()
210
202
  for elem in obj_to_pre_serialize:
211
203
  serializable_rep += (elem.pre_serialize(),)
@@ -249,9 +241,7 @@ def _de_pre_serialize_undistorted_misc_shapes(serializable_rep):
249
241
 
250
242
 
251
243
  def _check_and_convert_undistorted_outer_illumination_shape(params):
252
- current_func_name = inspect.stack()[0][3]
253
- char_idx = 19
254
- obj_name = current_func_name[char_idx:]
244
+ obj_name = "undistorted_outer_illumination_shape"
255
245
  obj = params[obj_name]
256
246
 
257
247
  accepted_types = (fakecbed.shapes.Circle,
@@ -275,7 +265,7 @@ def _check_and_convert_undistorted_outer_illumination_shape(params):
275
265
 
276
266
  def _pre_serialize_undistorted_outer_illumination_shape(
277
267
  undistorted_outer_illumination_shape):
278
- obj_to_pre_serialize = random.choice(list(locals().values()))
268
+ obj_to_pre_serialize = undistorted_outer_illumination_shape
279
269
  serializable_rep = obj_to_pre_serialize.pre_serialize()
280
270
 
281
271
  return serializable_rep
@@ -298,8 +288,7 @@ def _de_pre_serialize_undistorted_outer_illumination_shape(serializable_rep):
298
288
 
299
289
 
300
290
  def _check_and_convert_gaussian_filter_std_dev(params):
301
- current_func_name = inspect.stack()[0][3]
302
- obj_name = current_func_name[19:]
291
+ obj_name = "gaussian_filter_std_dev"
303
292
  func_alias = czekitout.convert.to_nonnegative_float
304
293
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
305
294
  gaussian_filter_std_dev = func_alias(**kwargs)
@@ -308,9 +297,8 @@ def _check_and_convert_gaussian_filter_std_dev(params):
308
297
 
309
298
 
310
299
 
311
- def _pre_serialize_gaussian_filter_std_dev(
312
- gaussian_filter_std_dev):
313
- obj_to_pre_serialize = random.choice(list(locals().values()))
300
+ def _pre_serialize_gaussian_filter_std_dev(gaussian_filter_std_dev):
301
+ obj_to_pre_serialize = gaussian_filter_std_dev
314
302
  serializable_rep = obj_to_pre_serialize
315
303
 
316
304
  return serializable_rep
@@ -325,9 +313,7 @@ def _de_pre_serialize_gaussian_filter_std_dev(serializable_rep):
325
313
 
326
314
 
327
315
  def _check_and_convert_distortion_model(params):
328
- current_func_name = inspect.stack()[0][3]
329
- char_idx = 19
330
- obj_name = current_func_name[char_idx:]
316
+ obj_name = "distortion_model"
331
317
  obj = params[obj_name]
332
318
 
333
319
  num_pixels_across_pattern = \
@@ -351,6 +337,8 @@ def _check_and_convert_distortion_model(params):
351
337
  sampling_grid_dims_in_pixels = \
352
338
  distortion_model_core_attrs["sampling_grid_dims_in_pixels"]
353
339
 
340
+ current_func_name = "_check_and_convert_distortion_model"
341
+
354
342
  if ((sampling_grid_dims_in_pixels[0]%num_pixels_across_pattern != 0)
355
343
  or (sampling_grid_dims_in_pixels[1]%num_pixels_across_pattern != 0)):
356
344
  err_msg = globals()[current_func_name+"_err_msg_1"]
@@ -361,7 +349,7 @@ def _check_and_convert_distortion_model(params):
361
349
 
362
350
 
363
351
  def _pre_serialize_distortion_model(distortion_model):
364
- obj_to_pre_serialize = random.choice(list(locals().values()))
352
+ obj_to_pre_serialize = distortion_model
365
353
  serializable_rep = obj_to_pre_serialize.pre_serialize()
366
354
 
367
355
  return serializable_rep
@@ -377,8 +365,7 @@ def _de_pre_serialize_distortion_model(serializable_rep):
377
365
 
378
366
 
379
367
  def _check_and_convert_num_pixels_across_pattern(params):
380
- current_func_name = inspect.stack()[0][3]
381
- obj_name = current_func_name[19:]
368
+ obj_name = "num_pixels_across_pattern"
382
369
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
383
370
  num_pixels_across_pattern = czekitout.convert.to_positive_int(**kwargs)
384
371
 
@@ -387,7 +374,7 @@ def _check_and_convert_num_pixels_across_pattern(params):
387
374
 
388
375
 
389
376
  def _pre_serialize_num_pixels_across_pattern(num_pixels_across_pattern):
390
- obj_to_pre_serialize = random.choice(list(locals().values()))
377
+ obj_to_pre_serialize = num_pixels_across_pattern
391
378
  serializable_rep = obj_to_pre_serialize
392
379
 
393
380
  return serializable_rep
@@ -402,8 +389,7 @@ def _de_pre_serialize_num_pixels_across_pattern(serializable_rep):
402
389
 
403
390
 
404
391
  def _check_and_convert_apply_shot_noise(params):
405
- current_func_name = inspect.stack()[0][3]
406
- obj_name = current_func_name[19:]
392
+ obj_name = "apply_shot_noise"
407
393
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
408
394
  apply_shot_noise = czekitout.convert.to_bool(**kwargs)
409
395
 
@@ -412,7 +398,7 @@ def _check_and_convert_apply_shot_noise(params):
412
398
 
413
399
 
414
400
  def _pre_serialize_apply_shot_noise(apply_shot_noise):
415
- obj_to_pre_serialize = random.choice(list(locals().values()))
401
+ obj_to_pre_serialize = apply_shot_noise
416
402
  serializable_rep = obj_to_pre_serialize
417
403
 
418
404
  return serializable_rep
@@ -426,9 +412,43 @@ def _de_pre_serialize_apply_shot_noise(serializable_rep):
426
412
 
427
413
 
428
414
 
415
+ def _check_and_convert_rng_seed(params):
416
+ obj_name = "rng_seed"
417
+ obj = params[obj_name]
418
+
419
+ current_func_name = "_check_and_convert_rng_seed"
420
+
421
+ if obj is not None:
422
+ kwargs = {"obj": obj, "obj_name": obj_name}
423
+ try:
424
+ rng_seed = czekitout.convert.to_nonnegative_int(**kwargs)
425
+ except:
426
+ err_msg = globals()[current_func_name+"_err_msg_1"]
427
+ raise TypeError(err_msg)
428
+ else:
429
+ rng_seed = obj
430
+
431
+ return rng_seed
432
+
433
+
434
+
435
+ def _pre_serialize_rng_seed(rng_seed):
436
+ obj_to_pre_serialize = rng_seed
437
+ serializable_rep = obj_to_pre_serialize
438
+
439
+ return serializable_rep
440
+
441
+
442
+
443
+ def _de_pre_serialize_rng_seed(serializable_rep):
444
+ rng_seed = serializable_rep
445
+
446
+ return rng_seed
447
+
448
+
449
+
429
450
  def _check_and_convert_detector_partition_width_in_pixels(params):
430
- current_func_name = inspect.stack()[0][3]
431
- obj_name = current_func_name[19:]
451
+ obj_name = "detector_partition_width_in_pixels"
432
452
  func_alias = czekitout.convert.to_nonnegative_int
433
453
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
434
454
  detector_partition_width_in_pixels = func_alias(**kwargs)
@@ -439,7 +459,7 @@ def _check_and_convert_detector_partition_width_in_pixels(params):
439
459
 
440
460
  def _pre_serialize_detector_partition_width_in_pixels(
441
461
  detector_partition_width_in_pixels):
442
- obj_to_pre_serialize = random.choice(list(locals().values()))
462
+ obj_to_pre_serialize = detector_partition_width_in_pixels
443
463
  serializable_rep = obj_to_pre_serialize
444
464
 
445
465
  return serializable_rep
@@ -454,14 +474,15 @@ def _de_pre_serialize_detector_partition_width_in_pixels(serializable_rep):
454
474
 
455
475
 
456
476
  def _check_and_convert_cold_pixels(params):
457
- current_func_name = inspect.stack()[0][3]
458
- obj_name = current_func_name[19:]
477
+ obj_name = "cold_pixels"
459
478
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
460
479
  cold_pixels = czekitout.convert.to_pairs_of_ints(**kwargs)
461
480
 
462
481
  num_pixels_across_pattern = \
463
482
  _check_and_convert_num_pixels_across_pattern(params)
464
483
 
484
+ current_func_name = "_check_and_convert_cold_pixels"
485
+
465
486
  coords_of_cold_pixels = cold_pixels
466
487
  for coords_of_cold_pixel in coords_of_cold_pixels:
467
488
  row, col = coords_of_cold_pixel
@@ -491,8 +512,7 @@ def _de_pre_serialize_cold_pixels(serializable_rep):
491
512
 
492
513
 
493
514
  def _check_and_convert_mask_frame(params):
494
- current_func_name = inspect.stack()[0][3]
495
- obj_name = current_func_name[19:]
515
+ obj_name = "mask_frame"
496
516
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
497
517
  mask_frame = czekitout.convert.to_quadruplet_of_nonnegative_ints(**kwargs)
498
518
 
@@ -501,7 +521,7 @@ def _check_and_convert_mask_frame(params):
501
521
 
502
522
 
503
523
  def _pre_serialize_mask_frame(mask_frame):
504
- obj_to_pre_serialize = random.choice(list(locals().values()))
524
+ obj_to_pre_serialize = mask_frame
505
525
  serializable_rep = obj_to_pre_serialize
506
526
 
507
527
  return serializable_rep
@@ -516,8 +536,7 @@ def _de_pre_serialize_mask_frame(serializable_rep):
516
536
 
517
537
 
518
538
  def _check_and_convert_deep_copy(params):
519
- current_func_name = inspect.stack()[0][3]
520
- obj_name = current_func_name[19:]
539
+ obj_name = "deep_copy"
521
540
  kwargs = {"obj": params[obj_name], "obj_name": obj_name}
522
541
  deep_copy = czekitout.convert.to_bool(**kwargs)
523
542
 
@@ -526,9 +545,7 @@ def _check_and_convert_deep_copy(params):
526
545
 
527
546
 
528
547
  def _check_and_convert_overriding_image(params):
529
- current_func_name = inspect.stack()[0][3]
530
- char_idx = 19
531
- obj_name = current_func_name[char_idx:]
548
+ obj_name = "overriding_image"
532
549
  obj = params[obj_name]
533
550
 
534
551
  func_alias = fakecbed.shapes._check_and_convert_real_torch_matrix
@@ -542,6 +559,8 @@ def _check_and_convert_overriding_image(params):
542
559
  num_pixels_across_pattern = params["num_pixels_across_pattern"]
543
560
  expected_image_dims_in_pixels = 2*(num_pixels_across_pattern,)
544
561
 
562
+ current_func_name = "_check_and_convert_overriding_image"
563
+
545
564
  if overriding_image.shape != expected_image_dims_in_pixels:
546
565
  unformatted_err_msg = globals()[current_func_name+"_err_msg_1"]
547
566
  args = expected_image_dims_in_pixels
@@ -578,6 +597,8 @@ _default_num_pixels_across_pattern = \
578
597
  512
579
598
  _default_apply_shot_noise = \
580
599
  False
600
+ _default_rng_seed = \
601
+ None
581
602
  _default_detector_partition_width_in_pixels = \
582
603
  0
583
604
  _default_cold_pixels = \
@@ -908,7 +929,7 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
908
929
  \text{det}\left(\mathbf{J}_{\square}\left(
909
930
  q_{\mathring{\mathcal{I}};x;j},
910
931
  q_{\mathring{\mathcal{I}};y;i}\right)\right)
911
- \mathring{\mathcal{I}}_{\text{CBED};⌑;i,j}.
932
+ \left|\mathring{\mathcal{I}}_{\text{CBED};⌑;i,j}\right|.
912
933
  :label: HD_I_CBED__3
913
934
 
914
935
  8. Apply average pooling to
@@ -1051,6 +1072,9 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
1051
1072
  If ``apply_shot_noise`` is set to ``True``, then shot noise is applied
1052
1073
  to the image of the fake CBED pattern. Otherwise, no shot noise is
1053
1074
  applied.
1075
+ rng_seed : `int` | `None`, optional
1076
+ ``rng_seed`` specifies the seed used in the random number generator used
1077
+ to apply shot noise.
1054
1078
  detector_partition_width_in_pixels : `int`, optional
1055
1079
  The detector partition width in units of pixels,
1056
1080
  :math:`N_{\text{DPW}}`. Must be nonnegative.
@@ -1073,6 +1097,7 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
1073
1097
  "num_pixels_across_pattern",
1074
1098
  "distortion_model",
1075
1099
  "apply_shot_noise",
1100
+ "rng_seed",
1076
1101
  "detector_partition_width_in_pixels",
1077
1102
  "cold_pixels",
1078
1103
  "mask_frame")
@@ -1107,6 +1132,8 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
1107
1132
  _default_distortion_model,
1108
1133
  apply_shot_noise=\
1109
1134
  _default_apply_shot_noise,
1135
+ rng_seed=\
1136
+ _default_rng_seed,
1110
1137
  detector_partition_width_in_pixels=\
1111
1138
  _default_detector_partition_width_in_pixels,
1112
1139
  cold_pixels=\
@@ -1670,21 +1697,24 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
1670
1697
  method_name = ("_calc_maskless_and_noiseless_image"
1671
1698
  "_and_cache_select_intermediates")
1672
1699
  method_alias = getattr(self, method_name)
1673
- maskless_and_noiseless_image = method_alias(u_x, u_y)
1700
+ image = method_alias(u_x, u_y)
1701
+
1702
+ apply_shot_noise = self._apply_shot_noise
1703
+ if apply_shot_noise == True:
1704
+ np_rng = np.random.default_rng(self._rng_seed)
1705
+ torch_rng_seed = np_rng.integers(low=0, high=2**32-1).item()
1706
+ torch_rng = torch.Generator().manual_seed(torch_rng_seed)
1707
+ image = torch.poisson(image, torch_rng)
1674
1708
 
1709
+ image = self._apply_detector_partition_inpainting(input_image=image)
1710
+
1675
1711
  if self._illumination_support is None:
1676
1712
  method_name = "_calc_illumination_support"
1677
1713
  method_alias = getattr(self, method_name)
1678
1714
  self._illumination_support = method_alias(u_x, u_y)
1679
1715
  illumination_support = self._illumination_support
1680
1716
 
1681
- noiseless_image = maskless_and_noiseless_image*illumination_support
1682
-
1683
- apply_shot_noise = self._apply_shot_noise
1684
-
1685
- image = (torch.poisson(noiseless_image)
1686
- if (apply_shot_noise == True)
1687
- else noiseless_image)
1717
+ image = image*illumination_support
1688
1718
 
1689
1719
  coords_of_cold_pixels = self._cold_pixels
1690
1720
  L, R, B, T = self._mask_frame
@@ -1698,8 +1728,6 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
1698
1728
  for coords_of_cold_pixel in coords_of_cold_pixels:
1699
1729
  image[coords_of_cold_pixel] = 0
1700
1730
 
1701
- image = self._apply_detector_partition_inpainting(input_image=image)
1702
-
1703
1731
  image = self._normalize_matrix(input_matrix=image)
1704
1732
 
1705
1733
  image = torch.clip(image, min=0)
@@ -1732,6 +1760,8 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
1732
1760
  + (disk_supports
1733
1761
  * intra_disk_shapes).sum(dim=0))
1734
1762
 
1763
+ maskless_and_noiseless_image = torch.abs(maskless_and_noiseless_image)
1764
+
1735
1765
  kwargs = {"input_matrix": maskless_and_noiseless_image,
1736
1766
  "truncate": 4}
1737
1767
  maskless_and_noiseless_image = self._apply_2d_guassian_filter(**kwargs)
@@ -2539,6 +2569,10 @@ _check_and_convert_distortion_model_err_msg_1 = \
2539
2569
  "grid, specified by the object ``distortion_model``, must be divisible "
2540
2570
  "by the object ``num_pixels_across_pattern``.")
2541
2571
 
2572
+ _check_and_convert_rng_seed_err_msg_1 = \
2573
+ ("The object ``rng_seed`` must be either a nonnegative integer or of the "
2574
+ "type `NoneType`.")
2575
+
2542
2576
  _check_and_convert_cold_pixels_err_msg_1 = \
2543
2577
  ("The object ``cold_pixels`` must be a sequence of integer pairs, where "
2544
2578
  "each integer pair specifies valid pixel coordinates (i.e. row and column "