From c929aa62946d657717199891b3a5ead20b37769c Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 13:10:57 -0400 Subject: [PATCH 01/28] build: fic pip in manual pages deploy to avoid invalid version --- .github/workflows/manual-pages-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/manual-pages-deploy.yml b/.github/workflows/manual-pages-deploy.yml index 1cdf6ca..a602539 100644 --- a/.github/workflows/manual-pages-deploy.yml +++ b/.github/workflows/manual-pages-deploy.yml @@ -35,7 +35,7 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip + python -m pip install --upgrade pip==24.0 pip install sphinx pip install sphinx-math-dollar pip install sphinx-rtd-theme From 53b537eac60ee47b60beb43a6fe4ca56f3787c27 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 13:16:37 -0400 Subject: [PATCH 02/28] build: fix version manual pages deploy to avoid invalid version --- .github/workflows/manual-pages-deploy.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/manual-pages-deploy.yml b/.github/workflows/manual-pages-deploy.yml index a602539..4d07fa5 100644 --- a/.github/workflows/manual-pages-deploy.yml +++ b/.github/workflows/manual-pages-deploy.yml @@ -18,10 +18,10 @@ jobs: - name: Update docs configuration with version (tag) name run: | - sed -i "s/PACKAGE_VERSION/${{ github.ref_name }}/" setup.py - sed -i "s/PACKAGE_VERSION/${{ github.ref_name }}/" CHAP/__init__.py - sed -i "s/PACKAGE_VERSION/${{ github.ref_name }}/" docs/conf.py - sed -i "s/PACKAGE_VERSION/${{ github.ref_name }}/" docs/installation.md + sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" setup.py + sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" CHAP/__init__.py + sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" docs/conf.py + sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" docs/installation.md - name: Setup Miniconda uses: conda-incubator/setup-miniconda@v3 @@ -35,7 +35,7 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip==24.0 + python -m pip install --upgrade pip pip install sphinx pip install sphinx-math-dollar pip install sphinx-rtd-theme From 72af349288f8f3511284e338c0451061ac0e7087 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 13:20:18 -0400 Subject: [PATCH 03/28] build: fix bug in version for manual pages deploy --- .github/workflows/manual-pages-deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/manual-pages-deploy.yml b/.github/workflows/manual-pages-deploy.yml index 4d07fa5..5cd3b98 100644 --- a/.github/workflows/manual-pages-deploy.yml +++ b/.github/workflows/manual-pages-deploy.yml @@ -18,10 +18,10 @@ jobs: - name: Update docs configuration with version (tag) name run: | - sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" setup.py - sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" CHAP/__init__.py - sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" docs/conf.py - sed -i "s/PACKAGE_VERSION/${{ 0.0.1 }}/" docs/installation.md + sed -i "s/PACKAGE_VERSION/0.0.1/" setup.py + sed -i "s/PACKAGE_VERSION/0.0.1/" CHAP/__init__.py + sed -i "s/PACKAGE_VERSION/0.0.1/" docs/conf.py + sed -i "s/PACKAGE_VERSION/0.0.1/" docs/installation.md - name: Setup Miniconda uses: conda-incubator/setup-miniconda@v3 From 295b32723c464afbcfa977fc702a4383fa31f9ab Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 14:07:16 -0400 Subject: [PATCH 04/28] build: update to avoid imports in __init__'s --- CHAP/common/map_utils.py | 2 +- CHAP/common/models/integration.py | 2 +- CHAP/common/nexus_utils.py | 2 +- CHAP/common/processor.py | 2 +- CHAP/edd/writer.py | 2 +- CHAP/foxden/models.py | 2 +- CHAP/giwaxs/models.py | 2 +- CHAP/hdrm/models.py | 2 +- CHAP/inference/processor.py | 2 +- CHAP/runner.py | 29 ++++++++++++++----- CHAP/saxswaxs/processor.py | 2 +- CHAP/tomo/writer.py | 2 +- examples/tomo/pipeline_id1a3_pyramid_sim.yaml | 10 +++---- 13 files changed, 38 insertions(+), 23 deletions(-) diff --git a/CHAP/common/map_utils.py b/CHAP/common/map_utils.py index 39f4ff8..12ba773 100755 --- a/CHAP/common/map_utils.py +++ b/CHAP/common/map_utils.py @@ -11,7 +11,7 @@ ) # Local modules -from CHAP import Processor +from CHAP.processor import Processor from CHAP.common.models.map import ( Detector, MapConfig, diff --git a/CHAP/common/models/integration.py b/CHAP/common/models/integration.py index 3dc2345..7ae6571 100755 --- a/CHAP/common/models/integration.py +++ b/CHAP/common/models/integration.py @@ -26,8 +26,8 @@ from pyFAI.integrator.azimuthal import AzimuthalIntegrator # Local modules -from CHAP import CHAPBaseModel from CHAP.common.models.map import Detector +from CHAP.models import CHAPBaseModel class AzimuthalIntegratorConfig(Detector, CHAPBaseModel): diff --git a/CHAP/common/nexus_utils.py b/CHAP/common/nexus_utils.py index 4789c02..71d501b 100755 --- a/CHAP/common/nexus_utils.py +++ b/CHAP/common/nexus_utils.py @@ -5,7 +5,7 @@ """ # Local modules -from CHAP import Processor +from CHAP.processor import Processor class NexusMakeLinkProcessor(Processor): diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index 1f835a9..0d198c1 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -20,13 +20,13 @@ ) # Local modules -from CHAP import Processor from CHAP.common.models.common import ImageProcessorConfig from CHAP.common.models.map import ( DetectorConfig, MapConfig, ) from CHAP.pipeline import PipelineData +from CHAP.processor import Processor class AsyncProcessor(Processor): diff --git a/CHAP/edd/writer.py b/CHAP/edd/writer.py index 3e73f4a..6730c00 100755 --- a/CHAP/edd/writer.py +++ b/CHAP/edd/writer.py @@ -3,7 +3,7 @@ """Module for Writers unique to the EDD workflow.""" # Local modules -from CHAP import Writer +from CHAP.writer import Writer class StrainAnalysisUpdateWriter(Writer): """Writer to add or update the strain analysis for a set of map diff --git a/CHAP/foxden/models.py b/CHAP/foxden/models.py index ac99ae3..0af1937 100755 --- a/CHAP/foxden/models.py +++ b/CHAP/foxden/models.py @@ -17,7 +17,7 @@ ) # Local modules -from CHAP import CHAPBaseModel +from CHAP.models import CHAPBaseModel class FoxdenRequestConfig(CHAPBaseModel): diff --git a/CHAP/giwaxs/models.py b/CHAP/giwaxs/models.py index fcef8df..4f5d11c 100755 --- a/CHAP/giwaxs/models.py +++ b/CHAP/giwaxs/models.py @@ -26,8 +26,8 @@ from pyFAI.integrator.fiber import FiberIntegrator # Local modules -from CHAP import CHAPBaseModel from CHAP.common.models.map import Detector +from CHAP.models import CHAPBaseModel @model_validator(mode='before') diff --git a/CHAP/hdrm/models.py b/CHAP/hdrm/models.py index 9fdacf4..c92727b 100755 --- a/CHAP/hdrm/models.py +++ b/CHAP/hdrm/models.py @@ -10,9 +10,9 @@ ) # Local modules -from CHAP import CHAPBaseModel from CHAP.edd.models import MaterialConfig from CHAP.giwaxs.models import AzimuthalIntegratorConfig +from CHAP.models import CHAPBaseModel class HdrmOrmfinderConfig(CHAPBaseModel): diff --git a/CHAP/inference/processor.py b/CHAP/inference/processor.py index e3aaff7..84360e3 100755 --- a/CHAP/inference/processor.py +++ b/CHAP/inference/processor.py @@ -10,7 +10,7 @@ from time import time # Local modules -from CHAP import Processor +from CHAP.processor import Processor class TFaaSImageProcessor(Processor): diff --git a/CHAP/runner.py b/CHAP/runner.py index b143849..2fac58b 100755 --- a/CHAP/runner.py +++ b/CHAP/runner.py @@ -308,6 +308,9 @@ def run( config['outputdir'] = outputdir else: name = item + split_name = name.split('.') + cls_name = split_name[-1] + mod_name = '.'.join(split_name[:-1]) # Initialize the object's identifiers if 'users' in name: @@ -323,15 +326,27 @@ def run( if logger is not None: logger.error(f'Unable to load {name}') continue - cls_name = name.split('.')[-1] - mod_name = '.'.join(name.split('.')[:-1]) - module = __import__(mod_name, fromlist=[cls_name]) + module_name = __import__(mod_name, fromlist=[cls_name]) else: - cls_name = name.split('.')[-1] - mod_name = '.'.join(name.split('.')[:-1]) - module = __import__(f'CHAP.{mod_name}', fromlist=[cls_name]) + module_name = __import__(f'CHAP.{mod_name}', fromlist=[cls_name]) - pipeline_mmcs.append(getattr(module, cls_name)) + try: + module = getattr(module_name, cls_name) + except: + if (cls_name.endswith('Processor') + and split_name[-2] != 'processor'): + mod_name += '.processor' + if cls_name.endswith('Reader') and split_name[-2] != 'reader': + mod_name += '.reader' + if cls_name.endswith('Writer') and split_name[-2] != 'writer': + mod_name += '.writer' + if 'users' in name: + module_name = __import__(mod_name, fromlist=[cls_name]) + else: + module_name = __import__( + f'CHAP.{mod_name}', fromlist=[cls_name]) + module = getattr(module_name, cls_name) + pipeline_mmcs.append(module) # Initialize the object's runtime arguments item_args['comm'] = comm #FIX make comm a field in RunConfig? diff --git a/CHAP/saxswaxs/processor.py b/CHAP/saxswaxs/processor.py index d11e5da..cb13414 100755 --- a/CHAP/saxswaxs/processor.py +++ b/CHAP/saxswaxs/processor.py @@ -22,13 +22,13 @@ import numpy as np # Local modules -from CHAP import Processor from CHAP.common.processor import ExpressionProcessor from CHAP.common.models.map import ( Detector, MapConfig, ) from CHAP.common.models.integration import PyfaiIntegrationConfig +from CHAP.processor import Processor class CfProcessor(Processor): diff --git a/CHAP/tomo/writer.py b/CHAP/tomo/writer.py index 4aeca3e..174b02e 100755 --- a/CHAP/tomo/writer.py +++ b/CHAP/tomo/writer.py @@ -14,7 +14,7 @@ from pydantic import model_validator # Local modules -from CHAP import Writer +from CHAP.writer import Writer class TomoWriter(Writer): diff --git a/examples/tomo/pipeline_id1a3_pyramid_sim.yaml b/examples/tomo/pipeline_id1a3_pyramid_sim.yaml index 695f797..0623176 100644 --- a/examples/tomo/pipeline_id1a3_pyramid_sim.yaml +++ b/examples/tomo/pipeline_id1a3_pyramid_sim.yaml @@ -9,20 +9,20 @@ config: pipeline: # Create a simulated stack of tomography images - - common.reader.YAMLReader: + - common.YAMLReader: filename: tomo_sim_id1a3_pyramid.yaml schema: tomo.models.TomoSimConfig - - tomo.processor.TomoSimFieldProcessor: + - tomo.TomoSimFieldProcessor: schema: tomo.models.TomoSimField # Create the dark field for the simulation - - tomo.processor.TomoDarkFieldProcessor: + - tomo.TomoDarkFieldProcessor: schema: tomo.models.TomoDarkField # Create the bright field for the simulation - - tomo.processor.TomoBrightFieldProcessor: + - tomo.TomoBrightFieldProcessor: num_image: 10 schema: tomo.models.TomoBrightField # Create the SPEC file for the simulation - tomo.processor.TomoSpecProcessor: # scan_numbers: [1, 2, 3, 4, 5] - - common.writer.FileTreeWriter: + - common.FileTreeWriter: force_overwrite: true From 436898a5d9daeb5cacef59565e56227ea7bed059 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 14:14:43 -0400 Subject: [PATCH 05/28] build: add DetectorConfig.model_rebuild() for Pydantic github error --- CHAP/common/processor.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index 0d198c1..1d18454 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -3475,6 +3475,9 @@ def copy_group(zarr_group, nexus_group): copy_group(zarr_file, nexus_file) +DetectorConfig.model_rebuild() + + if __name__ == '__main__': # Local modules from CHAP.processor import main From cd25d454fecc2537a69c2c6fc2a6cf789c28ae6d Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 14:32:16 -0400 Subject: [PATCH 06/28] build: attempt 2 to avoid Pydantic github error --- CHAP/common/processor.py | 3 --- CHAP/tomo/processor.py | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index 1d18454..0d198c1 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -3475,9 +3475,6 @@ def copy_group(zarr_group, nexus_group): copy_group(zarr_file, nexus_file) -DetectorConfig.model_rebuild() - - if __name__ == '__main__': # Local modules from CHAP.processor import main diff --git a/CHAP/tomo/processor.py b/CHAP/tomo/processor.py index 024cddc..0e8fe1a 100755 --- a/CHAP/tomo/processor.py +++ b/CHAP/tomo/processor.py @@ -44,8 +44,6 @@ DetectorConfig, MapConfig, ) -from CHAP.pipeline import PipelineData -from CHAP.processor import Processor from CHAP.tomo.models import ( TomoReduceConfig, TomoFindCenterConfig, @@ -53,6 +51,8 @@ TomoCombineConfig, TomoSimConfig, ) +from CHAP.pipeline import PipelineData +from CHAP.processor import Processor from CHAP.utils.general import ( #input_num, #input_yesno, From ddbea2b281d307db522cbbc95eb259fcef0517c2 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 14:47:31 -0400 Subject: [PATCH 07/28] build: attempt 3 to avoid Pydantic github error --- CHAP/common/reader.py | 8 ++++---- CHAP/edd/reader.py | 2 +- CHAP/saxswaxs/processor.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHAP/common/reader.py b/CHAP/common/reader.py index b552f87..398fe18 100755 --- a/CHAP/common/reader.py +++ b/CHAP/common/reader.py @@ -22,14 +22,14 @@ ) # Local modules -from CHAP.reader import ( - Reader, - validate_reader_model, -) from CHAP.common.models.map import ( DetectorConfig, SpecConfig, ) +from CHAP.reader import ( + Reader, + validate_reader_model, +) def validate_model(model): """Validate the `model` configuration. diff --git a/CHAP/edd/reader.py b/CHAP/edd/reader.py index 038a9f7..fe59755 100755 --- a/CHAP/edd/reader.py +++ b/CHAP/edd/reader.py @@ -19,8 +19,8 @@ ) # Local modules -from CHAP.reader import Reader from CHAP.common.models.map import DetectorConfig +from CHAP.reader import Reader class EddMapReader(Reader): diff --git a/CHAP/saxswaxs/processor.py b/CHAP/saxswaxs/processor.py index cb13414..f2933d8 100755 --- a/CHAP/saxswaxs/processor.py +++ b/CHAP/saxswaxs/processor.py @@ -22,12 +22,12 @@ import numpy as np # Local modules -from CHAP.common.processor import ExpressionProcessor from CHAP.common.models.map import ( Detector, MapConfig, ) from CHAP.common.models.integration import PyfaiIntegrationConfig +from CHAP.common.processor import ExpressionProcessor from CHAP.processor import Processor From 251717e2c6ebf02afc928c338150bdfb7a9f38cb Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 15:19:56 -0400 Subject: [PATCH 08/28] build: attempt 4 to avoid Pydantic github error --- CHAP/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHAP/__init__.py b/CHAP/__init__.py index 5873478..a799211 100755 --- a/CHAP/__init__.py +++ b/CHAP/__init__.py @@ -41,6 +41,8 @@ Module defining the base `Writer` class to derive all others from. """ +from CHAP.common.models.map import DetectorConfig as _DetectorConfig + #from CHAP.models import CHAPBaseModel #from CHAP.reader import Reader #from CHAP.processor import Processor From ebf34a6bdaeae41f417705bfa7ba13f605636b05 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 15:29:45 -0400 Subject: [PATCH 09/28] build: attempt 5 to avoid Pydantic github error --- CHAP/__init__.py | 2 -- CHAP/common/processor.py | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHAP/__init__.py b/CHAP/__init__.py index a799211..5873478 100755 --- a/CHAP/__init__.py +++ b/CHAP/__init__.py @@ -41,8 +41,6 @@ Module defining the base `Writer` class to derive all others from. """ -from CHAP.common.models.map import DetectorConfig as _DetectorConfig - #from CHAP.models import CHAPBaseModel #from CHAP.reader import Reader #from CHAP.processor import Processor diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index 0d198c1..a8891b3 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -946,6 +946,8 @@ def _create_figure(self, image, animated=False): return fig, plt +DetectorConfig.model_rebuild() + class MapProcessor(Processor): """A Processor that takes a map configuration and returns a NeXus style From 20bfcb12d94ac1f714c90d8a70e1dcb9812e2707 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 15:47:02 -0400 Subject: [PATCH 10/28] build: attempt 6 to avoid Pydantic github error --- CHAP/common/map_utils.py | 2 +- CHAP/common/processor.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHAP/common/map_utils.py b/CHAP/common/map_utils.py index 12ba773..1e2c870 100755 --- a/CHAP/common/map_utils.py +++ b/CHAP/common/map_utils.py @@ -11,11 +11,11 @@ ) # Local modules -from CHAP.processor import Processor from CHAP.common.models.map import ( Detector, MapConfig, ) +from CHAP.processor import Processor def get_axes(nxdata, skip_axes=None): """Get the axes of a NeXus style diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index a8891b3..4a388d4 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -7,7 +7,10 @@ # System modules from copy import deepcopy import os -from typing import Optional +from typing import ( + Dict, + Optional, +) # Third party modules import numpy as np @@ -946,7 +949,8 @@ def _create_figure(self, image, animated=False): return fig, plt -DetectorConfig.model_rebuild() +DetectorConfig.model_rebuild(_types_namespace={'Dict': Dict}) + class MapProcessor(Processor): """A Processor that takes a map configuration and returns a NeXus From 989b0ac517fccd258901327b27e0984a88ff7238 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 15:57:43 -0400 Subject: [PATCH 11/28] build: attempt 7 to avoid Pydantic github error --- CHAP/common/processor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index 4a388d4..a5991aa 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -7,6 +7,7 @@ # System modules from copy import deepcopy import os +import typing from typing import ( Dict, Optional, @@ -949,7 +950,7 @@ def _create_figure(self, image, animated=False): return fig, plt -DetectorConfig.model_rebuild(_types_namespace={'Dict': Dict}) +DetectorConfig.model_rebuild(_types_namespace=vars(typing)) class MapProcessor(Processor): From 5cf9f88bd14b5c9c2350baf549c256b15ddbb81a Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:10:27 -0400 Subject: [PATCH 12/28] build: attempt 8 to avoid Pydantic github error --- CHAP/edd/models.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index 68cd19e..7accc98 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -5,6 +5,7 @@ # System modules from copy import deepcopy import os +import typing from typing import ( Literal, Optional, @@ -63,7 +64,7 @@ class BaselineConfig(CHAPBaseModel): # Fit configuration class -class FitConfig(CHAPBaseModel): +class _FitConfig(CHAPBaseModel): """Fit parameters configuration class for peak fitting. :ivar background: Background model for peak fitting, defaults @@ -233,7 +234,7 @@ def validate_materialconfig_after(self): # Detector configuration classes -class MCADetectorCalibration(Detector, FitConfig): +class MCADetectorCalibration(Detector, _FitConfig): """Class representing the configuration for a single MCA detector element to perform detector calibration. @@ -541,7 +542,7 @@ def get_tth_map(self, map_shape): ] -class MCADetectorConfig(FitConfig): +class MCADetectorConfig(_FitConfig): """Class representing metadata required to configure a full MCA detector. @@ -553,7 +554,7 @@ class MCADetectorConfig(FitConfig): 'calibration', 'diffractionvolumelength', 'strainanalysis'] detectors: Optional[conlist(min_length=1, item_type=MCADetector)] = [] - _exclude = set(vars(FitConfig()).keys()) + _exclude = set(vars(_FitConfig()).keys()) @model_validator(mode='before') @classmethod @@ -605,7 +606,7 @@ def update_detectors(self): # Processor configuration classes -class DiffractionVolumeLengthConfig(FitConfig): +class DiffractionVolumeLengthConfig(_FitConfig): """Configuration for the differential volume length processor :class:`~CHAP.edd.processor.DiffractionVolumeLengthProcessor` for an EDD setup using a steel-foil raster scan. @@ -633,7 +634,7 @@ class DiffractionVolumeLengthConfig(FitConfig): sample_thickness: Optional[confloat(gt=0, allow_inf_nan=False)] = None sigma_to_dvl_factor: Optional[Literal[2.0, 3.5, 4.0]] = 3.5 - _exclude = set(vars(FitConfig()).keys()) + _exclude = set(vars(_FitConfig()).keys()) @model_validator(mode='after') def validate_diffractionvolumelengthconfig_after(self): @@ -972,3 +973,7 @@ class StrainAnalysisConfig(MCACalibrationConfig): # raise ValueError('Invalid input parameters, specify at least one ' # 'of "width", "stride" or "num"') # return oversampling + +MCADetectorCalibration.model_rebuild(_types_namespace=vars(typing)) +MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) +DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) From 74dab790c00a03f9868d15534bb197d459d7e933 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:17:35 -0400 Subject: [PATCH 13/28] build: attempt 9 to avoid Pydantic github error --- CHAP/edd/models.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index 7accc98..4488d95 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -234,6 +234,9 @@ def validate_materialconfig_after(self): # Detector configuration classes +_FitConfig.model_rebuild(_types_namespace=vars(typing)) + + class MCADetectorCalibration(Detector, _FitConfig): """Class representing the configuration for a single MCA detector element to perform detector calibration. @@ -974,6 +977,6 @@ class StrainAnalysisConfig(MCACalibrationConfig): # 'of "width", "stride" or "num"') # return oversampling -MCADetectorCalibration.model_rebuild(_types_namespace=vars(typing)) -MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) -DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) +#MCADetectorCalibration.model_rebuild(_types_namespace=vars(typing)) +#MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) +#DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) From 5f7328b926a33af61bce7c6669d730b91247b3e1 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:26:43 -0400 Subject: [PATCH 14/28] build: attempt 10 to avoid Pydantic github error --- CHAP/edd/models.py | 7 +++---- CHAP/foxden/reader.py | 4 ++++ CHAP/tomo/processor.py | 4 ++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index 4488d95..a76dde6 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -652,6 +652,9 @@ def validate_diffractionvolumelengthconfig_after(self): return self +MaterialConfig.model_rebuild(_types_namespace=vars(typing)) + + class MCACalibrationConfig(CHAPBaseModel): """Base class configuration for energy and 2&theta calibration processors. @@ -976,7 +979,3 @@ class StrainAnalysisConfig(MCACalibrationConfig): # raise ValueError('Invalid input parameters, specify at least one ' # 'of "width", "stride" or "num"') # return oversampling - -#MCADetectorCalibration.model_rebuild(_types_namespace=vars(typing)) -#MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) -#DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/foxden/reader.py b/CHAP/foxden/reader.py index 91e6e98..ce16142 100755 --- a/CHAP/foxden/reader.py +++ b/CHAP/foxden/reader.py @@ -7,6 +7,7 @@ # System modules import json +import typing from typing import Optional # Third party modules @@ -22,6 +23,9 @@ from CHAP.processor import Processor +FoxdenRequestConfige.model_rebuild(_types_namespace=vars(typing)) + + class FoxdenDataDiscoveryReader(PipelineItem): """Reader for the `FOXDEN `__ diff --git a/CHAP/tomo/processor.py b/CHAP/tomo/processor.py index 0e8fe1a..2792e9d 100755 --- a/CHAP/tomo/processor.py +++ b/CHAP/tomo/processor.py @@ -16,6 +16,7 @@ import re import sys from time import time +import typing from typing import ( Annotated, Optional, @@ -943,6 +944,9 @@ def __exit__(self, exc_type, exc_value, traceback): set_num_threads(self._num_proc_org) +TomoReduceConfig.model_rebuild(_types_namespace=vars(typing)) + + class TomoReduceProcessor(Processor): """A processor to reduce a set of raw tomographic images returning a NeXus style From 9d570b84c4a2cd1adcb9a46793b65e3f596ada89 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:33:09 -0400 Subject: [PATCH 15/28] build: attempt 11 to avoid Pydantic github error --- CHAP/edd/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index d57397d..a8b495b 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -29,6 +29,8 @@ Writers unique to the EDD workflow. """ +import typing +DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) #from CHAP.edd.processor import ( # DiffractionVolumeLengthProcessor, # LatticeParameterRefinementProcessor, From 998e2a0c24e6d2a208536e96c04e4a0b5e45e04c Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:37:20 -0400 Subject: [PATCH 16/28] build: attempt 12 to avoid Pydantic github error --- CHAP/edd/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index a8b495b..94d7bc0 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -30,6 +30,7 @@ """ import typing +from CHAP.edd.models import DiffractionVolumeLengthConfig DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) #from CHAP.edd.processor import ( # DiffractionVolumeLengthProcessor, From 4a7b3cb4afad8c47191201c015c68ca743a4a538 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:46:58 -0400 Subject: [PATCH 17/28] build: attempt 13 to avoid Pydantic github error --- CHAP/edd/__init__.py | 17 ++++++++++++++++- CHAP/edd/processor.py | 6 +++--- CHAP/foxden/reader.py | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 94d7bc0..4b4726c 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -29,9 +29,24 @@ Writers unique to the EDD workflow. """ +# System modules import typing -from CHAP.edd.models import DiffractionVolumeLengthConfig + +# Local modules +from CHAP.edd.models import ( + DiffractionVolumeLengthConfig, + MCACalibrationConfig, + MCADetectorConfig, + MCAEnergyCalibrationConfig, + MCATthCalibrationConfig, + StrainAnalysisConfig, + DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) +MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) +MCAEnergyCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +MCATthCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) #from CHAP.edd.processor import ( # DiffractionVolumeLengthProcessor, # LatticeParameterRefinementProcessor, diff --git a/CHAP/edd/processor.py b/CHAP/edd/processor.py index 332b068..050c9df 100755 --- a/CHAP/edd/processor.py +++ b/CHAP/edd/processor.py @@ -24,12 +24,12 @@ # Local modules from CHAP.common.models.map import DetectorConfig from CHAP.edd.models import ( + DiffractionVolumeLengthConfig, + MCACalibrationConfig, MCADetectorCalibration, + MCADetectorConfig, MCADetectorDiffractionVolumeLength, MCADetectorStrainAnalysis, - MCADetectorConfig, - DiffractionVolumeLengthConfig, - MCACalibrationConfig, MCAEnergyCalibrationConfig, MCATthCalibrationConfig, StrainAnalysisConfig, diff --git a/CHAP/foxden/reader.py b/CHAP/foxden/reader.py index ce16142..3011871 100755 --- a/CHAP/foxden/reader.py +++ b/CHAP/foxden/reader.py @@ -23,7 +23,7 @@ from CHAP.processor import Processor -FoxdenRequestConfige.model_rebuild(_types_namespace=vars(typing)) +FoxdenRequestConfig.model_rebuild(_types_namespace=vars(typing)) class FoxdenDataDiscoveryReader(PipelineItem): From ffdba8056f1dcce895408c9f1942a5feaf3912a1 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:52:59 -0400 Subject: [PATCH 18/28] build: attempt 14 to avoid Pydantic github error --- CHAP/edd/__init__.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 4b4726c..02ed834 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -36,10 +36,11 @@ from CHAP.edd.models import ( DiffractionVolumeLengthConfig, MCACalibrationConfig, - MCADetectorConfig, - MCAEnergyCalibrationConfig, - MCATthCalibrationConfig, +# MCADetectorConfig, +# MCAEnergyCalibrationConfig, +# MCATthCalibrationConfig, StrainAnalysisConfig, +) DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) From 5ba7bfa4d2e2a737355038c07a5a449c899e0e2b Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:55:23 -0400 Subject: [PATCH 19/28] build: attempt 14a to avoid Pydantic github error --- CHAP/edd/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 02ed834..75a9be9 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -44,9 +44,9 @@ DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) -MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) -MCAEnergyCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) -MCATthCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +#MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) +#MCAEnergyCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +#MCATthCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) #from CHAP.edd.processor import ( # DiffractionVolumeLengthProcessor, From 82647ce661f4794b254cf3202647ae0db6dbf874 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 16:59:39 -0400 Subject: [PATCH 20/28] build: attempt 14c to avoid Pydantic github error --- CHAP/edd/__init__.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 75a9be9..35f4c24 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -36,18 +36,12 @@ from CHAP.edd.models import ( DiffractionVolumeLengthConfig, MCACalibrationConfig, -# MCADetectorConfig, -# MCAEnergyCalibrationConfig, -# MCATthCalibrationConfig, StrainAnalysisConfig, ) -DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) -MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) -#MCADetectorConfig.model_rebuild(_types_namespace=vars(typing)) -#MCAEnergyCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) -#MCATthCalibrationConfig.model_rebuild(_types_namespace=vars(typing)) -StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) +#DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) +#MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +#StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) #from CHAP.edd.processor import ( # DiffractionVolumeLengthProcessor, # LatticeParameterRefinementProcessor, From d803676ecafdaaf2b40003246ca102a033e73711 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 17:48:17 -0400 Subject: [PATCH 21/28] build: attempt 15 to avoid Pydantic github error --- CHAP/__init__.py | 5 --- CHAP/common/__init__.py | 72 ---------------------------------- CHAP/common/models/__init__.py | 8 +++- CHAP/common/processor.py | 4 -- CHAP/edd/__init__.py | 29 +++----------- CHAP/edd/models.py | 6 +-- CHAP/foxden/__init__.py | 23 ++++------- CHAP/foxden/reader.py | 4 -- CHAP/giwaxs/__init__.py | 7 ---- CHAP/hdrm/__init__.py | 6 --- CHAP/inference/__init__.py | 3 -- CHAP/pipeline.py | 5 --- CHAP/runner.py | 3 +- CHAP/saxswaxs/__init__.py | 13 ------ CHAP/sin2psi/__init__.py | 3 -- CHAP/test/__init__.py | 1 - CHAP/tomo/__init__.py | 29 +++++++------- CHAP/tomo/models.py | 3 -- CHAP/tomo/processor.py | 7 ---- CHAP/utils/__init__.py | 1 - 20 files changed, 39 insertions(+), 193 deletions(-) diff --git a/CHAP/__init__.py b/CHAP/__init__.py index 5873478..b6cb0b2 100755 --- a/CHAP/__init__.py +++ b/CHAP/__init__.py @@ -41,9 +41,4 @@ Module defining the base `Writer` class to derive all others from. """ -#from CHAP.models import CHAPBaseModel -#from CHAP.reader import Reader -#from CHAP.processor import Processor -#from CHAP.writer import Writer - version = 'PACKAGE_VERSION' diff --git a/CHAP/common/__init__.py b/CHAP/common/__init__.py index 17ac704..c48d504 100755 --- a/CHAP/common/__init__.py +++ b/CHAP/common/__init__.py @@ -27,75 +27,3 @@ Module for generic Writers used in multiple experiment-specific workflows. """ -#from CHAP.common.processor import ( -## AnimationProcessor, -# AsyncProcessor, -# BinarizeProcessor, -# ConvertStructuredProcessor, -# ExpressionProcessor, -# ImageProcessor, -# MapProcessor, -# MPICollectProcessor, -# MPIMapProcessor, -# MPISpawnMapProcessor, -# NexusToNumpyProcessor, -## NexusToTiffsprocessor, -# NexusToXarrayProcessor, -# NexusToZarrProcessor, -# NormalizeNexusProcessor, -# NormalizeMapProcessor, -# NumpyStackProcessor, -# NumpySumProcessor, -# NumpyToNXfieldProcessor, -# PandasToXarrayProcessor, -# PrintProcessor, -# PyfaiAzimuthalIntegrationProcessor, -# RawDetectorDataMapProcessor, -# SetupNXdataProcessor, -# UpdateNXvalueProcessor, -# UpdateNXdataProcessor, -# UnstructuredToStructuredProcessor, -# NXdataToDataPointsProcessor, -# XarrayToNexusProcessor, -# XarrayToNumpyProcessor, -# ZarrToNexusProcessor, -#) -#from CHAP.common.reader import ( -# BinaryFileReader, -# ConfigReader, -# DetectorDataReader, -# FabioImageReader, -# H5Reader, -# LinkamReader, -# MapReader, -# PandasReader, -# NexusReader, -# NXdataReader, -# NXfieldReader, -# SpecReader, -# URLReader, -# YAMLReader, -# ZarrReader, -#) -#from CHAP.common.writer import ( -# ExtractArchiveWriter, -# FileTreeWriter, -# H5Writer, -# ImageWriter, -# MatplotlibAnimationWriter, -# MatplotlibFigureWriter, -# NexusWriter, -# NexusValuesWriter, -# PyfaiResultsWriter, -# YAMLWriter, -# TXTWriter, -# ZarrValuesWriter, -# ZarrWriter, -#) -#from CHAP.common.map_utils import ( -# MapSliceProcessor, -# SpecScanToMapConfigProcessor, -#) -#from CHAP.common.nexus_utils import ( -# NexusMakeLinkProcessor, -#) diff --git a/CHAP/common/models/__init__.py b/CHAP/common/models/__init__.py index 043c5ea..7c2b873 100755 --- a/CHAP/common/models/__init__.py +++ b/CHAP/common/models/__init__.py @@ -12,8 +12,14 @@ Map related Pydantic model configuration classes. """ +# System modules +import typing + +# Local modules +from CHAP.common.models.map import DetectorConfig from CHAP.common.models.common import ( - BinarizeConfig, ImageProcessorConfig, UnstructuredToStructuredConfig, ) + +DetectorConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index a5991aa..68237a9 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -7,7 +7,6 @@ # System modules from copy import deepcopy import os -import typing from typing import ( Dict, Optional, @@ -950,9 +949,6 @@ def _create_figure(self, image, animated=False): return fig, plt -DetectorConfig.model_rebuild(_types_namespace=vars(typing)) - - class MapProcessor(Processor): """A Processor that takes a map configuration and returns a NeXus style diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 35f4c24..356e0c2 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -35,31 +35,12 @@ # Local modules from CHAP.edd.models import ( DiffractionVolumeLengthConfig, + MaterialConfig, MCACalibrationConfig, StrainAnalysisConfig, ) -#DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) -#MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) -#StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) -#from CHAP.edd.processor import ( -# DiffractionVolumeLengthProcessor, -# LatticeParameterRefinementProcessor, -# HKLProcessor, -# MCAEnergyCalibrationProcessor, -# MCATthCalibrationProcessor, -# ReducedDataProcessor, -# StrainAnalysisProcessor, -#) -#from CHAP.edd.reader import ( -# EddMapReader, -# EddMPIMapReader, -# ScanToMapReader, -# SetupNXdataReader, -# UpdateNXdataReader, -# NXdataSliceReader, -# SliceNXdataReader, -#) -#from CHAP.edd.writer import ( -# StrainAnalysisUpdateWriter, -#) +DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) +MaterialConfig.model_rebuild(_types_namespace=vars(typing)) +MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) +StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index a76dde6..dc0467c 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -5,7 +5,7 @@ # System modules from copy import deepcopy import os -import typing +#import typing from typing import ( Literal, Optional, @@ -234,7 +234,7 @@ def validate_materialconfig_after(self): # Detector configuration classes -_FitConfig.model_rebuild(_types_namespace=vars(typing)) +#_FitConfig.model_rebuild(_types_namespace=vars(typing)) class MCADetectorCalibration(Detector, _FitConfig): @@ -652,7 +652,7 @@ def validate_diffractionvolumelengthconfig_after(self): return self -MaterialConfig.model_rebuild(_types_namespace=vars(typing)) +#MaterialConfig.model_rebuild(_types_namespace=vars(typing)) class MCACalibrationConfig(CHAPBaseModel): diff --git a/CHAP/foxden/__init__.py b/CHAP/foxden/__init__.py index a17a066..a56fd1a 100755 --- a/CHAP/foxden/__init__.py +++ b/CHAP/foxden/__init__.py @@ -25,19 +25,10 @@ Writers unique to the FOXDEN pipeline items. """ -#from CHAP.foxden.processor import ( -## FoxdenMetadataProcessor, -## FoxdenProvenanceProcessor, -# ProvenanceFileProcessor, -#) -#from CHAP.foxden.reader import ( -# FoxdenDataDiscoveryReader, -# FoxdenMetadataReader, -# FoxdenProvenanceReader, -# FoxdenSpecScansReader, -#) -#from CHAP.foxden.writer import ( -# FoxdenDoiWriter, -# FoxdenMetadataWriter, -# FoxdenProvenanceWriter, -#) +# System modules +import typing + +# Local modules +from CHAP.foxden.models import FoxdenRequestConfig + +FoxdenRequestConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/foxden/reader.py b/CHAP/foxden/reader.py index 3011871..91e6e98 100755 --- a/CHAP/foxden/reader.py +++ b/CHAP/foxden/reader.py @@ -7,7 +7,6 @@ # System modules import json -import typing from typing import Optional # Third party modules @@ -23,9 +22,6 @@ from CHAP.processor import Processor -FoxdenRequestConfig.model_rebuild(_types_namespace=vars(typing)) - - class FoxdenDataDiscoveryReader(PipelineItem): """Reader for the `FOXDEN `__ diff --git a/CHAP/giwaxs/__init__.py b/CHAP/giwaxs/__init__.py index 7f524f3..ad38184 100755 --- a/CHAP/giwaxs/__init__.py +++ b/CHAP/giwaxs/__init__.py @@ -24,10 +24,3 @@ Writers unique to the GIWAXS workflow. """ -##from CHAP.giwaxs.models import PyfaiIntegrationConfig -#from CHAP.giwaxs.processor import ( -# GiwaxsConversionProcessor, -# PyfaiIntegrationProcessor, -#) -## from CHAP.giwaxs.reader import -## from CHAP.giwaxs.writer import diff --git a/CHAP/hdrm/__init__.py b/CHAP/hdrm/__init__.py index b267c53..9e43a16 100755 --- a/CHAP/hdrm/__init__.py +++ b/CHAP/hdrm/__init__.py @@ -2,9 +2,3 @@ processing workflows. """ -#from CHAP.hdrm.processor import ( -# HdrmOrmfinderProcessor, -# HdrmPeakfinderProcessor, -#) -## from CHAP.hdrm.reader import -## from CHAP.hdrm.writer import diff --git a/CHAP/inference/__init__.py b/CHAP/inference/__init__.py index 92b9cf3..c21cf56 100755 --- a/CHAP/inference/__init__.py +++ b/CHAP/inference/__init__.py @@ -2,6 +2,3 @@ [TFaaS inference server](https://github.com/vkuznet/TFaaS/). """ -#from CHAP.inference.processor import TFaaSImageProcessor -## from CHAP.inference.reader import -## from CHAP.inference.writer import diff --git a/CHAP/pipeline.py b/CHAP/pipeline.py index ba3ef87..ce854e1 100755 --- a/CHAP/pipeline.py +++ b/CHAP/pipeline.py @@ -15,7 +15,6 @@ # Third party modules from pydantic import ( -# ConfigDict, Field, # FilePath, PrivateAttr, @@ -68,8 +67,6 @@ class PipelineItem(RunConfig): _status: Literal[ 'read', 'write_pending', 'written'] = PrivateAttr(default=None) - #FIX model_config = ConfigDict(arbitrary_types_allowed=True) - @model_validator(mode='after') def validate_pipelineitem_after(self): """Validate the `PipelineItem` configuration. @@ -496,8 +493,6 @@ class Pipeline(CHAPBaseModel): # default={'application': 'CHAP', 'user_metadata': {}}) # _provenance: dict = PrivateAttr(default={}) - #FIX model_config = ConfigDict(arbitrary_types_allowed=True) - @model_validator(mode='after') def validate_pipeline_after(self): """Validate the `Pipeline` configuration and initialize and diff --git a/CHAP/runner.py b/CHAP/runner.py index 2fac58b..b12c1e8 100755 --- a/CHAP/runner.py +++ b/CHAP/runner.py @@ -333,7 +333,8 @@ def run( try: module = getattr(module_name, cls_name) except: - if (cls_name.endswith('Processor') + if ((cls_name.endswith('Processor') + || cls_name == TomoCHESSMapConverter) and split_name[-2] != 'processor'): mod_name += '.processor' if cls_name.endswith('Reader') and split_name[-2] != 'reader': diff --git a/CHAP/saxswaxs/__init__.py b/CHAP/saxswaxs/__init__.py index 15cd819..6ecede4 100755 --- a/CHAP/saxswaxs/__init__.py +++ b/CHAP/saxswaxs/__init__.py @@ -22,16 +22,3 @@ Writers unique to the SAXSWAXS workflow. """ -#from CHAP.saxswaxs.processor import ( -# CfProcessor, -# FluxCorrectionProcessor, -# FluxAbsorptionCorrectionProcessor, -# FluxAbsorptionBackgroundCorrectionProcessor, -# PyfaiIntegrationProcessor, -# SetupResultsProcessor, -# SetupProcessor, -# UnstructuredToStructuredProcessor, -# UpdateValuesProcessor, -#) -## from CHAP.saxswaxs.reader import () -## from CHAP.saxswaxs.writer import () diff --git a/CHAP/sin2psi/__init__.py b/CHAP/sin2psi/__init__.py index a5ee473..ddc596d 100755 --- a/CHAP/sin2psi/__init__.py +++ b/CHAP/sin2psi/__init__.py @@ -2,6 +2,3 @@ processing workflows. """ -# from CHAP.sin2psi.processor import -# from CHAP.sin2psi.reader import -# from CHAP.sin2psi.writer import diff --git a/CHAP/test/__init__.py b/CHAP/test/__init__.py index 5f3c337..08f9502 100644 --- a/CHAP/test/__init__.py +++ b/CHAP/test/__init__.py @@ -1,3 +1,2 @@ """This subpackage contains unit test routines.""" -#from CHAP.test.common import * diff --git a/CHAP/tomo/__init__.py b/CHAP/tomo/__init__.py index 9b3d70a..28956f3 100755 --- a/CHAP/tomo/__init__.py +++ b/CHAP/tomo/__init__.py @@ -24,17 +24,18 @@ Writers unique to the tomography workflow. """ -#from CHAP.tomo.processor import ( -# TomoMetadataProcessor, -# TomoCHESSMapConverter, -# TomoReduceProcessor, -# TomoFindCenterProcessor, -# TomoReconstructProcessor, -# TomoCombineProcessor, -# TomoSimFieldProcessor, -# TomoDarkFieldProcessor, -# TomoBrightFieldProcessor, -# TomoSpecProcessor, -#) -## from CHAP.tomo.reader import -#from CHAP.tomo.writer import TomoWriter +# System modules +import typing + +# Local modules +from CHAP.tomo.models import ( + TomoCombineConfig, + TomoFindCenterConfig, + TomoReconstructConfig, + TomoReduceConfig, +) + +TomoCombineConfig.model_rebuild(_types_namespace=vars(typing)) +TomoFindCenterConfig.model_rebuild(_types_namespace=vars(typing)) +TomoReconstructConfig.model_rebuild(_types_namespace=vars(typing)) +TomoReduceConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/tomo/models.py b/CHAP/tomo/models.py index 873f6b3..3df8177 100755 --- a/CHAP/tomo/models.py +++ b/CHAP/tomo/models.py @@ -8,7 +8,6 @@ Optional, ) from pydantic import ( -# ConfigDict, conint, conlist, confloat, @@ -230,5 +229,3 @@ class TomoSimConfig(CHAPBaseModel): beam_intensity: Optional[confloat(gt=0, allow_inf_nan=False)] = 1.e9 background_intensity: Optional[confloat(gt=0, allow_inf_nan=False)] = 20 slit_size: Optional[confloat(gt=0, allow_inf_nan=False)] = 1.0 - - #FIX model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/CHAP/tomo/processor.py b/CHAP/tomo/processor.py index 2792e9d..18993aa 100755 --- a/CHAP/tomo/processor.py +++ b/CHAP/tomo/processor.py @@ -16,7 +16,6 @@ import re import sys from time import time -import typing from typing import ( Annotated, Optional, @@ -27,7 +26,6 @@ from json import loads import numpy as np from pydantic import ( -# ConfigDict, Field, PrivateAttr, SkipValidation, @@ -944,9 +942,6 @@ def __exit__(self, exc_type, exc_value, traceback): set_num_threads(self._num_proc_org) -TomoReduceConfig.model_rebuild(_types_namespace=vars(typing)) - - class TomoReduceProcessor(Processor): """A processor to reduce a set of raw tomographic images returning a NeXus style @@ -1801,8 +1796,6 @@ class TomoFindCenterGui(Processor): _exclude = {'tk_root'} - #FIX model_config = ConfigDict(arbitrary_types_allowed=True) - @property def center_offsets(self): """Return the selected centers at the specified or selected diff --git a/CHAP/utils/__init__.py b/CHAP/utils/__init__.py index 1196248..b29acf9 100755 --- a/CHAP/utils/__init__.py +++ b/CHAP/utils/__init__.py @@ -27,4 +27,3 @@ as input. """ -#from CHAP.utils.fit import FitProcessor From 9be6c0c07612a792a34982727878eecb7f856b67 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 17:56:52 -0400 Subject: [PATCH 22/28] build: attempt 15a to avoid Pydantic github error --- CHAP/edd/models.py | 4 ++-- CHAP/runner.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index dc0467c..200591e 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -557,7 +557,7 @@ class MCADetectorConfig(_FitConfig): 'calibration', 'diffractionvolumelength', 'strainanalysis'] detectors: Optional[conlist(min_length=1, item_type=MCADetector)] = [] - _exclude = set(vars(_FitConfig()).keys()) +# _exclude = set(vars(_FitConfig()).keys()) @model_validator(mode='before') @classmethod @@ -637,7 +637,7 @@ class DiffractionVolumeLengthConfig(_FitConfig): sample_thickness: Optional[confloat(gt=0, allow_inf_nan=False)] = None sigma_to_dvl_factor: Optional[Literal[2.0, 3.5, 4.0]] = 3.5 - _exclude = set(vars(_FitConfig()).keys()) +# _exclude = set(vars(_FitConfig()).keys()) @model_validator(mode='after') def validate_diffractionvolumelengthconfig_after(self): diff --git a/CHAP/runner.py b/CHAP/runner.py index b12c1e8..9e191d1 100755 --- a/CHAP/runner.py +++ b/CHAP/runner.py @@ -334,7 +334,7 @@ def run( module = getattr(module_name, cls_name) except: if ((cls_name.endswith('Processor') - || cls_name == TomoCHESSMapConverter) + or cls_name == 'TomoCHESSMapConverter') and split_name[-2] != 'processor'): mod_name += '.processor' if cls_name.endswith('Reader') and split_name[-2] != 'reader': From 5707fb6fc37c5bfec6e4545a0da3ae157f0919b5 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 18:06:42 -0400 Subject: [PATCH 23/28] build: attempt 15b to avoid Pydantic github error --- CHAP/edd/__init__.py | 2 -- CHAP/edd/models.py | 6 +++--- CHAP/reader.py | 6 +++--- CHAP/writer.py | 6 +++--- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 356e0c2..1817207 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -35,12 +35,10 @@ # Local modules from CHAP.edd.models import ( DiffractionVolumeLengthConfig, - MaterialConfig, MCACalibrationConfig, StrainAnalysisConfig, ) DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) -MaterialConfig.model_rebuild(_types_namespace=vars(typing)) MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index 200591e..dec2466 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -232,6 +232,9 @@ def validate_materialconfig_after(self): return self +MaterialConfig.model_rebuild(_types_namespace=vars(typing)) + + # Detector configuration classes #_FitConfig.model_rebuild(_types_namespace=vars(typing)) @@ -652,9 +655,6 @@ def validate_diffractionvolumelengthconfig_after(self): return self -#MaterialConfig.model_rebuild(_types_namespace=vars(typing)) - - class MCACalibrationConfig(CHAPBaseModel): """Base class configuration for energy and 2&theta calibration processors. diff --git a/CHAP/reader.py b/CHAP/reader.py index c0946da..488a9c4 100755 --- a/CHAP/reader.py +++ b/CHAP/reader.py @@ -81,7 +81,7 @@ def read(self): return data -class OptionParser(): +class _OptionParser(): """User based option parser.""" def __init__(self): @@ -97,11 +97,11 @@ def __init__(self): dest='log_level', default='INFO', help='logging level') -def main(opt_parser=OptionParser): +def main(opt_parser=_OptionParser): """Main function. :param opt_parser: User based option parser. - :type opt_parser: OptionParser + :type opt_parser: CHAP.reader._OptionParser """ optmgr = opt_parser() opts = optmgr.parser.parse_args() diff --git a/CHAP/writer.py b/CHAP/writer.py index 25942e6..b4b5b88 100755 --- a/CHAP/writer.py +++ b/CHAP/writer.py @@ -101,7 +101,7 @@ def write(self, data): # add a sort of modification flag later -class OptionParser(): +class _OptionParser(): """User based option parser.""" def __init__(self): @@ -120,11 +120,11 @@ def __init__(self): dest='log_level', default='INFO', help='logging level') -def main(opt_parser=OptionParser): +def main(opt_parser=_OptionParser): """Main function. :param opt_parser: User based option parser. - :type opt_parser: OptionParser + :type opt_parser: CHAP.writer._OptionParser """ optmgr = opt_parser() opts = optmgr.parser.parse_args() From 61e1e24e203abf3f4eddd24a80cdfe51833afbe1 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 18:16:17 -0400 Subject: [PATCH 24/28] build: attempt 15c to avoid Pydantic github error --- CHAP/common/models/integration.py | 8 ++++---- CHAP/edd/models.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHAP/common/models/integration.py b/CHAP/common/models/integration.py index 7ae6571..fd88bb4 100755 --- a/CHAP/common/models/integration.py +++ b/CHAP/common/models/integration.py @@ -196,7 +196,7 @@ def validate_ais(cls, ais): return ais -class IntegrateConfig(CHAPBaseModel): +class _IntegrateConfig(CHAPBaseModel): """Class with the input parameters to perform various integrations with `pyFAI `__. @@ -219,7 +219,7 @@ class IntegrateConfig(CHAPBaseModel): attrs: Optional[dict] = {} -class Integrate1dConfig(IntegrateConfig): +class Integrate1dConfig(_IntegrateConfig): """Class with the input parameters to perform 1D azimuthal integration with `pyFAI `__. @@ -242,7 +242,7 @@ class Integrate1dConfig(IntegrateConfig): npt: Optional[conint(gt=0)] = 1800 -class Integrate2dConfig(IntegrateConfig): +class Integrate2dConfig(_IntegrateConfig): """Class with the input parameters to perform 2D azimuthal (cake) integration with `pyFAI `__. @@ -264,7 +264,7 @@ class Integrate2dConfig(IntegrateConfig): npt_rad: Optional[conint(gt=0)] = 1800 -class IntegrateRadialConfig(IntegrateConfig, MultiGeometryConfig): +class IntegrateRadialConfig(_IntegrateConfig, MultiGeometryConfig): """Class with the input parameters to perform radial integration with `pyFAI `__. diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index dec2466..fad1de9 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -5,7 +5,7 @@ # System modules from copy import deepcopy import os -#import typing +import typing from typing import ( Literal, Optional, From 55854a8488d29a6e67067e4060e89a6817003455 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 18:21:16 -0400 Subject: [PATCH 25/28] build: attempt 15d to avoid Pydantic github error --- CHAP/edd/models.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index fad1de9..aefdd3c 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -232,14 +232,12 @@ def validate_materialconfig_after(self): return self +#_FitConfig.model_rebuild(_types_namespace=vars(typing)) MaterialConfig.model_rebuild(_types_namespace=vars(typing)) # Detector configuration classes -#_FitConfig.model_rebuild(_types_namespace=vars(typing)) - - class MCADetectorCalibration(Detector, _FitConfig): """Class representing the configuration for a single MCA detector element to perform detector calibration. @@ -560,7 +558,7 @@ class MCADetectorConfig(_FitConfig): 'calibration', 'diffractionvolumelength', 'strainanalysis'] detectors: Optional[conlist(min_length=1, item_type=MCADetector)] = [] -# _exclude = set(vars(_FitConfig()).keys()) + _exclude = set(vars(_FitConfig()).keys()) @model_validator(mode='before') @classmethod @@ -640,7 +638,7 @@ class DiffractionVolumeLengthConfig(_FitConfig): sample_thickness: Optional[confloat(gt=0, allow_inf_nan=False)] = None sigma_to_dvl_factor: Optional[Literal[2.0, 3.5, 4.0]] = 3.5 -# _exclude = set(vars(_FitConfig()).keys()) + _exclude = set(vars(_FitConfig()).keys()) @model_validator(mode='after') def validate_diffractionvolumelengthconfig_after(self): From 7ef0bad3ff5c735645cc5222dec170fbe345beac Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 18:34:57 -0400 Subject: [PATCH 26/28] build: attempt 16 to avoid Pydantic github error --- CHAP/common/models/__init__.py | 7 +++---- CHAP/edd/__init__.py | 3 +++ CHAP/edd/models.py | 14 ++++++++++---- CHAP/foxden/__init__.py | 3 +++ CHAP/tomo/__init__.py | 3 +++ 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CHAP/common/models/__init__.py b/CHAP/common/models/__init__.py index 7c2b873..c0dd629 100755 --- a/CHAP/common/models/__init__.py +++ b/CHAP/common/models/__init__.py @@ -17,9 +17,8 @@ # Local modules from CHAP.common.models.map import DetectorConfig -from CHAP.common.models.common import ( - ImageProcessorConfig, - UnstructuredToStructuredConfig, -) +# Avoid Pydantic "Class not fully defined" in sphinx autodoc as a +# result of lazy importing by using DetectorConfig within a default +# value of a pydantic instance variable DetectorConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/edd/__init__.py b/CHAP/edd/__init__.py index 1817207..2ae96ce 100755 --- a/CHAP/edd/__init__.py +++ b/CHAP/edd/__init__.py @@ -39,6 +39,9 @@ StrainAnalysisConfig, ) +# Avoid Pydantic "Class not fully defined" in sphinx autodoc as a +# result of lazy importing by using any of these within a default +# value of a pydantic instance variable DiffractionVolumeLengthConfig.model_rebuild(_types_namespace=vars(typing)) MCACalibrationConfig.model_rebuild(_types_namespace=vars(typing)) StrainAnalysisConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/edd/models.py b/CHAP/edd/models.py index aefdd3c..d224a69 100755 --- a/CHAP/edd/models.py +++ b/CHAP/edd/models.py @@ -232,12 +232,13 @@ def validate_materialconfig_after(self): return self -#_FitConfig.model_rebuild(_types_namespace=vars(typing)) -MaterialConfig.model_rebuild(_types_namespace=vars(typing)) - - # Detector configuration classes +# Avoid Pydantic "Class not fully defined" in sphinx autodoc as a +# result of lazy importing by using in an _exclude pydantic instance +# variable +_FitConfig.model_rebuild(_types_namespace=vars(typing)) + class MCADetectorCalibration(Detector, _FitConfig): """Class representing the configuration for a single MCA detector element to perform detector calibration. @@ -653,6 +654,11 @@ def validate_diffractionvolumelengthconfig_after(self): return self +# Avoid Pydantic "Class not fully defined" in sphinx autodoc as a +# result of lazy importing by using MaterialConfig within a default +# value of a pydantic instance variable +MaterialConfig.model_rebuild(_types_namespace=vars(typing)) + class MCACalibrationConfig(CHAPBaseModel): """Base class configuration for energy and 2&theta calibration processors. diff --git a/CHAP/foxden/__init__.py b/CHAP/foxden/__init__.py index a56fd1a..1af2f02 100755 --- a/CHAP/foxden/__init__.py +++ b/CHAP/foxden/__init__.py @@ -31,4 +31,7 @@ # Local modules from CHAP.foxden.models import FoxdenRequestConfig +# Avoid Pydantic "Class not fully defined" in sphinx autodoc as a +# result of lazy importing by using FoxdenRequestConfig within a +# default value of a pydantic instance variable FoxdenRequestConfig.model_rebuild(_types_namespace=vars(typing)) diff --git a/CHAP/tomo/__init__.py b/CHAP/tomo/__init__.py index 28956f3..c8cb415 100755 --- a/CHAP/tomo/__init__.py +++ b/CHAP/tomo/__init__.py @@ -35,6 +35,9 @@ TomoReduceConfig, ) +# Avoid Pydantic "Class not fully defined" in sphinx autodoc as a +# result of lazy importing by using any of these within a default +# value of a pydantic instance variable TomoCombineConfig.model_rebuild(_types_namespace=vars(typing)) TomoFindCenterConfig.model_rebuild(_types_namespace=vars(typing)) TomoReconstructConfig.model_rebuild(_types_namespace=vars(typing)) From 6e9d35499092007a2b343c43987465d40ced3c57 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 19:19:33 -0400 Subject: [PATCH 27/28] build: attempt 17 to avoid Pydantic github error --- CHAP/edd/processor.py | 18 +++++++++--------- examples/tomo/pipeline_id1a3_pyramid_sim.yaml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHAP/edd/processor.py b/CHAP/edd/processor.py index 050c9df..2309ff7 100755 --- a/CHAP/edd/processor.py +++ b/CHAP/edd/processor.py @@ -44,7 +44,7 @@ # 0, 2, 3, 5, 6, 7, 8, 10, 13, 14, 16, 17, 18, 19, 21, 22 -class BaseEddProcessor(Processor): +class _BaseEddProcessor(Processor): """Base processor for the EDD processors. :ivar save_figures: Save .pngs of plots for checking inputs and @@ -313,7 +313,7 @@ def _subtract_baselines(self): mean_data -= baseline -class BaseStrainProcessor(BaseEddProcessor): +class _BaseStrainProcessor(_BaseEddProcessor): """Base processor for :class:`~CHAP.edd.processor.LatticeParameterRefinementProcessor` and :class:`~CHAP.edd.processor.StrainAnalysisProcessor`. @@ -472,7 +472,7 @@ def _setup_detector_data(self, nxobject, **kwargs): f'mean_data shape: {np.asarray(self._mean_data).shape}') -class DiffractionVolumeLengthProcessor(BaseEddProcessor): +class DiffractionVolumeLengthProcessor(_BaseEddProcessor): """A Processor using a steel foil raster scan to calculate the diffraction volume length for an EDD setup. @@ -807,7 +807,7 @@ def _measure_dvl(self, scanned_vals): schema='common.write.ImageWriter') -class HKLProcessor(BaseStrainProcessor): +class HKLProcessor(_BaseStrainProcessor): """Processor that plots the HKLs for a given material against the calibrated energy channels. @@ -892,7 +892,7 @@ def process(self, data): -class LatticeParameterRefinementProcessor(BaseStrainProcessor): +class LatticeParameterRefinementProcessor(_BaseStrainProcessor): """Processor to get a refined estimate for a sample's lattice parameters. @@ -1154,7 +1154,7 @@ def _refine_lattice_parameters(self): # a_uniform, a_uniform, a_uniform, 90., 90., 90.] -class MCAEnergyCalibrationProcessor(BaseEddProcessor): +class MCAEnergyCalibrationProcessor(_BaseEddProcessor): """Processor to return parameters for linearly transforming MCA channel indices to energies (in keV). Procedure: provide a spectrum from the MCA element to be calibrated and the theoretical @@ -1712,7 +1712,7 @@ def select_peaks(): return buf, peak_indices -class MCATthCalibrationProcessor(BaseEddProcessor): +class MCATthCalibrationProcessor(_BaseEddProcessor): """Processor to calibrate the 2&theta angle and fine tune the energy calibration coefficients for an EDD experimental setup. @@ -2351,7 +2351,7 @@ def _select_tth_init(self): f'{detector.tth_initial_guess}') -class ReducedDataProcessor(BaseStrainProcessor): +class ReducedDataProcessor(_BaseStrainProcessor): """Processor that takes a map of MCA data and returns a map of reduced data. """ @@ -2518,7 +2518,7 @@ def _linkdims( nxgroup.attrs['unstructured_axes'] = unstructured_axes -class StrainAnalysisProcessor(BaseStrainProcessor): +class StrainAnalysisProcessor(_BaseStrainProcessor): """Processor that takes a map of MCA data and returns a map of sample strains. diff --git a/examples/tomo/pipeline_id1a3_pyramid_sim.yaml b/examples/tomo/pipeline_id1a3_pyramid_sim.yaml index 0623176..799e2a9 100644 --- a/examples/tomo/pipeline_id1a3_pyramid_sim.yaml +++ b/examples/tomo/pipeline_id1a3_pyramid_sim.yaml @@ -3,7 +3,7 @@ config: inputdir: config outputdir: raw/hollow_pyramid interactive: true - log_level: error + log_level: info profile: false pipeline: From 7a052a51b30d4d562d2edde032dc434d1ebf9547 Mon Sep 17 00:00:00 2001 From: Rolf Verberg Date: Mon, 27 Apr 2026 19:29:39 -0400 Subject: [PATCH 28/28] style: removed unused typing.Dict import --- CHAP/common/processor.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHAP/common/processor.py b/CHAP/common/processor.py index 68237a9..0d198c1 100755 --- a/CHAP/common/processor.py +++ b/CHAP/common/processor.py @@ -7,10 +7,7 @@ # System modules from copy import deepcopy import os -from typing import ( - Dict, - Optional, -) +from typing import Optional # Third party modules import numpy as np