nabu 2024.1.5__py3-none-any.whl → 2024.1.7__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.
- nabu/__init__.py +1 -1
- nabu/app/tests/__init__.py +0 -0
- nabu/io/cast_volume.py +34 -11
- nabu/io/tests/test_cast_volume.py +18 -10
- nabu/pipeline/fullfield/chunked.py +11 -8
- nabu/pipeline/fullfield/dataset_validator.py +5 -1
- nabu/pipeline/fullfield/processconfig.py +1 -1
- nabu/pipeline/helical/tests/test_accumulator.py +2 -1
- nabu/pipeline/processconfig.py +4 -1
- nabu/processing/tests/test_fftshift.py +1 -0
- nabu/reconstruction/tests/test_deringer.py +3 -3
- nabu/reconstruction/tests/test_halftomo.py +2 -1
- {nabu-2024.1.5.dist-info → nabu-2024.1.7.dist-info}/METADATA +1 -1
- {nabu-2024.1.5.dist-info → nabu-2024.1.7.dist-info}/RECORD +18 -18
- {nabu-2024.1.5.dist-info → nabu-2024.1.7.dist-info}/WHEEL +1 -1
- doc/doc_config.py +0 -32
- {nabu-2024.1.5.dist-info → nabu-2024.1.7.dist-info}/LICENSE +0 -0
- {nabu-2024.1.5.dist-info → nabu-2024.1.7.dist-info}/entry_points.txt +0 -0
- {nabu-2024.1.5.dist-info → nabu-2024.1.7.dist-info}/top_level.txt +0 -0
nabu/__init__.py
CHANGED
File without changes
|
nabu/io/cast_volume.py
CHANGED
@@ -293,25 +293,48 @@ def find_histogram(volume: VolumeBase, scan: Optional[TomoScanBase] = None) -> O
|
|
293
293
|
data_path = volume.data_url.data_path().replace(HDF5Volume.DATA_DATASET_NAME, "histogram/results/data")
|
294
294
|
elif isinstance(volume, (EDFVolume, JP2KVolume, TIFFVolume, MultiTIFFVolume)):
|
295
295
|
if isinstance(volume, (EDFVolume, JP2KVolume, TIFFVolume)):
|
296
|
-
# TODO: check with pierre what is the policy of histogram files names
|
297
296
|
histogram_file = os.path.join(
|
298
297
|
volume.data_url.file_path(),
|
299
|
-
volume.get_volume_basename() + "
|
298
|
+
volume.get_volume_basename() + "_histogram.hdf5",
|
300
299
|
)
|
300
|
+
if not os.path.exists(histogram_file):
|
301
|
+
# legacy location
|
302
|
+
legacy_histogram_file = os.path.join(
|
303
|
+
volume.data_url.file_path(),
|
304
|
+
volume.get_volume_basename() + "histogram.hdf5",
|
305
|
+
)
|
306
|
+
if os.path.exists(legacy_histogram_file):
|
307
|
+
# only overwrite if exists. Else keep the older one to get a clearer information
|
308
|
+
histogram_file = legacy_histogram_file
|
301
309
|
else:
|
302
|
-
# TODO: check with pierre what is the policy of histogram files names
|
303
310
|
file_path, _ = os.path.splitext(volume.data_url.file_path())
|
304
|
-
histogram_file =
|
311
|
+
histogram_file = file_path + "_histogram.hdf5"
|
305
312
|
|
306
313
|
if scan is not None:
|
307
|
-
data_path = getattr(scan, "entry", "entry")
|
314
|
+
data_path = getattr(scan, "entry/histogram/results/data", "entry/histogram/results/data")
|
308
315
|
else:
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
316
|
+
|
317
|
+
def get_file_entries(file_path: str) -> Optional[tuple]:
|
318
|
+
if os.path.exists(file_path):
|
319
|
+
with HDF5File(file_path, mode="r") as h5s:
|
320
|
+
return tuple(h5s.keys())
|
321
|
+
else:
|
322
|
+
return None
|
323
|
+
|
324
|
+
# in the case we only know about the volume to cast.
|
325
|
+
# in most of the cast the histogram.hdf5 file will only get a single entry. The exception could be
|
326
|
+
# for HDF5 if the user save volumes into the same file.
|
327
|
+
# we can find back the histogram
|
328
|
+
entries = get_file_entries(histogram_file)
|
329
|
+
if entries is not None and len(entries) == 1:
|
330
|
+
data_path = "/".join((entries[0], "histogram/results/data"))
|
331
|
+
else:
|
332
|
+
# TODO: FIXME: how to get the entry name in every case ?
|
333
|
+
# what to do if the histogram file has more than one entry.
|
334
|
+
# one option could be to request the entry from the user...
|
335
|
+
# or keep as today (in this case it will be recomputed)
|
336
|
+
_logger.info("histogram file found but unable to find relevant histogram")
|
337
|
+
return None
|
315
338
|
else:
|
316
339
|
raise NotImplementedError(f"volume {type(volume)} not handled")
|
317
340
|
|
@@ -70,9 +70,9 @@ def test_get_default_output_volume():
|
|
70
70
|
)
|
71
71
|
assert isinstance(output_volume, HDF5Volume)
|
72
72
|
assert output_volume.data_url.file_path() == "vol_cast/my_file.hdf5"
|
73
|
-
assert output_volume.data_url.data_path() == HDF5Volume.DATA_DATASET_NAME
|
73
|
+
assert output_volume.data_url.data_path() == "volume/" + HDF5Volume.DATA_DATASET_NAME
|
74
74
|
assert output_volume.metadata_url.file_path() == "vol_cast/my_file.hdf5"
|
75
|
-
assert output_volume.metadata_url.data_path() == HDF5Volume.METADATA_GROUP_NAME
|
75
|
+
assert output_volume.metadata_url.data_path() == "volume/" + HDF5Volume.METADATA_GROUP_NAME
|
76
76
|
|
77
77
|
# test jp2 to hdf5
|
78
78
|
input_volume = JP2KVolume(
|
@@ -119,19 +119,23 @@ def test_find_histogram_single_frame_volume(tmp_path):
|
|
119
119
|
folder=tmp_path,
|
120
120
|
volume_basename="volume",
|
121
121
|
)
|
122
|
-
histogram_file = os.path.join(tmp_path, "
|
122
|
+
histogram_file = os.path.join(tmp_path, "volume_histogram.hdf5")
|
123
123
|
with h5py.File(histogram_file, mode="w") as h5f:
|
124
124
|
h5f.require_group("entry/histogram/results/data")
|
125
125
|
|
126
126
|
# check behavior
|
127
|
-
assert find_histogram(volume=volume) ==
|
127
|
+
assert find_histogram(volume=volume) == DataUrl(
|
128
|
+
file_path=histogram_file,
|
129
|
+
data_path="entry/histogram/results/data",
|
130
|
+
scheme="silx",
|
131
|
+
)
|
128
132
|
|
129
133
|
assert find_histogram(
|
130
134
|
volume=volume,
|
131
135
|
scan=EDFTomoScan(scan=str(tmp_path)),
|
132
136
|
) == DataUrl(
|
133
137
|
file_path=histogram_file,
|
134
|
-
data_path="entry",
|
138
|
+
data_path="entry/histogram/results/data",
|
135
139
|
scheme="silx",
|
136
140
|
)
|
137
141
|
|
@@ -140,7 +144,7 @@ def test_find_histogram_single_frame_volume(tmp_path):
|
|
140
144
|
scan=NXtomoScan(scan=str(tmp_path), entry="entry"),
|
141
145
|
) == DataUrl(
|
142
146
|
file_path=histogram_file,
|
143
|
-
data_path="entry",
|
147
|
+
data_path="entry/histogram/results/data",
|
144
148
|
scheme="silx",
|
145
149
|
)
|
146
150
|
|
@@ -156,19 +160,23 @@ def test_find_histogram_multi_tiff_volume(tmp_path):
|
|
156
160
|
volume = MultiTIFFVolume(
|
157
161
|
file_path=tiff_file,
|
158
162
|
)
|
159
|
-
histogram_file = os.path.join(tmp_path, "
|
163
|
+
histogram_file = os.path.join(tmp_path, "my_tiff_histogram.hdf5")
|
160
164
|
with h5py.File(histogram_file, mode="w") as h5f:
|
161
165
|
h5f.require_group("entry/histogram/results/data")
|
162
166
|
|
163
167
|
# check behavior
|
164
|
-
assert find_histogram(volume=volume) ==
|
168
|
+
assert find_histogram(volume=volume) == DataUrl(
|
169
|
+
file_path=histogram_file,
|
170
|
+
data_path="entry/histogram/results/data",
|
171
|
+
scheme="silx",
|
172
|
+
)
|
165
173
|
|
166
174
|
assert find_histogram(
|
167
175
|
volume=volume,
|
168
176
|
scan=EDFTomoScan(scan=str(tmp_path)),
|
169
177
|
) == DataUrl(
|
170
178
|
file_path=histogram_file,
|
171
|
-
data_path="entry",
|
179
|
+
data_path="entry/histogram/results/data",
|
172
180
|
scheme="silx",
|
173
181
|
)
|
174
182
|
|
@@ -177,7 +185,7 @@ def test_find_histogram_multi_tiff_volume(tmp_path):
|
|
177
185
|
scan=NXtomoScan(scan=str(tmp_path), entry="entry"),
|
178
186
|
) == DataUrl(
|
179
187
|
file_path=histogram_file,
|
180
|
-
data_path="entry",
|
188
|
+
data_path="entry/histogram/results/data",
|
181
189
|
scheme="silx",
|
182
190
|
)
|
183
191
|
|
@@ -548,7 +548,6 @@ class ChunkedPipeline:
|
|
548
548
|
|
549
549
|
if options["method"] == "FBP":
|
550
550
|
n_slices = self.n_slices
|
551
|
-
radios_shape_for_sino_builder = self.radios_cropped_shape
|
552
551
|
self.reconstruction = self.FBPClass(
|
553
552
|
self.sinos_shape[1:],
|
554
553
|
angles=options["angles"],
|
@@ -567,7 +566,6 @@ class ChunkedPipeline:
|
|
567
566
|
)
|
568
567
|
|
569
568
|
if options["method"] == "cone":
|
570
|
-
radios_shape_for_sino_builder = self.radios_shape
|
571
569
|
n_slices = self.n_slices + sum(self.margin[0])
|
572
570
|
# For numerical stability, normalize all lengths with respect to detector pixel size
|
573
571
|
pixel_size_m = self.dataset_info.pixel_size * 1e-6
|
@@ -586,8 +584,6 @@ class ChunkedPipeline:
|
|
586
584
|
self._allocate_recs(*self.process_config.rec_shape, n_slices=n_slices)
|
587
585
|
n_a, _, n_x = self.radios_cropped_shape
|
588
586
|
self._tmp_sino = self._allocate_array((n_a, n_x), "f", name="tmp_sino")
|
589
|
-
if options["method"] == "cone":
|
590
|
-
self.sinos = self._allocate_array(self.sino_builder.output_shape, "f", name="sinos")
|
591
587
|
|
592
588
|
@use_options("histogram", "histogram")
|
593
589
|
def _init_histogram(self):
|
@@ -734,14 +730,21 @@ class ChunkedPipeline:
|
|
734
730
|
"""
|
735
731
|
This reconstructs the entire sinograms stack at once
|
736
732
|
"""
|
737
|
-
|
733
|
+
|
734
|
+
n_angles, n_z, n_x = self.radios.shape
|
735
|
+
# can't do a discontiguous single copy...
|
736
|
+
sinos_contig = self._allocate_array((n_z, n_angles, n_x), np.float32, "sinos_cone")
|
737
|
+
for i in range(n_z):
|
738
|
+
sinos_contig[i] = self.radios[:, i, :]
|
739
|
+
#
|
740
|
+
|
738
741
|
z_min, z_max = self.sub_region_xz[2:]
|
739
|
-
|
742
|
+
n_z_tot = self.process_config.radio_shape(binning=True)[0]
|
740
743
|
|
741
744
|
self.reconstruction.reconstruct( # pylint: disable=E1101
|
742
|
-
|
745
|
+
sinos_contig,
|
743
746
|
output=self.recs,
|
744
|
-
relative_z_position=((z_min + z_max) / self.process_config.binning_z / 2) -
|
747
|
+
relative_z_position=((z_min + z_max) / self.process_config.binning_z / 2) - n_z_tot / 2,
|
745
748
|
)
|
746
749
|
|
747
750
|
@pipeline_step("histogram", "Computing histogram")
|
@@ -29,7 +29,7 @@ class FullFieldDatasetValidator(DatasetValidatorBase):
|
|
29
29
|
def _check_slice_indices(self):
|
30
30
|
nx, nz = self.dataset_info.radio_dims
|
31
31
|
rec_params = self.rec_params
|
32
|
-
if
|
32
|
+
if self.is_halftomo:
|
33
33
|
ny, nx = self._get_nx_ny()
|
34
34
|
what = (("start_x", "end_x", nx), ("start_y", "end_y", nx), ("start_z", "end_z", nz))
|
35
35
|
for start_name, end_name, numels in what:
|
@@ -61,3 +61,7 @@ class FullFieldDatasetValidator(DatasetValidatorBase):
|
|
61
61
|
self.logger.warning(
|
62
62
|
"Cone-beam reconstruction: 'sample_detector_dist' not provided, will use the one in dataset metadata"
|
63
63
|
)
|
64
|
+
if self.is_halftomo:
|
65
|
+
err_msg = "Cone-beam reconstruction with half-acquisition is not supported yet"
|
66
|
+
self.logger.fatal(err_msg)
|
67
|
+
raise NotImplementedError(err_msg)
|
@@ -600,7 +600,7 @@ class ProcessConfig(ProcessConfigBase):
|
|
600
600
|
)
|
601
601
|
if all([m is not None for m in mean_positions_xyz]):
|
602
602
|
rec_options["position"] = mean_positions_xyz
|
603
|
-
if rec_options["sample_detector_dist"] is None:
|
603
|
+
if rec_options["method"] == "cone" and rec_options["sample_detector_dist"] is None:
|
604
604
|
rec_options["sample_detector_dist"] = self.dataset_info.distance # was checked to be not None earlier
|
605
605
|
|
606
606
|
# New key
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from nabu.pipeline.helical import gridded_accumulator, span_strategy
|
2
|
-
from nabu.testutils import get_data
|
2
|
+
from nabu.testutils import get_data, __do_long_tests__
|
3
3
|
|
4
4
|
import pytest
|
5
5
|
import numpy as np
|
@@ -49,6 +49,7 @@ def bootstrap(request):
|
|
49
49
|
cls.rtol_regridded = 1.0e-6
|
50
50
|
|
51
51
|
|
52
|
+
@pytest.mark.skipif(not (__do_long_tests__), reason="need environment variable NABU_LONG_TESTS=1")
|
52
53
|
@pytest.mark.usefixtures("bootstrap")
|
53
54
|
class TestGriddedAccumulator:
|
54
55
|
"""
|
nabu/pipeline/processconfig.py
CHANGED
@@ -181,7 +181,10 @@ class ProcessConfigBase:
|
|
181
181
|
#
|
182
182
|
if isinstance(tilt, str): # auto-tilt
|
183
183
|
self.tilt_estimator = DetectorTiltEstimator(
|
184
|
-
self.dataset_info,
|
184
|
+
self.dataset_info,
|
185
|
+
do_flatfield=self.nabu_config["preproc"]["flatfield"],
|
186
|
+
logger=self.logger,
|
187
|
+
autotilt_options=self.nabu_config["preproc"]["autotilt_options"],
|
185
188
|
)
|
186
189
|
tilt = self.tilt_estimator.find_tilt(tilt_method=tilt)
|
187
190
|
self.dataset_info.detector_tilt = tilt
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import numpy as np
|
2
2
|
import pytest
|
3
3
|
from nabu.reconstruction.rings_cuda import CudaSinoMeanDeringer
|
4
|
-
from nabu.testutils import compare_arrays, get_data, generate_tests_scenarios, __do_long_tests__
|
4
|
+
from nabu.testutils import compare_arrays, get_data, generate_tests_scenarios, __do_long_tests__, __do_large_mem_tests__
|
5
5
|
from nabu.reconstruction.rings import MunchDeringer, SinoMeanDeringer, VoDeringer, __has_algotom__
|
6
6
|
from nabu.thirdparty.pore3d_deringer_munch import munchetal_filter
|
7
7
|
from nabu.cuda.utils import __has_pycuda__, get_cuda_context
|
@@ -144,8 +144,8 @@ class TestMunchDeringer:
|
|
144
144
|
# TODO check result. The generated test sinogram is "too synthetic" for this kind of deringer
|
145
145
|
|
146
146
|
@pytest.mark.skipif(
|
147
|
-
not (__have_tomocupy_deringer__),
|
148
|
-
reason="Need cupy for this test",
|
147
|
+
not (__have_tomocupy_deringer__ and __do_large_mem_tests__),
|
148
|
+
reason="Need cupy for this test, and use NABU_LARGE_MEM_TESTS",
|
149
149
|
)
|
150
150
|
def test_cuda_vo_deringer(self):
|
151
151
|
# Beware, this deringer seems to be buggy for "too-small" sinograms
|
@@ -3,10 +3,11 @@ import pytest
|
|
3
3
|
from nabu.testutils import get_data, generate_tests_scenarios, compare_shifted_images
|
4
4
|
from nabu.cuda.utils import get_cuda_context, __has_pycuda__, __has_cufft__
|
5
5
|
from nabu.opencl.utils import get_opencl_context, __has_pyopencl__
|
6
|
+
from nabu.processing.fft_opencl import has_vkfft as has_vkfft_cl
|
6
7
|
from nabu.thirdparty.algotom_convert_sino import extend_sinogram
|
7
8
|
|
8
9
|
__has_pycuda__ = __has_pycuda__ and __has_cufft__ # need both for using Cuda backprojector
|
9
|
-
|
10
|
+
__has_pyopencl__ = __has_pyopencl__ and has_vkfft_cl()
|
10
11
|
|
11
12
|
if __has_pycuda__:
|
12
13
|
from nabu.reconstruction.fbp import CudaBackprojector
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: nabu
|
3
|
-
Version: 2024.1.
|
3
|
+
Version: 2024.1.7
|
4
4
|
Summary: Nabu - Tomography software
|
5
5
|
Author-email: Pierre Paleo <pierre.paleo@esrf.fr>, Henri Payno <henri.payno@esrf.fr>, Alessandro Mirone <mirone@esrf.fr>, Jérôme Lesaint <jerome.lesaint@esrf.fr>
|
6
6
|
Maintainer-email: Pierre Paleo <pierre.paleo@esrf.fr>
|
@@ -1,8 +1,7 @@
|
|
1
1
|
doc/conf.py,sha256=3xtCarCHrXPr50GbeRDuH-o3Jzojw7mpr7vpGfZPLAE,3787
|
2
2
|
doc/create_conf_doc.py,sha256=IVOdP70KvbW9WS_UQu3Iyd0YfS60E2fJ5IDtQ_s4cDw,1143
|
3
|
-
doc/doc_config.py,sha256=anqeOVjqE2e7eVzg7yuh9dvIneTkrA5doGl1cVBqT7Q,730
|
4
3
|
doc/get_mathjax.py,sha256=VIvKRCdDuF2VoY8JD3mSey9XX13AZMmwTJBHdt1tUs4,1012
|
5
|
-
nabu/__init__.py,sha256=
|
4
|
+
nabu/__init__.py,sha256=syNuJVNxIJSDQ2NM6gqCh37LvuExshXotfyhoQEwQhc,270
|
6
5
|
nabu/tests.py,sha256=cew9OY2uTyncHI_HM32W8CP6B1GTGKaOW65XtMEqs7o,1417
|
7
6
|
nabu/testutils.py,sha256=qqtGgkIhpOpXhgeoXlqCb91Rx-JlI4ALaDF6nt8YRRk,13298
|
8
7
|
nabu/utils.py,sha256=w-xfRb6TFQpS-tao6nlvfmr962pmeec-WH1GltSUCrk,23767
|
@@ -32,6 +31,7 @@ nabu/app/shrink_dataset.py,sha256=P9dorO0Q-gPAWgSHyZi3XQp4jkMTJacDYzNvJY4oh98,35
|
|
32
31
|
nabu/app/stitching.py,sha256=Ibp1oVokLVMz-VX762j1C0E88Di0YJvRt-b8NjGoe7g,3310
|
33
32
|
nabu/app/utils.py,sha256=XUBRWDmth4i3BZHd27rfarFAUP7OEcsMeVmDJ6T4EXA,1178
|
34
33
|
nabu/app/validator.py,sha256=IR-DcUV5h1Fc5CChBfBIaglrGpfKNICX7tGirAroMiw,3368
|
34
|
+
nabu/app/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
35
|
nabu/app/tests/test_reduce_dark_flat.py,sha256=T-_zyzD0-f2c5Z-tlzmRF5p3vPtyL2RFb-D5fIYYEoM,2641
|
36
36
|
nabu/cuda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
37
|
nabu/cuda/convolution.py,sha256=n8KsJ7IZdPOs_K5QZC6qblnOvIKYwxtdt03oNa0GiMU,241
|
@@ -76,7 +76,7 @@ nabu/estimation/tests/test_focus.py,sha256=deaVGbIFSzHDAReoeAy-1HLsnKWpJQsC2SL9W
|
|
76
76
|
nabu/estimation/tests/test_tilt.py,sha256=PN4tnV3-XU2nNA608kQShaHugWn_-wbHzWCTnLIaCTk,1658
|
77
77
|
nabu/estimation/tests/test_translation.py,sha256=RkOnCYgk9DZGKlIka1snqTv4wbIz_nG7-EHAxnBHsJU,2999
|
78
78
|
nabu/io/__init__.py,sha256=Mx0HRIENk0dJbN3b9tzPZhiOnPMxBItgVNQn_QLLrlI,176
|
79
|
-
nabu/io/cast_volume.py,sha256=
|
79
|
+
nabu/io/cast_volume.py,sha256=fgqbabNHM1H2JKiUJR1kBrcIh9kBY7HpCmLTWbcCvvU,16712
|
80
80
|
nabu/io/detector_distortion.py,sha256=Or4icugi0fGRKWIG0I9hCuR1UZA5Cel25ZGY7cR2j4I,11744
|
81
81
|
nabu/io/reader.py,sha256=1DlUYObfOBEGYJHEqyw1Mb2uQ_b_Z7-FFqMWS-4tIB0,23083
|
82
82
|
nabu/io/reader_helical.py,sha256=_6vZBH-US_VT7oOGJUtYXqPwFws7xZKcmdOthpwvlIQ,4477
|
@@ -84,7 +84,7 @@ nabu/io/tiffwriter_zmm.py,sha256=ykaSFqdbYhGNxdBrJRT_rxihx5wj9G8qMQMI1e07fNk,383
|
|
84
84
|
nabu/io/utils.py,sha256=pFRULSlmGzJnzBbeSNKRhnKbBPbV0XaeUsxnWmnMtR4,9223
|
85
85
|
nabu/io/writer.py,sha256=cWKY7RcNUztOs1ktzLP2G087fLvq4yNMNdvvBdnoOSk,31417
|
86
86
|
nabu/io/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
|
-
nabu/io/tests/test_cast_volume.py,sha256=
|
87
|
+
nabu/io/tests/test_cast_volume.py,sha256=WCDStfV_eu4tjeKibWXrXEDbN0hPJGOzacGv6efgHAI,10743
|
88
88
|
nabu/io/tests/test_detector_distortion.py,sha256=-l-fl_RmSoZHl9aDoHDoJE13L8w9ghBXGASc9PYGzqw,6341
|
89
89
|
nabu/io/tests/test_writers.py,sha256=PjHRI8euuRnejwE_LNMSdwqUq18V0V3VJwmRhi8xvyk,7188
|
90
90
|
nabu/misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -132,16 +132,16 @@ nabu/pipeline/detector_distortion_provider.py,sha256=ru1AxbcuO-FA8FYooPBWgp1lzdS
|
|
132
132
|
nabu/pipeline/estimators.py,sha256=4V5pwl5vUFMJDanWnmw7POnSsa9lKyKtUzvq9GLcJwc,41374
|
133
133
|
nabu/pipeline/fallback_utils.py,sha256=7ccrKYE-rp3fydb72VA6W0_eKcEoqYBEAPlmij_lyEc,6086
|
134
134
|
nabu/pipeline/params.py,sha256=VdrekcxOnbrMzvvLcwEWINiMM0uVKmPxJJBwp3lhHBg,3479
|
135
|
-
nabu/pipeline/processconfig.py,sha256=
|
135
|
+
nabu/pipeline/processconfig.py,sha256=O0phgvfWtL9bg3_GE3cw9MZXS8PUy8z2rzhpoqP9U84,8320
|
136
136
|
nabu/pipeline/utils.py,sha256=NONAgBfTfUYvBNfoTqD33MAYaPZyCJL10SnR6B0lLec,3462
|
137
137
|
nabu/pipeline/writer.py,sha256=0ts40VNN3RiRURvZ2gNqsigsAJuwcjnYF4RJ15qaMpI,7558
|
138
138
|
nabu/pipeline/fullfield/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
139
|
-
nabu/pipeline/fullfield/chunked.py,sha256=
|
139
|
+
nabu/pipeline/fullfield/chunked.py,sha256=DdmSXI9BnWPrXG99MbzqQdJrh0DHlkuM8Dnv5xWkcM0,36873
|
140
140
|
nabu/pipeline/fullfield/chunked_cuda.py,sha256=aGzjY8MX6OL8auEj6Y0RfOGCmFnczsdfj6-8Net5AbQ,5645
|
141
141
|
nabu/pipeline/fullfield/computations.py,sha256=VpIURVXh8EpNSfait_AIFM4Ci-GK_546Wkb-Wn9r31Y,9935
|
142
|
-
nabu/pipeline/fullfield/dataset_validator.py,sha256=
|
142
|
+
nabu/pipeline/fullfield/dataset_validator.py,sha256=8B2lB9j7elF_NmOOOyr8UADVfC15Oofzy2AyWoPufQM,3265
|
143
143
|
nabu/pipeline/fullfield/nabu_config.py,sha256=a0mMoLkvlvHgX6RmUS1m1UhJS-XB3O6wBCnkNoI90Cs,30358
|
144
|
-
nabu/pipeline/fullfield/processconfig.py,sha256=
|
144
|
+
nabu/pipeline/fullfield/processconfig.py,sha256=TKQeHyImp5blhP4_lve8g5voDjSKAMNv7kelyB3e698,36143
|
145
145
|
nabu/pipeline/fullfield/reconstruction.py,sha256=Km_ZDtoiDQdX3TdTh6E9bzS5hoMC0jYU5eZWodaLbIg,36627
|
146
146
|
nabu/pipeline/helical/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
147
147
|
nabu/pipeline/helical/dataset_validator.py,sha256=0YQc0hdYdpaXznFaKmlj9SIu7mNs0xXMejcRkhOZHaI,640
|
@@ -158,7 +158,7 @@ nabu/pipeline/helical/span_strategy.py,sha256=7zV_Oo_liFiuv6m70o08XyoEIo_7QYs7MV
|
|
158
158
|
nabu/pipeline/helical/utils.py,sha256=51Qbh8db6-DX0iB9B9Kb07uwIG6_upAJg_8nhyzbB7o,1555
|
159
159
|
nabu/pipeline/helical/weight_balancer.py,sha256=j0TGe50tbbsilQvml9CgMxeSy83CNaifHj-xuMGl8uE,3981
|
160
160
|
nabu/pipeline/helical/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
161
|
-
nabu/pipeline/helical/tests/test_accumulator.py,sha256=
|
161
|
+
nabu/pipeline/helical/tests/test_accumulator.py,sha256=DCwTAWQLdUNJBJpjhHT8o1gLbznpuj_zqbQOfQnrShw,6534
|
162
162
|
nabu/pipeline/helical/tests/test_pipeline_elements_full.py,sha256=zeR9SaeD0mnhtKU7qo4Qrn_lg1I1Vhg4dqzj6jy8tpg,14569
|
163
163
|
nabu/pipeline/helical/tests/test_strategy.py,sha256=rt8SsUHBMMcVFl48kRGcOyf1y4bYqaA2xDznQxE7wFs,2721
|
164
164
|
nabu/pipeline/tests/test_chunk_reader.py,sha256=OB279hSvgmVhWv_OauZNWTJeaaiheETayGYK79Op10Q,3410
|
@@ -213,7 +213,7 @@ nabu/processing/unsharp_cuda.py,sha256=tbgw3selI4x4qsSxyQJ8Q4HUxdEBbZOJtSys-0yzj
|
|
213
213
|
nabu/processing/unsharp_opencl.py,sha256=ikmZhQB-kji3UFrvFzHJNvDUpaVSpzcCJRX_bqSQeGQ,2637
|
214
214
|
nabu/processing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
215
215
|
nabu/processing/tests/test_fft.py,sha256=zDGDTXZjHBVbiVFiQfkrkYFFMyotJRFU-KgoNm1FGms,9827
|
216
|
-
nabu/processing/tests/test_fftshift.py,sha256
|
216
|
+
nabu/processing/tests/test_fftshift.py,sha256=-XgJUm0eF3D-rMTlI9u3jaWYIlPFZEpM0PwW3SMDLG0,2618
|
217
217
|
nabu/processing/tests/test_histogram.py,sha256=25CLs1WZpLF9xZ2DR82x4_YokA5Z76Qsnn6zY8YdJj8,2283
|
218
218
|
nabu/processing/tests/test_medfilt.py,sha256=lVfLWIxWiLfODFc14WYbq1W02rgQDtCnrSgXnWgU6yU,2722
|
219
219
|
nabu/processing/tests/test_muladd.py,sha256=cRhAC5hgmRV0BAwPA4o4M-kcx-UDniLK7sSyiN0F3kE,1927
|
@@ -240,10 +240,10 @@ nabu/reconstruction/sinogram_cuda.py,sha256=wS84AIy3T00d1kTtuJOQmA3hktbDVs4ybwB9
|
|
240
240
|
nabu/reconstruction/sinogram_opencl.py,sha256=p793N26VknU8KIZLtDgFY6HNx0TylemZ1YL4WKD3fHs,1403
|
241
241
|
nabu/reconstruction/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
242
242
|
nabu/reconstruction/tests/test_cone.py,sha256=R9Q-o9jz5ZBRwpGRRDwWr4owrrI3bJow5f_x_toq_lw,11813
|
243
|
-
nabu/reconstruction/tests/test_deringer.py,sha256=
|
243
|
+
nabu/reconstruction/tests/test_deringer.py,sha256=C5wj6RNzmpt_Cry4fonC8KXWvgPpcXfRbG8Bex_30S4,8380
|
244
244
|
nabu/reconstruction/tests/test_fbp.py,sha256=p80zPCZkgJpERpqG5HHfbtbHBeqJUT8WY-q6FXOJJ7M,10053
|
245
245
|
nabu/reconstruction/tests/test_filtering.py,sha256=PFJLQMDBQo-UuS_CfKrWZ_DdHarmVlcbsiZ_kmToWXY,4782
|
246
|
-
nabu/reconstruction/tests/test_halftomo.py,sha256=
|
246
|
+
nabu/reconstruction/tests/test_halftomo.py,sha256=j-vq9Oyxl7dYGuAMMO2G-Y7EcryD1RGEyXqmycc0o_8,4290
|
247
247
|
nabu/reconstruction/tests/test_projector.py,sha256=W4zntShzL47HjMGQG11zIYzMXwX0KfMN4BVIAapdy_I,6033
|
248
248
|
nabu/reconstruction/tests/test_reconstructor.py,sha256=dEGqlQHfFwX_V2Ybnq5AAM5tprXn_2OuCSrC6cW4S0A,3221
|
249
249
|
nabu/reconstruction/tests/test_sino_normalization.py,sha256=fGv5Dlidxgm8ZC70Nk6oqVgpY2jzOW9NJaGlo44IJOo,3692
|
@@ -288,9 +288,9 @@ nabu/thirdparty/pore3d_deringer_munch.py,sha256=o4bisnFc-wMjuohWBT8wgWmfNehPQGtC
|
|
288
288
|
nabu/thirdparty/tomocupy_remove_stripe.py,sha256=VgXHr2tzTAAGZix5pwhFfbPxj4tt3yXBcjCPNQSLPAg,22810
|
289
289
|
nabu/thirdparty/tomopy_phase.py,sha256=hK4oPpkogLOhv23XzzEXQY2u3r8fJvASY_bINVs6ERE,8634
|
290
290
|
nabu/thirdparty/tomwer_load_flats_darks.py,sha256=ZNoVAinUb_wGYbfvs_4BVnWsjsQmNxSvCh1bWhR2WWg,5611
|
291
|
-
nabu-2024.1.
|
292
|
-
nabu-2024.1.
|
293
|
-
nabu-2024.1.
|
294
|
-
nabu-2024.1.
|
295
|
-
nabu-2024.1.
|
296
|
-
nabu-2024.1.
|
291
|
+
nabu-2024.1.7.dist-info/LICENSE,sha256=1eAIPSnEsnSFNUODnLtNtQTs76exG3ZxJ1DJR6zoUBA,1066
|
292
|
+
nabu-2024.1.7.dist-info/METADATA,sha256=_Bv8vjCsYa3a926AT-jJHgEkvMprSL5LYjRNDbhzpiA,5224
|
293
|
+
nabu-2024.1.7.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
|
294
|
+
nabu-2024.1.7.dist-info/entry_points.txt,sha256=cJKGkBeykVL7uK3E4R0RLRqMXifTL2qdO573syPAvJc,1288
|
295
|
+
nabu-2024.1.7.dist-info/top_level.txt,sha256=fsm_N3eXLRZk2QXF9OSKPNDPFXOz8FAQjHh5avT3dok,9
|
296
|
+
nabu-2024.1.7.dist-info/RECORD,,
|
doc/doc_config.py
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python
|
2
|
-
|
3
|
-
from nabu.resources.nabu_config import nabu_config
|
4
|
-
|
5
|
-
|
6
|
-
def generate(file_):
|
7
|
-
def write(content):
|
8
|
-
print(content, file=file_)
|
9
|
-
for section, values in nabu_config.items():
|
10
|
-
if section == "about":
|
11
|
-
continue
|
12
|
-
write("## %s\n" % section)
|
13
|
-
for key, val in values.items():
|
14
|
-
if val["type"] == "unsupported":
|
15
|
-
continue
|
16
|
-
write(val["help"] + "\n")
|
17
|
-
write(
|
18
|
-
"```ini\n%s = %s\n```"
|
19
|
-
% (key, val["default"])
|
20
|
-
)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
if __name__ == "__main__":
|
25
|
-
|
26
|
-
import sys, os
|
27
|
-
print(os.path.abspath(__file__))
|
28
|
-
exit(0)
|
29
|
-
|
30
|
-
fname = "/tmp/test.md"
|
31
|
-
with open(fname, "w") as f:
|
32
|
-
generate(f)
|
File without changes
|
File without changes
|
File without changes
|