pulserver 0.4.2__tar.gz → 0.4.4__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.
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/wheels.yml +5 -1
- {pulserver-0.4.2 → pulserver-0.4.4}/PKG-INFO +2 -2
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/installation.md +2 -2
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/releases.md +2 -2
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/safety-checks.md +2 -2
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/user-guide/index.md +5 -2
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/user-guide/running.md +1 -1
- {pulserver-0.4.2 → pulserver-0.4.4}/pyproject.toml +1 -1
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/_checks.py +28 -4
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_design_service.py +5 -2
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_checks.py +48 -4
- {pulserver-0.4.2 → pulserver-0.4.4}/.claude/skills/build-and-test/SKILL.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.claude/skills/write-documentation/SKILL.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.dockerignore +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.gitattributes +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/ISSUE_TEMPLATE/documentation.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/dependabot.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/codeql.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/console.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/docs.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/fields.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/image.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/koma.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/style.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/tags-release.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.github/workflows/test-ci.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.gitignore +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/.pre-commit-config.yaml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/AGENTS.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/CMakeLists.txt +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/CODE_OF_CONDUCT.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/CONTRIBUTING.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/LICENSE +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/LICENSES/gadgetron-python-MIT.txt +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/LICENSES/python-ismrmrd-server-MIT.txt +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/NEXT.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/README.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/SECURITY.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/SKILLS.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/codecov.yml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docker/Dockerfile +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docker/compose.yaml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docker/entrypoint.sh +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docker/limits/limits.txt +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docker/smoke.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/architecture-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/architecture.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/capabilities.js +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/context-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/context.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulseg-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulseg.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulserver-logo-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulserver-logo.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulserver-mark-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulserver-mark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/pulserver.css +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/repetition-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/repetition.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/safety-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/safety.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/session-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/session.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/virtual-dark.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_static/virtual.svg +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_templates/autosummary/base.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_templates/autosummary/class.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_templates/autosummary/enum.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/_templates/autosummary/function.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/design.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/host.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/ir.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/mrd.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/protocol.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/proxy.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/recon.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/validate.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api/virtual.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/api_objects.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/colab.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/conf.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/documentation.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/calibration.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/ir-cache.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/protocol-wire.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/reconstruction-proxy.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/sar-ratios.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/internals/virtual-scanner.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/style.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/terminology.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/developer-guide/workflow.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/examples/course.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/examples/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/examples/tours.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/architecture.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/protocol.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/raw-data.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/reconstruction-session.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/reconstruction.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/scanner-representation.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/explanations/virtual-scanner.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/figure_style.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/misc/contributors.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/misc/index.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/misc/license.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/misc/related.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/user-guide/reconstruction-client.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/user-guide/reconstruction-plugins.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/user-guide/scanner-sequences.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/docs/user-guide/virtual-scanner.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/01_protocol_to_image.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/02_sequence_plugin.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/03_scanner_representation.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/04_reconstruction_plugin.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/05_recon_plugin.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/06_testing_on_the_virtual_scanner.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/README.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/01-course/_gallery_header.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/02-tours/01_protocol_resolution.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/02-tours/02_segmentation.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/02-tours/03_fov_offset_enrichment.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/02-tours/README.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/02-tours/_gallery_header.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/README.rst +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/gallery/_gallery_header.md +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/scripts/build_docs.sh +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/scripts/check_throughput.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/scripts/format_and_lint.sh +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/scripts/make_artwork.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/scripts/publish_docs.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/setup.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/CMakeLists.txt +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/cache/pulseg_cache.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/core/pulseg_core.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/core/pulseg_error.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/core/pulseg_math.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_cache.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_collection.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_config.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_errors.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_io.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_playout.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_protocol.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseg/pulseg_types.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseq/pulseq.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseq/pulseq_config.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/include/pulseq/pulseq_types.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/io/pulseg_opts.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/io/pulseg_protocol.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/playout/pulseg_playout.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/pulseg_internal.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/pulseq/pulseq_internal.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/pulseq/pulseq_shape.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/structure/pulseg_descriptor.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/structure/pulseg_getters.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/structure/pulseg_repetition.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/c/structure/pulseg_waves.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/fourier/bindings.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/fourier/bindings.hpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/fourier/parallel.hpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/fourier/timeline.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/fourier/timeline.hpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/collection.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/dedup.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/from_libraries.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/from_libraries.hpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/gradient_stretch.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/pulseg_convert.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/pulseq_file.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/pulseq_file.h +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/structure.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/wave_plan.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/ir/waves.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/module.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/native.hpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/playout.cpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/cpp/playout.hpp +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_accelerators.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_cli.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_labels.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_logs.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_memory.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_plugins.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/_evaluation.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/_inversion.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/_pmc.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/_saturation.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/_slab.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/_user.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/recon/epi.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/recon/nufft.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/recon/nufft_train.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/recon/pics.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/recon/pics_train.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/recon/pmc.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/bssfp2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/bssfp3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/epi2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/epi3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/fse3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_multiecho2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_multiecho3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_propeller2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_radial2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_spiral2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_stack_of_blades3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_stack_of_spirals3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/gre_stack_of_stars3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/mprage3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/mprage_stack_of_spirals3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/mprage_stack_of_stars3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_epi_propeller2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_propeller2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_radial2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_spiral2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_stack_of_blades3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_stack_of_spirals3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/se_stack_of_stars3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/_zoo/sequences/zte3d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/design/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/design/_entries.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/design/_options.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/design/_plugin.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/design/_rf.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/__main__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_blocks.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_command.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_limits.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_push.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_server.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_service.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/host/_store.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/_convert.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/_playout.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/_source.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/_vendor.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/ir/_waves.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/mrd/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/mrd/_acquisitions.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/mrd/_header.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/mrd/_images.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/mrd/_metadata.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/mrd/_sequence.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/protocol/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/protocol/_keys.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/protocol/_prescription.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/protocol/_schema.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/protocol/_wire.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/__main__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_designs.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_enrich.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_held.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_intake.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_local.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_motion.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_proxy.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_queue.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_seqdesc.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/proxy/_workers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/__main__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_buffers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_calibration.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_correct.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_exam_image.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_figure.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_loader.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_replay.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/application.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/concurrency.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/connection.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/constants.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/exam.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/mrd2dicom.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/offline.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/readers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_runtime/writers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/_units.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/gadgets.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/epi.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/nufft.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/nufft_train.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/pics.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/pics_train.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/handlers/pmc.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/recon/plugin.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/validate/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/validate/_command.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/validate/_compare.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/validate/_validate.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/validate/_xml.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/__init__.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_brainweb.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_client.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_coils.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_command.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_console.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_export.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_fourier.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_girf.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_localizer.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_motion.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_phantom.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_stream.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_timeline.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/src/pulserver/virtual/_tissue.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/_analytic.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/_host.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/_seqtext.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/_synthetic.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/_virtual.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/_zoo.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/conftest.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/bssfp.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/epi_2d_main.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/gre_2d_3sl.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/steady_dess_hard_0hz.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/steady_dess_hard_30hz.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/steady_echo_hard_0hz.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/steady_echo_hard_30hz.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/steady_echo_selective_0hz.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/bloch/steady_fid_hard_0hz.npy +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/sequences/dedup_gre_pair.seq +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/sequences/dedup_gre_pair_b.seq +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/sequences/epi_2d_main.seq +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/sequences/gre_2d_3sl.seq +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/sequences/mprage_stack_of_spirals_3d.seq +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/fixtures/sequences/zte_3d.seq +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/koma/Project.toml +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/koma/simulate.jl +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/native/check_initializers.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/native/print_wave_samples.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/native/read_cache_summary.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/native/read_rf_definitions.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/native/read_rf_timing.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/native/replay_an_instance.c +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/crash.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/gre2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/gre2d_raw.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/rf_train.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/stall.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/strong.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/tiny.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/plugins/typed.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_app.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_buffers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_calibration.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_coil_compression.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_connection.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_correct.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_epi.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_exam_image.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_flags.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_gadgets.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_handlers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_images.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_loader.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_mrd2dicom.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_nufft.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_pics.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_pmc.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_prewhiten.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_readers_writers.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_slots.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon/test_units.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon_plugins/children.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon_plugins/crash.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon_plugins/device.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon_plugins/exam.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon_plugins/gre2d.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/recon_plugins/pose.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_console.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_console_sequences.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_design_push.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_design_server.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_docs.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_docstring_defaults.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_docstrings.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_enrich.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_exam_artifacts.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_exam_calibration.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_exam_sharing.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_host_slots.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_image.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_designed.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_extensions.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_gradient_stretch.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_grouping.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_labels.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_playout.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_prescan.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_prescan_tour.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_profile.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_repetition.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_rf.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_rf_freq.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_segments.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_source.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_steady_excitation.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_timing.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_vendor.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_ir_waves.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_keys.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_koma.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_limits.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_logs.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_memory.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_motion.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_mrd_images.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_mrd_sequence.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_plugin_options.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_plugins.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_protocol.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_proxy.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_publish_docs.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_resolution.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_rf_layout.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_scan_command.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_seqdesc.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_sequence_plugin.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_smoke.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_validate.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_brainweb.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_clock.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_coils.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_export.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_fourier.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_localizer.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_virtual_sequences.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_wire.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_zoo_defaults.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_zoo_evaluation.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_zoo_fov_offset.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_zoo_mrd_labels.py +0 -0
- {pulserver-0.4.2 → pulserver-0.4.4}/tests/test_zoo_wave.py +0 -0
|
@@ -24,7 +24,7 @@ jobs:
|
|
|
24
24
|
strategy:
|
|
25
25
|
fail-fast: false
|
|
26
26
|
matrix:
|
|
27
|
-
os: [ubuntu-latest, macos-14]
|
|
27
|
+
os: [ubuntu-latest, macos-14, windows-latest]
|
|
28
28
|
steps:
|
|
29
29
|
- uses: actions/checkout@v7
|
|
30
30
|
with:
|
|
@@ -36,8 +36,12 @@ jobs:
|
|
|
36
36
|
CIBW_SKIP: "*-musllinux_*"
|
|
37
37
|
CIBW_ARCHS_LINUX: x86_64
|
|
38
38
|
CIBW_ARCHS_MACOS: arm64
|
|
39
|
+
CIBW_ARCHS_WINDOWS: AMD64
|
|
39
40
|
# Loads the compiled extension, not only the package.
|
|
40
41
|
CIBW_TEST_COMMAND: "python -c \"from pulserver._accelerators import require; print(require().__name__)\""
|
|
42
|
+
# Windows: also the conversion and checks, which must not reach the
|
|
43
|
+
# POSIX-only server and reconstruction modules.
|
|
44
|
+
CIBW_TEST_COMMAND_WINDOWS: "python -c \"from pulserver._accelerators import require; import pulserver.ir; print(require().__name__)\""
|
|
41
45
|
|
|
42
46
|
- uses: actions/upload-artifact@v7
|
|
43
47
|
with:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulserver
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Orchestrator for MR acquisitions: sequence design, scanner preparation and reconstruction.
|
|
5
5
|
Keywords: mri,pulseq,mrd,ismrmrd,reconstruction,scanner
|
|
6
6
|
Author-Email: Matteo Cencini <matteo.cencini@gmail.com>
|
|
@@ -21,7 +21,7 @@ Project-URL: Documentation, https://pulserver.github.io/pulserver/
|
|
|
21
21
|
Project-URL: Issues, https://github.com/pulserver/pulserver/issues
|
|
22
22
|
Project-URL: Source, https://github.com/pulserver/pulserver
|
|
23
23
|
Requires-Python: >=3.10
|
|
24
|
-
Requires-Dist: pypulseqpp>=0.0.
|
|
24
|
+
Requires-Dist: pypulseqpp>=0.0.49
|
|
25
25
|
Requires-Dist: numpy>=2.2.6
|
|
26
26
|
Requires-Dist: ismrmrd>=1.15.0
|
|
27
27
|
Requires-Dist: pydicom>=3.0.2
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
## Prerequisites
|
|
4
4
|
|
|
5
5
|
You need Git, Python 3.10 to 3.14, a C compiler, a C++17 compiler and CMake,
|
|
6
|
-
on Linux or macOS. Windows
|
|
7
|
-
call and listens on a Unix socket.
|
|
6
|
+
on Linux or macOS. Windows builds wheels but is not a development platform: the
|
|
7
|
+
warm design server forks per call and listens on a Unix socket.
|
|
8
8
|
|
|
9
9
|
The test that compiles `src/c/` as a 32-bit scanner build needs a 32-bit C
|
|
10
10
|
toolchain, which `gcc-multilib` provides on Debian and Ubuntu; without one it
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Releases
|
|
2
2
|
|
|
3
3
|
Versions are derived from Git tags by `setuptools_scm`. Pushing a tag `vX.Y.Z`
|
|
4
|
-
runs the Release workflow, which builds the wheels (Linux x86-64
|
|
5
|
-
arm64, CPython 3.10 to 3.14) and the source distribution, publishes them to
|
|
4
|
+
runs the Release workflow, which builds the wheels (Linux x86-64, macOS
|
|
5
|
+
arm64 and Windows x86-64, CPython 3.10 to 3.14) and the source distribution, publishes them to
|
|
6
6
|
PyPI through trusted publishing, and creates a GitHub release with Sigstore
|
|
7
7
|
signatures.
|
|
8
8
|
|
|
@@ -42,9 +42,9 @@ patient safety.
|
|
|
42
42
|
- **Checks PNS under the scanner's nerve model (chronaxie or SAFE), up to a fraction of its threshold.**
|
|
43
43
|
|
|
44
44
|
Code: `CheckLimits(pns=..., pns_limit=...)`, `pypulseqpp.safety.check_pns`. Test: *PNS is refused from the fraction of threshold the limits allow* (`test_ir_checks.py`).
|
|
45
|
-
- **Refuses gradient trains in the forbidden bands of mechanical resonance, on the physical axis they play on.**
|
|
45
|
+
- **Refuses gradient trains in the forbidden bands of mechanical resonance, on the physical axis they play on, read over a 20 ms window: a train shorter than that drives a band less.** A band whose table states no amplitude is held to 8 mT/m. A stated amplitude is read as an echo-spacing lockout reads it: the band is refused when it holds a line above 6 mT/m while the axis's gradient exceeds the amplitude. A window that exceeds a band is read again over 80 ms; a steady line that then lies outside the band, at 80 % of its amplitude or more, is leakage through the 20 ms window and is not refused.
|
|
46
46
|
|
|
47
|
-
Code: `CheckLimits(bands=...)`, `pypulseqpp.safety.check_mech_resonance`. Tests: *a gradient train in a forbidden band is refused on the axis it plays* (`test_ir_checks.py`); *the prescription moves a train into the forbidden band of another axis* (`test_ir_checks.py`).
|
|
47
|
+
Code: `CheckLimits(bands=...)`, `RESONANCE_WINDOW`, `RESONANCE_FLOOR`, `pypulseqpp.safety.check_mech_resonance`. Tests: *a gradient train in a forbidden band is refused on the axis it plays* (`test_ir_checks.py`); *a train drives a band over the 20 ms memory of the resonance* (`test_ir_checks.py`); *a band stating no amplitude is held to 8 mT/m* (`test_ir_checks.py`); *a stated amplitude limits the gradient while the band holds a line* (`test_ir_checks.py`); *the prescription moves a train into the forbidden band of another axis* (`test_ir_checks.py`).
|
|
48
48
|
- **Holds the loudest repetition to 140 dB peak and 99 dB(A) average (IEC 60601-2-33), and writes both levels into the cache.**
|
|
49
49
|
|
|
50
50
|
Code: `CheckLimits(acoustic=...)`, {func}`~pulserver.ir.spl_levels`, {class}`~pulserver.ir.SplLevels`. Tests: *a repetition too loud on the physical axis it plays on is refused* (`test_ir_checks.py`); *the levels the cache carries are those the check holds to its limits* (`test_ir_checks.py`).
|
|
@@ -25,13 +25,16 @@ virtual-scanner
|
|
|
25
25
|
## Supported platforms
|
|
26
26
|
|
|
27
27
|
pulserver supports Python 3.10 through 3.14; CI tests both bounds on Linux and
|
|
28
|
-
macOS. Windows
|
|
29
|
-
|
|
28
|
+
macOS. On Windows, sequence design, the safety checks and conversion run from
|
|
29
|
+
the wheel; the warm design server and the reconstruction runtime do not, since
|
|
30
|
+
they fork one process per call, listen on Unix sockets and lock files with
|
|
31
|
+
`fcntl`.
|
|
30
32
|
|
|
31
33
|
| Platform | Wheel architectures |
|
|
32
34
|
| --- | --- |
|
|
33
35
|
| Linux | x86-64, glibc (`manylinux`) |
|
|
34
36
|
| macOS | Apple silicon |
|
|
37
|
+
| Windows | x86-64 |
|
|
35
38
|
|
|
36
39
|
Each wheel carries the compiled extension `pulserver._ext`. A source build
|
|
37
40
|
needs a C compiler, a C++17 compiler, CMake and the Python development headers.
|
|
@@ -176,7 +176,7 @@ gradient heating from it.
|
|
|
176
176
|
| `pns_chronaxie`, `pns_rheobase`, `pns_alpha` | Chronaxie nerve model: chronaxie in s, rheobase in T/m/s, `alpha` 1 when left out. The rheobase and the alpha are one value or three separated by spaces, one per physical axis |
|
|
177
177
|
| `pns_<axis>_<field>` | SAFE nerve model, for the axes `x`, `y` and `z` and the fields `a1` to `a3`, `tau1` to `tau3` in ms, `stim_limit` in T/m/s and `g_scale` |
|
|
178
178
|
| `pns_limit` | Largest PNS response allowed, as a fraction of the model's threshold; 1 when left out |
|
|
179
|
-
| `forbidden_band_<n>` | One forbidden band: its physical axis (`x`, `y`, `z` or `all`), its lowest and highest frequency in Hz and, optionally, the
|
|
179
|
+
| `forbidden_band_<n>` | One forbidden band: its physical axis (`x`, `y`, `z` or `all`), its lowest and highest frequency in Hz and, optionally, the readout gradient amplitude in mT/m above which it is locked, as an echo-spacing lockout table states it, separated by spaces. Without an amplitude, the band is held to 8 mT/m (`RESONANCE_FLOOR`) |
|
|
180
180
|
| `vop_file` | `.mat` or `.npz` file of VOPs and the head SAR matrix of each body model, at a path the design calls can read; its `safety_factor` multiplies local SAR |
|
|
181
181
|
| `vop_head_limit`, `vop_local_limit` | The scanner's head and local SAR limits in W/kg in its current operating mode |
|
|
182
182
|
| `vop_drive_per_hz` | Channel drive per Hz of RF amplitude, one value or one per channel separated by spaces; a scale common to every channel cancels. Equal drives when left out |
|
|
@@ -31,6 +31,14 @@ _RASTERS = (
|
|
|
31
31
|
REFERENCE_FLIP = np.pi
|
|
32
32
|
REFERENCE_DURATION = 1e-3
|
|
33
33
|
|
|
34
|
+
#: Window (s) the gradient spectrum is read over against the forbidden bands:
|
|
35
|
+
#: the memory a gradient coil's resonance is driven over, so a train shorter
|
|
36
|
+
#: than it drives a band less. The bands' default threshold is set for it.
|
|
37
|
+
RESONANCE_WINDOW = 0.02
|
|
38
|
+
|
|
39
|
+
#: Threshold (mT/m) of a forbidden band whose table states no amplitude.
|
|
40
|
+
RESONANCE_FLOOR = 8.0
|
|
41
|
+
|
|
34
42
|
|
|
35
43
|
@dataclass(frozen=True)
|
|
36
44
|
class CheckLimits:
|
|
@@ -170,7 +178,10 @@ def check(
|
|
|
170
178
|
``pypulseqpp.safety.check_max_grad`` and ``check_max_slew``, against the
|
|
171
179
|
gradient limits, dead times and ringdown time of ``system``; and with
|
|
172
180
|
``check_pns``, ``check_mech_resonance`` and ``check_spl`` where ``limits``
|
|
173
|
-
carries a nerve model, forbidden bands or an acoustic transfer function
|
|
181
|
+
carries a nerve model, forbidden bands or an acoustic transfer function;
|
|
182
|
+
the gradient spectrum is read over windows of ``RESONANCE_WINDOW``, a
|
|
183
|
+
band stating no amplitude is held to ``RESONANCE_FLOOR``, and a stated
|
|
184
|
+
amplitude limits the axis's gradient while the band holds a line.
|
|
174
185
|
The waveforms are timed by the file's own rasters. VOPs are not checked
|
|
175
186
|
here: see :func:`sar_ratios`.
|
|
176
187
|
|
|
@@ -306,11 +317,24 @@ def _pns(sequence: pp.Sequence, system: pp.Opts, limits: CheckLimits) -> list[st
|
|
|
306
317
|
def _resonance(
|
|
307
318
|
sequence: pp.Sequence, system: pp.Opts, limits: CheckLimits
|
|
308
319
|
) -> list[str]:
|
|
309
|
-
_, found = safety.check_mech_resonance(
|
|
320
|
+
_, found = safety.check_mech_resonance(
|
|
321
|
+
sequence,
|
|
322
|
+
limits.bands,
|
|
323
|
+
window_width=RESONANCE_WINDOW,
|
|
324
|
+
min_threshold=RESONANCE_FLOOR,
|
|
325
|
+
tolerance_limits="gradient",
|
|
326
|
+
system=system,
|
|
327
|
+
)
|
|
310
328
|
return [
|
|
311
329
|
f"{band.peak:.1f} mT/m at {band.frequency:.0f} Hz on {band.peak_axis} in "
|
|
312
|
-
f"the window at {band.window_start:.3f} s
|
|
313
|
-
|
|
330
|
+
f"the window at {band.window_start:.3f} s "
|
|
331
|
+
+ (
|
|
332
|
+
f"with the gradient at {band.gradient:.1f} mT/m exceeds the "
|
|
333
|
+
f"{band.tolerance:.1f} mT/m"
|
|
334
|
+
if band.tolerance > 0.0
|
|
335
|
+
else f"exceeds the {band.threshold:.1f} mT/m"
|
|
336
|
+
)
|
|
337
|
+
+ f" of the forbidden band {band.f_min:.0f}-{band.f_max:.0f} Hz"
|
|
314
338
|
+ ("" if band.axis is None else f" on {band.axis}")
|
|
315
339
|
for band in found.bands
|
|
316
340
|
if band.violations
|
|
@@ -20,6 +20,7 @@ from pulserver.host import DesignStore, design_id, design_identity, prune
|
|
|
20
20
|
from pulserver.host import _service as service
|
|
21
21
|
from pulserver.host._blocks import format_import, format_limits
|
|
22
22
|
from pulserver.host._store import scans
|
|
23
|
+
from pulserver.ir import _checks
|
|
23
24
|
from pulserver.protocol import (
|
|
24
25
|
FOV_ROTATION,
|
|
25
26
|
PROTOCOL_BEGIN,
|
|
@@ -580,8 +581,10 @@ def test_a_request_is_validated_and_designed_under_the_peak_b1_limit(store):
|
|
|
580
581
|
assert max(peaks) <= pp.MAX_B1_DERATE * pp.Opts(**limited).max_b1 * (1 + 1e-6)
|
|
581
582
|
|
|
582
583
|
|
|
583
|
-
def test_a_design_in_a_forbidden_band_is_refused(store):
|
|
584
|
-
|
|
584
|
+
def test_a_design_in_a_forbidden_band_is_refused(store, monkeypatch):
|
|
585
|
+
# The GRE's lines read under 5 mT/m: a 1 mT/m floor puts them over it.
|
|
586
|
+
monkeypatch.setattr(_checks, "RESONANCE_FLOOR", 1.0)
|
|
587
|
+
limits = {**LIMITS, "forbidden_band_1": "all 1 5000"}
|
|
585
588
|
status, text = generate(store, "gre2d", GRE, limits=limits)
|
|
586
589
|
assert status == 1
|
|
587
590
|
assert "of the forbidden band 1-5000 Hz" in text
|
|
@@ -72,13 +72,56 @@ def test_a_gradient_train_in_a_forbidden_band_is_refused_on_the_axis_it_plays(tr
|
|
|
72
72
|
# rounding; the window it names is not part of the claim.
|
|
73
73
|
(problem,) = ir.check(train, SYSTEM, limits=ir.CheckLimits(bands=(BAND_X,)))
|
|
74
74
|
assert re.fullmatch(
|
|
75
|
-
r"17\.9 mT/m at 1000 Hz on x in the window at \d+\.\d{3} s
|
|
76
|
-
r"5\.0 mT/m of the forbidden band
|
|
75
|
+
r"17\.9 mT/m at 1000 Hz on x in the window at \d+\.\d{3} s with the "
|
|
76
|
+
r"gradient at 15\.0 mT/m exceeds the 5\.0 mT/m of the forbidden band "
|
|
77
|
+
r"900-1100 Hz on x",
|
|
77
78
|
problem,
|
|
78
79
|
)
|
|
79
80
|
assert ir.check(train, SYSTEM, limits=ir.CheckLimits(bands=(BAND_Y,))) == []
|
|
80
81
|
|
|
81
82
|
|
|
83
|
+
@pytest.mark.parametrize(("pairs", "refused"), [(4, False), (16, True)])
|
|
84
|
+
def test_a_train_drives_a_band_over_the_20_ms_memory_of_the_resonance(
|
|
85
|
+
tmp_path, pairs, refused
|
|
86
|
+
):
|
|
87
|
+
"""A 4 ms burst at 1 kHz drives the band too little; 16 ms of it reads over the floor.
|
|
88
|
+
|
|
89
|
+
Read over 40 ms, the 16 ms train would read 5.5 mT/m and pass.
|
|
90
|
+
"""
|
|
91
|
+
lobes = [(_mT("x", sign * 15, 100e-6, 300e-6),) for sign in (1, -1)]
|
|
92
|
+
path = _written(tmp_path, lobes * pairs + [(pp.make_delay(0.1),)])
|
|
93
|
+
floor_band = safety.ForbiddenBand("x", 900.0, 1100.0, 0.0)
|
|
94
|
+
problems = ir.check(path, SYSTEM, limits=ir.CheckLimits(bands=(floor_band,)))
|
|
95
|
+
assert bool(problems) == refused
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@pytest.mark.parametrize(("pairs", "refused"), [(8, False), (10, True)])
|
|
99
|
+
def test_a_band_stating_no_amplitude_is_held_to_8_mt_per_m(tmp_path, pairs, refused):
|
|
100
|
+
"""An 8 ms burst at 1 kHz reads 5.5 mT/m in the band and passes; 10 ms reads 8.9 and is refused."""
|
|
101
|
+
lobes = [(_mT("x", sign * 15, 100e-6, 300e-6),) for sign in (1, -1)]
|
|
102
|
+
path = _written(tmp_path, lobes * pairs + [(pp.make_delay(0.1),)])
|
|
103
|
+
floor_band = safety.ForbiddenBand("x", 900.0, 1100.0, 0.0)
|
|
104
|
+
problems = ir.check(path, SYSTEM, limits=ir.CheckLimits(bands=(floor_band,)))
|
|
105
|
+
assert bool(problems) == refused
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
@pytest.mark.parametrize(("spoiler", "refused"), [(False, False), (True, True)])
|
|
109
|
+
def test_a_stated_amplitude_limits_the_gradient_while_the_band_holds_a_line(
|
|
110
|
+
tmp_path, spoiler, refused
|
|
111
|
+
):
|
|
112
|
+
"""A 1 kHz train of 8 mT/m lobes reads 9.5 mT/m in a band stating 12 mT/m.
|
|
113
|
+
|
|
114
|
+
The line alone stays under 12; a 30 mT/m spoiler in the same window takes
|
|
115
|
+
the gradient over it, as an echo-spacing lockout reads its amplitude.
|
|
116
|
+
"""
|
|
117
|
+
lobes = [(_mT("x", sign * 8, 100e-6, 300e-6),) for sign in (1, -1)]
|
|
118
|
+
middle = [(_mT("x", 30, 300e-6),)] if spoiler else []
|
|
119
|
+
path = _written(tmp_path, lobes * 30 + middle + lobes * 30)
|
|
120
|
+
stated = safety.ForbiddenBand("x", 900.0, 1100.0, 12.0)
|
|
121
|
+
problems = ir.check(path, SYSTEM, limits=ir.CheckLimits(bands=(stated,)))
|
|
122
|
+
assert bool(problems) == refused
|
|
123
|
+
|
|
124
|
+
|
|
82
125
|
def test_the_prescription_moves_a_train_into_the_forbidden_band_of_another_axis(train):
|
|
83
126
|
on_x, on_y = (ir.CheckLimits(bands=(band,)) for band in (BAND_X, BAND_Y))
|
|
84
127
|
assert ir.check(train, SYSTEM, rotation=QUARTER, limits=on_x) == []
|
|
@@ -100,7 +143,8 @@ def test_a_reflected_prescription_is_checked_as_it_plays(train):
|
|
|
100
143
|
def test_pns_is_refused_from_the_fraction_of_threshold_the_limits_allow(
|
|
101
144
|
tmp_path, pns_limit, refused
|
|
102
145
|
):
|
|
103
|
-
# 150 T/m/s for 200 us:
|
|
146
|
+
# 150 T/m/s for 200 us: 87% of the threshold, read at the raster interval
|
|
147
|
+
# ends, where a ramp's response peaks.
|
|
104
148
|
path = _written(tmp_path, [(_mT("x", 30, 200e-6),), (pp.make_delay(5e-3),)])
|
|
105
149
|
nerve = safety.ChronaxieModel(chronaxie=360e-6, rheobase=20.0, alpha=0.324)
|
|
106
150
|
problems = ir.check(
|
|
@@ -108,7 +152,7 @@ def test_pns_is_refused_from_the_fraction_of_threshold_the_limits_allow(
|
|
|
108
152
|
)
|
|
109
153
|
assert problems == (
|
|
110
154
|
[
|
|
111
|
-
"PNS of
|
|
155
|
+
"PNS of 87% of the chronaxie threshold, largest on x, at 0.0002 s in "
|
|
112
156
|
"block 1 reaches 80%"
|
|
113
157
|
]
|
|
114
158
|
if refused
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|