qanary 0.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qanary-0.10.0/.gitattributes +34 -0
- qanary-0.10.0/.gitignore +89 -0
- qanary-0.10.0/.gitlab-ci.yml +209 -0
- qanary-0.10.0/.pre-commit-config.yaml +29 -0
- qanary-0.10.0/CHANGELOG.md +145 -0
- qanary-0.10.0/LICENSE +661 -0
- qanary-0.10.0/PKG-INFO +160 -0
- qanary-0.10.0/README.md +116 -0
- qanary-0.10.0/docs/source/_static/assets/qanary-icon.png +0 -0
- qanary-0.10.0/docs/source/_static/assets/qanary-logo.png +0 -0
- qanary-0.10.0/docs/source/_static/custom.css +54 -0
- qanary-0.10.0/docs/source/api/buffered/buffered_index.rst +76 -0
- qanary-0.10.0/docs/source/api/dataset.rst +8 -0
- qanary-0.10.0/docs/source/api/index.rst +18 -0
- qanary-0.10.0/docs/source/api/measure.rst +8 -0
- qanary-0.10.0/docs/source/api/parameters.rst +11 -0
- qanary-0.10.0/docs/source/api/sweep.rst +9 -0
- qanary-0.10.0/docs/source/changelog.md +6 -0
- qanary-0.10.0/docs/source/conf.py +142 -0
- qanary-0.10.0/docs/source/development.md +186 -0
- qanary-0.10.0/docs/source/index.md +51 -0
- qanary-0.10.0/docs/source/installation.md +54 -0
- qanary-0.10.0/docs/source/tutorials/buffered_basel_dac.md +41 -0
- qanary-0.10.0/docs/source/tutorials/buffered_basel_mfli.md +46 -0
- qanary-0.10.0/docs/source/tutorials/buffered_basel_uhfli.md +48 -0
- qanary-0.10.0/docs/source/tutorials/buffered_qdac_dmm.md +51 -0
- qanary-0.10.0/docs/source/tutorials/buffered_qdac_mfli.md +49 -0
- qanary-0.10.0/docs/source/tutorials/buffered_time_traces.md +57 -0
- qanary-0.10.0/docs/source/tutorials/buffered_transistor_mfli.md +37 -0
- qanary-0.10.0/docs/source/tutorials/buffered_transistor_uhfli.md +38 -0
- qanary-0.10.0/docs/source/tutorials/buffered_uhfli_sweeper.md +41 -0
- qanary-0.10.0/docs/source/tutorials/multi_channel_parameters.md +33 -0
- qanary-0.10.0/docs/source/tutorials/tutorials_index.md +43 -0
- qanary-0.10.0/docs/source/tutorials/virtual_gates.md +41 -0
- qanary-0.10.0/examples/basel_dac_sweep.py +197 -0
- qanary-0.10.0/examples/buffered_basel_transistor_test_mfli.py +208 -0
- qanary-0.10.0/examples/buffered_basel_transistor_test_uhfli.py +193 -0
- qanary-0.10.0/examples/buffered_basel_with_mfli.py +179 -0
- qanary-0.10.0/examples/buffered_basel_with_uhfli.py +180 -0
- qanary-0.10.0/examples/buffered_qdac_with_keysight_dmm.py +68 -0
- qanary-0.10.0/examples/buffered_uhfli_sweeps.py +122 -0
- qanary-0.10.0/examples/multi_channel_parameter_example.py +50 -0
- qanary-0.10.0/examples/qdac_dmm_mfli_example.py +74 -0
- qanary-0.10.0/examples/time_trace_lockin.py +223 -0
- qanary-0.10.0/examples/virtual_gate_parameter_example.py +139 -0
- qanary-0.10.0/gl-sast-report.json +3143 -0
- qanary-0.10.0/gl-secret-detection-report.json +50 -0
- qanary-0.10.0/pyproject.toml +156 -0
- qanary-0.10.0/release.env +2 -0
- qanary-0.10.0/src/qanary/__init__.py +76 -0
- qanary-0.10.0/src/qanary/buffered/__init__.py +0 -0
- qanary-0.10.0/src/qanary/buffered/sweep.py +503 -0
- qanary-0.10.0/src/qanary/dataset.py +176 -0
- qanary-0.10.0/src/qanary/logger.py +82 -0
- qanary-0.10.0/src/qanary/measure.py +1253 -0
- qanary-0.10.0/src/qanary/parameters.py +316 -0
- qanary-0.10.0/src/qanary/sweep.py +900 -0
- qanary-0.10.0/tests/conftest.py +268 -0
- qanary-0.10.0/tests/test_buffered_progress.py +374 -0
- qanary-0.10.0/tests/test_buffered_tree.py +763 -0
- qanary-0.10.0/tests/test_checkpoint_performance.py +250 -0
- qanary-0.10.0/tests/test_dataset.py +245 -0
- qanary-0.10.0/tests/test_disk_checkpoint.py +167 -0
- qanary-0.10.0/tests/test_examples.py +79 -0
- qanary-0.10.0/tests/test_live_registry.py +104 -0
- qanary-0.10.0/tests/test_live_store_location.py +293 -0
- qanary-0.10.0/tests/test_logger.py +127 -0
- qanary-0.10.0/tests/test_measure.py +1458 -0
- qanary-0.10.0/tests/test_parameter_arithmetic.py +112 -0
- qanary-0.10.0/tests/test_parameters.py +331 -0
- qanary-0.10.0/tests/test_stepper.py +723 -0
- qanary-0.10.0/tests/test_sweep.py +403 -0
- qanary-0.10.0/uv.lock +3164 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Line-ending normalisation.
|
|
2
|
+
#
|
|
3
|
+
# Text files are stored LF in the repository and checked out LF everywhere,
|
|
4
|
+
# including Windows. Without this the working tree depends on each clone's
|
|
5
|
+
# core.autocrlf setting, so the same file differs between machines and a
|
|
6
|
+
# formatter that enforces LF fights the checkout on every commit.
|
|
7
|
+
#
|
|
8
|
+
# Applying this renormalises files whose stored form is currently CRLF. Run
|
|
9
|
+
# `git add --renormalize .` once, in its own commit.
|
|
10
|
+
* text=auto eol=lf
|
|
11
|
+
|
|
12
|
+
# cmd.exe requires CRLF in batch files.
|
|
13
|
+
*.bat text eol=crlf
|
|
14
|
+
*.cmd text eol=crlf
|
|
15
|
+
|
|
16
|
+
# Shell scripts must stay LF or they fail on Linux and macOS with ^M errors.
|
|
17
|
+
*.sh text eol=lf
|
|
18
|
+
|
|
19
|
+
# Binary assets: never convert, never diff as text.
|
|
20
|
+
*.png binary
|
|
21
|
+
*.jpg binary
|
|
22
|
+
*.jpeg binary
|
|
23
|
+
*.gif binary
|
|
24
|
+
*.ico binary
|
|
25
|
+
*.webp binary
|
|
26
|
+
*.pdf binary
|
|
27
|
+
*.zip binary
|
|
28
|
+
*.woff binary
|
|
29
|
+
*.woff2 binary
|
|
30
|
+
*.ttf binary
|
|
31
|
+
*.otf binary
|
|
32
|
+
|
|
33
|
+
# Collapse the lockfile in GitLab merge request diffs; it is generated output.
|
|
34
|
+
uv.lock -diff linguist-generated=true gitlab-generated=true
|
qanary-0.10.0/.gitignore
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
|
|
4
|
+
# Distribution / packaging
|
|
5
|
+
.Python
|
|
6
|
+
build/
|
|
7
|
+
develop-eggs/
|
|
8
|
+
dist/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
.installed.cfg
|
|
11
|
+
*.egg
|
|
12
|
+
MANIFEST
|
|
13
|
+
|
|
14
|
+
# Installer logs
|
|
15
|
+
pip-log.txt
|
|
16
|
+
pip-delete-this-directory.txt
|
|
17
|
+
|
|
18
|
+
# Unit test / coverage reports
|
|
19
|
+
.tox/
|
|
20
|
+
.nox/
|
|
21
|
+
.coverage
|
|
22
|
+
.coverage.*
|
|
23
|
+
.cache
|
|
24
|
+
nosetests.xml
|
|
25
|
+
coverage.xml
|
|
26
|
+
*.cover
|
|
27
|
+
*.py,cover
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
|
|
30
|
+
# Sphinx documentation
|
|
31
|
+
docs/_build/
|
|
32
|
+
|
|
33
|
+
# PyBuilder
|
|
34
|
+
.pybuilder/
|
|
35
|
+
target/
|
|
36
|
+
|
|
37
|
+
# Jupyter Notebook
|
|
38
|
+
.ipynb_checkpoints
|
|
39
|
+
|
|
40
|
+
# IPython
|
|
41
|
+
profile_default/
|
|
42
|
+
ipython_config.py
|
|
43
|
+
|
|
44
|
+
# Environments
|
|
45
|
+
bf/
|
|
46
|
+
.env
|
|
47
|
+
.venv
|
|
48
|
+
.nenv
|
|
49
|
+
env/
|
|
50
|
+
venv/
|
|
51
|
+
ENV/
|
|
52
|
+
env.bak/
|
|
53
|
+
venv.bak/
|
|
54
|
+
*_env/
|
|
55
|
+
|
|
56
|
+
# Spyder project settings
|
|
57
|
+
.spyderproject
|
|
58
|
+
.spyproject
|
|
59
|
+
|
|
60
|
+
# mkdocs documentation
|
|
61
|
+
/site
|
|
62
|
+
|
|
63
|
+
# mypy
|
|
64
|
+
.mypy_cache/
|
|
65
|
+
.dmypy.json
|
|
66
|
+
dmypy.json
|
|
67
|
+
|
|
68
|
+
config.yaml
|
|
69
|
+
# PyCharm
|
|
70
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
71
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
72
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
73
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
74
|
+
#.idea/
|
|
75
|
+
|
|
76
|
+
.DS_Store
|
|
77
|
+
test_db/
|
|
78
|
+
D:
|
|
79
|
+
|
|
80
|
+
# Variants of example.py
|
|
81
|
+
example.*.py
|
|
82
|
+
|
|
83
|
+
# Docs build and test artefacts
|
|
84
|
+
docs/build/
|
|
85
|
+
docs/build/gettext/
|
|
86
|
+
docs/public/
|
|
87
|
+
public/
|
|
88
|
+
.uv-cache/
|
|
89
|
+
report.xml
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
image: "python:3.13"
|
|
2
|
+
|
|
3
|
+
# Branch model: feature branches -> preview -> main. Everything is linted and
|
|
4
|
+
# tested on every branch, preview additionally proves the package builds, and
|
|
5
|
+
# only main creates a release.
|
|
6
|
+
|
|
7
|
+
stages:
|
|
8
|
+
- format
|
|
9
|
+
- test
|
|
10
|
+
- docs
|
|
11
|
+
- release
|
|
12
|
+
|
|
13
|
+
include:
|
|
14
|
+
- template: Security/SAST.gitlab-ci.yml
|
|
15
|
+
- template: Security/Secret-Detection.gitlab-ci.yml
|
|
16
|
+
|
|
17
|
+
variables:
|
|
18
|
+
SECRET_DETECTION_ENABLED: "true"
|
|
19
|
+
UV_CACHE_DIR: "$CI_PROJECT_DIR/.uv-cache"
|
|
20
|
+
# Portable git for the Windows test job. Pinned rather than "latest" so a
|
|
21
|
+
# moved URL fails the download loudly instead of drifting.
|
|
22
|
+
MINGIT_URL: "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.5/MinGit-2.55.0.5-64-bit.zip"
|
|
23
|
+
|
|
24
|
+
sast:
|
|
25
|
+
stage: test
|
|
26
|
+
|
|
27
|
+
secret_detection:
|
|
28
|
+
stage: test
|
|
29
|
+
|
|
30
|
+
lint:
|
|
31
|
+
stage: format
|
|
32
|
+
before_script:
|
|
33
|
+
- curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
34
|
+
- source $HOME/.local/bin/env
|
|
35
|
+
# Keep this exact version aligned with pyproject.toml and pre-commit.
|
|
36
|
+
- uv tool install ruff@0.16.6
|
|
37
|
+
script:
|
|
38
|
+
- ruff check .
|
|
39
|
+
- ruff format --check .
|
|
40
|
+
|
|
41
|
+
pytest:
|
|
42
|
+
stage: test
|
|
43
|
+
# Python 3.13 is the supported runtime for this release.
|
|
44
|
+
parallel:
|
|
45
|
+
matrix:
|
|
46
|
+
- PYTHON_VERSION: ["3.13"]
|
|
47
|
+
image: "python:${PYTHON_VERSION}"
|
|
48
|
+
before_script:
|
|
49
|
+
- curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
50
|
+
- source $HOME/.local/bin/env
|
|
51
|
+
script:
|
|
52
|
+
- uv sync --python "$PYTHON_VERSION" --extra test
|
|
53
|
+
- uv run --python "$PYTHON_VERSION" pytest --cov --cov-report=term --cov-report=xml --junitxml=report.xml
|
|
54
|
+
coverage: '/^TOTAL.*\s+(\d+%)$/'
|
|
55
|
+
artifacts:
|
|
56
|
+
when: always
|
|
57
|
+
reports:
|
|
58
|
+
junit: report.xml
|
|
59
|
+
coverage_report:
|
|
60
|
+
coverage_format: cobertura
|
|
61
|
+
path: coverage.xml
|
|
62
|
+
cache:
|
|
63
|
+
key: uv-$CI_JOB_NAME-$PYTHON_VERSION
|
|
64
|
+
paths:
|
|
65
|
+
- .uv-cache
|
|
66
|
+
|
|
67
|
+
# Windows gets a full run because Zarr stores and file locking behave
|
|
68
|
+
# differently there. Coverage is reported by the Linux jobs only.
|
|
69
|
+
pytest-windows:
|
|
70
|
+
stage: test
|
|
71
|
+
tags:
|
|
72
|
+
- windows
|
|
73
|
+
variables:
|
|
74
|
+
PYTHON_VERSION: "3.13"
|
|
75
|
+
before_script:
|
|
76
|
+
# The python:3.13 Windows image ships no git -- the runner clones with
|
|
77
|
+
# its helper image instead. The test suite needs a real one:
|
|
78
|
+
# tests/test_measure.py imports GitPython at module scope and builds
|
|
79
|
+
# throwaway repositories to exercise the hash-push path. MinGit is the
|
|
80
|
+
# portable Git for Windows build: a zip, no installer, no admin rights.
|
|
81
|
+
- $ProgressPreference = "SilentlyContinue"
|
|
82
|
+
- Invoke-WebRequest -Uri "$env:MINGIT_URL" -OutFile "$env:TEMP\mingit.zip"
|
|
83
|
+
- Expand-Archive -Path "$env:TEMP\mingit.zip" -DestinationPath "C:\mingit" -Force
|
|
84
|
+
- $env:Path = "C:\mingit\cmd;$env:Path"
|
|
85
|
+
- git --version
|
|
86
|
+
- powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
87
|
+
- $env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
|
|
88
|
+
script:
|
|
89
|
+
- uv sync --python $env:PYTHON_VERSION --extra test
|
|
90
|
+
- uv run --python $env:PYTHON_VERSION pytest --junitxml=report.xml
|
|
91
|
+
artifacts:
|
|
92
|
+
when: always
|
|
93
|
+
reports:
|
|
94
|
+
junit: report.xml
|
|
95
|
+
cache:
|
|
96
|
+
key: uv-$CI_JOB_NAME-$PYTHON_VERSION
|
|
97
|
+
paths:
|
|
98
|
+
- .uv-cache
|
|
99
|
+
|
|
100
|
+
deploy-pages:
|
|
101
|
+
stage: docs
|
|
102
|
+
before_script:
|
|
103
|
+
- curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
104
|
+
- source $HOME/.local/bin/env
|
|
105
|
+
script:
|
|
106
|
+
- uv sync --group docs
|
|
107
|
+
- uv run sphinx-build -M html docs/source docs/public
|
|
108
|
+
pages:
|
|
109
|
+
publish: docs/public/html
|
|
110
|
+
cache:
|
|
111
|
+
key: uv-$CI_JOB_NAME
|
|
112
|
+
paths:
|
|
113
|
+
- .uv-cache
|
|
114
|
+
rules:
|
|
115
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
116
|
+
|
|
117
|
+
semantic_release:
|
|
118
|
+
stage: release
|
|
119
|
+
rules:
|
|
120
|
+
- if: $CI_COMMIT_BRANCH == "main"
|
|
121
|
+
variables:
|
|
122
|
+
# semantic-release needs all commits and tags to calculate the next version.
|
|
123
|
+
GIT_DEPTH: 0
|
|
124
|
+
GIT_STRATEGY: clone
|
|
125
|
+
before_script:
|
|
126
|
+
- curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
127
|
+
- source $HOME/.local/bin/env
|
|
128
|
+
- git config --global user.name "Janitor"
|
|
129
|
+
- git config --global user.email "squad@fz-juelich.de"
|
|
130
|
+
- git remote set-url origin https://squad_janitor:$CI_FORMAT@$CI_SERVER_HOST/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
|
|
131
|
+
# GitLab checks out a detached HEAD, while semantic-release needs a branch.
|
|
132
|
+
- git fetch origin $CI_COMMIT_BRANCH
|
|
133
|
+
- git checkout $CI_COMMIT_BRANCH
|
|
134
|
+
- git reset --hard origin/$CI_COMMIT_BRANCH
|
|
135
|
+
- uv tool install python-semantic-release
|
|
136
|
+
script:
|
|
137
|
+
- |
|
|
138
|
+
RELEASE_TAG="$(semantic-release version --print-tag)"
|
|
139
|
+
LAST_TAG="$(semantic-release version --print-last-released-tag)"
|
|
140
|
+
if [ "$RELEASE_TAG" = "$LAST_TAG" ]; then
|
|
141
|
+
echo "No release-worthy commits; no version will be published."
|
|
142
|
+
echo "RELEASE_CREATED=false" > release.env
|
|
143
|
+
exit 0
|
|
144
|
+
fi
|
|
145
|
+
echo "RELEASE_CREATED=true" > release.env
|
|
146
|
+
echo "RELEASE_TAG=$RELEASE_TAG" >> release.env
|
|
147
|
+
semantic-release version --push --changelog --no-vcs-release
|
|
148
|
+
artifacts:
|
|
149
|
+
paths:
|
|
150
|
+
- dist/
|
|
151
|
+
- CHANGELOG.md
|
|
152
|
+
- release.env
|
|
153
|
+
expire_in: never
|
|
154
|
+
reports:
|
|
155
|
+
dotenv: release.env
|
|
156
|
+
|
|
157
|
+
gitlab_release:
|
|
158
|
+
stage: release
|
|
159
|
+
image: registry.gitlab.com/gitlab-org/cli:latest
|
|
160
|
+
needs:
|
|
161
|
+
- job: semantic_release
|
|
162
|
+
artifacts: true
|
|
163
|
+
rules:
|
|
164
|
+
- if: $CI_COMMIT_BRANCH == "main"
|
|
165
|
+
variables:
|
|
166
|
+
GLAB_ENABLE_CI_AUTOLOGIN: "true"
|
|
167
|
+
script:
|
|
168
|
+
- |
|
|
169
|
+
if [ "$RELEASE_CREATED" != "true" ]; then
|
|
170
|
+
echo "semantic-release did not cut a version; no GitLab Release needed."
|
|
171
|
+
exit 0
|
|
172
|
+
fi
|
|
173
|
+
unset GITLAB_TOKEN GITLAB_ACCESS_TOKEN OAUTH_TOKEN
|
|
174
|
+
glab release create "$RELEASE_TAG" \
|
|
175
|
+
--name "Release $RELEASE_TAG" \
|
|
176
|
+
--notes-file CHANGELOG.md \
|
|
177
|
+
--ref "$RELEASE_TAG"
|
|
178
|
+
|
|
179
|
+
pypi:
|
|
180
|
+
stage: release
|
|
181
|
+
needs:
|
|
182
|
+
- job: semantic_release
|
|
183
|
+
artifacts: true
|
|
184
|
+
rules:
|
|
185
|
+
- if: $CI_COMMIT_BRANCH == "main" && $PYPI_SPANDAN
|
|
186
|
+
before_script:
|
|
187
|
+
- curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
188
|
+
- source $HOME/.local/bin/env
|
|
189
|
+
script:
|
|
190
|
+
- |
|
|
191
|
+
if ! ls dist/*.whl >/dev/null 2>&1; then
|
|
192
|
+
echo "semantic-release produced no distribution -- nothing to publish."
|
|
193
|
+
exit 0
|
|
194
|
+
fi
|
|
195
|
+
- uv publish --token "$PYPI_SPANDAN"
|
|
196
|
+
|
|
197
|
+
build_package:
|
|
198
|
+
stage: release
|
|
199
|
+
rules:
|
|
200
|
+
- if: $CI_COMMIT_BRANCH == "preview"
|
|
201
|
+
before_script:
|
|
202
|
+
- curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
203
|
+
- source $HOME/.local/bin/env
|
|
204
|
+
script:
|
|
205
|
+
- uv build
|
|
206
|
+
artifacts:
|
|
207
|
+
paths:
|
|
208
|
+
- dist/*.tar.gz
|
|
209
|
+
- dist/*.whl
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Run `uv sync --extra dev` then `uv run pre-commit install` once per clone.
|
|
2
|
+
#
|
|
3
|
+
# Rules live in pyproject.toml ([tool.ruff]), so these hooks apply exactly the
|
|
4
|
+
# same configuration as the CI `lint` job.
|
|
5
|
+
repos:
|
|
6
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
7
|
+
# Keep this exact version aligned with pyproject.toml and .gitlab-ci.yml.
|
|
8
|
+
rev: v0.16.6
|
|
9
|
+
hooks:
|
|
10
|
+
# NOTE: Import sorting is part of `ruff check` via the "I" rules; the `ruff format`
|
|
11
|
+
# does not do it.
|
|
12
|
+
- id: ruff-check
|
|
13
|
+
args: [--fix]
|
|
14
|
+
- id: ruff-format
|
|
15
|
+
|
|
16
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
17
|
+
rev: v6.0.0
|
|
18
|
+
hooks:
|
|
19
|
+
- id: check-added-large-files
|
|
20
|
+
# A check to ensure large files, e.g., test measurement data, does not end up in the repository.
|
|
21
|
+
args: [--maxkb=512]
|
|
22
|
+
- id: check-merge-conflict
|
|
23
|
+
- id: check-toml
|
|
24
|
+
- id: check-yaml
|
|
25
|
+
- id: end-of-file-fixer
|
|
26
|
+
- id: trailing-whitespace
|
|
27
|
+
# Two trailing spaces are a hard line break in Markdown; stripping them
|
|
28
|
+
# silently reflows the README and the docs pages.
|
|
29
|
+
args: [--markdown-linebreak-ext=md]
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
## Qanary Changelog
|
|
2
|
+
|
|
3
|
+
<!-- version list -->
|
|
4
|
+
|
|
5
|
+
## v0.10.0 (2026-09-06)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## v0.9.0 (2026-09-06)
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
- Adapt to qcodes 0.59
|
|
13
|
+
([`264ea9a`](https://gitlab.com/squad-lab/qcutils/-/commit/264ea9a07f8f800fb12c72b4297802bbcb2c5642))
|
|
14
|
+
|
|
15
|
+
- Continue sweeps through transient Zarr errors
|
|
16
|
+
([`6cef1f6`](https://gitlab.com/squad-lab/qcutils/-/commit/6cef1f63767dde077d3a2674ce51405e5b23855b))
|
|
17
|
+
|
|
18
|
+
- Fixed buffered sweep progress tracking and integration tests
|
|
19
|
+
([`ba85146`](https://gitlab.com/squad-lab/qcutils/-/commit/ba851460b117179da6e0b825a9d48a80274f9ffb))
|
|
20
|
+
|
|
21
|
+
- Import GitPython lazily so a git binary is not required
|
|
22
|
+
([`6491b34`](https://gitlab.com/squad-lab/qcutils/-/commit/6491b345e98fb4f4c6be6339e519cedf291e40cc))
|
|
23
|
+
|
|
24
|
+
### Build System
|
|
25
|
+
|
|
26
|
+
- Require Python 3.13 and depend on qimchi-connect
|
|
27
|
+
([`817b91d`](https://gitlab.com/squad-lab/qcutils/-/commit/817b91d7eb07b1b63615aa4d591f114f64114528))
|
|
28
|
+
|
|
29
|
+
### Chores
|
|
30
|
+
|
|
31
|
+
- Store all text files with LF line endings
|
|
32
|
+
([`d90b6b8`](https://gitlab.com/squad-lab/qcutils/-/commit/d90b6b8ef7fc9de6db49c05f61fa5a332617779f))
|
|
33
|
+
|
|
34
|
+
- **deps**: Depend on qcdrivers and require qcodes 0.59
|
|
35
|
+
([`867abe5`](https://gitlab.com/squad-lab/qcutils/-/commit/867abe5fe5b56eefdb3be5cba2155d6b2d05b35f))
|
|
36
|
+
|
|
37
|
+
### Code Style
|
|
38
|
+
|
|
39
|
+
- Format examples with ruff
|
|
40
|
+
([`88191c7`](https://gitlab.com/squad-lab/qcutils/-/commit/88191c7c9365ac3066c3f2b5b5e82a10613e0cef))
|
|
41
|
+
|
|
42
|
+
- Open multi-line docstrings on their own line
|
|
43
|
+
([`61b336d`](https://gitlab.com/squad-lab/qcutils/-/commit/61b336d7000d0df500b4814d4f8a504ea0f0e83b))
|
|
44
|
+
|
|
45
|
+
### Continuous Integration
|
|
46
|
+
|
|
47
|
+
- Add release, lint, coverage, and Pages pipelines
|
|
48
|
+
([`990b4ce`](https://gitlab.com/squad-lab/qcutils/-/commit/990b4cedbf0d476af571e0902a1b77ecf374e36b))
|
|
49
|
+
|
|
50
|
+
- Install portable git for the Windows test job
|
|
51
|
+
([`388b717`](https://gitlab.com/squad-lab/qcutils/-/commit/388b7174284b58d94fd1af5204889771e0095459))
|
|
52
|
+
|
|
53
|
+
- Publish to PyPI and drop the git-source workaround
|
|
54
|
+
([`619701f`](https://gitlab.com/squad-lab/qcutils/-/commit/619701f3bddc9c7b4e70c9f66cd1203e25a4276e))
|
|
55
|
+
|
|
56
|
+
### Documentation
|
|
57
|
+
|
|
58
|
+
- Add Sphinx documentation and refresh the README
|
|
59
|
+
([`9c12c7d`](https://gitlab.com/squad-lab/qcutils/-/commit/9c12c7da4146dddbf5ae823c1ff7d4469dd86beb))
|
|
60
|
+
|
|
61
|
+
- Document PyPI installation and point buffered nodes at qcdrivers
|
|
62
|
+
([`2852542`](https://gitlab.com/squad-lab/qcutils/-/commit/28525420272f47eb7ece67e6f69d70a58b3d59a6))
|
|
63
|
+
|
|
64
|
+
### Features
|
|
65
|
+
|
|
66
|
+
- Publish live measurements through qimchi-connect
|
|
67
|
+
([`2d8aaf5`](https://gitlab.com/squad-lab/qcutils/-/commit/2d8aaf5d00f7a57c58e4cc804ffc010eee006fd4))
|
|
68
|
+
|
|
69
|
+
### Performance Improvements
|
|
70
|
+
|
|
71
|
+
- Persist only changed Zarr keys at disk checkpoints
|
|
72
|
+
([`81e4d03`](https://gitlab.com/squad-lab/qcutils/-/commit/81e4d03f485e8be781eae7cb161403bb5b838293))
|
|
73
|
+
|
|
74
|
+
- Source buffered instrument nodes from qcdrivers
|
|
75
|
+
([`0655f4b`](https://gitlab.com/squad-lab/qcutils/-/commit/0655f4b890e33910d801f82bae7ce3a6c85ae972))
|
|
76
|
+
|
|
77
|
+
### Refactoring
|
|
78
|
+
|
|
79
|
+
- Make internal measurement helpers private
|
|
80
|
+
([`e1750fb`](https://gitlab.com/squad-lab/qcutils/-/commit/e1750fb6119c7b2c3e5fa82dd5c7066311e55906))
|
|
81
|
+
|
|
82
|
+
- Remove deprecated instrument classes and related code
|
|
83
|
+
([`2e8e483`](https://gitlab.com/squad-lab/qcutils/-/commit/2e8e483763e7af060155be06620ab382749901b6))
|
|
84
|
+
|
|
85
|
+
### Testing
|
|
86
|
+
|
|
87
|
+
- Cover measurements, persistence, sweeps, and parameters
|
|
88
|
+
([`df75038`](https://gitlab.com/squad-lab/qcutils/-/commit/df750388c91215ca32a78a0f16082f66970fd8d9))
|
|
89
|
+
|
|
90
|
+
### Breaking Changes
|
|
91
|
+
|
|
92
|
+
- Python 3.12 is no longer supported. QCUtils requires 3.13.
|
|
93
|
+
|
|
94
|
+
- Qcutils.buffered.instruments is removed. Import the node classes from
|
|
95
|
+
qcdrivers.buffered.<manufacturer> instead; QCUtils keeps the buffered sweep orchestration.
|
|
96
|
+
|
|
97
|
+
- The modules qcutils.live_server and qcutils.shared.live_db are removed. Live publishing goes
|
|
98
|
+
through the qimchi-connect package, which QCUtils now depends on. Measurement scripts are
|
|
99
|
+
unaffected.
|
|
100
|
+
|
|
101
|
+
- These helpers are renamed with a leading underscore: qcutils.sweep.stepper,
|
|
102
|
+
qcutils.logger.setup_logging, qcutils.measure.{register,get,unregister}_memory_store,
|
|
103
|
+
qcutils.measure.get_live_dataset_info, qcutils.measure.list_live_measurements, and
|
|
104
|
+
qcutils.buffered.sweep.{parse_bufsweep_tree,arm_instruments,fetch_results,
|
|
105
|
+
abort_instruments,fetch_dependents_tree}. The measurement-script API is unchanged.
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
### v0.8.0 - 2026-04-02
|
|
109
|
+
|
|
110
|
+
- [Feature] Introduced dataset utilities (`datasets.py`) for common measurement operations
|
|
111
|
+
- [Feature] Reworked dataset storage pipeline:
|
|
112
|
+
- Use Zarr for live/in-progress measurements to avoid file locking issues
|
|
113
|
+
- Finalize and export to NetCDF (`.nc`) at measurement completion
|
|
114
|
+
- Added support for partial `.nc` snapshots during sweeps (experimental; may fail on Windows)
|
|
115
|
+
- [Feature] Added `update_measurement_path` and improved disk finalization logic for better artifact handling and DB consistency
|
|
116
|
+
- [Feature] Increased WebSocket server max message size to 100 MB for large dataset handling
|
|
117
|
+
- [Fix] Fixed measurement tabulation issues
|
|
118
|
+
- [Fix] Fixed circular sweep behavior
|
|
119
|
+
- [Fix] Fixed segmented sweep handling
|
|
120
|
+
- [Fix] Fixed MultiChannelParameter handling and related instrument behavior
|
|
121
|
+
- [Fix] Fixed measurement bugs (general measurement stability improvements)
|
|
122
|
+
- [Fix] Fixed instrument snapshot errors when parameters are `np.ndarray`
|
|
123
|
+
- [Fix] Added JSON sanitization for NumPy types in WebSocket responses
|
|
124
|
+
- [Misc] Moved `live_db` module to shared location for reuse across projects
|
|
125
|
+
- [Misc] Updated dependency versions (including `websockets > 16.0`, zhinst compatibility updates, and numcodecs downgrade)
|
|
126
|
+
- [Misc] Internal refactors and consolidation of dataset-related changes
|
|
127
|
+
- [Misc] Added and reorganized QCoDeS parameter class support
|
|
128
|
+
- [Misc] General cleanup, refactoring, and merge of multiple feature/fix branches (datasets, sweeps, measurement handling)
|
|
129
|
+
|
|
130
|
+
#### Merge Requests included in this release
|
|
131
|
+
- !32 - Log space sweep
|
|
132
|
+
- !31 - Station remove parameter
|
|
133
|
+
- !30 - Measure tabulate fix
|
|
134
|
+
- !29 - Circular sweep fix
|
|
135
|
+
- !28 - MultiChannelParameter fix
|
|
136
|
+
- !27 - Basel safe sweep (multichannelparameter adjustments)
|
|
137
|
+
- !26 - Bux fix measurement
|
|
138
|
+
- !25 - Segmented sweep fix
|
|
139
|
+
- !24 - QCoDeS parameter classes
|
|
140
|
+
- !23 - QCoDeS parameter classes
|
|
141
|
+
|
|
142
|
+
#### Contributors
|
|
143
|
+
- Spandan Anupam
|
|
144
|
+
- Simon Schreibing
|
|
145
|
+
- Jyotirmaya Shivottam
|