Below are some of the highlights for the 1.25 release of the QDK.
Branding update
The QDK has been updated to reflect Microsoft's branding for quantum computing, including updating the name of the VS Code extension to "Microsoft Quantum Development Kit" and updating the extension logo to the Mobius strip design.
New simulators
This release includes two new quantum simulators designed to provide high-performance noisy simulation and the ability to model qubit loss, which is an important "noise" consideration for neutral atom quantum hardware.
-
The Clifford simulator efficiently simulates circuits composed of Clifford operations, and can scale to thousands of qubits and run thousands of shots in seconds. This simulator is ideal for simulating error correction codes or other research involving Clifford circuits.
-
The GPU simulator uses GPU acceleration to simulate shots in parallel with high fidelity noise models. By leveraging the parallel processing power of modern GPUs, this simulator can handle wider (up to 27 qubits) and deeper circuits while modeling realistic noise and provide an order of magnitude speed-up over other simulators for certain challenging circuit types. By using a cross-platform GPU library, this simulator works on Windows, macOS, and Linux systems with compatible GPUs. (It will fall back to CPU simulation if no compatible GPU is found.)
Both simulators are currently exposed via the new NeutralAtomDevice Python class, and the noise models can be specified via the NoiseConfig class, both available in the qdk.simulators module. See the Benzene and Carbon sample notebooks for examples of using these simulators.
When running the simulators with qubit loss configured, lost qubits will be indicated in the measurement results with the special Loss result value when using raw labels, or with a - character when using ket labels.
Neutral Atom device visualizer
The NeutralAtomDevice class includes a show_trace method that takes the compiled program and visualizes the execution on an animated representation of a neutral atom device. This allows users to see how qubits are manipulated over time, including gate operations, measurements, and movement. This visualization can help with understanding the unique characteristics of neutral atom hardware, and how programs map to operations on the physical device. See the notebooks mentioned in the prior section for example usage.
nad.mp4
Circuit visualization improvements
In circuit diagrams, loops (for, while, etc.) from the source code are now represented as expandable components. This makes for a more compact and readable diagram, especially for iterative algorithms.
This release also includes other usability improvements to circuit diagrams, including labels at the top of expanded components, the ability to navigate to the call site of an operation by clicking on the corresponding component in the circuit diagram, and automatic expansion of trivial components.
circuits.mp4
Molecule visualizer
A MoleculeViewer class has been added to the collection of widgets (from qdk.widgets import MoleculeViewer) that can display 3D visualizations of molecules using data in .xyz and .cube formats. This is most useful when used in conjunction with the new qdk-chemistry package, which provides advanced tools for quantum chemistry exploration.
TableLookup library
A Table Lookup library has been implemented that provides efficient quantum implementations of table lookup operations. This library can be used to implement oracles for algorithms such as Grover's search, or to load classical data into quantum states for other algorithms. See https://github.com/microsoft/qdk/tree/main/library/table_lookup for the source, and the Configure Q# projects as external dependencies documentation for how to reference libraries in your Q# projects.
Other notable changes
- Update the pip install commands in notebook samples for qdk by @ScottCarda-MS in #2811
- Split OpenQASM into parser and compiler crates by @idavis in #2804
- Removing deps that are no longer needed by @idavis in #2814
- Update PyO3 to v0.27.2 by @orpuente-MS in #2816
- Propagating missing information in logical counts by @msoeken in #2817
- Add debugger visualization for arrays by @idavis in #2812
- Add optional
prune_classical_qubitssetting for circuit generation by @swernli in #2802 - Updated comment to trig functions to mention radians by @DmitryVasilevsky in #2825
- Update RIR reindex pass to avoid using extra qubits due to initial resets by @swernli in #2829
- Circuit diagrams: Show source code links for grouped operations by @minestarks in #2826
- Panic in Language Service: unexpected expr type in assignment by @swernli in #2833
- Prohibit return statements in apply block by @swernli in #2839
- Panic in QIR generation: "only some primitive types are supported" by @swernli in #2831
- Add functor constraint pass to OpenQASM compiler by @orpuente-MS in #2838
- Circuit diagrams: auto-expand all single nested operations by @minestarks in #2842
- Fixed angle adjustment size bug by @filipw in #2845
- Circuit diagrams: Group loops by @minestarks in #2827
- First version of table lookup library by @DmitryVasilevsky in #2834
- Circuit diagrams: Enable group_by_scope by default by @minestarks in #2848
- Circuit diagrams: Add label above expanded groups by @minestarks in #2843
- Support QDK_PYTHON_TELEMETRY environment variable by @minestarks in #2858
- Update branding to Microsoft Quantum by @minestarks in #2857
- Change logo to mobius strip by @billti in #2860
- Move theme logic by @billti in #2861
- Add sims and widgets by @billti in #2863
Full Changelog: v1.23.0...v1.25.1