diff --git a/src/pyFAI/app/average.py b/src/pyFAI/app/average.py index f275b7995..9bafa99d8 100755 --- a/src/pyFAI/app/average.py +++ b/src/pyFAI/app/average.py @@ -33,7 +33,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "21/01/2020" +__date__ = "27/09/2024" __status__ = "production" import os @@ -47,10 +47,9 @@ except ImportError: logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) -import pyFAI.utils.shell -from pyFAI.utils import logging_utils -import pyFAI.utils.stringutil -from pyFAI import average +from ..utils import logging_utils, stringutil, shell +from .. import average +from .. import version as pyFAI_version, date as pyFAI_date def parse_algorithms(options): @@ -199,9 +198,13 @@ def show_info(self): self.__bar.display() -def main(): +def main(args=None): + """start the program + + :param args: list of arguments, i.e sys.argv[1:] + """ usage = "pyFAI-average [options] [options] -o output.edf file1.edf file2.edf ..." - version = "pyFAI-average version %s from %s" % (pyFAI.version, pyFAI.date) + version = "pyFAI-average version %s from %s" % (pyFAI_version, pyFAI_date) description = """ This tool can be used to average out a set of dark current images using mean or median filter (along the image stack). One can also reject outliers @@ -248,7 +251,7 @@ def main(): parser.add_argument("args", metavar='FILE', type=str, nargs='+', help="Files to be processed") - options = parser.parse_args() + options = parser.parse_args(args) # logging if options.verbose is True: diff --git a/src/pyFAI/app/benchmark.py b/src/pyFAI/app/benchmark.py index f98ec18c6..86aca2e91 100755 --- a/src/pyFAI/app/benchmark.py +++ b/src/pyFAI/app/benchmark.py @@ -32,9 +32,10 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "28/05/2024" +__date__ = "27/09/2024" __status__ = "development" +from argparse import ArgumentParser import logging try: logging.basicConfig(level=logging.WARNING, force=True) @@ -52,16 +53,15 @@ rconsole.spawn_server() except ImportError: logger.debug("No socket opened for debugging. Please install rfoo") -import pyFAI.benchmark +from .. import benchmark, version as pyFAI_version, date as pyFAI_date -def main(): - from argparse import ArgumentParser +def main(args=None): description = """Benchmark for Azimuthal integration """ epilog = """ """ usage = """benchmark [options] """ - version = "pyFAI benchmark version " + pyFAI.version + version = f"pyFAI benchmark version {pyFAI_version}" parser = ArgumentParser(usage=usage, description=description, epilog=epilog) parser.add_argument("-v", "--version", action='version', version=version) parser.add_argument("-d", "--debug", @@ -117,7 +117,7 @@ def main(): action="store_true", dest="all", default=False, help="Benchmark using all available methods and devices") - options = parser.parse_args() + options = parser.parse_args(args) if options.debug: pyFAI.logger.setLevel(logging.DEBUG) diff --git a/src/pyFAI/app/detector2nexus.py b/src/pyFAI/app/detector2nexus.py index 243f9d679..3e6672824 100755 --- a/src/pyFAI/app/detector2nexus.py +++ b/src/pyFAI/app/detector2nexus.py @@ -28,17 +28,14 @@ # THE SOFTWARE. """Converts a detector description into a NeXus detector usable by other pyFAI utilities""" -__author__ = "Jerome Kieffer" +__author__ = "Jérôme Kieffer" __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "21/05/2024" +__date__ = "27/09/2024" __status__ = "development" import sys -import numpy -import fabio -import pyFAI from argparse import ArgumentParser import logging logging.basicConfig(level=logging.INFO) @@ -48,11 +45,14 @@ import hdf5plugin # noqa except ImportError: logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) +import numpy +import fabio +from .. import version as pyFAI_version, date as pyFAI_date +from ..detectors import detector_factory - -def main(): +def main(args=None): usage = "detector2nexus [options] [options] -o nxs.h5" - version = "detector2nexus version %s from %s" % (pyFAI.version, pyFAI.date) + version = "detector2nexus version %s from %s" % (pyFAI_version, pyFAI_date) description = """ Convert a complex detector definition (multiple modules, possibly in 3D) into a single NeXus detector definition together with the mask (and much more in the future) @@ -94,19 +94,22 @@ def main(): # parser.add_argument("args", metavar='FILE', type=str, nargs='+', # help="Files to be processed") - argv = sys.argv + if args is None: + argv = sys.argv[1:] + else: + argv = args # hidden backward compatibility for -dx and -dy # A short option only expect a single char argv = ["-" + a if a.startswith("-dx") else a for a in argv] argv = ["-" + a if a.startswith("-dy") else a for a in argv] - options = parser.parse_args(args=argv[1:]) + options = parser.parse_args(args=argv) if options.verbose: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) - detector = pyFAI.detector_factory(options.detector) + detector = detector_factory(options.detector) if options.output: output = options.output else: diff --git a/src/pyFAI/app/diff_map.py b/src/pyFAI/app/diff_map.py index 975fbbb59..50d7a09fe 100755 --- a/src/pyFAI/app/diff_map.py +++ b/src/pyFAI/app/diff_map.py @@ -33,7 +33,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "14/03/2024" +__date__ = "27/09/2024" __satus__ = "Production" import sys @@ -46,18 +46,18 @@ except ImportError: logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) -from pyFAI.diffmap import DiffMap +from ..diffmap import DiffMap -def main(): +def main(args=None): dt = DiffMap() - options, config = dt.parse(with_config=True) + options, config = dt.parse(args, with_config=True) if options.gui: from silx.gui import qt - from pyFAI.gui.diffmap_widget import DiffMapWidget - from pyFAI.gui.ApplicationContext import ApplicationContext + from ..gui.diffmap_widget import DiffMapWidget + from ..gui.ApplicationContext import ApplicationContext settings = qt.QSettings(qt.QSettings.IniFormat, qt.QSettings.UserScope, "pyfai", diff --git a/src/pyFAI/app/diff_tomo.py b/src/pyFAI/app/diff_tomo.py index 55125bae1..16131cfd9 100755 --- a/src/pyFAI/app/diff_tomo.py +++ b/src/pyFAI/app/diff_tomo.py @@ -29,15 +29,17 @@ """CLI interface for diffraction tomography data reduction""" -__author__ = "Jerome Kieffer" +__author__ = "Jérôme Kieffer" __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "08/01/2021" +__date__ = "27/09/2024" __satus__ = "Production" import os import glob +from argparse import ArgumentParser +from urllib.parse import urlparse import logging logging.basicConfig(level=logging.INFO) logging.captureWarnings(True) @@ -47,11 +49,8 @@ except ImportError: logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) -from pyFAI import version as PyFAI_VERSION -from pyFAI import date as PyFAI_DATE -from pyFAI.diffmap import DiffMap -from argparse import ArgumentParser -from urllib.parse import urlparse +from .. import version as PyFAI_VERSION, date as PyFAI_DATE +from ..diffmap import DiffMap class DiffTomo(DiffMap): @@ -74,7 +73,7 @@ def __init__(self, nTrans=1, nRot=1, nDiff=1000): self.slow_motor_name = "rotation" self.fast_motor_name = "translation" - def parse(self, with_config=False): + def parse(self, args=None, with_config=False): """ parse options from command line """ @@ -137,7 +136,7 @@ def parse(self, with_config=False): parser.add_argument("-S", "--stats", dest="stats", action="store_true", help="show statistics at the end", default=False) - options = parser.parse_args() + options = parser.parse_args(args) args = options.args if options.verbose: @@ -202,9 +201,9 @@ def parse(self, with_config=False): return options -def main(): +def main(args=None): dt = DiffTomo() - dt.parse() + dt.parse(args) dt.setup_ai() dt.makeHDF5() dt.process() diff --git a/src/pyFAI/app/eiger_mask.py b/src/pyFAI/app/eiger_mask.py index b639e0d91..785349d7b 100755 --- a/src/pyFAI/app/eiger_mask.py +++ b/src/pyFAI/app/eiger_mask.py @@ -33,7 +33,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "05/09/2023" +__date__ = "27/09/2024" __satus__ = "development" import os @@ -49,7 +49,7 @@ logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) import fabio -import pyFAI +from .. import version as pyFAI_version, date as pyFAI_date try: import h5py @@ -72,9 +72,9 @@ def extract_mask(infile): return detectorSpecific["pixel_mask"].value -def main(): +def main(args=None): description = "A tool to extract the mask from an Eiger detector file." - version = "eiger-mask version %s from %s" % (pyFAI.version, pyFAI.date) + version = f"eiger-mask version {pyFAI_version} from {pyFAI_date}" epilog = None if h5py is None: epilog = "Python h5py module is missing. It has to be installed to use this application" @@ -82,7 +82,7 @@ def main(): parser.add_argument("-V", "--version", action='version', version=version) parser.add_argument('input_file', help='Input file. Must be an HDF5 file.') parser.add_argument('output_file', nargs="?", help='Output file. It can be an msk, tif, or an edf file.') - options = parser.parse_args() + options = parser.parse_args(args) if h5py is None: logger.error("Python h5py module is expected to use this script") diff --git a/src/pyFAI/app/integrate.py b/src/pyFAI/app/integrate.py index f2dca2851..9d2f291bf 100755 --- a/src/pyFAI/app/integrate.py +++ b/src/pyFAI/app/integrate.py @@ -29,11 +29,11 @@ """GUI tool for configuring azimuthal integration on series of files.""" -__author__ = "Jerome Kieffer" +__author__ = "Jérôme Kieffer" __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "13/03/2023" +__date__ = "27/09/2024" __satus__ = "production" import sys @@ -54,14 +54,11 @@ import fabio -import pyFAI.utils -import pyFAI.worker -import pyFAI.io -from pyFAI.io import DefaultAiWriter -from pyFAI.io import HDF5Writer -from pyFAI.utils.shell import ProgressBar -from pyFAI.utils import logging_utils -from pyFAI.utils import header_utils +from .. import utils, worker, io, version as pyFAI_version, date as pyFAI_date +from ..io import DefaultAiWriter, HDF5Writer +from ..utils.shell import ProgressBar +from ..utils import logging_utils, header_utils +from ..worker import Worker try: from rfoo.utils import rconsole @@ -73,12 +70,12 @@ def integrate_gui(options, args): from silx.gui import qt - from pyFAI.gui.IntegrationDialog import IntegrationDialog - from pyFAI.gui.IntegrationDialog import IntegrationProcess + from ..gui.IntegrationDialog import IntegrationDialog + from ..gui.IntegrationDialog import IntegrationProcess app = qt.QApplication([]) - from pyFAI.gui.ApplicationContext import ApplicationContext + from ..gui.ApplicationContext import ApplicationContext settings = qt.QSettings(qt.QSettings.IniFormat, qt.QSettings.UserScope, "pyfai", @@ -473,7 +470,7 @@ def frames(self): next_id += 1 -class MultiFileWriter(pyFAI.io.Writer): +class MultiFileWriter(io.Writer): """Broadcast writing to differnet files for each frames""" def __init__(self, output_path, mode=HDF5Writer.MODE_ERROR): @@ -611,7 +608,7 @@ def process(input_data, output, config, monitor_name, observer, write_mode=HDF5W # Create a null observer to avoid to deal with None observer = IntegrationObserver() - worker = pyFAI.worker.Worker() + worker = Worker() worker_config = config.copy() json_monitor_name = worker_config.pop("monitor_name", None) @@ -772,7 +769,7 @@ def _main(args): :rtype: int """ usage = "pyFAI-integrate [options] file1.edf file2.edf ..." - version = "pyFAI-integrate version %s from %s" % (pyFAI.version, pyFAI.date) + version = "pyFAI-integrate version %s from %s" % (pyFAI_version, pyFAI_date) description = """ PyFAI-integrate is a graphical interface (based on Python/Qt4) to perform azimuthal integration on a set of files. It exposes most of the important options available within pyFAI and allows you @@ -863,8 +860,7 @@ def _main(args): return result -def main(): - args = sys.argv[1:] +def main(args=None): result = _main(args) sys.exit(result) diff --git a/src/pyFAI/app/peakfinder.py b/src/pyFAI/app/peakfinder.py index 85b14d5ad..bc3f330ba 100644 --- a/src/pyFAI/app/peakfinder.py +++ b/src/pyFAI/app/peakfinder.py @@ -42,7 +42,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "21/05/2024" +__date__ = "27/09/2024" __status__ = "production" import os @@ -54,6 +54,8 @@ import gc from collections import OrderedDict, namedtuple import numexpr +from threading import Thread, Semaphore, Event +from queue import Queue, Empty import logging logging.basicConfig(level=logging.INFO) logging.captureWarnings(True) @@ -75,8 +77,6 @@ from ..opencl.peak_finder import OCL_PeakFinder from ..utils.shell import ProgressBar from ..io.spots import save_spots_nexus, save_spots_cxi -from threading import Thread, Semaphore, Event -from queue import Queue, Empty # Define few constants: EXIT_SUCCESS = 0 @@ -236,7 +236,7 @@ def expand_args(args): return new -def parse(): +def parse(args=None): epilog = "Current status of the program: " + __status__ parser = argparse.ArgumentParser(prog="peakfinder", description=__doc__, @@ -334,7 +334,7 @@ def parse(): group.add_argument("--device-type", type=str, default="all", help="device type like `cpu` or `gpu` or `acc`. Can help to select the proper device.") try: - args = parser.parse_args() + args = parser.parse_args(args) if args.debug: logger.setLevel(logging.DEBUG) @@ -491,8 +491,8 @@ def process(options): return EXIT_ARGUMENT_FAILURE if abort.is_set() else EXIT_SUCCESS -def main(): - options = parse() +def main(args=None): + options = parse(args) if options == EXIT_ARGUMENT_FAILURE: sys.exit(EXIT_ARGUMENT_FAILURE) res = process(options) diff --git a/src/pyFAI/app/pilx.py b/src/pyFAI/app/pilx.py index 1c273fd32..8b161dff0 100755 --- a/src/pyFAI/app/pilx.py +++ b/src/pyFAI/app/pilx.py @@ -32,7 +32,7 @@ __contact__ = "loic.huder@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "12/03/2024" +__date__ = "27/09/2024" __status__ = "development" from silx.gui import qt @@ -42,7 +42,7 @@ from ..gui.pilx.MainWindow import MainWindow -def main(): +def main(args=None): parser = argparse.ArgumentParser() parser.add_argument("filename") parser.add_argument("-d", "--data", dest="data_path", @@ -52,7 +52,7 @@ def main(): help="inner path to the Nexus process with the integrated Data", default="/entry_0000/pyFAI",) - options = parser.parse_args(sys.argv[1:]) + options = parser.parse_args(args) app = qt.QApplication([]) window = MainWindow() diff --git a/src/pyFAI/app/saxs.py b/src/pyFAI/app/saxs.py index 47ebaec88..fc59415e1 100755 --- a/src/pyFAI/app/saxs.py +++ b/src/pyFAI/app/saxs.py @@ -28,11 +28,11 @@ # THE SOFTWARE. # """Integrate 2D images into SAXS patterns. Also used in PDF measurements""" -__author__ = "Jerome Kieffer, Picca Frédéric-Emmanuel" +__author__ = "Jérôme Kieffer, Picca Frédéric-Emmanuel" __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "21/05/2024" +__date__ = "27/09/2024" __status__ = "production" import os @@ -49,17 +49,16 @@ logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) import fabio -from pyFAI import date, version as pyFAI_version -from pyFAI import units -from pyFAI import utils -from pyFAI.method_registry import IntegrationMethod -from pyFAI.azimuthalIntegrator import AzimuthalIntegrator + +from .. import date as pyFAI_date, version as pyFAI_version, units, utils +from ..method_registry import IntegrationMethod +from ..azimuthalIntegrator import AzimuthalIntegrator hc = units.hc -def main(): +def main(args=None): usage = "pyFAI-saxs [options] -n 1000 -p ponifile file1.edf file2.edf ..." - version = "PyFAI-saxs version %s from %s " % (pyFAI_version, date) + version = "PyFAI-saxs version %s from %s " % (pyFAI_version, pyFAI_date) description = """Azimuthal integration for SAXS users.""" epilog = """pyFAI-saxs is the SAXS script of pyFAI that allows data reduction (azimuthal integration) for Small Angle Scattering with output @@ -115,7 +114,7 @@ def main(): type=str, default=None, help="Integration method ") - options = parser.parse_args() + options = parser.parse_args(args) if len(options.args) < 1: logger.error("incorrect number of arguments") to_process = utils.expand_args(options.args) diff --git a/src/pyFAI/app/sparsify.py b/src/pyFAI/app/sparsify.py index 6b185298f..45ce3e7c3 100644 --- a/src/pyFAI/app/sparsify.py +++ b/src/pyFAI/app/sparsify.py @@ -42,7 +42,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "21/05/2024" +__date__ = "27/09/2024" __status__ = "production" import os @@ -244,7 +244,7 @@ def expand_args(args): return new -def parse(): +def parse(args=None): epilog = "Current status of the program: " + __status__ parser = argparse.ArgumentParser(prog="spasify-Bragg", description=__doc__, @@ -336,12 +336,12 @@ def parse(): group.add_argument("--device-type", type=str, default="all", help="device type like `cpu` or `gpu` or `acc`. Can help to select the proper device.") try: - args = parser.parse_args() + arguments = parser.parse_args(args=args) - if args.debug: + if arguments.debug: logger.setLevel(logging.DEBUG) - if len(args.IMAGE) == 0: + if len(arguments.IMAGE) == 0: raise argparse.ArgumentError(None, "No input file specified.") if ocl is None: raise RuntimeError("sparsify-Brgg requires _really_ a valide OpenCL environment. Please install pyopencl !") @@ -352,9 +352,9 @@ def parse(): return EXIT_ARGUMENT_FAILURE else: # the upper case IMAGE is used for the --help auto-documentation - args.images = expand_args(args.IMAGE) - args.images.sort() - return args + arguments.images = expand_args(arguments.IMAGE) + arguments.images.sort() + return arguments def process(options): @@ -488,8 +488,8 @@ def process(options): return EXIT_ARGUMENT_FAILURE if abort.is_set() else EXIT_SUCCESS -def main(): - options = parse() +def main(args=None): + options = parse(args) if options == EXIT_ARGUMENT_FAILURE: sys.exit(EXIT_ARGUMENT_FAILURE) res = process(options) diff --git a/src/pyFAI/app/waxs.py b/src/pyFAI/app/waxs.py index 2a812cc43..4ad3e4b19 100755 --- a/src/pyFAI/app/waxs.py +++ b/src/pyFAI/app/waxs.py @@ -33,7 +33,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "21/05/2024" +__date__ = "27/09/2024" __status__ = "production" import os @@ -50,18 +50,16 @@ logger.debug("Unable to load hdf5plugin, backtrace:", exc_info=True) import fabio -from pyFAI import date, version as pyFAI_version -from pyFAI import units -from pyFAI import utils -from pyFAI.average import average_dark -from pyFAI.azimuthalIntegrator import AzimuthalIntegrator -from pyFAI.method_registry import IntegrationMethod +from .. import date as pyFAI_date, version as pyFAI_version, units, utils +from ..average import average_dark +from ..azimuthalIntegrator import AzimuthalIntegrator +from ..method_registry import IntegrationMethod hc = units.hc -def main(): +def main(args=None): usage = "pyFAI-waxs [options] -p ponifile file1.edf file2.edf ..." - version = "pyFAI-waxs version %s from %s" % (pyFAI_version, date) + version = "pyFAI-waxs version %s from %s" % (pyFAI_version, pyFAI_date) description = "Azimuthal integration for powder diffraction." epilog = """pyFAI-waxs is the script of pyFAI that allows data reduction (azimuthal integration) for Wide Angle Scattering to produce X-Ray Powder @@ -128,7 +126,7 @@ def main(): default=False, action="store_true", help="Perform 2D integration in addition to 1D") - options = parser.parse_args() + options = parser.parse_args(args) if len(options.args) < 1: logger.error("incorrect number of arguments") diff --git a/src/pyFAI/diffmap.py b/src/pyFAI/diffmap.py index b423ef447..c0df58a6f 100644 --- a/src/pyFAI/diffmap.py +++ b/src/pyFAI/diffmap.py @@ -31,7 +31,7 @@ __contact__ = "Jerome.Kieffer@ESRF.eu" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "16/09/2024" +__date__ = "27/09/2024" __status__ = "development" __docformat__ = 'restructuredtext' @@ -143,7 +143,7 @@ def parse(self, sysargv=None, with_config=False): Parse options from command line in order to setup the object. Does not configure the worker, please use - :param sysargv: list of arguments passed on the command line (mostly for debug/test) + :param sysargv: list of arguments passed on the command line (mostly for debug/test), first element removed :param with_config: parse also the config (as another dict) and return (options, config) :return: options, a dictionary able to setup a DiffMapWidget """ diff --git a/src/pyFAI/test/test_scripts.py b/src/pyFAI/test/test_scripts.py index a06890391..cc1b4add4 100644 --- a/src/pyFAI/test/test_scripts.py +++ b/src/pyFAI/test/test_scripts.py @@ -32,7 +32,7 @@ __contact__ = "valentin.valls@esrf.fr" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__date__ = "16/10/2020" +__date__ = "27/09/2024" import sys import unittest @@ -78,14 +78,11 @@ def executeCommandLine(self, command_line, env): _logger.debug("%s", err) self.assertEqual(p.returncode, 0) - def executeAppHelp(self, script_name, module_name): - script = UtilsTest.script_path(script_name, module_name) + def executeAppHelp(self, script_name, module_name, function="main", help="--help"): + script = f"import {module_name}; {module_name}.{function}(['{help}'])" env = UtilsTest.get_test_env() - if script.endswith(".exe"): - command_line = [script] - else: - command_line = [sys.executable, script] - command_line.append("--help") + command_line = [sys.executable, "-c", script] + print(command_line) self.executeCommandLine(command_line, env) def testDetector2Nexus(self): @@ -109,9 +106,18 @@ def testPyfaiBenchmark(self): def testPyfaiIntegrate(self): self.executeAppHelp("pyFAI-integrate", "pyFAI.app.integrate") + def testPeakfinder(self): + self.executeAppHelp("peakfinder", "pyFAI.app.peakfinder") + + def testPilx(self): + self.executeAppHelp("pyFAI-diffmap-view", "pyFAI.app.pilx") + def testPyfaiSaxs(self): self.executeAppHelp("pyFAI-saxs", "pyFAI.app.saxs") + def testSparsify(self): + self.executeAppHelp("sparsify-Bragg", "pyFAI.app.sparsify") + def testPyfaiWaxs(self): self.executeAppHelp("pyFAI-waxs", "pyFAI.app.waxs")