qirrunner


Nameqirrunner JSON
Version 0.7.5 PyPI version JSON
download
home_pagehttps://github.com/qir-alliance/qir-runner
SummaryJIT compiles and executes programs written in QIR (Quantum Intermediate Representation).
upload_time2024-12-03 18:51:01
maintainerNone
docs_urlNone
authorMicrosoft
requires_python>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # QIR Runner

This project implements a basic QIR runtime and execution tool. Once installed, `qir-runner` will be available via the command line in your python environment as well as the `qirrunner` module which can be imported into a Python program.

## Usage

### Command line

```shell
Usage: qir-runner [OPTIONS] --file <PATH>

Options:
  -f, --file <PATH>        (Required) Path to the QIR file to run
  -e, --entrypoint <NAME>  Name of the entry point function to execute
  -s, --shots <NUM>        The number of times to repeat the execution of the chosen entry point in the program [default: 1]
  -r, --rngseed <NUM>      The value to use when seeding the random number generator used for quantum simulation
  -h, --help               Print help
  -V, --version            Print version
```

### Python module

From a Python program, `qirrunner` provides a `run` function and two output helpers `Output` and `OutputHandler`. If the `output_fn` parameter of `run` is not specified, output will be written to `stdout`. Supplying the parameter allows the output of the execution to be captured.

```python
from qirrunner import run, OutputHandler

path = "./runner/tests/resources/bv.bc"

handler = OutputHandler()
run(path, shots=2, output_fn=handler.handle)

print(handler.get_output())
```

## Installation

```shell
pip install qirrunner
```

### Installing from sdist

Platforms for which `qirrunner` doesn't have pre-built wheels (such as `aarch64` macos), installation is available via sdist. Before installing `qirrunner` via `pip`:

- Install a usable LLVM distribution which has `llvm-config` available.
- Set the `LLVM_SYS_140_PREFIX` environment variable to the LLVM installation directory
  - example: `export LLVM_SYS_140_PREFIX=/Users/sample/llvm`
- Install: `python -m pip install qirrunner`
  - This will build `qirrunner` from source. You will need a working Rust installation in order for this to compile.

## Implemented APIs

```llvm
double @__quantum__qis__arccos__body(double)
double @__quantum__qis__arcsin__body(double)
double @__quantum__qis__arctan__body(double)
double @__quantum__qis__arctan2__body(double)
void @__quantum__qis__assertmeasurementprobability__body(%Array*, %Array*, %Result*, double, %String*, double)
void @__quantum__qis__assertmeasurementprobability__ctl(%Array*, %Tuple*)
void @__quantum__qis__ccx__body(%Qubit*, %Qubit*)
void @__quantum__qis__cnot__body(%Qubit*, %Qubit*)
double @__quantum__qis__cos__body(double)
double @__quantum__qis__cosh__body(double)
void @__quantum__qis__cx__body(%Qubit*, %Qubit*)
void @__quantum__qis__cy__body(%Qubit*, %Qubit*)
void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
double @__quantum__qis__drawrandomdouble__body()
i64 @__quantum__qis__drawrandomint__body()
void @__quantum__qis__dumpmachine__body()
void @__quantum__qis__exp__adj(%Array*, double, %Array*)
void @__quantum__qis__exp__body(%Array*, double, %Array*)
void @__quantum__qis__exp__ctl(%Array*, %Tuple*)
void @__quantum__qis__exp__ctladj(%Array*, %Tuple*)
void @__quantum__qis__exp__ctl(%Array*, %Tuple*)
void @__quantum__qis__h__body(%Qubit*)
void @__quantum__qis__h__ctl(%Array*, %Qubit*)
double @__quantum__qis__ieeeremainder__body(double, double)
double @__quantum__qis__infinity__body()
i1 @__quantum__qis__isinf__body()
i1 @__quantum__qis__isnan__body()
i1 @__quantum__qis__isnegativeinfinity__body()
double @__quantum__qis__log__body(double)
%Result* @__quantum__qis__m__body(%Qubit*)
%Result* @__quantum__qis__measure__body(%Array*, %Array*)
%Result* @__quantum__qis__mresetz__body(%Qubit*)
void @__quantum__qis__mz__body(%Qubit*, %Result*)
double @__quantum__qis__nan__body()
void @__quantum__qis__r__adj(i2, double, %Qubit*)
void @__quantum__qis__r__body(i2, double, %Qubit*)
void @__quantum__qis__r__ctl(%Array*, %Tuple*)
void @__quantum__qis__r__ctladj(%Array*, %Tuple*)
bool @__quantum__qis__read_result__body(%Result*)
void @__quantum__qis__reset__body(%Qubit*)
void @__quantum__qis__rx__body(double, %Qubit*)
void @__quantum__qis__rx__ctl(%Array*, %Tuple*)
void @__quantum__qis__rxx__body(double, %Qubit*, %Qubit*)
void @__quantum__qis__ry__body(double, %Qubit*)
void @__quantum__qis__ry__ctl(%Array*, %Tuple*)
void @__quantum__qis__ryy__body(double, %Qubit*, %Qubit*)
void @__quantum__qis__rz__body(double, %Qubit*)
void @__quantum__qis__rz__ctl(%Array*, %Tuple*)
void @__quantum__qis__rzz__body(double, %Qubit*, %Qubit*)
void @__quantum__qis__s__adj(%Qubit*)
void @__quantum__qis__s__body(%Qubit*)
void @__quantum__qis__s__ctl(%Array*, %Qubit*)
void @__quantum__qis__s__ctladj(%Array*, %Qubit*)
double @__quantum__qis__sin__body(double)
double @__quantum__qis__sinh__body(double)
double @__quantum__qis__sqrt__body(double)
void @__quantum__qis__swap__body(%Qubit*, %Qubit*)
void @__quantum__qis__t__adj(%Qubit*)
void @__quantum__qis__t__body(%Qubit*)
void @__quantum__qis__t__ctl(%Array*, %Qubit*)
void @__quantum__qis__t__ctladj(%Array*, %Qubit*)
double @__quantum__qis__tan__body(double)
double @__quantum__qis__tanh__body(double)
void @__quantum__qis__x__body(%Qubit*)
void @__quantum__qis__x__ctl(%Array*, %Qubit*)
void @__quantum__qis__y__body(%Qubit*)
void @__quantum__qis__y__ctl(%Array*, %Qubit*)
void @__quantum__qis__z__body(%Qubit*)
void @__quantum__qis__z__ctl(%Array*, %Qubit*)
%Array* @__quantum__rt__array_concatenate(%Array*, %Array*)
%Array* @__quantum__rt__array_copy(%Array*, bool)
%Array* @__quantum__rt__array_create_1d(i32, i64)
i8* @__quantum__rt__array_get_element_ptr_1d(%Array*, i64)
i64 @__quantum__rt__array_get_size_1d(%Array*)
void @__quantum__rt__array_record_output(i64, i8*)
void @__quantum__rt__array_update_alias_count(%Array*, i32)
void @__quantum__rt__array_update_reference_count(%Array*, i32)
%BigInt* @__quantum__rt__bigint_add(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_bitand(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_bitnot(%BigInt*)
%BigInt* @__quantum__rt__bigint_bitor(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_bitxor(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_create_array(i32, i8*)
%BigInt* @__quantum__rt__bigint_create_i64(i64)
%BigInt* @__quantum__rt__bigint_divide(%BigInt*, %BigInt*)
bool @__quantum__rt__bigint_equal(%BigInt*, %BigInt*)
i8* @__quantum__rt__bigint_get_data(%BigInt*)
i32 @__quantum__rt__bigint_get_length(%BigInt*)
bool @__quantum__rt__bigint_greater(%BigInt*, %BigInt*)
bool @__quantum__rt__bigint_greater_eq(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_modulus(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_multiply(%BigInt*, %BigInt*)
%BigInt* @__quantum__rt__bigint_negate(%BigInt*)
%BigInt* @__quantum__rt__bigint_power(%BigInt*, i32)
%BigInt* @__quantum__rt__bigint_shiftleft(%BigInt*, i64)
%BigInt*@__quantum__rt__bigint_shiftright(%BigInt*, i64)
void @__quantum__rt__bigint_subtract(%BigInt*, %BigInt*)
%String* @__quantum__rt__bigint_to_string(%BigInt*)
void @__quantum__rt__bigint_update_reference_count(%BigInt*, i32)
void @__quantum__rt__bool_record_output(i1, i8*)
%String* @__quantum__rt__bool_to_string(i1)
%Callable* @__quantum__rt__callable_copy(%Callable*, bool)
%Callable* @__quantum__rt__callable_create([4 x void(%Tuple*, %Tuple*, %Tuple*)*]*, [2 x void (%Tuple*, i32)]*, %Tuple*)
void @__quantum__rt__callable_invoke(%Callable*, %Tuple*, %Tuple*)
void @__quantum__rt__callable_make_adjoint(%Callable*)
void @__quantum__rt__callable_make_controlled(%Callable*)
void @__quantum__rt__callable_update_alias_count(%Callable*, i32)
void @__quantum__rt__callable_update_reference_count(%Callable*, i32)
void @__quantum__rt__capture_update_alias_count(%Callable*, i32)
void @__quantum__rt__capture_update_reference_count(%Callable*, i32)
void @__quantum__rt__double_record_output(double, i8*)
%String* @__quantum__rt__double_to_string(double)
void @__quantum__rt__fail(%String*)
void @__quantum__rt__int_record_output(i64, i8*)
%String* @__quantum__rt__int_to_string(i64)
i8* @__quantum__rt__memory_allocate(i64)
void @__quantum__rt__message(%String*)
void @__quantum__rt__message_record_output(%String*)
%String* @__quantum__rt__pauli_to_string(i2)
%Qubit* @__quantum__rt__qubit_allocate()
%Array* @__quantum__rt__qubit_allocate_array(i64)
void @__quantum__rt__qubit_release(%Qubit*)
void @__quantum__rt__qubit_release_array(%Array*)
%String* @__quantum__rt__qubit_to_string(%Qubit*)
bool @__quantum__rt__result_equal(%Result*, %Result*)
%Result* @__quantum__rt__result_get_one()
%Result* @__quantum__rt__result_get_zero()
void @__quantum__rt__result_record_output(%Result*, i8*)
%String* @__quantum__rt__result_to_string(%Result*)
void @__quantum__rt__result_update_reference_count(%Result*, i32)
%String* @__quantum__rt__string_concatenate(%String*, %String*)
%String* @__quantum__rt__string_create(i8*)
bool @__quantum__rt__string_equal(%String*, %String*)
i8* @__quantum__rt__string_get_data(%String*)
i32 @__quantum__rt__string_get_length(%String*)
void @__quantum__rt__string_update_reference_count(%String*, i32)
%Tuple* @__quantum__rt__tuple_copy(%Tuple*, i1)
%Tuple* @__quantum__rt__tuple_create(i64)
void @__quantum__rt__tuple_record_output(i64, i8*)
void @__quantum__rt__tuple_update_alias_count(%Tuple*, i32)
void @__quantum__rt__tuple_update_reference_count(%Tuple*, i32)
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/qir-alliance/qir-runner",
    "name": "qirrunner",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Microsoft",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/2d/65/cabcb3ed2ba16b6d19a2e05f42ef293f3043d0151256171c0f339b227534/qirrunner-0.7.5.tar.gz",
    "platform": null,
    "description": "# QIR Runner\n\nThis project implements a basic QIR runtime and execution tool. Once installed, `qir-runner` will be available via the command line in your python environment as well as the `qirrunner` module which can be imported into a Python program.\n\n## Usage\n\n### Command line\n\n```shell\nUsage: qir-runner [OPTIONS] --file <PATH>\n\nOptions:\n  -f, --file <PATH>        (Required) Path to the QIR file to run\n  -e, --entrypoint <NAME>  Name of the entry point function to execute\n  -s, --shots <NUM>        The number of times to repeat the execution of the chosen entry point in the program [default: 1]\n  -r, --rngseed <NUM>      The value to use when seeding the random number generator used for quantum simulation\n  -h, --help               Print help\n  -V, --version            Print version\n```\n\n### Python module\n\nFrom a Python program, `qirrunner` provides a `run` function and two output helpers `Output` and `OutputHandler`. If the `output_fn` parameter of `run` is not specified, output will be written to `stdout`. Supplying the parameter allows the output of the execution to be captured.\n\n```python\nfrom qirrunner import run, OutputHandler\n\npath = \"./runner/tests/resources/bv.bc\"\n\nhandler = OutputHandler()\nrun(path, shots=2, output_fn=handler.handle)\n\nprint(handler.get_output())\n```\n\n## Installation\n\n```shell\npip install qirrunner\n```\n\n### Installing from sdist\n\nPlatforms for which `qirrunner` doesn't have pre-built wheels (such as `aarch64` macos), installation is available via sdist. Before installing `qirrunner` via `pip`:\n\n- Install a usable LLVM distribution which has `llvm-config` available.\n- Set the `LLVM_SYS_140_PREFIX` environment variable to the LLVM installation directory\n  - example: `export LLVM_SYS_140_PREFIX=/Users/sample/llvm`\n- Install: `python -m pip install qirrunner`\n  - This will build `qirrunner` from source. You will need a working Rust installation in order for this to compile.\n\n## Implemented APIs\n\n```llvm\ndouble @__quantum__qis__arccos__body(double)\ndouble @__quantum__qis__arcsin__body(double)\ndouble @__quantum__qis__arctan__body(double)\ndouble @__quantum__qis__arctan2__body(double)\nvoid @__quantum__qis__assertmeasurementprobability__body(%Array*, %Array*, %Result*, double, %String*, double)\nvoid @__quantum__qis__assertmeasurementprobability__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__ccx__body(%Qubit*, %Qubit*)\nvoid @__quantum__qis__cnot__body(%Qubit*, %Qubit*)\ndouble @__quantum__qis__cos__body(double)\ndouble @__quantum__qis__cosh__body(double)\nvoid @__quantum__qis__cx__body(%Qubit*, %Qubit*)\nvoid @__quantum__qis__cy__body(%Qubit*, %Qubit*)\nvoid @__quantum__qis__cz__body(%Qubit*, %Qubit*)\ndouble @__quantum__qis__drawrandomdouble__body()\ni64 @__quantum__qis__drawrandomint__body()\nvoid @__quantum__qis__dumpmachine__body()\nvoid @__quantum__qis__exp__adj(%Array*, double, %Array*)\nvoid @__quantum__qis__exp__body(%Array*, double, %Array*)\nvoid @__quantum__qis__exp__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__exp__ctladj(%Array*, %Tuple*)\nvoid @__quantum__qis__exp__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__h__body(%Qubit*)\nvoid @__quantum__qis__h__ctl(%Array*, %Qubit*)\ndouble @__quantum__qis__ieeeremainder__body(double, double)\ndouble @__quantum__qis__infinity__body()\ni1 @__quantum__qis__isinf__body()\ni1 @__quantum__qis__isnan__body()\ni1 @__quantum__qis__isnegativeinfinity__body()\ndouble @__quantum__qis__log__body(double)\n%Result* @__quantum__qis__m__body(%Qubit*)\n%Result* @__quantum__qis__measure__body(%Array*, %Array*)\n%Result* @__quantum__qis__mresetz__body(%Qubit*)\nvoid @__quantum__qis__mz__body(%Qubit*, %Result*)\ndouble @__quantum__qis__nan__body()\nvoid @__quantum__qis__r__adj(i2, double, %Qubit*)\nvoid @__quantum__qis__r__body(i2, double, %Qubit*)\nvoid @__quantum__qis__r__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__r__ctladj(%Array*, %Tuple*)\nbool @__quantum__qis__read_result__body(%Result*)\nvoid @__quantum__qis__reset__body(%Qubit*)\nvoid @__quantum__qis__rx__body(double, %Qubit*)\nvoid @__quantum__qis__rx__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__rxx__body(double, %Qubit*, %Qubit*)\nvoid @__quantum__qis__ry__body(double, %Qubit*)\nvoid @__quantum__qis__ry__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__ryy__body(double, %Qubit*, %Qubit*)\nvoid @__quantum__qis__rz__body(double, %Qubit*)\nvoid @__quantum__qis__rz__ctl(%Array*, %Tuple*)\nvoid @__quantum__qis__rzz__body(double, %Qubit*, %Qubit*)\nvoid @__quantum__qis__s__adj(%Qubit*)\nvoid @__quantum__qis__s__body(%Qubit*)\nvoid @__quantum__qis__s__ctl(%Array*, %Qubit*)\nvoid @__quantum__qis__s__ctladj(%Array*, %Qubit*)\ndouble @__quantum__qis__sin__body(double)\ndouble @__quantum__qis__sinh__body(double)\ndouble @__quantum__qis__sqrt__body(double)\nvoid @__quantum__qis__swap__body(%Qubit*, %Qubit*)\nvoid @__quantum__qis__t__adj(%Qubit*)\nvoid @__quantum__qis__t__body(%Qubit*)\nvoid @__quantum__qis__t__ctl(%Array*, %Qubit*)\nvoid @__quantum__qis__t__ctladj(%Array*, %Qubit*)\ndouble @__quantum__qis__tan__body(double)\ndouble @__quantum__qis__tanh__body(double)\nvoid @__quantum__qis__x__body(%Qubit*)\nvoid @__quantum__qis__x__ctl(%Array*, %Qubit*)\nvoid @__quantum__qis__y__body(%Qubit*)\nvoid @__quantum__qis__y__ctl(%Array*, %Qubit*)\nvoid @__quantum__qis__z__body(%Qubit*)\nvoid @__quantum__qis__z__ctl(%Array*, %Qubit*)\n%Array* @__quantum__rt__array_concatenate(%Array*, %Array*)\n%Array* @__quantum__rt__array_copy(%Array*, bool)\n%Array* @__quantum__rt__array_create_1d(i32, i64)\ni8* @__quantum__rt__array_get_element_ptr_1d(%Array*, i64)\ni64 @__quantum__rt__array_get_size_1d(%Array*)\nvoid @__quantum__rt__array_record_output(i64, i8*)\nvoid @__quantum__rt__array_update_alias_count(%Array*, i32)\nvoid @__quantum__rt__array_update_reference_count(%Array*, i32)\n%BigInt* @__quantum__rt__bigint_add(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_bitand(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_bitnot(%BigInt*)\n%BigInt* @__quantum__rt__bigint_bitor(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_bitxor(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_create_array(i32, i8*)\n%BigInt* @__quantum__rt__bigint_create_i64(i64)\n%BigInt* @__quantum__rt__bigint_divide(%BigInt*, %BigInt*)\nbool @__quantum__rt__bigint_equal(%BigInt*, %BigInt*)\ni8* @__quantum__rt__bigint_get_data(%BigInt*)\ni32 @__quantum__rt__bigint_get_length(%BigInt*)\nbool @__quantum__rt__bigint_greater(%BigInt*, %BigInt*)\nbool @__quantum__rt__bigint_greater_eq(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_modulus(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_multiply(%BigInt*, %BigInt*)\n%BigInt* @__quantum__rt__bigint_negate(%BigInt*)\n%BigInt* @__quantum__rt__bigint_power(%BigInt*, i32)\n%BigInt* @__quantum__rt__bigint_shiftleft(%BigInt*, i64)\n%BigInt*@__quantum__rt__bigint_shiftright(%BigInt*, i64)\nvoid @__quantum__rt__bigint_subtract(%BigInt*, %BigInt*)\n%String* @__quantum__rt__bigint_to_string(%BigInt*)\nvoid @__quantum__rt__bigint_update_reference_count(%BigInt*, i32)\nvoid @__quantum__rt__bool_record_output(i1, i8*)\n%String* @__quantum__rt__bool_to_string(i1)\n%Callable* @__quantum__rt__callable_copy(%Callable*, bool)\n%Callable* @__quantum__rt__callable_create([4 x void(%Tuple*, %Tuple*, %Tuple*)*]*, [2 x void (%Tuple*, i32)]*, %Tuple*)\nvoid @__quantum__rt__callable_invoke(%Callable*, %Tuple*, %Tuple*)\nvoid @__quantum__rt__callable_make_adjoint(%Callable*)\nvoid @__quantum__rt__callable_make_controlled(%Callable*)\nvoid @__quantum__rt__callable_update_alias_count(%Callable*, i32)\nvoid @__quantum__rt__callable_update_reference_count(%Callable*, i32)\nvoid @__quantum__rt__capture_update_alias_count(%Callable*, i32)\nvoid @__quantum__rt__capture_update_reference_count(%Callable*, i32)\nvoid @__quantum__rt__double_record_output(double, i8*)\n%String* @__quantum__rt__double_to_string(double)\nvoid @__quantum__rt__fail(%String*)\nvoid @__quantum__rt__int_record_output(i64, i8*)\n%String* @__quantum__rt__int_to_string(i64)\ni8* @__quantum__rt__memory_allocate(i64)\nvoid @__quantum__rt__message(%String*)\nvoid @__quantum__rt__message_record_output(%String*)\n%String* @__quantum__rt__pauli_to_string(i2)\n%Qubit* @__quantum__rt__qubit_allocate()\n%Array* @__quantum__rt__qubit_allocate_array(i64)\nvoid @__quantum__rt__qubit_release(%Qubit*)\nvoid @__quantum__rt__qubit_release_array(%Array*)\n%String* @__quantum__rt__qubit_to_string(%Qubit*)\nbool @__quantum__rt__result_equal(%Result*, %Result*)\n%Result* @__quantum__rt__result_get_one()\n%Result* @__quantum__rt__result_get_zero()\nvoid @__quantum__rt__result_record_output(%Result*, i8*)\n%String* @__quantum__rt__result_to_string(%Result*)\nvoid @__quantum__rt__result_update_reference_count(%Result*, i32)\n%String* @__quantum__rt__string_concatenate(%String*, %String*)\n%String* @__quantum__rt__string_create(i8*)\nbool @__quantum__rt__string_equal(%String*, %String*)\ni8* @__quantum__rt__string_get_data(%String*)\ni32 @__quantum__rt__string_get_length(%String*)\nvoid @__quantum__rt__string_update_reference_count(%String*, i32)\n%Tuple* @__quantum__rt__tuple_copy(%Tuple*, i1)\n%Tuple* @__quantum__rt__tuple_create(i64)\nvoid @__quantum__rt__tuple_record_output(i64, i8*)\nvoid @__quantum__rt__tuple_update_alias_count(%Tuple*, i32)\nvoid @__quantum__rt__tuple_update_reference_count(%Tuple*, i32)\n```\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "JIT compiles and executes programs written in QIR (Quantum Intermediate Representation).",
    "version": "0.7.5",
    "project_urls": {
        "Homepage": "https://github.com/qir-alliance/qir-runner",
        "Source Code": "https://github.com/qir-alliance/qir-runner"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "61fa2dbcc0cb95ce6bc56da8d869df083fbd6a7c521ee089c17ba7ed7f3a5da3",
                "md5": "074aab1e8c511c7979ce59b1835930e4",
                "sha256": "1ccaffc33d8dddcad9dc78f02ed86fa72059f34830e5ce86f252fc803ad2e123"
            },
            "downloads": -1,
            "filename": "qirrunner-0.7.5-cp38-abi3-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "074aab1e8c511c7979ce59b1835930e4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 14727405,
            "upload_time": "2024-12-03T18:51:03",
            "upload_time_iso_8601": "2024-12-03T18:51:03.141126Z",
            "url": "https://files.pythonhosted.org/packages/61/fa/2dbcc0cb95ce6bc56da8d869df083fbd6a7c521ee089c17ba7ed7f3a5da3/qirrunner-0.7.5-cp38-abi3-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3282048b78597c9cd61d869b653f83097675e983fa1e6f3f6255e618d6fe6028",
                "md5": "ed9eff06295ab434862a338c05968266",
                "sha256": "aac0e787aeee6a9656e8a9bce9b6913ffcd1298f33ef11731dceab677d2fc0df"
            },
            "downloads": -1,
            "filename": "qirrunner-0.7.5-cp38-abi3-manylinux_2_31_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ed9eff06295ab434862a338c05968266",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 24339298,
            "upload_time": "2024-12-03T18:51:06",
            "upload_time_iso_8601": "2024-12-03T18:51:06.679745Z",
            "url": "https://files.pythonhosted.org/packages/32/82/048b78597c9cd61d869b653f83097675e983fa1e6f3f6255e618d6fe6028/qirrunner-0.7.5-cp38-abi3-manylinux_2_31_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b40c106bf44cdcdf706a204121d77a1cfddd0429d7f218cc4b36343a3dbd63ee",
                "md5": "226262e3a8edc2bb8b88bf07f662f696",
                "sha256": "f273d5657ddd935196230824c537300b21851cde41ad6672486cf6c8cf979014"
            },
            "downloads": -1,
            "filename": "qirrunner-0.7.5-cp38-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "226262e3a8edc2bb8b88bf07f662f696",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 13968220,
            "upload_time": "2024-12-03T18:51:09",
            "upload_time_iso_8601": "2024-12-03T18:51:09.450152Z",
            "url": "https://files.pythonhosted.org/packages/b4/0c/106bf44cdcdf706a204121d77a1cfddd0429d7f218cc4b36343a3dbd63ee/qirrunner-0.7.5-cp38-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2d65cabcb3ed2ba16b6d19a2e05f42ef293f3043d0151256171c0f339b227534",
                "md5": "d3813bd74125c63703525a23fb27052e",
                "sha256": "2d73760456c9741123e650ac31f5801ef60c9b37e73fc9ff3d6395dbbf0de248"
            },
            "downloads": -1,
            "filename": "qirrunner-0.7.5.tar.gz",
            "has_sig": false,
            "md5_digest": "d3813bd74125c63703525a23fb27052e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 254509,
            "upload_time": "2024-12-03T18:51:01",
            "upload_time_iso_8601": "2024-12-03T18:51:01.166839Z",
            "url": "https://files.pythonhosted.org/packages/2d/65/cabcb3ed2ba16b6d19a2e05f42ef293f3043d0151256171c0f339b227534/qirrunner-0.7.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-03 18:51:01",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "qir-alliance",
    "github_project": "qir-runner",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "qirrunner"
}
        
Elapsed time: 1.18855s