diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 0000000..94e556b --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,44 @@ +name: Build, Test, and Upload Python Package + +on: + push: + tags: + - "v*.*.*" + + workflow_dispatch: + +permissions: + contents: read + +jobs: + # test: + # uses: ./.github/workflows/ubuntu-python-package.yml # use the callable tests job to run tests + + deploy: + + runs-on: ubuntu-latest + + # needs: [test] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "3.11" + + - name: Install dependencies + run: | + sudo apt-get update + python -m pip install --upgrade pip + + - name: Publish to PyPI + run: | + python -m venv venv + . ./venv/bin/activate + pip install -U twine build + python -m build . + python -m twine upload --repository pypi --username __token__ --password ${{ secrets.PYPI }} dist/* + env: + PYPI: ${{ secrets.PYPI }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d63eb8..84ff9d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +### Version 0.0.4 (23-04-2024) +- Automatic PyPi deployment + ### Version 0.0.3 (15-04-2024) - Initial release \ No newline at end of file diff --git a/LICENSE b/LICENSE index 94b1433..03b87d3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Julia Pfitzer +Copyright (c) 2023 jupfi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f164a0b..db41061 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,16 @@ Ideally you should install the module in a virtual environment. You can create a python -m venv nqrduck ``` -You can install this module and the dependencies by running the following command in the terminal: +You can install this module and the dependencies by running the following command in the terminal after cloning the repositor and navigating to the module directory: ```bash pip install . ``` +Alternatively you can install the module via the PyPi package manager by running the following command in the terminal: +```bash +pip install nqrduck-spectrometer-limenqr +``` + ## Usage The module is used together with the NQRduck [pulseprogrammer](htpps://github.com/nqrduck-pulseprogrammer) module. diff --git a/pyproject.toml b/pyproject.toml index 13f1f7d..57831ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,9 +7,9 @@ allow-direct-references = true [project] name = "nqrduck-spectrometer-limenqr" -version = "0.0.3" +version = "0.0.4" authors = [ - { name="Julia Pfitzer", email="git@jupfi.me" }, + { name="jupfi", email="support@nqrduck.cool" }, ] description = "A submodule for the nqrduck-spectrometer module which implements the functionality for the LimeNQR spectrometer." @@ -20,11 +20,11 @@ requires-python = ">=3.8" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", + "Operating System :: POSIX :: Linux", ] dependencies = [ - "limedriver @ git+https://github.com/nqrduck/LimeDriverBindings", + "limedriver", "nqrduck-spectrometer", "pyqt6", "h5py", @@ -32,4 +32,29 @@ dependencies = [ ] [project.entry-points."nqrduck"] -"nqrduck-spectrometer-limenqr" = "nqrduck_spectrometer_limenqr.limenqr:LimeNQR" \ No newline at end of file +"nqrduck-spectrometer-limenqr" = "nqrduck_spectrometer_limenqr.limenqr:LimeNQR" + +[tool.ruff] +exclude = [ + "widget.py", +] + +[tool.ruff.lint] +extend-select = [ + "UP", # pyupgrade + "D", # pydocstyle +] + +[tool.ruff.lint.per-file-ignores] +"__init__.py" = ["F401"] + +[tool.ruff.lint.pydocstyle] +convention = "google" + +[project.urls] +"Homepage" = "https://nqrduck.cool" +"Bug Tracker" = "https://github.com/nqrduck/nqrduck-spectrometer-limenqr/issues" +"Source Code" = "https://github.com/nqrduck/nqrduck-spectrometer-limenqr" + +[tool.hatch.build.targets.wheel] +packages = ["src/nqrduck_spectrometer_limenqr"] \ No newline at end of file diff --git a/src/nqrduck_spectrometer_limenqr/controller.py b/src/nqrduck_spectrometer_limenqr/controller.py index 2639aae..d3c4b9c 100644 --- a/src/nqrduck_spectrometer_limenqr/controller.py +++ b/src/nqrduck_spectrometer_limenqr/controller.py @@ -7,7 +7,6 @@ from decimal import Decimal from limedriver.binding import PyLimeConfig from limedriver.hdf_reader import HDF -from nqrduck.module.module_controller import ModuleController from nqrduck_spectrometer.base_spectrometer_controller import BaseSpectrometerController from nqrduck_spectrometer.measurement import Measurement from nqrduck_spectrometer.pulseparameters import TXPulse, RXReadout @@ -166,7 +165,8 @@ class LimeNQRController(BaseSpectrometerController): rx_stop (float): The stop time of the RX event in µs Returns: - list: The indices of the evaluation range in the measurement data""" + list: The indices of the evaluation range in the measurement data + """ return np.where((hdf.tdx > rx_begin) & (hdf.tdx < rx_stop))[0] def extract_measurement_data(self, lime, hdf, indices): @@ -190,7 +190,8 @@ class LimeNQRController(BaseSpectrometerController): """This method returns the FFT shift value from the settings. Returns: - int: The FFT shift value""" + int: The FFT shift value + """ fft_shift_enabled = self.module.model.get_setting_by_name(self.module.model.FFT_SHIFT).value return self.module.model.if_frequency if fft_shift_enabled else 0 @@ -237,8 +238,8 @@ class LimeNQRController(BaseSpectrometerController): lime (PyLimeConfig): The PyLimeConfig object that is used to communicate with the pulseN driver Returns: - lime: The updated limr object""" - + lime: The updated limr object + """ logger.debug( "Updating settings for spectrometer: %s for measurement", self.module.model.name, @@ -352,13 +353,12 @@ class LimeNQRController(BaseSpectrometerController): return lime def get_number_of_pulses(self): - """ This method calculates the number of pulses in the pulse sequence before the LimeDriverBinding is initialized. + """This method calculates the number of pulses in the pulse sequence before the LimeDriverBinding is initialized. This makes sure it"s initialized with the correct size of the pulse lists. Returns: int: The number of pulses in the pulse sequence """ - events = self.fetch_pulse_sequence_events() num_pulses = 0 for event in events: @@ -390,7 +390,8 @@ class LimeNQRController(BaseSpectrometerController): """This method checks if a parameter a pulse with a transmit pulse shape (amplitude nonzero) Args: - parameter (Parameter): The parameter to check""" + parameter (Parameter): The parameter to check + """ return (parameter.name == self.module.model.TX and parameter.get_option_by_name(TXPulse.RELATIVE_AMPLITUDE).value > 0) @@ -402,7 +403,8 @@ class LimeNQRController(BaseSpectrometerController): parameter (Parameter): The parameter that contains the pulse shape and amplitude Returns: - tuple: A tuple containing the pulse shape and the pulse amplitude""" + tuple: A tuple containing the pulse shape and the pulse amplitude + """ pulse_shape = parameter.get_option_by_name(TXPulse.TX_PULSE_SHAPE).value pulse_amplitude = abs(pulse_shape.get_pulse_amplitude(event.duration)) * \ parameter.get_option_by_name(TXPulse.RELATIVE_AMPLITUDE).value @@ -433,7 +435,8 @@ class LimeNQRController(BaseSpectrometerController): """This method unwraps the phase of the pulse. Args: - phase (float): The phase of the pulse""" + phase (float): The phase of the pulse + """ return (np.unwrap(phase) + 2 * np.pi) % (2 * np.pi) def initialize_pulse_lists(self, lime, pulse_amplitude, pulse_shape, modulated_phase): @@ -624,7 +627,8 @@ class LimeNQRController(BaseSpectrometerController): """This method sets the number of averages for the spectrometer. Args: - value (int): The number of averages""" + value (int): The number of averages + """ logger.debug("Setting averages to: %s", value) try: self.module.model.averages = int(value)