All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Fixed
upload-release-asset
steps in.github/workflow/assets.yml
forwindows-x64
job.
- Fixed
upload-release-asset
steps in.github/workflow/assets.yml
. - Updated
RELEASE.md
.
- Conan as package manager
- res folder for resources
- different upgrades: C++23, CMake 3.12, Python 3.8 to 3.12
- GitHub workflows and jobs
- file reorganization: docs, include, src, test
- Git submodules
- CMake folder
- Option to enable/disable debug symbols, enabled by default
- Debug symbols in Python wheels, because of size limitation on PyPI
- CC backend:
- support for cQASM 1.2 features through new IR
- limitations
- integer values must be non-negative
- limitations
- support for resource constrained scheduler
- creates .map file reporting measurement statements present in input, to allow retrieving measurements downstream
- support for cQASM 1.2 features through new IR
- support for Python up to 3.11
- OperandsHelper class in ir/ops.h for easily grabbing qubit operand indices in new IR
- pass dec.Instructions: duration=0 in new-style decomposition rules now disables checking whether expansion fits, allowing automatic calculation of duration (and requiring scheduling after decomposition of such rules)
- CC backend:
- now uses new IR
- no longer requires key "cc" to be present in instructions that define gate decompositions
- key "readout_mode" no longer used
- classification of gates as measurement - which is used for the resource constrained scheduler, and to output a map of measurements - now based on signal definition ("signal/type" equals "measure" and "signal/value" non-empty)
- classification of gates as real-time measurement now based on signal definition ("signal/type" equals "measure" and "signal/value" empty)
- absence of key "cc" now implies empty "signal", so
"cc": { "signal": [] }
is no longer necessary - passes and architectures self-register statically to their respective factories
- Mapper/Router:
- uses new IR in place of old IR and com::ddg in place of Scheduler
- no longer assigns cycle numbers to output circuit
- no longer decomposes instructions into primitives in the output circuit (it still does internally for accurate scheduling)
- CC backend:
- support for JSON key "pragma/break" for instruction definitions
- macro expansion for JSON key instruction/signal/value (unused anyway)
- support for sweep points in API and the WriteSweepPointsPass
- Mapper/Router:
- Deprecated maxfidelity route heuristic
- 1qfirst lookahead mode
- pass dec.Instructions
- corrected ordering of instruction decomposition (which reversed multi-statement decompositions)
- decomposed instructions were silently made unconditional, we now copy instruction condition to decomposed instructions
- scalability options for coping with large multi-core systems, including a progress bar for the mapping process
- initial implementation of the Diamond architecture developed for Fujitsu (lead by Stephan Wong)
- full cQASM 1.2 read and write support, with options for different version levels and various language quirks
- new internal representation that encompasses the entire cQASM 1.2 language, and has many new generalized platform features
- lossless conversion functions between the two IR representations until all passes have been converted to the new representation
- new pass-based decomposition logic that supports arbitrary cQASM 1.2 code for the expansion and doesn't clobber scheduling information
- new pass for converting structured cQASM 1.2 control flow to basic block form
- new list scheduler based on the new IR
- all written cQASM files are now in 1.2 format by default
- the cQASM reader no longer has a JSON configuration file for mapping cQASM gates to OpenQL gates; this translation is now part of OpenQL's platform data
- the old scheduler is replaced with a new implementation for most option variations, that outputs slightly different schedules
- statistics report output is also formatted slightly different, though information content is the same
- CC backend:
- scheduling is now done using resource constraints by default
- excessive memory usage and slow platform construction for large multi-core systems
- architecture system: platform and compilation strategy defaults are now built into OpenQL, preventing the need for users to copypaste configuration files from the tests directory
- interface (C++ and Python) to compile cQASM 1.x
- allow 'wait' and 'barrier' in JSON section 'gate_decomposition'
- CC backend:
- improved reporting on JSON semantic errors
- added check for dimension of "instruments/qubits" against "instruments/ref_control_mode/control_bits"
- added check for dimension of "instructions//cc/[signals,ref_signal]/value" against "instruments/ref_control_mode/control_bits"
- added cross-check of "instruments/ref_control_mode" against "instrument_definitions"
- added support for "pragma/break" in JSON definition to define 'gate' that breaks out of loop
- added support to distribute measurement results via DSM
- added support for conditional gates
- added compile option "--backend_cc_run_once"
- added compile option "--backend_cc_verbose"
- pass management: instead of a hardcoded compilation strategy, the strategy can be adjusted and fine-tuned manually
- pass options: instead of doing everything with global options, global options were replaced with pass options as much as possible
- most documentation is now generated from code and can be queried using API calls
- scheduler resources are completely reworked to be made more generic
- major internal refactoring and restructuring to facilitate the above two things
- CC backend:
- renamed JSON field "signal_ref" to "ref_signal"
- renamed JSON field "ref_signals_type" to "signal_type"
- changed JSON field "static_codeword_override" to be a vector with one element per qubit parameter. To edit a JSON file using Sublime, use Replace with Regular Expressions: find=
"static_codeword_override": ([0-9])+
, replace="static_codeword_override": [\1]
- adopted new module synchronization scheme ("seq_bar semantics", requires CC software >= v0.2.0, PycQED after commit 470df5b)
- JSON field "instruction/type" no longer used by backend, use "instruction/cc/readout_mode" to flag measurement instructions
- allow specification of 2 triggers in JSON field "control_modes/*/trigger_bits" to support dual-QWG
- changed label in generated code from "mainLoop" to "mainLoop". Do not start kernel names with "" (this should be specified by the API)
- removed initial 1 cycle (20 ns) delay at start of kernels (resulting from bundle start_cycle starting at 1)
- correctly handle kernel names containing "_" in conjunction with looping (formerly duplicate labels could arise)
- added "seq_out 0,1" to program start to allow tracing of actual program start
- CC-light code generation, as the CC-light is being phased out in the lab, and its many passes were obstacles for pass management and refactoring
- rotation optimization based on matrices; matrices in general were removed entirely because no one was using it
- the commute variation pass, as it has been superseded by in-place commutations within the scheduler
- the Toffoli decomposition pass, as it wasn't really used; to decompose a Toffoli gate, use generic platform-driven decomposition instead
- the defunct fidelity estimation logic from metrics.cc; this may be added again later, but requires lots of cleanup and isn't currently in use
- quantumsim and qsoverlay output; apparently this was no longer being used, and it was quite intertwined with the CC-light backend
- changed register used for FOR loop, so it doesn't clash with delay setting
- fixed documentation for python setup and running tests
- various miscellaneous bugs, dangling pointers, and memory leaks
- support for CC backend
- fixed issue with duplicate kernel names
- updated json library to fix osx builds
- re-factored folders
- fixed issue with correct python library picking on tud win systems
- support for single qubit flux options (auto/manual modes)
- option to control generation of qasm files and dot graphs
- NPROCS=n variable can now be set for faster compilation to use n threads
- conda build recipe
- conda binary releases for Linux, Windows platform (not yet available for OSX due to a conda distribution issue)
- openql is now public
- improved resource-constrained scheduling
- sweep point array is now optional
- support for barrier/wait on all qubits
- set_sweep_points(sweep_points list, num of sweep points)
- resource-constrained qasm is generated by same scheduler for cc-light as is used to generate qisa
- Illegal parameter in gate_decomposition
- generated qasm code conforms to cQASM v1.0 specification
- added libqasm to pytest to test conformance of generated qasm
- ALAP scheduler is the default option (Issue #193)
- compiling an empty program raises error (Issue #164)
- tests are added to test option setting/getting (Issue #190)
- simplified interface of Program.set_sweep_points (Issue #184)
- instruction ordering to generate consistent qisa (Issue #190)
- stateful behaviour in OpenQL (Issue #171)
- qubit ordering in SMIS and SMIT instructions
- added detuning constraints for cclight
- alap scheduling for cclight
- wrong target qubits in the configuration files
- Jenkins test build profile to test against assembler
- API to obtain version number
- qisa format (removed comma)
- support for classical instructions
- support for flow control (selection and repetition)
- classical register manager implementation
- measure instruction updated to support classical target register
- kernels are not any more fused to generate a single qisa program
- kernel does not recieve iteration count, deprecated in favor of for-loop
- qisa format (pre-interval syntax updated)
- getting started example
- kernel conjugation/un-compute feature
- multi-qubit control decomposition
- toffoli decomposition
- QASM loader for QASM v1.0 syntax check
- initial support for Quantumsim backend
- vebosity levels
- program options can be set/get with simple api calls
- when adding gates, qubits should always be specified as list
- updated qisa-as support for tests
- qisa-as is not a part of openql
- prog.compile() does not get optimiz/schedule/verbose options
- static iteration count for scheduled qasm
- roation angle printing
- CCLight eQASM compiler
- unittests using qisa-as
- simplified gate decompositions
- wait/barrier instructions
- varying prepz duration
- M_PI issue in windows install
- CBox eQASM compiler
- Python and C++ interface
- Configuration file specifiction
- trace support for qumis code
- cmake based builds