waveforms 1.6.0__tar.gz → 1.6.2__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.
- {waveforms-1.6.0/waveforms.egg-info → waveforms-1.6.2}/PKG-INFO +1 -1
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/spectrum.py +3 -3
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/math.py +1 -1
- waveforms-1.6.2/waveforms/systemq_kernel/kernel/__init__.py +14 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/sched.py +75 -11
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/task.py +2 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/terminal/scan.py +4 -1
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/baqis.py +9 -1
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/u3.py +33 -2
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/fs.py +13 -8
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/version.py +1 -1
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/__main__.py +24 -7
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/waveform.py +44 -0
- {waveforms-1.6.0 → waveforms-1.6.2/waveforms.egg-info}/PKG-INFO +1 -1
- waveforms-1.6.0/waveforms/systemq_kernel/kernel/__init__.py +0 -11
- {waveforms-1.6.0 → waveforms-1.6.2}/LICENSE +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/MANIFEST.in +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/README.md +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/pyproject.toml +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/setup.cfg +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/setup.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/src/ikcp.c +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/src/ikcp.h +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/src/kcp.c +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/src/prime.c +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/src/waveform.c +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/src/waveform.h +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_clifford.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_compile.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_config.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_cycles.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_dicttree.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_group.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_lisp.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_msgpack.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_namespace.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_registry.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_scan_iter.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_tomo.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_verify.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_vm.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_waveform.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/__main__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/autoreload.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/baseconfig.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/cache.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/dicttree.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/loader.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/bayes.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fibheap.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/_fit.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/delay.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/geo.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/qubit_dynamics.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/readout.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/resonator.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/simple.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/graph.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/_SU_n_.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/clifford/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/clifford/funtions.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/permutation_group.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/prime.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/demodulate.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/distortion.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/func.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/transmon.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/namespace.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/arch/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/assembly.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/base.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/commands.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/compiler.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/config.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/interpreter.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/library.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/libs/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/macro.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/parse.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/prog.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/eval.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/exceptions.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/libs/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/libs/qelib1.inc +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/barrier.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/binaryop.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/binaryoperator.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/creg.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/customunitary.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/expressionlist.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/external.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/format.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/gate.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/gatebody.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/id.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/idlist.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/if_.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/indexedid.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/intnode.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/measure.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/node.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/nodeexception.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/opaque.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/prefix.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/primarylist.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/program.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/qreg.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/real.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/reset.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/unaryoperator.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/qasm.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/qasmlexer.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/qasmparser.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/simulator/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/simulator/mat.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/simulator/simple.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/tokenize.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/utils.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/arch/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/arch/base.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/assembly_left.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/assembly_right.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/compiler.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/config.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/library.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/macro.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/qasm.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/qlisp.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/stdlib.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/utils.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/simulator/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/clifford.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/db.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/mat.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/seq2mat.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/rb.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/tomo.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/transmon.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/xeb.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/registry.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan/dataset.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan/transforms.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan_iter.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/security/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/security/verify.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/server/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/server/__main__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/server/umsgpack.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/chat.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/basedevice.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/loader.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/utils.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/drivers/FakeInstrument.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/drivers/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/ipy_events.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/dhcp.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/dhcpd.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/kad.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/kcp.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/progress.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/storage/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/storage/crud.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/storage/models.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/bootstrap.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/config.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/_bigbrother.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/base.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/executor.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/progress.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/scan.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/scan_iters.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/terminal.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/crud.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/hdf5_utils.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/models.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/terminal/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/terminal/app.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/apps/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/baqis_config.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/baqis_seq.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/cr.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/qudit.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/std.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/math/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/math/state_classify.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/qlisp/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/qlisp/base.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/qlisp/prog.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/crud/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/crud/basic.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/crud/record.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/files.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/git.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/hdf5_utils.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/ipy_events.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/models.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/utils.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/units/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/__init__.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/plot_layout.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/plot_seq.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/qdat.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/waveform_parser.py +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/SOURCES.txt +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/dependency_links.txt +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/entry_points.txt +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/requires.txt +0 -0
- {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/top_level.txt +0 -0
|
@@ -15,11 +15,11 @@ def get_2d_spectrum_background(data):
|
|
|
15
15
|
Returns:
|
|
16
16
|
bg (np.ndarray): background
|
|
17
17
|
"""
|
|
18
|
-
x = np.
|
|
19
|
-
y = np.
|
|
18
|
+
x = np.nanmedian(data, axis=0)
|
|
19
|
+
y = np.nanmedian(data, axis=1)
|
|
20
20
|
x, y = np.meshgrid(x, y)
|
|
21
21
|
bg = x + y
|
|
22
|
-
offset = np.
|
|
22
|
+
offset = np.nanmedian(data - bg)
|
|
23
23
|
return bg - offset
|
|
24
24
|
|
|
25
25
|
|
|
@@ -158,7 +158,7 @@ def v2Hermitian(V):
|
|
|
158
158
|
X = V[:(N**2 - N) // 2]
|
|
159
159
|
Y = V[(N**2 - N) // 2:(N**2 - N)]
|
|
160
160
|
Z = V[(N**2 - N):]
|
|
161
|
-
H = np.diag(Z / 2).astype(
|
|
161
|
+
H = np.diag(Z / 2).astype(complex)
|
|
162
162
|
|
|
163
163
|
H[np.triu_indices(N, 1)] = X + 1j * Y
|
|
164
164
|
H += dagger(H)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from .bootstrap import bootstrap
|
|
2
|
+
from .sched import sched as scheduler
|
|
3
|
+
from .sched.sched import (after_task_finished, before_task_start,
|
|
4
|
+
before_task_step, cancel, create_task, exec, get,
|
|
5
|
+
get_config, get_executor, get_system_info,
|
|
6
|
+
register_hook, session, set, submit,
|
|
7
|
+
unregister_all_hooks, unregister_hook,
|
|
8
|
+
update_parameters)
|
|
9
|
+
from .sched.task import set_default_lib, update_tags
|
|
10
|
+
|
|
11
|
+
bootstrap()
|
|
12
|
+
|
|
13
|
+
executor = get_executor()
|
|
14
|
+
cfg = get_config()
|
|
@@ -55,6 +55,43 @@ __system_info = {
|
|
|
55
55
|
'packages': [],
|
|
56
56
|
'repositories': {}
|
|
57
57
|
}
|
|
58
|
+
__system_hooks = {
|
|
59
|
+
'before_task_start': [],
|
|
60
|
+
'after_task_finished': [],
|
|
61
|
+
'before_task_step': [],
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def register_hook(hook_name, func):
|
|
66
|
+
if func not in __system_hooks[hook_name]:
|
|
67
|
+
__system_hooks[hook_name].append(func)
|
|
68
|
+
return func
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def unregister_hook(hook_name, func):
|
|
72
|
+
if func in __system_hooks[hook_name]:
|
|
73
|
+
__system_hooks[hook_name].remove(func)
|
|
74
|
+
return func
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def unregister_all_hooks(hook_name):
|
|
78
|
+
if hook_name is None:
|
|
79
|
+
for k in __system_hooks.keys():
|
|
80
|
+
unregister_all_hooks(k)
|
|
81
|
+
elif hook_name in __system_hooks:
|
|
82
|
+
__system_hooks[hook_name].clear()
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def before_task_start(func):
|
|
86
|
+
return register_hook('before_task_start', func)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def after_task_finished(func):
|
|
90
|
+
return register_hook('after_task_finished', func)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def before_task_step(func):
|
|
94
|
+
return register_hook('before_task_step', func)
|
|
58
95
|
|
|
59
96
|
|
|
60
97
|
def _stack():
|
|
@@ -93,7 +130,12 @@ def clean_side_effects(task: Task,
|
|
|
93
130
|
pass
|
|
94
131
|
else:
|
|
95
132
|
cmds.append(WRITE(k, v))
|
|
96
|
-
return executor.feed(task.id,
|
|
133
|
+
return executor.feed(task.id,
|
|
134
|
+
-2,
|
|
135
|
+
cmds,
|
|
136
|
+
priority=task.task_priority,
|
|
137
|
+
name=task.name,
|
|
138
|
+
next_feed_time=0)
|
|
97
139
|
|
|
98
140
|
|
|
99
141
|
def submit_loop(task_queue: PriorityQueue, current_stack: list[Task],
|
|
@@ -163,7 +205,7 @@ def _feed_step(task, feed_step, executor):
|
|
|
163
205
|
task.runtime.prog.steps[feed_step].cmds,
|
|
164
206
|
extra,
|
|
165
207
|
priority=task.task_priority,
|
|
166
|
-
name
|
|
208
|
+
name=task.name,
|
|
167
209
|
next_feed_time=30)
|
|
168
210
|
if succeed == 0 and feed_step == 0:
|
|
169
211
|
with task.runtime._status_lock:
|
|
@@ -252,8 +294,8 @@ def _save_data(task,
|
|
|
252
294
|
return last_time, saved_step
|
|
253
295
|
|
|
254
296
|
|
|
255
|
-
def _exec_hooks(task, step, executor):
|
|
256
|
-
for hook in
|
|
297
|
+
def _exec_hooks(task, step, executor, hooks):
|
|
298
|
+
for hook in hooks:
|
|
257
299
|
hook(task, step, executor)
|
|
258
300
|
time.sleep(0.01)
|
|
259
301
|
|
|
@@ -283,7 +325,15 @@ def task_run_thread(task: Task, kill_event: threading.Event,
|
|
|
283
325
|
circuit = task.circuits
|
|
284
326
|
else:
|
|
285
327
|
circuit = []
|
|
286
|
-
executor.create_task(
|
|
328
|
+
executor.create_task(
|
|
329
|
+
task.id, {
|
|
330
|
+
'priority': task.task_priority,
|
|
331
|
+
'user': user,
|
|
332
|
+
'name': task.name,
|
|
333
|
+
'circuit': circuit
|
|
334
|
+
})
|
|
335
|
+
if task._init_hooks:
|
|
336
|
+
_exec_hooks(task, feed_step, executor, task._init_hooks)
|
|
287
337
|
|
|
288
338
|
try:
|
|
289
339
|
while True:
|
|
@@ -314,7 +364,7 @@ def task_run_thread(task: Task, kill_event: threading.Event,
|
|
|
314
364
|
|
|
315
365
|
if feed_more:
|
|
316
366
|
if task._hooks:
|
|
317
|
-
_exec_hooks(task, feed_step, executor)
|
|
367
|
+
_exec_hooks(task, feed_step, executor, task._hooks)
|
|
318
368
|
_feed_step(task, feed_step, executor)
|
|
319
369
|
feed_step += 1
|
|
320
370
|
|
|
@@ -324,8 +374,10 @@ def task_run_thread(task: Task, kill_event: threading.Event,
|
|
|
324
374
|
if (feed_finished and
|
|
325
375
|
task.runtime.finished_step >= task.runtime.compiled_step):
|
|
326
376
|
# executor.save(task.id, task.data_path)
|
|
327
|
-
executor.save(
|
|
328
|
-
|
|
377
|
+
executor.save(
|
|
378
|
+
task.id,
|
|
379
|
+
f'{task.data_path}/{task.record.id}', # save checkpoint once the Task is finished
|
|
380
|
+
task.result()['index'])
|
|
329
381
|
task.runtime.finished_time = time.time()
|
|
330
382
|
with task.runtime._status_lock:
|
|
331
383
|
task.runtime.status = 'finished'
|
|
@@ -340,6 +392,8 @@ def task_run_thread(task: Task, kill_event: threading.Event,
|
|
|
340
392
|
log.exception(f"{task.name}({task.id}) is failed")
|
|
341
393
|
executor.free(task.id)
|
|
342
394
|
finally:
|
|
395
|
+
if task._final_hooks:
|
|
396
|
+
_exec_hooks(task, feed_step, executor, task._final_hooks)
|
|
343
397
|
if not side_effect_cleared:
|
|
344
398
|
clean_side_effects(task, executor, task.runtime.keep_last_status)
|
|
345
399
|
_save_data(task)
|
|
@@ -446,7 +500,7 @@ def set(key: str, value: Any, cache: bool = False):
|
|
|
446
500
|
if not cache:
|
|
447
501
|
cmds.append(WRITE(key, value))
|
|
448
502
|
if len(cmds) > 0:
|
|
449
|
-
succeed = __executor.feed(0, -1, cmds,next_feed_time=0)
|
|
503
|
+
succeed = __executor.feed(0, -1, cmds, next_feed_time=0)
|
|
450
504
|
if succeed == 0:
|
|
451
505
|
raise RuntimeError(
|
|
452
506
|
f'Failed to set {key} to {value}, executor busy.')
|
|
@@ -499,6 +553,15 @@ def create_task(app, args=(), kwds={}):
|
|
|
499
553
|
task.runtime.id = generate_task_id()
|
|
500
554
|
task.runtime.user = __system_user
|
|
501
555
|
task.runtime.system_info = get_system_info()
|
|
556
|
+
for fun in __system_hooks['before_task_start']:
|
|
557
|
+
if fun not in task._init_hooks:
|
|
558
|
+
task._init_hooks.append(fun)
|
|
559
|
+
for fun in __system_hooks['before_task_step']:
|
|
560
|
+
if fun not in task._hooks:
|
|
561
|
+
task._hooks.append(fun)
|
|
562
|
+
for fun in __system_hooks['after_task_finished']:
|
|
563
|
+
if fun not in task._final_hooks:
|
|
564
|
+
task._final_hooks.append(fun)
|
|
502
565
|
return task
|
|
503
566
|
|
|
504
567
|
|
|
@@ -552,7 +615,8 @@ def exec(circuit,
|
|
|
552
615
|
cmds=[],
|
|
553
616
|
no_record=False,
|
|
554
617
|
parent=None,
|
|
555
|
-
dry_run: bool = False,
|
|
618
|
+
dry_run: bool = False,
|
|
619
|
+
**kw):
|
|
556
620
|
"""Execute a circuit.
|
|
557
621
|
|
|
558
622
|
Parameters:
|
|
@@ -581,7 +645,7 @@ def exec(circuit,
|
|
|
581
645
|
arch=arch,
|
|
582
646
|
lib=lib,
|
|
583
647
|
cfg=cfg,
|
|
584
|
-
cmds=cmds)|kw)
|
|
648
|
+
cmds=cmds) | kw)
|
|
585
649
|
if parent is not None:
|
|
586
650
|
t.parent = parent.id
|
|
587
651
|
t.runtime.prog.snapshot = parent.cfg.export()
|
|
@@ -141,6 +141,8 @@ class Task(BaseTask):
|
|
|
141
141
|
self.__cfg = None
|
|
142
142
|
self.__runtime.arch = get_arch(arch)
|
|
143
143
|
self._hooks: list[Callable[[Task, int, Executor], None]] = []
|
|
144
|
+
self._init_hooks: list[Callable[[Task, int, Executor], None]] = []
|
|
145
|
+
self._final_hooks: list[Callable[[Task, int, Executor], None]] = []
|
|
144
146
|
|
|
145
147
|
@property
|
|
146
148
|
def signal(self):
|
|
@@ -225,6 +225,7 @@ class Scan(App):
|
|
|
225
225
|
aggregation: None | dict[str, tuple[str, callable]] = None,
|
|
226
226
|
find_dim: None | tuple[str, int | float | complex] = None,
|
|
227
227
|
T=False,
|
|
228
|
+
figsize=None,
|
|
228
229
|
**kwds):
|
|
229
230
|
import matplotlib.pyplot as plt
|
|
230
231
|
from waveforms.visualization import autoplot
|
|
@@ -261,7 +262,9 @@ class Scan(App):
|
|
|
261
262
|
row += 1
|
|
262
263
|
|
|
263
264
|
if fig is None:
|
|
264
|
-
|
|
265
|
+
if figsize is None:
|
|
266
|
+
figsize = (5 * col, 4 * row)
|
|
267
|
+
fig, axis = plt.subplots(row, col, figsize=figsize)
|
|
265
268
|
#plt.tight_layout()
|
|
266
269
|
axis = np.array([axis]).reshape(row, col)
|
|
267
270
|
|
|
@@ -245,7 +245,15 @@ def _process_classify(data, gate_params_list, signal, classify):
|
|
|
245
245
|
result['population'].append(p1)
|
|
246
246
|
result['population'] = np.asarray(result['population'])
|
|
247
247
|
for i in range(4):
|
|
248
|
-
|
|
248
|
+
result[f'P{i}'] = populations[i]
|
|
249
|
+
for i, gate_params in enumerate(gate_params_list):
|
|
250
|
+
M = gate_params['params'].get('M', np.eye(4))
|
|
251
|
+
q = np.linalg.inv(np.asarray(M)) @ populations[:M.shape[0], i]
|
|
252
|
+
for j, v in enumerate(q):
|
|
253
|
+
if f'Q{j}' in result:
|
|
254
|
+
result[f'Q{j}'].append(v)
|
|
255
|
+
else:
|
|
256
|
+
result[f'Q{j}'] = [v]
|
|
249
257
|
elif signal & Signal.state:
|
|
250
258
|
result['state'] = state
|
|
251
259
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
3
|
from numpy import mod, pi
|
|
4
|
+
|
|
4
5
|
from waveforms.qlisp.base import MeasurementTask
|
|
5
6
|
from waveforms.qlisp.library import Library
|
|
6
7
|
from waveforms.qlisp.macro import add_VZ_rule
|
|
7
|
-
from waveforms.waveform import (cos, coshPulse, cosPulse, gaussian, mixing,
|
|
8
|
+
from waveforms.waveform import (cos, coshPulse, cosPulse, gaussian, mixing, pi,
|
|
8
9
|
sin, square, zero)
|
|
9
10
|
from waveforms.waveform_parser import wave_eval
|
|
10
11
|
|
|
@@ -26,7 +27,6 @@ def get_frequency_phase(ctx, qubit, phi, level1, level2):
|
|
|
26
27
|
return freq, phi
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
@lib.opaque('R')
|
|
30
30
|
def R(ctx, qubits, phi=0, level1=0, level2=1):
|
|
31
31
|
qubit, = qubits
|
|
32
32
|
|
|
@@ -68,9 +68,20 @@ def R(ctx, qubits, phi=0, level1=0, level2=1):
|
|
|
68
68
|
yield ('!add', 'time', width + plateau + buffer), qubit
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
@lib.opaque('R')
|
|
72
|
+
def _R(ctx, qubits, phi=0, level1=0, level2=1):
|
|
73
|
+
yield from R(ctx, qubits, phi, level1, level2)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@lib.opaque('R12')
|
|
77
|
+
def _R12(ctx, qubits, phi=0, level1=0, level2=1):
|
|
78
|
+
yield from R(ctx, qubits, phi, level1, level2)
|
|
79
|
+
|
|
80
|
+
|
|
71
81
|
@lib.opaque('P')
|
|
72
82
|
def P(ctx, qubits, phi):
|
|
73
83
|
import numpy as np
|
|
84
|
+
|
|
74
85
|
from waveforms.qlisp.assembly import call_opaque
|
|
75
86
|
|
|
76
87
|
phi += ctx.phases[qubits[0]]
|
|
@@ -382,3 +393,23 @@ def CZ(ctx, qubits):
|
|
|
382
393
|
|
|
383
394
|
yield ('!add', 'phase', ctx.params['phi1']), qubits[0]
|
|
384
395
|
yield ('!add', 'phase', ctx.params['phi2']), qubits[1]
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
@lib.opaque('Reset')
|
|
399
|
+
def Reset(ctx, qubits):
|
|
400
|
+
qubit, *_ = qubits
|
|
401
|
+
|
|
402
|
+
f12 = ctx.cfg.query(f'gate.R12.{qubit}.params.frequency')
|
|
403
|
+
duration = ctx.params.get('duration', 1e-6)
|
|
404
|
+
amp_ef = ctx.params.get('amp_ef', 1.0)
|
|
405
|
+
amp_f0_g1 = ctx.params.get('amp_f0_g1', 1.0)
|
|
406
|
+
freq_f0_g1 = ctx.params.get('freq_f0_g1', 1e9)
|
|
407
|
+
|
|
408
|
+
wav1 = amp_ef * square(duration) * cos(2 * pi * f12)
|
|
409
|
+
wav2 = amp_f0_g1 * square(duration) * cos(2 * pi * freq_f0_g1)
|
|
410
|
+
|
|
411
|
+
t = ctx.time[qubit]
|
|
412
|
+
|
|
413
|
+
yield ('!add', 'waveform', wav1 >> t), ('RF', qubit)
|
|
414
|
+
yield ('!add', 'waveform', wav2 >> t), ('Z', qubit)
|
|
415
|
+
yield ('!add', 'time', duration), qubit
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import gzip
|
|
1
2
|
import hashlib
|
|
3
|
+
import pickle
|
|
2
4
|
import zlib
|
|
3
5
|
from pathlib import Path
|
|
4
6
|
|
|
7
|
+
import dill
|
|
8
|
+
|
|
5
9
|
DATAPATH = Path.home() / 'data'
|
|
6
10
|
CHUNKSIZE = 1024 * 1024 * 4 # 4 MB
|
|
7
11
|
|
|
@@ -16,10 +20,10 @@ def get_data_path() -> Path:
|
|
|
16
20
|
|
|
17
21
|
|
|
18
22
|
def _save_object(data) -> tuple[str, str]:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
try:
|
|
24
|
+
data = pickle.dumps(data)
|
|
25
|
+
except:
|
|
26
|
+
data = dill.dumps(data)
|
|
23
27
|
hashstr = hashlib.sha1(data).hexdigest()
|
|
24
28
|
file = get_data_path(
|
|
25
29
|
) / 'objects' / hashstr[:2] / hashstr[2:4] / hashstr[4:]
|
|
@@ -30,11 +34,12 @@ def _save_object(data) -> tuple[str, str]:
|
|
|
30
34
|
|
|
31
35
|
|
|
32
36
|
def _load_object(file: str) -> bytes:
|
|
33
|
-
import gzip
|
|
34
|
-
import pickle
|
|
35
|
-
|
|
36
37
|
with gzip.open(get_data_path() / file, 'rb') as f:
|
|
37
|
-
|
|
38
|
+
try:
|
|
39
|
+
data = pickle.load(f)
|
|
40
|
+
except:
|
|
41
|
+
f.seek(0)
|
|
42
|
+
data = dill.load(f)
|
|
38
43
|
return data
|
|
39
44
|
|
|
40
45
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""Define version number here and read it from setup.py automatically"""
|
|
2
|
-
__version__ = "1.6.
|
|
2
|
+
__version__ = "1.6.2"
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import pickle
|
|
2
1
|
import pathlib
|
|
2
|
+
import pickle
|
|
3
|
+
|
|
3
4
|
import click
|
|
5
|
+
import dill
|
|
4
6
|
import matplotlib.pyplot as plt
|
|
5
7
|
import numpy as np
|
|
6
8
|
|
|
@@ -12,15 +14,30 @@ default_draw_methods = {
|
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
def load_data(fname):
|
|
17
|
+
try:
|
|
18
|
+
from home.hkxu.tools import get_record_by_id
|
|
19
|
+
record_id = int(fname)
|
|
20
|
+
return get_record_by_id(record_id).data
|
|
21
|
+
except:
|
|
22
|
+
pass
|
|
15
23
|
with open(fname, 'rb') as f:
|
|
16
|
-
|
|
24
|
+
try:
|
|
25
|
+
data = pickle.load(f)
|
|
26
|
+
except:
|
|
27
|
+
f.seek(0)
|
|
28
|
+
data = dill.load(f)
|
|
17
29
|
return data
|
|
18
30
|
|
|
19
31
|
|
|
20
|
-
def
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
32
|
+
def draw_common(data):
|
|
33
|
+
try:
|
|
34
|
+
script = data['meta']['plot_script']
|
|
35
|
+
assert script.strip()
|
|
36
|
+
global_namespace = {'plt': plt, 'np': np, 'result': data}
|
|
37
|
+
exec(script, global_namespace)
|
|
38
|
+
except:
|
|
39
|
+
from home.hkxu.tools import plot_record
|
|
40
|
+
plot_record(data['meta']['id'])
|
|
24
41
|
|
|
25
42
|
|
|
26
43
|
def draw_error(data, text="No validate plot script found"):
|
|
@@ -39,7 +56,7 @@ def plot(fname):
|
|
|
39
56
|
fname = pathlib.Path(fname)
|
|
40
57
|
data = load_data(fname)
|
|
41
58
|
try:
|
|
42
|
-
|
|
59
|
+
draw_common(data)
|
|
43
60
|
except:
|
|
44
61
|
default_draw_methods.get(fname.suffix, draw_error)(data)
|
|
45
62
|
except FileNotFoundError:
|
|
@@ -687,6 +687,50 @@ class Waveform:
|
|
|
687
687
|
])
|
|
688
688
|
return "$$\n{}\n$$".format(expr)
|
|
689
689
|
|
|
690
|
+
def _play(self, time_unit):
|
|
691
|
+
RATE = 48000
|
|
692
|
+
y = self.sample(sample_rate=RATE / time_unit)
|
|
693
|
+
play(y, RATE)
|
|
694
|
+
|
|
695
|
+
def play(self, time_unit=1):
|
|
696
|
+
import multiprocessing as mp
|
|
697
|
+
p = mp.Process(target=self._play, args=(time_unit, ), daemon=True)
|
|
698
|
+
p.start()
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
def play(data, rate=48000):
|
|
702
|
+
import io
|
|
703
|
+
import pyaudio
|
|
704
|
+
|
|
705
|
+
CHUNK = 1024
|
|
706
|
+
|
|
707
|
+
max_amp = np.max(np.abs(data))
|
|
708
|
+
|
|
709
|
+
if max_amp > 1:
|
|
710
|
+
data /= max_amp
|
|
711
|
+
|
|
712
|
+
data = np.array(2**15 * 0.999 * data, dtype=np.int16)
|
|
713
|
+
buff = io.BytesIO(data.data)
|
|
714
|
+
p = pyaudio.PyAudio()
|
|
715
|
+
|
|
716
|
+
try:
|
|
717
|
+
stream = p.open(format=pyaudio.paInt16,
|
|
718
|
+
channels=1,
|
|
719
|
+
rate=rate,
|
|
720
|
+
output=True)
|
|
721
|
+
try:
|
|
722
|
+
while True:
|
|
723
|
+
data = buff.read(CHUNK)
|
|
724
|
+
if data:
|
|
725
|
+
stream.write(data)
|
|
726
|
+
else:
|
|
727
|
+
break
|
|
728
|
+
finally:
|
|
729
|
+
stream.stop_stream()
|
|
730
|
+
stream.close()
|
|
731
|
+
finally:
|
|
732
|
+
p.terminate()
|
|
733
|
+
|
|
690
734
|
|
|
691
735
|
_zero_waveform = Waveform()
|
|
692
736
|
_one_waveform = Waveform(seq=(_one, ))
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from .bootstrap import bootstrap
|
|
2
|
-
from .sched import sched as scheduler
|
|
3
|
-
from .sched.sched import (cancel, create_task, exec, get, get_config,
|
|
4
|
-
get_executor, get_system_info, session, set, submit,
|
|
5
|
-
update_parameters)
|
|
6
|
-
from .sched.task import set_default_lib, update_tags
|
|
7
|
-
|
|
8
|
-
bootstrap()
|
|
9
|
-
|
|
10
|
-
executor = get_executor()
|
|
11
|
-
cfg = get_config()
|
|
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
|