From 50c579cb69e65466ffe73c4efe99ecf9f7db348d Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Mon, 5 Aug 2024 03:52:00 +0100 Subject: [PATCH 01/15] Update Python version and fix dependency Tket needed to be updated and the new version needs Python 3.10. Should likely just move to 3.13 at some point. --- .github/workflows/deploy-wheels.yml | 8 ++++---- README.md | 2 +- building.md | 2 +- src/deny.toml | 1 - src/rasqal/README.md | 2 +- src/rasqal/pyproject.toml | 8 ++++---- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/deploy-wheels.yml b/.github/workflows/deploy-wheels.yml index 8c582ea..85de04e 100644 --- a/.github/workflows/deploy-wheels.yml +++ b/.github/workflows/deploy-wheels.yml @@ -10,7 +10,7 @@ jobs: strategy: fail-fast: false matrix: - os: ["ubuntu-20.04", "windows-2019", "macos-14", "macos-latest"] + os: ["ubuntu-20.04", "windows-2019", "macos-14"] steps: - uses: actions/checkout@v4 - name: Setup rust toolchain @@ -18,11 +18,11 @@ jobs: with: toolchain: 1.75.0 components: rustfmt clippy - - name: Set up Python 3.9 + - name: Set up Python 3.10 uses: actions/setup-python@v3 with: - python-version: 3.9 - if: ${{ matrix.os != 'macos-14' && matrix.os != 'macos-latest' }} + python-version: "3.10" + if: ${{ matrix.os != 'macos-14' }} - name: Install LLVM uses: ./.github/actions/install-llvm with: diff --git a/README.md b/README.md index 0d5c0e5..b6579aa 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you have any features or ideas you'd like to see implemented feel free to rai ### Getting Started -1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.9` of Python. +1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. 2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/examples.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/docs/examples.py). 3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) for a deep-dive into Rasqals concepts and data structures. diff --git a/building.md b/building.md index 8ae559a..eae51f6 100644 --- a/building.md +++ b/building.md @@ -2,7 +2,7 @@ Prerequisites: -1. [Python 3.9](https://www.python.org/downloads/). +1. [Python 3.10](https://www.python.org/downloads/). 2. [Rust](https://www.rust-lang.org/tools/install). With these installed then run: diff --git a/src/deny.toml b/src/deny.toml index 7a3fd98..76f905d 100644 --- a/src/deny.toml +++ b/src/deny.toml @@ -1,5 +1,4 @@ [licenses] -copyleft = "deny" unused-allowed-license = "warn" confidence-threshold = 0.95 allow = [ diff --git a/src/rasqal/README.md b/src/rasqal/README.md index 0d5c0e5..b6579aa 100644 --- a/src/rasqal/README.md +++ b/src/rasqal/README.md @@ -17,7 +17,7 @@ If you have any features or ideas you'd like to see implemented feel free to rai ### Getting Started -1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.9` of Python. +1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. 2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/examples.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/docs/examples.py). 3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) for a deep-dive into Rasqals concepts and data structures. diff --git a/src/rasqal/pyproject.toml b/src/rasqal/pyproject.toml index d753246..9a2936f 100644 --- a/src/rasqal/pyproject.toml +++ b/src/rasqal/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "rasqal" -version = "0.1.4" -requires-python = ">=3.9" +version = "0.1.5" +requires-python = ">=3.10" description = "A dynamically executed quantum-classical hybrid optimizing runtime." license = { file = "LICENSE" } readme = "README.md" @@ -9,7 +9,7 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Development Status :: 3 - Alpha", "Intended Audience :: Developers", - "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Programming Language :: Python", "Programming Language :: Rust", "Operating System :: MacOS", @@ -26,7 +26,7 @@ dependencies = [ "qiskit-optimization>=0.4.0", "qiskit-ignis>=0.7.0", "qiskit-aer>=0.13.0", - "pytket>=1.23.0" + "pytket>=1.31.0" ] [project.urls] From d877ade1187483f2adfb0d07424519e210b02b23 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 6 Aug 2024 18:11:38 +0100 Subject: [PATCH 02/15] Add some additional logging Added in some basic hooks to keep track of how long operations take. --- src/rasqal/src/evaluator.rs | 6 +++++- src/rasqal/src/execution.rs | 18 ++++++++++++++---- src/rasqal/src/runtime.rs | 33 +++++++++++++++++++++++++-------- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index 647276b..e0bec6b 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -25,13 +25,14 @@ use llvm_sys::core::{ }; use llvm_sys::prelude::LLVMValueRef; use llvm_sys::LLVMTypeKind; -use log::warn; +use log::{log, warn, Level}; use regex::Regex; use std::borrow::{Borrow, BorrowMut}; use std::collections::HashMap; use std::f64::consts::PI; use std::ffi::{c_uint, CStr}; use std::ops::Deref; +use std::time::Instant; macro_rules! operand_to_value { ($target:ident, $index:expr) => { @@ -231,7 +232,10 @@ impl QIREvaluator { target_global = global.get_next_global(); } + let start = Instant::now(); let builder = self.walk_function(entry_point, context.borrow()); + let took = start.elapsed(); + log!(Level::Info, "Evaluation took {:?}ms", took.as_millis()); // Create a callable graph with its arguments, but the values set as empty (validly). let mut callable = Ptr::from(CallableAnalysisGraph::new(&builder.graph)); diff --git a/src/rasqal/src/execution.rs b/src/rasqal/src/execution.rs index 5a25a4f..4e5f54f 100644 --- a/src/rasqal/src/execution.rs +++ b/src/rasqal/src/execution.rs @@ -24,6 +24,7 @@ use inkwell::{ use crate::config::RasqalConfig; use crate::exceptions::catch_panics; +use log::{log, Level}; use std::ops::Deref; use std::{ffi::OsStr, path::Path}; @@ -38,6 +39,11 @@ pub fn run_file( pub fn parse_file( path: impl AsRef, entry_point: Option<&str> ) -> Result, String> { + log!( + Level::Info, + "Parsing from {}.", + path.as_ref().to_str().unwrap() + ); let context = Context::create(); let module = file_to_module(path, &context)?; catch_panics(|| build_graph_from_module(&module, entry_point)) @@ -78,11 +84,15 @@ pub fn build_graph_from_module( Target::initialize_native(&InitializationConfig::default())?; inkwell::support::load_library_permanently(Path::new("")); + let entry_point = choose_entry_point(module_functions(module), entry_point)?; + + log!( + Level::Info, + "{} is the entry-point.", + entry_point.get_name().to_str().unwrap() + ); let evaluator = QIREvaluator::new(); - evaluator.evaluate( - &choose_entry_point(module_functions(module), entry_point)?, - &Ptr::from(module) - ) + evaluator.evaluate(&entry_point, &Ptr::from(module)) }) } diff --git a/src/rasqal/src/runtime.rs b/src/rasqal/src/runtime.rs index c835488..627b9aa 100644 --- a/src/rasqal/src/runtime.rs +++ b/src/rasqal/src/runtime.rs @@ -18,6 +18,7 @@ use std::borrow::{Borrow, BorrowMut}; use std::collections::{HashMap, HashSet, VecDeque}; use std::fmt::{Display, Formatter}; use std::ops::{Add, AddAssign, Deref, DerefMut}; +use std::time::Instant; /// Assign an order to nodes so we're able to tell trivially when one is further in the graph /// or not. @@ -410,7 +411,13 @@ impl QuantumRuntime { log!(Level::Info, "Currently executing graph:\n{}", exe_graph); } - self + log!( + Level::Info, + "Starting execution at {}.", + exe_graph.callable_graph.analysis_graph.identity + ); + let start = Instant::now(); + let results = self ._execute( exe_graph.callable_graph.analysis_graph.borrow(), &mut context @@ -419,10 +426,6 @@ impl QuantumRuntime { val.as_ref()?; let val = follow_reference(&val.unwrap(), &context); - if self.is_tracing() { - log!(Level::Info, "Total steps taken: {}", context.step_count) - } - // TODO: Centralize resolution, think we already have this elsewhere. Some(match val.deref() { Value::QuantumPromise(qbs, proj) => Ptr::from(Value::AnalysisResult(Ptr::from( @@ -442,7 +445,22 @@ impl QuantumRuntime { )), _ => val.clone() }) - }) + }); + + let took = start.elapsed(); + log!( + Level::Info, + "Run {} after {:?}ms with {} steps taken.", + if results.is_ok() { + "succeeded" + } else { + "failed" + }, + took.as_millis(), + context.step_count + ); + + results } fn _execute( @@ -472,7 +490,6 @@ impl QuantumRuntime { loop { context.step_count.add_assign(1); if let Some(limit) = &self.constraints.step_limit { - let stuff = context.step_count.deref().clone(); if context.step_count.deref() > limit { return Err(String::from(format!( "Execution step count limitation of {limit} exceeded." @@ -584,7 +601,7 @@ impl QuantumRuntime { }; // Trim since we're just logging per-line. - log!(Level::Info, "{}", message.trim()); + log!(target: &graph.identity, Level::Info, "{}", message.trim()); } Instruction::Subgraph(subgraph, var) => { let subgraph = follow_reference(subgraph, context).as_callable(); From 66f3e801f1936102cfd4cf8b873b1fae77cd0ebf Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 6 Aug 2024 18:12:30 +0100 Subject: [PATCH 03/15] Removed on-load logging init We're meant to be run from Python in general, this only triggered when you ran tests and cluttered the disk. --- src/rasqal/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rasqal/src/lib.rs b/src/rasqal/src/lib.rs index 09afc6b..b4f44ad 100644 --- a/src/rasqal/src/lib.rs +++ b/src/rasqal/src/lib.rs @@ -41,7 +41,6 @@ const DEFAULT_LOG_FILE: &str = "rasqal_logs.txt"; /// Native initialization of the loggers. Defaults to executable position if deployed, if it /// detects it's in development mode it'll move log file back up the folder tree. -#[ctor::ctor] fn native_logger_initialize() { let path = if let Ok(val) = current_exe() { // If we're embedded we need to be given a different file path to log too. From fd5d1db3cef30f8a61f2b2c3a04f72a413bef48a Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 6 Aug 2024 18:12:39 +0100 Subject: [PATCH 04/15] Removes redundant code --- src/rasqal/rasqal/runtime.py | 10 +--------- src/rasqal/src/evaluator.rs | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/rasqal/rasqal/runtime.py b/src/rasqal/rasqal/runtime.py index bb030f3..85fa258 100644 --- a/src/rasqal/rasqal/runtime.py +++ b/src/rasqal/rasqal/runtime.py @@ -2,19 +2,11 @@ # Copyright (c) 2024 Oxford Quantum Circuits Ltd from os import remove -from os.path import dirname, exists, join from tempfile import NamedTemporaryFile from typing import Any, List, Union -from .utils import initialize_logger from .adaptors import RuntimeAdaptor -from ._native import DEFAULT_LOG_FILE, Executor - -dev_directory = join(dirname(__file__), "..", "..", "..", "rasqalkin") - -# Enable file logging if we're in a development environment. -if exists(dev_directory): - initialize_logger(join(f"{dev_directory}", f"{DEFAULT_LOG_FILE}")) +from ._native import Executor class RasqalRunner: diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index e0bec6b..b3a31bf 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -235,7 +235,7 @@ impl QIREvaluator { let start = Instant::now(); let builder = self.walk_function(entry_point, context.borrow()); let took = start.elapsed(); - log!(Level::Info, "Evaluation took {:?}ms", took.as_millis()); + log!(Level::Info, "Evaluation took {}ms.", took.as_millis()); // Create a callable graph with its arguments, but the values set as empty (validly). let mut callable = Ptr::from(CallableAnalysisGraph::new(&builder.graph)); From 3b5992d5cc2de9a19e2c8f09a05ffaba7629fe48 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Thu, 20 Jun 2024 13:30:53 +0100 Subject: [PATCH 05/15] Minor comment changes --- src/rasqal/src/config.rs | 1 - src/rasqal/src/evaluator.rs | 3 +-- src/rasqal/src/graphs.rs | 11 +++-------- src/rasqal/src/instructions.rs | 5 ----- src/rasqal/src/smart_pointers.rs | 2 +- 5 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/rasqal/src/config.rs b/src/rasqal/src/config.rs index 246ea5b..fe85d5c 100644 --- a/src/rasqal/src/config.rs +++ b/src/rasqal/src/config.rs @@ -2,7 +2,6 @@ use crate::runtime::ActiveTracers; pub struct RasqalConfig { /// How many steps the symbolic executor is allowed to make before failing. - /// pub step_count_limit: Option, pub debug_tracers: ActiveTracers } diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index b3a31bf..c74edad 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -510,6 +510,7 @@ impl QIREvaluator { .as_str() }; + // nulls get coerced into 0 if processed correctly, but we have to do it manually here. if value == "null" { value = "0"; } @@ -549,8 +550,6 @@ impl QIREvaluator { }; // TODO: Make custom results object, probably re-use projection results. - // TODO: With LLVM version upgrade this likely isn't needed, this is all pointer-based - // anyway. match struct_name { "Qubit" => Some(Value::Qubit(Qubit::new(index))), "Result" => Some(Value::Int(index)), diff --git a/src/rasqal/src/graphs.rs b/src/rasqal/src/graphs.rs index 3300732..8a807ca 100644 --- a/src/rasqal/src/graphs.rs +++ b/src/rasqal/src/graphs.rs @@ -25,7 +25,7 @@ pub fn walk_logical_paths(graph: &Ptr) -> LogicalPathwayIterator LogicalPathwayIterator::new(graph) } -/// Walks the graph top-down taking all branches as it goes. Not a flat walk, as it flip=flops +/// Walks the graph top-down taking all branches as it goes. Not a flat walk, as it flip-flops /// between branches it means any pathways that are heavily weighted on one side will be completed /// later, sometimes exceptionally so. pub struct LogicalPathwayIterator { @@ -266,13 +266,8 @@ impl AnalysisGraph { self.edges.get(&node_id).unwrap() } - /// Adds this node to the graph, assigning it as the next auto-attach target. If you want - /// `add_orphan` - /// - /// While this node always gets attached as the next aa-target, you can cohose whether to add - /// `add_attached_edge` - /// You may not want to use this value in situations where you're dealing with the edge - /// attachment via another means. + /// Adds this node to the graph, assigning it as the next auto-attach target. If you don't want + /// it to auto-attach just set `add_attached_edge` as false. pub fn add_node_with_edge(&mut self, node: &Ptr, add_attached_edge: bool) { self.add_loose_node(node); diff --git a/src/rasqal/src/instructions.rs b/src/rasqal/src/instructions.rs index cd1ca0e..b91cb32 100644 --- a/src/rasqal/src/instructions.rs +++ b/src/rasqal/src/instructions.rs @@ -338,11 +338,6 @@ impl Display for Pauli { } } -// TODO: Remove pointers from objects who own the value - like qubit, analysis result, etc. -// A value should _be_ the representation of the value, and are always themselves wrapped in -// pointers, so the inner value also being a pointer increases complexity and adds potential for -// errors. - /// A value that can flow around the graph. pub enum Value { Empty, diff --git a/src/rasqal/src/smart_pointers.rs b/src/rasqal/src/smart_pointers.rs index 528d162..156c183 100644 --- a/src/rasqal/src/smart_pointers.rs +++ b/src/rasqal/src/smart_pointers.rs @@ -139,7 +139,7 @@ impl Display for FlexiRef { /// on pointers of differing types due to the structure of the internal data. /// /// Since its internals are raw pointers Rusts lifetime rules have no clue about them, and since -/// raw pointers are also treated specially in regards to the mutation you can take out +/// raw pointers are also treated specially regarding mutation you can take out /// infinite mutable aliases if performed through the raw pointer itself. /// /// Due to this constraint around mutation, we use macros that perform the operations on From fa19a382320a4067cfa640bca71a81baf2960729 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 13 Aug 2024 17:20:33 +0100 Subject: [PATCH 06/15] Minor improvements --- building.md | 33 ++++++--------- src/rasqal/rasqal/routing.py | 76 +++++++++++++++++++++++++++------- src/rasqal/src/analysis.rs | 12 +++--- src/rasqal/src/builders.rs | 2 +- src/rasqal/src/evaluator.rs | 10 ++--- src/rasqal/src/execution.rs | 3 +- src/rasqal/src/graphs.rs | 4 +- src/rasqal/src/instructions.rs | 8 ++-- src/rasqal/src/python.rs | 1 - src/rasqal/src/runtime.rs | 8 ++-- 10 files changed, 97 insertions(+), 60 deletions(-) diff --git a/building.md b/building.md index eae51f6..3facf73 100644 --- a/building.md +++ b/building.md @@ -9,43 +9,34 @@ With these installed then run: [Linux] -`sudo apt install -y build-essential libffi-dev xz-utils powershell curl wget gnupg apt-transport-https` +`sudo apt-get install -y ninja-build` [Windows] -[Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/) is the windows package manager and should be installed first. +[Chocolatey](https://chocolatey.org/install) is a windows package manager that we use to organize some installs. -`winget install build-essential libffi-dev xz-utils powershell curl wget gnupg apt-transport-https 7-zip` +`choco install --accept-license -y ninja` -[Mac] - -Soon to come. +Optional: +`choco uninstall -y llvm` if you are having problems with the correct LLVM install being found. -When these tools have been downloaded you run `build.ps1` at `/src/build.ps1`. This will initialize a Python venv, build the Rust projects, install the resultant wheel into that environment and run tests. +[Mac] -From this point you can build the Rust project with cargo and deal with it seperately. -But if you need to redeploy the wheel and test things from Python you need to run the build script again. +`brew install ccache ninja` -If you have issues you can look at the [CI cross-OS build script](https://github.com/oqc-community/rasqal/blob/develop/.github/workflows/deploy-wheels.yml) and see what might be missing or out of date from the documentation. +When this is all done run `build.ps1` at `/src/build.ps1`. -#### Building LLVM from source +This will install and build LLVM, build all the Rust projects, build a wheel and install it into the local venv, perform style formatting and more. -If your system has no LLVM binaries available you can [build it yourself](https://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm). -You should only attempt this if you're familiar with LLVM already or have no binaries available, as it is rather involved and finicky on certain operating systems. +Once this has been done you can open up the Rust projects and run cargo like normal as LLVM has been built and cached. You cna also use the built venv to run the Python as well. -You can use these environmental variables to customize the LLVM build: -```bash -RSQL_LLVM_EXTERNAL_DIR=/path/to/llvm # Directory to locally-built LLVM. -RSQL_DOWNLOAD_LLVM=true # Whether to download anrd build LLVM. -RSQL_CACHE_DIR=/where/to/extract # Where to store the downloaded LLVM build. Defaults to target which gets cleared on clean. -... -``` +You'll have to re-run the build script if you want to build a new wheel to be available from the Python, but beyond that you can develop in whatever environment most suits you. #### Potential issues [PyCharm] -To get PyCharm to recognize the LLVM file path you need to add `LLVM_SYS_140_PREFIX={path_to_repo}/src/target/llvm14-0` to the environment variables for any Rust command. You can also use a config.toml with the same value. +To get PyCharm to recognize the LLVM file path you need to add `LLVM_SYS_150_PREFIX={path_to_repo}/src/target/llvm15-0` to the environment variables for any Rust command. You can also use a config.toml with the same value. [Windows] diff --git a/src/rasqal/rasqal/routing.py b/src/rasqal/rasqal/routing.py index abd3fdd..bcf0c16 100644 --- a/src/rasqal/rasqal/routing.py +++ b/src/rasqal/rasqal/routing.py @@ -1,9 +1,13 @@ from typing import Dict, Tuple, List, Union +import numpy as np + from .runtime import RasqalRunner from pytket.architecture import Architecture from pytket import Circuit, OpType, Qubit, Bit -from pytket.passes import SequencePass, DefaultMappingPass +from pytket.passes import SequencePass, DefaultMappingPass, AutoRebase +from sympy import sympify +from sympy import pi as sympi from .adaptors import BuilderAdaptor, RuntimeAdaptor @@ -28,6 +32,17 @@ def apply_routing( raise ValueError(f"Cannot apply routing to {str(runtime)}") +def to_halfturn(num): + try: + return sympify(num) / sympi + except: + raise ValueError("Cannot parse angle: {}".format(num)) + + +def de_halfturn(num): + return num * np.pi + + class TketBuilder(BuilderAdaptor): def __init__(self): self.circuit = Circuit() @@ -35,29 +50,29 @@ def __init__(self): def cx(self, controls, target, radii): self.circuit.add_qubit(Qubit(target), False) self.circuit.add_qubit(Qubit(controls[0]), False) - self.circuit.CRx(radii, controls[0], target) + self.circuit.CRx(to_halfturn(radii), controls[0], target) def cz(self, controls, target, radii): self.circuit.add_qubit(Qubit(target), False) self.circuit.add_qubit(Qubit(controls[0]), False) - self.circuit.CRz(radii, controls[0], target) + self.circuit.CRz(to_halfturn(radii), controls[0], target) def cy(self, controls, target, radii): self.circuit.add_qubit(Qubit(target), False) self.circuit.add_qubit(Qubit(controls[0]), False) - self.circuit.CRy(radii, controls[0], target) + self.circuit.CRy(to_halfturn(radii), controls[0], target) def x(self, qubit, radii): self.circuit.add_qubit(Qubit(qubit), False) - self.circuit.Rx(radii, qubit) + self.circuit.Rx(to_halfturn(radii), qubit) def y(self, qubit, radii): self.circuit.add_qubit(Qubit(qubit), False) - self.circuit.Ry(radii, qubit) + self.circuit.Ry(to_halfturn(radii), qubit) def z(self, qubit, radii): self.circuit.add_qubit(Qubit(qubit), False) - self.circuit.Rz(radii, qubit) + self.circuit.Rz(to_halfturn(radii), qubit) def swap(self, qubit1, qubit2): self.circuit.add_qubit(Qubit(qubit1), False) @@ -68,7 +83,7 @@ def reset(self, qubit): # We're just using a barrier as a tag for reset for now. # Also useful so that things don't move past it. self.circuit.add_qubit(Qubit(qubit), False) - self.circuit.add_barrier([qubit]) + self.circuit.Reset(qubit) def measure(self, qubit): # We don't measure into anything, so just imply qubit index == classical bit index. @@ -102,41 +117,72 @@ def execute(self, builder) -> Dict[str, int]: builder: TketBuilder SequencePass([DefaultMappingPass(self.arch)]).apply(builder.circuit) + self._apply_rebase(builder.circuit) return self.forwarded.execute(self._forward_circuit(builder)) + def _apply_rebase(self, circuit): + """Remaps the Tket circuit to the operations we parse via the builder APIs.""" + AutoRebase( + { + OpType.X, + OpType.Z, + OpType.Y, + OpType.CX, + OpType.Rz, + OpType.Rx, + OpType.Ry, + OpType.CRx, + OpType.CRy, + OpType.CRz, + OpType.Barrier, + OpType.Measure, + OpType.Reset, + OpType.SWAP, + }, + allow_swaps=True, + ).apply(circuit) + def _forward_circuit(self, builder) -> BuilderAdaptor: """Forwards the Tket circuit on to the new builder to be run in the forwarding runtime.""" fbuilder = self.forwarded.create_builder() for gate in builder.circuit: + if gate.op.type == OpType.X: + fbuilder.x(gate.qubits[0].index[0], np.pi) + if gate.op.type == OpType.Y: + fbuilder.x(gate.qubits[0].index[0], np.pi) + if gate.op.type == OpType.Z: + fbuilder.x(gate.qubits[0].index[0], np.pi) + if gate.op.type == OpType.CX: + fbuilder.cx([gate.qubits[0].index[0]], gate.qubits[1].index[0], np.pi) if gate.op.type == OpType.Rz: - fbuilder.z(gate.qubits[0].index[0], gate.op.params[0]) + fbuilder.z(gate.qubits[0].index[0], de_halfturn(gate.op.params[0])) elif gate.op.type == OpType.Rx: - fbuilder.x(gate.qubits[0].index[0], gate.op.params[0]) + fbuilder.x(gate.qubits[0].index[0], de_halfturn(gate.op.params[0])) elif gate.op.type == OpType.Ry: - fbuilder.y(gate.qubits[0].index[0], gate.op.params[0]) + fbuilder.y(gate.qubits[0].index[0], de_halfturn(gate.op.params[0])) elif gate.op.type == OpType.CRx: fbuilder.cx( [gate.qubits[0].index[0]], gate.qubits[1].index[0], - gate.op.params[0], + de_halfturn(gate.op.params[0]), ) elif gate.op.type == OpType.CRy: fbuilder.cy( [gate.qubits[0].index[0]], gate.qubits[1].index[0], - gate.op.params[0], + de_halfturn(gate.op.params[0]), ) elif gate.op.type == OpType.CRz: fbuilder.cz( [gate.qubits[0].index[0]], gate.qubits[1].index[0], - gate.op.params[0], + de_halfturn(gate.op.params[0]), ) elif gate.op.type == OpType.SWAP: fbuilder.swap(gate.qubits[0].index[0], gate.qubits[1].index[0]) elif gate.op.type == OpType.Measure: fbuilder.measure(gate.qubits[0].index[0]) - elif gate.op.type == OpType.Barrier: + elif gate.op.type == OpType.Reset: fbuilder.reset(gate.qubits[0].index[0]) return fbuilder diff --git a/src/rasqal/src/analysis.rs b/src/rasqal/src/analysis.rs index 89c9924..9a6b214 100644 --- a/src/rasqal/src/analysis.rs +++ b/src/rasqal/src/analysis.rs @@ -554,7 +554,7 @@ impl QuantumStatePredictor { self.state.measure(&qb.index); } } - QuantumOperations::Initialize() | QuantumOperations::I(_) => {} + QuantumOperations::Initialize() | QuantumOperations::Id(_) => {} } } } @@ -570,12 +570,12 @@ pub struct QuantumProjection { } /// A for-now list of linear gates and hardware operations that we can store and send to our -/// Python runtimes. In time these will be removed and we'll reconstruct gates from +/// Python runtimes. In time these will be removed, and we'll reconstruct gates from /// our other analysis structures. pub enum QuantumOperations { Initialize(), Reset(Vec), - I(Qubit), + Id(Qubit), U(Qubit, f64, f64, f64), X(Qubit, f64), Y(Qubit, f64), @@ -593,7 +593,7 @@ impl QuantumOperations { match self { QuantumOperations::Initialize() => vec![], QuantumOperations::Reset(qbs) => qbs.iter().collect(), - QuantumOperations::I(qb) + QuantumOperations::Id(qb) | QuantumOperations::U(qb, _, _, _) | QuantumOperations::X(qb, _) | QuantumOperations::Y(qb, _) @@ -618,7 +618,7 @@ impl Display for QuantumOperations { .collect::>() .join(", ") ), - QuantumOperations::I(qb) => format!("id[{qb}]"), + QuantumOperations::Id(qb) => format!("id[{qb}]"), QuantumOperations::U(qb, theta, phi, lambda) => { format!("U[{qb}] {theta},{phi},{lambda}") } @@ -856,7 +856,7 @@ impl QuantumProjection { builder.reset(qubit); } } - QuantumOperations::I(qb) => { + QuantumOperations::Id(qb) => { builder.i(qb); } QuantumOperations::U(qb, theta, phi, lambda) => { diff --git a/src/rasqal/src/builders.rs b/src/rasqal/src/builders.rs index a39c777..93dd721 100644 --- a/src/rasqal/src/builders.rs +++ b/src/rasqal/src/builders.rs @@ -6,7 +6,7 @@ use crate::features::QuantumFeatures; use crate::hardware::Qubit; use crate::python::RequiredFeatures; use crate::smart_pointers::Ptr; -use pyo3::{IntoPy, PyAny, PyObject, PyResult, Python}; +use pyo3::{IntoPy, PyAny, PyObject, Python}; use std::borrow::Borrow; use std::f64::consts::PI; use std::ops::{Deref, DerefMut}; diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index c74edad..744c9c7 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -13,10 +13,10 @@ use crate::smart_pointers::Ptr; use crate::with_mutable; use inkwell::basic_block::BasicBlock; use inkwell::module::Module; -use inkwell::types::{AnyType, AnyTypeEnum}; +use inkwell::types::AnyTypeEnum; use inkwell::values::{ - AggregateValue, AnyValue, AnyValueEnum, ArrayValue, AsValueRef, BasicValue, BasicValueEnum, - FunctionValue, InstructionOpcode, InstructionValue, StructValue + AnyValue, AnyValueEnum, AsValueRef, BasicValue, BasicValueEnum, FunctionValue, InstructionOpcode, + InstructionValue }; use inkwell::{FloatPredicate, IntPredicate}; use llvm_sys::core::{ @@ -503,7 +503,7 @@ impl QIREvaluator { .expect( format!( "Unable to find base profile value. Instruction: {}", - stringified_value.clone() + stringified_value ) .as_str() ) @@ -518,7 +518,7 @@ impl QIREvaluator { return match name { "Qubit" => Some(Value::Qubit(Qubit::new(value.parse().unwrap()))), "Result" => Some(Value::Int(value.parse().unwrap())), - _ => panic!("Attempted specific match on non-base-profile pointer. Instruction: {}, name: {}, value: {}", stringified_value.clone(), name.clone(), value.clone()) + _ => panic!("Attempted specific match on non-base-profile pointer. Instruction: {}, name: {}, value: {}", stringified_value, name, value) }; } diff --git a/src/rasqal/src/execution.rs b/src/rasqal/src/execution.rs index 4e5f54f..993429e 100644 --- a/src/rasqal/src/execution.rs +++ b/src/rasqal/src/execution.rs @@ -25,7 +25,6 @@ use inkwell::{ use crate::config::RasqalConfig; use crate::exceptions::catch_panics; use log::{log, Level}; -use std::ops::Deref; use std::{ffi::OsStr, path::Path}; /// Executes the file. @@ -222,7 +221,7 @@ mod tests { run_file( path, - &Vec::new(), + args, runtimes.borrow(), None, &Ptr::from(RasqalConfig::default()) diff --git a/src/rasqal/src/graphs.rs b/src/rasqal/src/graphs.rs index 8a807ca..1c15cf4 100644 --- a/src/rasqal/src/graphs.rs +++ b/src/rasqal/src/graphs.rs @@ -702,7 +702,9 @@ impl AnalysisGraphBuilder { } pub fn I(&self, qx: Value) -> Ptr { - with_mutable_self!(self.graph.add(InstructionBuilder::Gate(GateBuilder::I(qx)))) + with_mutable_self!(self + .graph + .add(InstructionBuilder::Gate(GateBuilder::Id(qx)))) } pub fn U(&self, qx: Value, theta: f64, phi: f64, lambda: f64) -> Ptr { diff --git a/src/rasqal/src/instructions.rs b/src/rasqal/src/instructions.rs index b91cb32..f7c9c7c 100644 --- a/src/rasqal/src/instructions.rs +++ b/src/rasqal/src/instructions.rs @@ -1093,7 +1093,7 @@ value_into!(bool, "bool", Bool); /// squash everything into R's with a pauli, but is there a good reason for keeping them split? pub enum Gate { /// Qubit - I(Ptr), + Id(Ptr), /// Qubit, theta, phi, lambda. U(Ptr, Ptr, Ptr, Ptr), @@ -1121,8 +1121,8 @@ pub enum Gate { pub struct GateBuilder {} impl GateBuilder { - /// See [`Gate::I`]. - pub fn I(qubit: Value) -> Gate { Gate::I(Ptr::from(qubit)) } + /// See [`Gate::Id`]. + pub fn Id(qubit: Value) -> Gate { Gate::Id(Ptr::from(qubit)) } /// See [`Gate::U`]. pub fn U(qubit: Value, theta: Value, phi: Value, lambda: Value) -> Gate { @@ -1183,7 +1183,7 @@ impl Display for Gate { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { f.write_str( match self { - Gate::I(qb) => { + Gate::Id(qb) => { format!("I {qb}") } Gate::U(qb, theta, phi, lambda) => { diff --git a/src/rasqal/src/python.rs b/src/rasqal/src/python.rs index 59e66eb..abae8ef 100644 --- a/src/rasqal/src/python.rs +++ b/src/rasqal/src/python.rs @@ -7,7 +7,6 @@ use crate::execution::{parse_file, run_file, run_graph, RuntimeCollection}; use crate::features::QuantumFeatures; use crate::graphs::ExecutableAnalysisGraph; use crate::instructions::Value; -use crate::runtime::ActiveTracers; use crate::smart_pointers::Ptr; use crate::{initialize_loggers, DEFAULT_LOG_FILE}; use log::{log, log_enabled, Level}; diff --git a/src/rasqal/src/runtime.rs b/src/rasqal/src/runtime.rs index 627b9aa..d1efe9c 100644 --- a/src/rasqal/src/runtime.rs +++ b/src/rasqal/src/runtime.rs @@ -17,7 +17,7 @@ use log::{log, Level}; use std::borrow::{Borrow, BorrowMut}; use std::collections::{HashMap, HashSet, VecDeque}; use std::fmt::{Display, Formatter}; -use std::ops::{Add, AddAssign, Deref, DerefMut}; +use std::ops::{AddAssign, Deref, DerefMut}; use std::time::Instant; /// Assign an order to nodes so we're able to tell trivially when one is further in the graph @@ -710,10 +710,10 @@ impl QuantumRuntime { } Instruction::Gate(gate) => { match gate.deref() { - Gate::I(qb) => { + Gate::Id(qb) => { let followed = follow_qubit(qb, context); let mut projection = context.activate_projection(&followed); - projection.add(&Ptr::from(QuantumOperations::I(followed.clone()))); + projection.add(&Ptr::from(QuantumOperations::Id(followed.clone()))); } Gate::U(qb, theta, phi, lambda) => { let followed = follow_qubit(qb, context); @@ -733,7 +733,7 @@ impl QuantumRuntime { match follow_reference(pauli, context).as_pauli() { Pauli::I => { - projection.add(&Ptr::from(QuantumOperations::I(followed))); + projection.add(&Ptr::from(QuantumOperations::Id(followed))); } Pauli::X => { projection.add(&Ptr::from(QuantumOperations::X(followed, radii))); From 566f9e509dc76fa36b33b8ed3657453d10ffe9fd Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 13 Aug 2024 17:27:48 +0100 Subject: [PATCH 07/15] Change hierarchy Move docs to doc folder, move examples to new folder as there will be more of them. --- README.md | 8 ++++---- building.md => docs/building.md | 0 development.md => docs/development.md | 0 features_and_concepts.md => docs/features_and_concepts.md | 0 quick_start.md => docs/quick_start.md | 0 {docs => examples}/examples.py | 0 src/rasqal/README.md | 8 ++++---- src/scripts/psakefile.ps1 | 3 ++- 8 files changed, 10 insertions(+), 9 deletions(-) rename building.md => docs/building.md (100%) rename development.md => docs/development.md (100%) rename features_and_concepts.md => docs/features_and_concepts.md (100%) rename quick_start.md => docs/quick_start.md (100%) rename {docs => examples}/examples.py (100%) diff --git a/README.md b/README.md index b6579aa..8b74fc2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Some of the key things this approach enables: 2. Enabling hybrid algorithms to be run on machines and tools with only a gate-level API available. This includes QASM API's if you use its simulation framework. 3. Lots of optimization potential when passed large amounts of classical context that a quantum algorithm uses to accentuate its own execution. -We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) that covers its internals in excruciating detail. +We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/docs/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) that covers its internals in excruciating detail. If you have any features or ideas you'd like to see implemented feel free to raise a [feature request](https://github.com/oqc-community/Rasqal/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=)! @@ -18,13 +18,13 @@ If you have any features or ideas you'd like to see implemented feel free to rai ### Getting Started 1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. -2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/examples.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/docs/examples.py). +2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). 3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) for a deep-dive into Rasqals concepts and data structures. ### Contributing -If you'd like to contribute your first destination will be to [build the system locally](https://github.com/oqc-community/rasqal/blob/develop/building.md). -There's also a [getting started](https://github.com/oqc-community/rasqal/blob/develop/development.md) page that covers some of the most important bits you'd need to know about the project before jumping into writing code. +If you'd like to contribute your first destination will be to [build the system locally](https://github.com/oqc-community/rasqal/blob/develop/docs/building.md). +There's also a [getting started](https://github.com/oqc-community/rasqal/blob/develop/docs/development.md) page that covers some of the most important bits you'd need to know about the project before jumping into writing code. After that feel free to fork the project and put up PRs with any work you would like to add. All experimental work that isn't ready for prime time has to be disabled by default and have no impact on core execution time and stability. diff --git a/building.md b/docs/building.md similarity index 100% rename from building.md rename to docs/building.md diff --git a/development.md b/docs/development.md similarity index 100% rename from development.md rename to docs/development.md diff --git a/features_and_concepts.md b/docs/features_and_concepts.md similarity index 100% rename from features_and_concepts.md rename to docs/features_and_concepts.md diff --git a/quick_start.md b/docs/quick_start.md similarity index 100% rename from quick_start.md rename to docs/quick_start.md diff --git a/docs/examples.py b/examples/examples.py similarity index 100% rename from docs/examples.py rename to examples/examples.py diff --git a/src/rasqal/README.md b/src/rasqal/README.md index b6579aa..8b74fc2 100644 --- a/src/rasqal/README.md +++ b/src/rasqal/README.md @@ -9,7 +9,7 @@ Some of the key things this approach enables: 2. Enabling hybrid algorithms to be run on machines and tools with only a gate-level API available. This includes QASM API's if you use its simulation framework. 3. Lots of optimization potential when passed large amounts of classical context that a quantum algorithm uses to accentuate its own execution. -We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) that covers its internals in excruciating detail. +We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/docs/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) that covers its internals in excruciating detail. If you have any features or ideas you'd like to see implemented feel free to raise a [feature request](https://github.com/oqc-community/Rasqal/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=)! @@ -18,13 +18,13 @@ If you have any features or ideas you'd like to see implemented feel free to rai ### Getting Started 1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. -2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/examples.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/docs/examples.py). +2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). 3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) for a deep-dive into Rasqals concepts and data structures. ### Contributing -If you'd like to contribute your first destination will be to [build the system locally](https://github.com/oqc-community/rasqal/blob/develop/building.md). -There's also a [getting started](https://github.com/oqc-community/rasqal/blob/develop/development.md) page that covers some of the most important bits you'd need to know about the project before jumping into writing code. +If you'd like to contribute your first destination will be to [build the system locally](https://github.com/oqc-community/rasqal/blob/develop/docs/building.md). +There's also a [getting started](https://github.com/oqc-community/rasqal/blob/develop/docs/development.md) page that covers some of the most important bits you'd need to know about the project before jumping into writing code. After that feel free to fork the project and put up PRs with any work you would like to add. All experimental work that isn't ready for prime time has to be disabled by default and have no impact on core execution time and stability. diff --git a/src/scripts/psakefile.ps1 b/src/scripts/psakefile.ps1 index a706aab..050188a 100644 --- a/src/scripts/psakefile.ps1 +++ b/src/scripts/psakefile.ps1 @@ -8,6 +8,7 @@ Properties { $ProjectRoot = Resolve-Path (Split-Path -Parent (Split-Path -Parent $PSScriptRoot)) $Root = Join-Path $ProjectRoot src $Docs = Join-Path $ProjectRoot docs + $Examples = Join-Path $ProjectRoot examples $BuildLlvm = Join-Path $Root build-llvm $Rasqal = Join-Path $Root rasqal $Target = Join-Path $Root target @@ -85,7 +86,7 @@ task test-rasqal -depends build-rasqal { } # Run our examples Python file. - Invoke-LoggedCommand -workingDirectory $Docs { + Invoke-LoggedCommand -workingDirectory $Examples { python examples.py } } From 6afe528f20117886b5caa8e4e730c581c53ff8e9 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 13 Aug 2024 17:48:13 +0100 Subject: [PATCH 08/15] Adding to-do to certain instructions This was a mistake in roll-over capabilities. --- src/rasqal/src/evaluator.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index 744c9c7..c4ed381 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -665,8 +665,10 @@ impl QIREvaluator { } InstructionOpcode::Switch | InstructionOpcode::IndirectBr - | InstructionOpcode::Invoke - | InstructionOpcode::FNeg => { + | InstructionOpcode::Invoke => { + todo!("{}", inst.print_to_string().to_string()) + } + InstructionOpcode::FNeg => { self.eval_fneg(inst, graph, context); } InstructionOpcode::Add => { From a6a1b3d102951413c78ae494f8449ff4202e6bb5 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 13 Aug 2024 17:47:08 +0100 Subject: [PATCH 09/15] Expanding documentation --- README.md | 4 +-- docs/FAQ.md | 14 ++++++++++ docs/development.md | 25 ----------------- docs/features_and_concepts.md | 48 ++++++++++++-------------------- docs/papers/Rasqal Draft v2.pdf | Bin 157508 -> 0 bytes docs/papers/Rasqal Draft v3.pdf | Bin 0 -> 126592 bytes docs/quick_start.md | 6 ++++ src/rasqal/README.md | 2 +- src/rasqal/src/evaluator.rs | 34 +++++++++++----------- src/rasqal/src/execution.rs | 1 + src/rasqal/src/features.rs | 1 + src/rasqal/src/graphs.rs | 6 ++-- src/rasqal/src/hardware.rs | 1 + src/rasqal/src/instructions.rs | 24 ++++++++++++++-- 14 files changed, 86 insertions(+), 80 deletions(-) create mode 100644 docs/FAQ.md delete mode 100644 docs/development.md delete mode 100644 docs/papers/Rasqal Draft v2.pdf create mode 100644 docs/papers/Rasqal Draft v3.pdf diff --git a/README.md b/README.md index 8b74fc2..8583eb0 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ If you have any features or ideas you'd like to see implemented feel free to rai ### Getting Started 1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. -2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). -3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) for a deep-dive into Rasqals concepts and data structures. +2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [examples](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). +3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v3.pdf) for a deep-dive into Rasqals concepts and data structures. ### Contributing diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 0000000..97503bb --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,14 @@ +# FAQ + +> After reading this it seems like any other hybrid runtime. What makes it different? + +Rasqal shares more DNA with formal verification tools and [model checkers](https://en.wikipedia.org/wiki/Model_checking) than it does with runtimes even though superficially it does, indeed, run your code. +But it doesn't view it as running, in fact it's just generating a quantum equation from all the information you've given it, in the form it deduces will give you the best results. + +It uses all the classical information provided to provide the constraints that the algorithm is running within, as well as analysing the evolving quantum state as much as it can. +Many of the classical constraints evaluation comes from existing ideas, but it also tries to do the same to the quantum circuit it's building (within reason). + +Many of its systems are currently in their infancy so may not be immediately noticeable, but in time they will. + +Rasqal works with other runtimes and sits at the exact point where they have generated the hybrid IR they consider encapsulates, fully, the algorithm they are trying to run. +Rasqal then takes this output and crunches it down even further. \ No newline at end of file diff --git a/docs/development.md b/docs/development.md deleted file mode 100644 index 7dc7fb5..0000000 --- a/docs/development.md +++ /dev/null @@ -1,25 +0,0 @@ -### R++ - -Our Rust code is actually more like C++ due to some fun pointer manipulation we do and heavily interlinked data structures. - -The main points to know are: - -1. We have a custom ref-counted smart-pointer that acts, superficially, like any other ref-counted smart pointer whose backing is a raw pointer. -2. The smart-pointer can point to anything pointer-like: actual pointers, references, mutable references, anything you can actually get a pointer too. -3. It uses macros to manipulate/call/fetch the pointers directly and avoid pointer-to-ref compiler issues. -4. You can mutate anything at any time through the smart-pointer and its macros, so mutability keywords are irrelevant. - -The smart pointer and its macros mean that two important features of Rust are disabled when they are involved: lifetime tracking/borrow checking and the one-mutable-reference constraint. -Pointer lifetimes is dealt with programatically - similar to C++ - and its internal structure allows bypassing Rusts aliasing rules when using its macros. - -Because of this the Rust you'll see will look a little different than in other projects. There are almost no lifetime constraints and those that are will be enforced to be the widest scope. -The `mut` keyword means nothing if a smart-pointer is in play, it will be able to be mutated anyway. - -But what does this actually mean in regard to writing code? Well, not much really. -You just write Rust as normal, no need to think about anything additional. -Just think of `Ptr` as a more feature-rich `Rc`. - -For anyone immediately concerned by reading this: raw pointers have special designation, specially those in `UnsafeCell`'s. -We are leaning upon some pretty niche documented constraints to keep within the bounds of Rusts expectations, if barely. - -We'd prefer to use more normal Rust, but right now its rules do not allow that without some major contortions. diff --git a/docs/features_and_concepts.md b/docs/features_and_concepts.md index f019af6..4933429 100644 --- a/docs/features_and_concepts.md +++ b/docs/features_and_concepts.md @@ -1,27 +1,19 @@ -Whenever Rasqal is first introduced to people they usually ask "How is this different from other hybrid runtimes? It looks exactly the same!". -On the surface it operates very similarly, so this question isn't that suprising. - -Its goals and the way it views the hybrid IRs is actually quite different, but to highlight these differences requires a bit of an explainer about some of its foundational concepts and philosophies. -Giving an introduction to them will paint its features (and how it works) in a different light, so we'll quickly cover them - -If you don't need that feel free to skip to the features list. - -### Concepts +### Core Ideas Describing Rasqal as a symbolic-execution driven optimizing runtime, while accurate from a high level, also manages to tell us very little about how it works. -A more precise description is that it's a quantum algorithm synthesis engine. +A more precise description is that it's a quantum algorithm synthesis engine. It treats hybrid IRs as nothing but a blueprint for the algorithms logic, but how that algorithm is actually realized is up to it. -It may decide to recursively squash classical expressions into your circuit, alternatively expand quantum results into classical, or squash two quantum methods together. +It may decide to recursively squash classical expressions into your circuit, alternatively expand quantum results into classical, or squash two quantum methods together. As long as the codes logic ends up with the same result, how it gets there is entirely up to Rasqal to decide. -Multiple -PU machines may also be roped in to run the algorithm or power its optimization passes: QPU, GPU, CPU, HPC(U). +Multiple -PU machines may also be roped in to run the algorithm or power its optimization passes: QPU, GPU, CPU, HPC(U). Entirely depends upon what machines are nearby. -_Note: As of writing it only uses local CPU and QPU, GPU/HPC support will come later. +_Note: As of writing it only uses local CPU and QPU, GPU/HPC support will come later. The decision to do many of these transforms is also 'no' right now, since they aren't in or have a rather specific trigger condition._ -To make these decisions accurately it needs to know everything about an algorithm as it runs. -Here's where its internal structures come into play: the graphs it builds are almost entirely constant. +To make these decisions accurately it needs to know everything about an algorithm as it runs. +Here's where its internal structures come into play: the graphs it builds are almost entirely constant. No system calls, no IO, the only variables are the ones passed in from our entry-point. The only exception to this rule is when it's decided we need to call out to a QPU or other external hardware. But as all our information is towards making these executions as optimized as possible this is an acceptable area of nondeterminism. @@ -29,36 +21,34 @@ But as all our information is towards making these executions as optimized as po These nearly-constant graphs allow very strong assertions to be given around data- and control-flow, and inform us to how the circuit to be sent to the QPU should be built. The graphs are then executed, and as we step through them we dynamically build up the queries to send to other hardware, executing when we reach a point that we absolutely need the result. -Rasqal doesn't execute QIR in a traditional sense, it uses it as a schema for encoding the logic that a hybrid algorithm uses. +Rasqal doesn't execute QIR in a traditional sense, it uses it as a schema for encoding the logic that a hybrid algorithm uses. Sometimes it will run very close to the QIR as-written because it's simple enough to not need transformation. In early versions this might happen more often than not, but this is not its function. In fact the less the execution run looks like the incoming QIR the better, because it means we've been able to do a lot of optimization and prediction. - - -If you are interested in a more thorough breakdown of its internals and concepts it has [a paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) which goes into them in detail. +If you are interested in a more thorough breakdown of its internals and concepts it has [a paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v3.pdf) which goes into them in detail. ### Features -This is a loose list of the most important features and capabilities it has right now, as well as what we want to build in the future. +This is a loose list of the most important features and capabilities it has right now, as well as what we want to build in the future. Like most documentation this may be slightly behind its actual capabilities, so if there's something marked as 'soon' that you'd like it may already be in. Currently available: 1. Full-spec QIR support [1] including the majority of classical LLVM instructions. Any profile which inherits off the base spec is by implicitly supported. 2. Variational algorithm capabilities via entry-point arguments and return values. -3. Multi-QPU execution capabilities - the quantum parts of an algorithm will only run on machines capable of supporting it. +3. Multi-QPU execution capabilities - the quantum parts of an algorithm will only run on machines capable of supporting it. 1. This will also support parallel and distributed QPU execution in the future. 4. Ability to route hybrid circuits. Initially supported by Tket [2]. 5. Classical and quantum instructions can be fully interwoven including data- and control-flow. 6. Support for more traditional constructs such as logging and exceptions. These in the future could be lowered into the hardware. The combination of these means that even if a QPU doesn't have built-in hybrid instruction support you can use Rasqal to execute hybrid code against it. -All it needs is gate-level operation support. +All it needs is gate-level operation support. We also have a QASM builder that is used to power our simulators, but this could also be used for integrations with anything that has a QASM API. -[1] Big int is the one exception here, this isn't supported. +[1] Big int is the one exception here, this isn't supported. There are also some instructions we silently ignore because they have no impact on how Rasqal views the world, such as qubit reference counting. [2] The wording here is rather precise as we don't route the QIR, we route the circuit we generate just before its sent to the QPU. @@ -68,18 +58,16 @@ Soon to be implemented/improved: 1. Automatically lowering logic into the hardware if support is available, such as conditionals, loops and exceptions. 2. Aggressive classical operation deference and folding. Currently, if you do a measure and immediately do classical operations on the result then it'll execute the circuit built up to that point. -We want to also defer the classical operations until we find a point where we _absolutely_ need to execute. -3. More circuit metadata to be passed to the backend when working out if it can run something. Circuit size, included gates, hardware features, as much as possible. + We want to also defer the classical operations until we find a point where we _absolutely_ need to execute. +3. More circuit metadata to be passed to the backend when working out if it can run something. Circuit size, included gates, hardware features, as much as possible. 4. Predicted execution plans. Allows tools to pass in QIR and get back precise information about each quantum execution: what circuit, values, features it requires etc. -This will allow tools sitting in front of Rasqal to tailor their own optimization passes. - -5. LLVM-15+. + This will allow tools sitting in front of Rasqal to tailor their own optimization passes. -Then we also have highly experimental features that will be worked on until proven viable or not. +Then we also have highly experimental features that will be worked on until proven viable or not. These will be available only if you enable them explicitly: 1. Quantum state analysis structures for performing indepth static analysis as we go. This powers many other features. 2. Quantum fragment simulation. Finding points in a circuit that if simulated/predicted allow for better optimization or distributed processing. 3. Using our analysis tools and splice/weaving techniques to split up and run large quantum circuits across multiple smaller machines. -community/rasqal/blob/develop/examples.md) for the sorts of code you could send to Rasqal as well as what it returns. \ No newline at end of file + community/rasqal/blob/develop/examples.md) for the sorts of code you could send to Rasqal as well as what it returns. \ No newline at end of file diff --git a/docs/papers/Rasqal Draft v2.pdf b/docs/papers/Rasqal Draft v2.pdf deleted file mode 100644 index fbcd05ea03fead2009d303fb00bd91871f576e5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157508 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¥ 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

pZ~7g$%9sFU6ZXKe7&3WfT{jiJd< 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%0ADqMnLWyXc~(kycwV=bemZwqUopK~{}SWiF{oxb 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 z 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 diff --git a/docs/papers/Rasqal Draft v3.pdf b/docs/papers/Rasqal Draft v3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1489c58bb79fa09a4630033c550838c54f93fb63 GIT binary patch literal 126592 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

-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 -He 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 literal 0 HcmV?d00001 diff --git a/docs/quick_start.md b/docs/quick_start.md index dfcd8c6..fdbde62 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -1,5 +1,10 @@ ### Getting started +We have an examples folder in `/examples` that shows off much of what will be talked about here. +If you prefer to tinker with code that folder also has a Q# project you can play with and then use Rasqal to run the generated QIR. + +### Basics + To run Rasqal you'll need a QIR file, whether in its human-readable .ll form or bitcode. We have some pre-built QIR that we use for tests (`src/tests/qsharp`) that you can use and modify if needed. @@ -7,6 +12,7 @@ For our first example we're going to use the default simulator backend, so will Since we're not providing a custom backend our Python to run Rasqal is relatively simple. If your QIR has no return value or arguments, this is how you call it: + ```python from rasqal.simulators import fetch_qasm_runner diff --git a/src/rasqal/README.md b/src/rasqal/README.md index 8b74fc2..363774c 100644 --- a/src/rasqal/README.md +++ b/src/rasqal/README.md @@ -19,7 +19,7 @@ If you have any features or ideas you'd like to see implemented feel free to rai 1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. 2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). -3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) for a deep-dive into Rasqals concepts and data structures. +3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v3.pdf) for a deep-dive into Rasqals concepts and data structures. ### Contributing diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index c4ed381..7c06b4d 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -66,10 +66,10 @@ macro_rules! operand_to_bb { }; } -// TODO: Since Inkwell dosen't expose things properly try and use the llvm-sys objects to find the -// data. We want to remove all the string fetching/matching as it's inefficent. +// TODO: Since Inkwell doesn't expose things properly try and use the llvm-sys objects to find the +// data. We want to remove all the string fetching/matching as it's inefficient. -/// Fetches the assignment variable (&{value}) from a stringified LLVM instruction. +/// Fetches the assignment variable &{value} = ... from a stringified LLVM instruction. pub fn get_ref_id_from_instruction(inst: &InstructionValue) -> String { let inst_str = inst .to_string() @@ -91,6 +91,7 @@ pub fn parse_ref_id_from_instruction(inst: &InstructionValue) -> Option parse_ref_id_from_instruction_str(&inst_str) } +/// See [`get_ref_id_from_instruction`]. pub fn parse_ref_id_from_instruction_str(inst_str: &str) -> Option { let llvm_var_finder = Regex::new("([%@][^ ]*) =").unwrap(); llvm_var_finder.captures(inst_str).map_or_else( @@ -99,13 +100,10 @@ pub fn parse_ref_id_from_instruction_str(inst_str: &str) -> Option { ) } -pub fn get_ref_id_from_value(ptr_string: &str) -> String { - parse_ref_id_from_value(ptr_string).expect("Can't parse ref-id from value.") -} - -/// TODO: Need a proper way to get the variables from a general state, while this works it's not -/// entirely bulletproof and needs tweaking as issues come up. And issues caused from it are not -/// immediately obvious. +// TODO: Need a proper way to get the variables from a general state, while this works it's not +// entirely bulletproof and needs tweaking as issues come up. And issues caused from it are not +// immediately obvious. +/// Attempts to get a variable assignment from an argument value: some_call(%Array* %register, ...). pub fn parse_ref_id_from_value(ptr_string: &str) -> Option { let ptr_string = ptr_string.trim_matches('"').trim(); let local_variable_finder: Regex = Regex::new("^.*\\s(%[\\w0-9\\-]+)$").unwrap(); @@ -142,6 +140,11 @@ pub fn parse_ref_id_from_value(ptr_string: &str) -> Option { }) } +/// See [`parse_ref_id_from_value`] +pub fn get_ref_id_from_value(ptr_string: &str) -> String { + parse_ref_id_from_value(ptr_string).expect("Can't parse ref-id from value.") +} + /// Parsing context, molds all state required by the evalautor to run. pub struct EvaluationContext<'ctx> { pub module: Ptr>, @@ -305,7 +308,7 @@ impl QIREvaluator { let graph = Ptr::from(AnalysisGraph::new(method_name.clone())); with_mutable!(context.method_graphs.insert(method_name, graph.clone())); - // Build up anchor labels/nodes so we an associate them at the start and end. + // Build up anchor labels/nodes so we can associate them at the start and end. for bb in func.get_basic_blocks() { let bb_name = bb.get_name().to_str().unwrap().to_string(); let anchor_node = with_mutable!(graph.add_loose(Instruction::Label(bb_name.clone()))); @@ -385,8 +388,7 @@ impl QIREvaluator { unsafe { BasicValueEnum::new(LLVMGetAggregateElement(array, index as c_uint)) } } - /// `as_value` - /// almost never want to use this directly. Use [`as_value`] instead. + /// Recursive call of [`as_value`]. Call the non-recursive version for most use-cases. fn _as_value_recursive( &self, graph: &Ptr, type_enum: &AnyTypeEnum, val_enum: &AnyValueEnum, context: &Ptr @@ -647,7 +649,7 @@ impl QIREvaluator { self._as_value_recursive(graph, any_val.get_type().borrow(), any_val, context) } - /// Evaluates the instruction and adds it to the graph. + /// Evaluates a specific LLVM IR instruction and adds it to the graph. fn walk_instruction( &self, inst: &Ptr, graph: &Ptr, context: &Ptr @@ -663,9 +665,7 @@ impl QIREvaluator { InstructionOpcode::Br => { self.eval_branch(inst, graph, context); } - InstructionOpcode::Switch - | InstructionOpcode::IndirectBr - | InstructionOpcode::Invoke => { + InstructionOpcode::Switch | InstructionOpcode::IndirectBr | InstructionOpcode::Invoke => { todo!("{}", inst.print_to_string().to_string()) } InstructionOpcode::FNeg => { diff --git a/src/rasqal/src/execution.rs b/src/rasqal/src/execution.rs index 993429e..559f659 100644 --- a/src/rasqal/src/execution.rs +++ b/src/rasqal/src/execution.rs @@ -35,6 +35,7 @@ pub fn run_file( catch_panics(|| run_graph(&parse_file(path, entry_point)?, args, runtimes, config)) } +/// Parses the .ll/.bc file and builds an [`ExecutableAnalysisGraph`] for it. pub fn parse_file( path: impl AsRef, entry_point: Option<&str> ) -> Result, String> { diff --git a/src/rasqal/src/features.rs b/src/rasqal/src/features.rs index 0dcc8a0..b65e0bc 100644 --- a/src/rasqal/src/features.rs +++ b/src/rasqal/src/features.rs @@ -5,6 +5,7 @@ use std::fmt::{Display, Formatter}; /// A feature collection which a QPU needs to have in order to run a particular projection. pub struct QuantumFeatures { + /// Amount of qubits required for this feature. pub qubits: i32 } diff --git a/src/rasqal/src/graphs.rs b/src/rasqal/src/graphs.rs index 1c15cf4..2078fe9 100644 --- a/src/rasqal/src/graphs.rs +++ b/src/rasqal/src/graphs.rs @@ -562,7 +562,7 @@ impl PartialEq for CallableAnalysisGraph { impl Eq for CallableAnalysisGraph {} -/// Analysis graph that has been fully analyzed and is ready to be executed. Carries graph and +/// N analysis graph that has been fully analyzed and is ready to be executed. Carries graph and /// appropriate metadata. pub struct ExecutableAnalysisGraph { pub callable_graph: Ptr, @@ -625,8 +625,8 @@ impl Display for ExecutableAnalysisGraph { } } -/// `AnalysisGraph` -/// Note: uses auto-deref to allow it to act as an extension. +/// Wrapper for various graphs that allow you to use builder syntax on them. +/// Uses auto-deref to appropriately wrap the class. pub struct AnalysisGraphBuilder { pub graph: Ptr } diff --git a/src/rasqal/src/hardware.rs b/src/rasqal/src/hardware.rs index 1eb923b..a6999ba 100644 --- a/src/rasqal/src/hardware.rs +++ b/src/rasqal/src/hardware.rs @@ -4,6 +4,7 @@ use std::fmt::{Display, Formatter}; use std::hash::{Hash, Hasher}; +/// Virtual representation of a qubit. #[derive(Debug, Clone)] pub struct Qubit { pub index: i64 diff --git a/src/rasqal/src/instructions.rs b/src/rasqal/src/instructions.rs index f7c9c7c..a10a2c8 100644 --- a/src/rasqal/src/instructions.rs +++ b/src/rasqal/src/instructions.rs @@ -12,6 +12,7 @@ use std::fmt::{Display, Formatter}; use std::ops; use std::ops::{BitAnd, BitOr, BitXor, Deref}; +/// Common equality operators. #[derive(Copy, Clone)] pub enum Equalities { Equals, @@ -35,6 +36,7 @@ impl Display for Equalities { } } +/// Standard arithmatic and bitwise operators. pub enum Operator { Multiply, Divide, @@ -130,6 +132,7 @@ pub enum Instruction { Expression(Expression, Option) } +/// Static builder for instructions. Just makse processing them easier. pub struct InstructionBuilder {} impl InstructionBuilder { @@ -338,7 +341,13 @@ impl Display for Pauli { } } -/// A value that can flow around the graph. +/// Values are the single 'Value' that is embedded into the graph at creation or at runtime. They +/// are an implicitly-casting and comparing enum that have many overrides for all normal operations +/// and hook into overarching functions such as auto-folding and increasing deferral duration. +/// +/// When you have two Values who are primitives or arrays they operate as you'd expect. It's only +/// when one side s a promise or a projection do they get far more complicated and trigger further +/// functionality. pub enum Value { Empty, Byte(i8), @@ -368,7 +377,6 @@ pub enum Value { impl Clone for Value { fn clone(&self) -> Self { - // TODO: As above, strip pointers away from certain objects. match self { Value::Empty => Value::Empty, Value::Byte(val) => Value::Byte(*val), @@ -667,6 +675,11 @@ impl Value { // TODO: Improve projection results. It's a value distribution (and many other forms), come up // with rules regarding certain numbers. +/// When equality is attempted against Values they do a type match then a value match. +/// +/// For primitives they just do a cast-then-compare. +/// For arrays they do an element-value compare. +/// For more complicated objects they delegate to the custom comparetor. impl PartialEq for Value { fn eq(&self, other: &Self) -> bool { match self { @@ -1120,6 +1133,7 @@ pub enum Gate { pub struct GateBuilder {} +/// Static builder for gates hiding a lot of the verbosity of creation. impl GateBuilder { /// See [`Gate::Id`]. pub fn Id(qubit: Value) -> Gate { Gate::Id(Ptr::from(qubit)) } @@ -1139,14 +1153,17 @@ impl GateBuilder { Gate::R(Ptr::from(pauli), Ptr::from(qubit), Ptr::from(theta)) } + /// See [`Gate::X`]. pub fn X(qubit: Value, theta: Value) -> Gate { GateBuilder::R(Value::Pauli(Pauli::X), qubit, theta) } + /// See [`Gate::Y`]. pub fn Y(qubit: Value, theta: Value) -> Gate { GateBuilder::R(Value::Pauli(Pauli::Y), qubit, theta) } + /// See [`Gate::Z`]. pub fn Z(qubit: Value, theta: Value) -> Gate { GateBuilder::R(Value::Pauli(Pauli::Z), qubit, theta) } @@ -1161,14 +1178,17 @@ impl GateBuilder { ) } + /// See [`Gate::CX`]. pub fn CX(controllers: Value, target: Value, theta: Value) -> Gate { GateBuilder::CR(Value::Pauli(Pauli::X), controllers, target, theta) } + /// See [`Gate::CZ`]. pub fn CZ(controllers: Value, target: Value, theta: Value) -> Gate { GateBuilder::CR(Value::Pauli(Pauli::Z), controllers, target, theta) } + /// See [`Gate::CY`]. pub fn CY(controllers: Value, target: Value, theta: Value) -> Gate { GateBuilder::CR(Value::Pauli(Pauli::Y), controllers, target, theta) } From 56e6ea438f87be178a34dac3f46fbcbed19d08ca Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Thu, 15 Aug 2024 14:20:59 +0100 Subject: [PATCH 10/15] Remove expansion from borrow-driven smart-pointer You should never be expanding into it anyway. --- src/rasqal/src/smart_pointers.rs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/rasqal/src/smart_pointers.rs b/src/rasqal/src/smart_pointers.rs index 156c183..e6c7e73 100644 --- a/src/rasqal/src/smart_pointers.rs +++ b/src/rasqal/src/smart_pointers.rs @@ -203,18 +203,7 @@ impl FlexiPtr { } } FlexiPtr::Borrow(borrow) => { - match val { - FlexiPtr::RefCounted(_) => { - panic!("Can't extract from ref-counted into borrow-driven flexi-pointer."); - } - FlexiPtr::Borrow(other_borrow) => { - // TODO: Probably doesn't work, test and fix. - // Reading a reference with a bitwise copy is probably fine as it's just a - // pointer anyway. - unsafe { (*borrow).write(other_borrow.read()) }; - } - _ => {} - } + panic!("Can't expand into borrow-driven flexi-pointers."); } _ => {} } @@ -272,7 +261,6 @@ impl FlexiPtr { unsafe { // Borrows don't require a drop, neither does None, only if we're the owner of // an object do we want to do anything to it. - if let FlexiPtr::RefCounted(ref_) = self { (**ref_).dec(); if (**ref_).ref_count() <= 0 { From ce4c8ec4295f1105a0978082c59d3100c390cf15 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Thu, 15 Aug 2024 14:21:14 +0100 Subject: [PATCH 11/15] Minor document cleanup --- src/rasqal/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rasqal/README.md b/src/rasqal/README.md index 363774c..141923a 100644 --- a/src/rasqal/README.md +++ b/src/rasqal/README.md @@ -9,7 +9,7 @@ Some of the key things this approach enables: 2. Enabling hybrid algorithms to be run on machines and tools with only a gate-level API available. This includes QASM API's if you use its simulation framework. 3. Lots of optimization potential when passed large amounts of classical context that a quantum algorithm uses to accentuate its own execution. -We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/docs/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) that covers its internals in excruciating detail. +We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/docs/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v3.pdf) that covers its internals in excruciating detail. If you have any features or ideas you'd like to see implemented feel free to raise a [feature request](https://github.com/oqc-community/Rasqal/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=)! @@ -18,7 +18,7 @@ If you have any features or ideas you'd like to see implemented feel free to rai ### Getting Started 1. Install Rasqal in your favourite Python venv by running `pip install rasqal`. Our current testing is done with `v3.10` of Python. -2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [Python example](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). +2. Read the [quick start](https://github.com/oqc-community/rasqal/blob/develop/docs/quick_start.md) and look at our [examples](https://github.com/oqc-community/Rasqal/blob/develop/examples/examples.py). 3. (Optional) Read the [paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v3.pdf) for a deep-dive into Rasqals concepts and data structures. ### Contributing From 869cd53516a3de8b362213cce79d6c813c96eef9 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Fri, 16 Aug 2024 12:49:58 +0100 Subject: [PATCH 12/15] Add qsharp sandbox project --- examples/README.md | 12 +++++++ examples/__init__.py | 0 examples/examples.py | 62 ++-------------------------------- examples/qsharp/qsharp.json | 1 + examples/qsharp/sandbox.ll | 46 +++++++++++++++++++++++++ examples/qsharp/src/main.qs | 12 +++++++ examples/sandbox.py | 29 ++++++++++++++++ examples/utils.py | 67 +++++++++++++++++++++++++++++++++++++ src/rasqal/README.md | 2 +- src/rasqal/pyproject.toml | 2 +- src/scripts/psakefile.ps1 | 27 +++++++++++++-- 11 files changed, 195 insertions(+), 65 deletions(-) create mode 100644 examples/README.md create mode 100644 examples/__init__.py create mode 100644 examples/qsharp/qsharp.json create mode 100644 examples/qsharp/sandbox.ll create mode 100644 examples/qsharp/src/main.qs create mode 100644 examples/sandbox.py create mode 100644 examples/utils.py diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..f923c26 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,12 @@ +## Examples + +All dependencies to run the examples are installed into the Rasqal venv if you are building normally. +If you can't run the full build, use `./bulid.ps1 -t "initialize-examples"` to install a Rasqal versio from pypi as a replacement. + +All files can be run directly. + +**Examples.py** holds examples of how to use Rasqals Python APIs to run QIR. + +**Sandbox.py** runs the sandbox Q# project in `qsharp/src`. +Modify the project as you need and then run the Python file to see how Rasqal reacts. +Currently restricted to adaptive profile QIR. \ No newline at end of file diff --git a/examples/__init__.py b/examples/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/examples.py b/examples/examples.py index bd32f5b..6eb4963 100644 --- a/examples/examples.py +++ b/examples/examples.py @@ -1,9 +1,10 @@ import random -from rasqal.adaptors import BuilderAdaptor, RuntimeAdaptor from rasqal.runtime import RasqalRunner from rasqal.routing import apply_routing, build_ring_architecture +from utils import RuntimeMock + def execute_base_profile_bell(): """ @@ -51,65 +52,6 @@ def execute_full_bell(): assert results == is_one -class BuilderMock(BuilderAdaptor): - def __init__(self): - self.gates = [] - - def cx(self, controls, target, radii): - self.gates.append(f"cx {controls} {target} {radii}") - - def cz(self, controls, target, radii): - self.gates.append(f"cz {controls} {target} {radii}") - - def cy(self, controls, target, radii): - self.gates.append(f"cy {controls} {target} {radii}") - - def x(self, qubit, radii): - self.gates.append(f"x {qubit} {radii}") - - def y(self, qubit, radii): - self.gates.append(f"y {qubit} {radii}") - - def z(self, qubit, radii): - self.gates.append(f"z {qubit} {radii}") - - def swap(self, qubit1, qubit2): - self.gates.append(f"swap {qubit1} {qubit2}") - - def reset(self, qubit): - self.gates.append(f"reset {qubit}") - - def measure(self, qubit): - self.gates.append(f"measure {qubit}") - - def clear(self): - if any(self.gates): - self.gates.append("clear") - - -class RuntimeMock(RuntimeAdaptor): - def __init__(self): - self.executed = [] - self.results = { - "00": 100 - } - - def execute(self, builder: BuilderMock): - # Store our gates if we need to look at them. - self.executed = builder.gates - - # Then return the results we're mocking. - return self.results - - def create_builder(self) -> BuilderAdaptor: - # Returning our builder mock every time. - return BuilderMock() - - def has_features(self, required_features): - # We just state that we can run anything - return True - - bell_base_profile = """ ; ModuleID = 'bell' source_filename = "bell" diff --git a/examples/qsharp/qsharp.json b/examples/qsharp/qsharp.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/examples/qsharp/qsharp.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/qsharp/sandbox.ll b/examples/qsharp/sandbox.ll new file mode 100644 index 0000000..9b86e5b --- /dev/null +++ b/examples/qsharp/sandbox.ll @@ -0,0 +1,46 @@ +%Result = type opaque +%Qubit = type opaque + +define void @ENTRYPOINT__main() #0 { +block_0: + call void @__quantum__qis__h__body(%Qubit* inttoptr (i64 0 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*)) + call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 2 to %Qubit*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*)) + call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Result* inttoptr (i64 2 to %Result*)) + call void @__quantum__rt__array_record_output(i64 3, i8* null) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* null) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* null) + call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 2 to %Result*), i8* null) + ret void +} + +declare void @__quantum__qis__h__body(%Qubit*) + +declare void @__quantum__qis__cx__body(%Qubit*, %Qubit*) + +declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1 + +declare void @__quantum__rt__array_record_output(i64, i8*) + +declare void @__quantum__rt__result_record_output(%Result*, i8*) + +attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="3" "required_num_results"="3" } +attributes #1 = { "irreversible" } + +; module flags + +!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10} + +!0 = !{i32 1, !"qir_major_version", i32 1} +!1 = !{i32 7, !"qir_minor_version", i32 0} +!2 = !{i32 1, !"dynamic_qubit_management", i1 false} +!3 = !{i32 1, !"dynamic_result_management", i1 false} +!4 = !{i32 1, !"classical_ints", i1 true} +!5 = !{i32 1, !"qubit_resetting", i1 true} +!6 = !{i32 1, !"classical_floats", i1 false} +!7 = !{i32 1, !"backwards_branching", i1 false} +!8 = !{i32 1, !"classical_fixed_points", i1 false} +!9 = !{i32 1, !"user_functions", i1 false} +!10 = !{i32 1, !"multiple_target_branching", i1 false} diff --git a/examples/qsharp/src/main.qs b/examples/qsharp/src/main.qs new file mode 100644 index 0000000..53986bc --- /dev/null +++ b/examples/qsharp/src/main.qs @@ -0,0 +1,12 @@ +namespace Sandbox { + @EntryPoint() + operation Main() : Result[] { + use qs = Qubit[3]; + + H(qs[0]); + CNOT(qs[0], qs[1]); + CNOT(qs[0], qs[2]); + + MResetEachZ(qs) + } +} diff --git a/examples/sandbox.py b/examples/sandbox.py new file mode 100644 index 0000000..9ee04c5 --- /dev/null +++ b/examples/sandbox.py @@ -0,0 +1,29 @@ +import qsharp +import os +from qsharp import init, TargetProfile +from rasqal.runtime import RasqalRunner + +from utils import RuntimeMock + +directory_path = os.path.dirname(os.path.abspath(__file__)) + + +def run_sandbox(): + source_path = os.path.join(directory_path, "qsharp") + + # This initializes the static interpreter, so everything you want for QIR emission has to be set up here. + init(project_root=source_path, target_profile=TargetProfile.Adaptive_RI) + + # There's no auto entry-point detection and this expects an expression, including any arguments. + # So Namespace.EntryMethod(...) will then generate the QIR you want. + sandbox = qsharp.compile("Sandbox.Main()") + + runtime = RuntimeMock() + + runner = RasqalRunner(runtime) + results = runner.run_ll(str(sandbox)) + + print(f"Sandbox results: {results}") + + +run_sandbox() diff --git a/examples/utils.py b/examples/utils.py new file mode 100644 index 0000000..2ade7a7 --- /dev/null +++ b/examples/utils.py @@ -0,0 +1,67 @@ +from copy import copy + +from rasqal.adaptors import BuilderAdaptor, RuntimeAdaptor + + +class BuilderMock(BuilderAdaptor): + def __init__(self): + self.gates = [] + + def cx(self, controls, target, radii): + self.gates.append(f"cx {controls} {target} {radii}") + + def cz(self, controls, target, radii): + self.gates.append(f"cz {controls} {target} {radii}") + + def cy(self, controls, target, radii): + self.gates.append(f"cy {controls} {target} {radii}") + + def x(self, qubit, radii): + self.gates.append(f"x {qubit} {radii}") + + def y(self, qubit, radii): + self.gates.append(f"y {qubit} {radii}") + + def z(self, qubit, radii): + self.gates.append(f"z {qubit} {radii}") + + def swap(self, qubit1, qubit2): + self.gates.append(f"swap {qubit1} {qubit2}") + + def reset(self, qubit): + self.gates.append(f"reset {qubit}") + + def measure(self, qubit): + self.gates.append(f"measure {qubit}") + + def clear(self): + self.gates.clear() + + +class RuntimeMock(RuntimeAdaptor): + def __init__(self, suppress_printout=False): + self.executed = [] + self.results = { + "00": 100 + } + self.suppress = suppress_printout + + def execute(self, builder: BuilderMock): + # Store our gates if we need to look at them. + self.executed.append(copy(builder.gates)) + + if not self.suppress: + print("Running circuit:") + for gate in builder.gates: + print(gate) + + # Then return the results we're mocking. + return self.results + + def create_builder(self) -> BuilderAdaptor: + # Returning our builder mock every time. + return BuilderMock() + + def has_features(self, required_features): + # We just state that we can run anything + return True diff --git a/src/rasqal/README.md b/src/rasqal/README.md index 141923a..8583eb0 100644 --- a/src/rasqal/README.md +++ b/src/rasqal/README.md @@ -9,7 +9,7 @@ Some of the key things this approach enables: 2. Enabling hybrid algorithms to be run on machines and tools with only a gate-level API available. This includes QASM API's if you use its simulation framework. 3. Lots of optimization potential when passed large amounts of classical context that a quantum algorithm uses to accentuate its own execution. -We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/docs/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v3.pdf) that covers its internals in excruciating detail. +We also have a [full feature list and quick intro to its concepts](https://github.com/oqc-community/rasqal/blob/develop/docs/features_and_concepts.md) as well as a [draft paper](https://github.com/oqc-community/rasqal/blob/develop/docs/papers/Rasqal%20Draft%20v2.pdf) that covers its internals in excruciating detail. If you have any features or ideas you'd like to see implemented feel free to raise a [feature request](https://github.com/oqc-community/Rasqal/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=)! diff --git a/src/rasqal/pyproject.toml b/src/rasqal/pyproject.toml index 9a2936f..575bc39 100644 --- a/src/rasqal/pyproject.toml +++ b/src/rasqal/pyproject.toml @@ -2,7 +2,7 @@ name = "rasqal" version = "0.1.5" requires-python = ">=3.10" -description = "A dynamically executed quantum-classical hybrid optimizing runtime." +description = "A hybrid quantum-classical analysis/solving runtime." license = { file = "LICENSE" } readme = "README.md" classifiers = [ diff --git a/src/scripts/psakefile.ps1 b/src/scripts/psakefile.ps1 index 050188a..ba246c2 100644 --- a/src/scripts/psakefile.ps1 +++ b/src/scripts/psakefile.ps1 @@ -19,16 +19,19 @@ Properties { } task default -depends build -task build -depends build-llvm, build-rasqal, test-rasqal, format +task build -depends build-llvm, build-rasqal, test-rasqal, run-examples, format task check -depends check-licenses task format -depends format-rust, format-python task pypi-build -depends build, audit-rasqal, check +# Task should not be invoked if you're building and installing Rasqal locally. +task initialize-examples -depends install-rasqal-from-pypi, setup-examples, run-examples + task format-python { Invoke-LoggedCommand -workingDirectory $Root { pip install ruff ruff format - ruff check --fix --exit-zero + ruff check --fix --silent --exit-zero } } @@ -84,13 +87,31 @@ task test-rasqal -depends build-rasqal { pip install pytest pytest . } +} + +# Used to install and run the examples without building Rasqal fully. +task install-rasqal-from-pypi -depends check-environment { + Invoke-LoggedCommand -workingDirectory $Root { + pip install rasqal + } +} - # Run our examples Python file. +task setup-examples -depends check-environment { + # Install required dependencies. + Invoke-LoggedCommand -workingDirectory $Root { + pip install qsharp + } +} + +task run-examples -depends setup-examples { + # Run our Python examples. Invoke-LoggedCommand -workingDirectory $Examples { python examples.py + python sandbox.py } } + task check-environment { $pyenv = Join-Path $Root ".env" if ((Test-Path -Path $pyenv) -eq $false) { From 2dbea48f517153139ddff73adb7fee8ae15f3470 Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Fri, 16 Aug 2024 12:54:37 +0100 Subject: [PATCH 13/15] Add __quantum__qis__mresetz__body Also silenced warnings for 2 intrinsics we ignore for a good reason. --- src/rasqal/src/evaluator.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index 7c06b4d..7260c81 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -1162,6 +1162,20 @@ impl QIREvaluator { let qb = parse_qubit(inst, 0); graph.Measure(Value::Pauli(Pauli::Z), qb, target_value); } + + // Slightly non-official QIR, measure then reset. + "__quantum__qis__mresetz__body" => { + let target_value = if let Some(val) = parse_ref_id_from_instruction(inst.borrow()) { + Value::String(val) + } else { + parse_as_value(inst, 1).expect("Can't find result register.") + }; + + let qb = parse_qubit(inst, 0); + graph.Measure(Value::Pauli(Pauli::Z), qb.clone(), target_value); + graph.Reset(qb); + } + "__quantum__qis__cx__body" => { let control = parse_qubit(inst, 0); let target = parse_qubit(inst, 1); @@ -1384,6 +1398,10 @@ impl QIREvaluator { graph.Arithmatic(ref_id, value, Operator::PowerOf, power_multiplier); } + // Output recording doesn't matter for us. + "__quantum__rt__tuple_record_output" | "__quantum__rt__array_record_output" => { + } + // Bigint support that hopefully we'll just be able to ignore. "__quantum__rt__bigint_add" | "__quantum__rt__bigint_bitand" @@ -1410,8 +1428,6 @@ impl QIREvaluator { | "__quantum__rt__array_slice_1d" | "__quantum__rt__array_get_dim" | "__quantum__rt__array_concatenate" - | "__quantum__rt__tuple_record_output" - | "__quantum__rt__array_record_output" | "__quantum__rt__string_get_data" | "__quantum__rt__string_get_length" | "__quantum__rt__tuple_copy" From 20730e72c0d4afe8cab7686e23a0ccf843ab08ae Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Fri, 16 Aug 2024 13:19:48 +0100 Subject: [PATCH 14/15] Release for 0.1.6 --- src/rasqal/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rasqal/pyproject.toml b/src/rasqal/pyproject.toml index 9a2936f..bf5c9b4 100644 --- a/src/rasqal/pyproject.toml +++ b/src/rasqal/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "rasqal" -version = "0.1.5" +version = "0.1.6" requires-python = ">=3.10" description = "A dynamically executed quantum-classical hybrid optimizing runtime." license = { file = "LICENSE" } From 614dd885d61251478540420251ac144228ec66cb Mon Sep 17 00:00:00 2001 From: John Dumbell Date: Tue, 20 Aug 2024 13:53:37 +0100 Subject: [PATCH 15/15] Increase Rust version to 0.1.6 Doesn't come up since we don't deploy as a crate, but may as well keep in lock-step. --- src/rasqal/Cargo.toml | 2 +- src/rasqal/src/evaluator.rs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/rasqal/Cargo.toml b/src/rasqal/Cargo.toml index b1632e3..0aba8c9 100644 --- a/src/rasqal/Cargo.toml +++ b/src/rasqal/Cargo.toml @@ -1,7 +1,7 @@ [package] authors = ["John Dumbell"] name = "rasqal" -version = "0.1.0" +version = "0.1.6" edition = "2021" license = "BSD-3-Clause" description = "" diff --git a/src/rasqal/src/evaluator.rs b/src/rasqal/src/evaluator.rs index 7260c81..3bb8508 100644 --- a/src/rasqal/src/evaluator.rs +++ b/src/rasqal/src/evaluator.rs @@ -1399,8 +1399,7 @@ impl QIREvaluator { } // Output recording doesn't matter for us. - "__quantum__rt__tuple_record_output" | "__quantum__rt__array_record_output" => { - } + "__quantum__rt__tuple_record_output" | "__quantum__rt__array_record_output" => {} // Bigint support that hopefully we'll just be able to ignore. "__quantum__rt__bigint_add"