Metadata-Version: 2.1
Name: autoscheduler
Version: 0.1.4
Summary: A library for quantum circuit composition
Home-page: https://github.com/Qcraft-UEx/QCRAFT-AutoSchedulQ
Author: Jorge Casco Seco
Author-email: jorgecs@unex.es
License: MIT
Project-URL: Changelog, https://github.com/Qcraft-UEx/QCRAFT-AutoSchedulQ/blob/main/CHANGELOG.md
Description: # QCRAFT AutoSchedulQ
        [![PyPI Version](https://img.shields.io/pypi/v/autoscheduler.svg)](https://pypi.org/project/autoscheduler/)
        ![Python Versions](https://img.shields.io/badge/python-3.9%20|%203.10%20|%203.11%20|%203.12-blue.svg)
        [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/Qcraft-UEx/QCRAFT/blob/main/LICENSE)
        ## Description
        
        QCRAFT AutoSchedulQ: a library that allows users to automatically schedule the execution of their own quantum circuits, improving efficiency and reducing execution times in quantum computing environments. With this library, your Qiskit or Braket quantum circuit will be modified to increase its length but also decreasing the number of shots needed to execute it, getting a new circuit that needs more qubits but less shots to get the same result as the original circuit.
        
        ## Installation
        
        You can install QCRAFT AutoSchedulQ and all its dependencies using pip:
        
        ```bash
        pip install autoscheduler
        ```
        
        You can also install from source by cloning the repository and installing from source:
        
        ```bash
        git clone https://github.com/Qcraft-UEx/QCRAFT-AutoSchedulQ.git
        cd autoscheduler
        pip install .
        ```
        
        ## Usage
        
        Here is a basic example on how to use Autoscheduler with a Quirk URL, when using a Quirk URL, it is mandatory to include the provider ('ibm' or 'aws') as an input.
        ```python
        from autoscheduler import Autoscheduler
        
        circuit = "https://algassert.com/quirk#circuit={'cols':[['H'],['•','X'],['Measure','Measure']]}"
        max_qubits = 4
        shots = 100
        provider = 'ibm'
        autoscheduler = Autoscheduler()
        scheduled_circuit, shots, times = autoscheduler.schedule(circuit, max_qubits, shots, provider)
        results = autoscheduler.execute(scheduled_circuit,shots,'local',times)
        ```
        
        Here is a basic example on how to use Autoscheduler with a GitHub URL.
        ```python
        from autoscheduler import Autoscheduler
        
        circuit = "https://raw.githubusercontent.com/user/repo/branch/file.py"
        max_qubits = 15
        shots = 1000
        autoscheduler = Autoscheduler()
        scheduled_circuit, shots, times = autoscheduler.schedule(circuit, max_qubits, shots)
        results = autoscheduler.execute(scheduled_circuit,shots,'local',times)
        ```
        
        Here is a basic example on how to use Autoscheduler with a Braket circuit.
        ```python
        from autoscheduler import Autoscheduler
        from braket.circuits import Circuit
        
        circuit = Circuit()
        circuit.x(0)
        circuit.cnot(0,1)
        
        max_qubits = 8
        shots = 300
        autoscheduler = Autoscheduler()
        scheduled_circuit, shots, times = autoscheduler.schedule(circuit, max_qubits, shots)
        results = autoscheduler.execute(scheduled_circuit,shots,'local',times)
        ```
        
        Here is a basic example on how to use Autoscheduler with a Qiskit circuit.
        ```python
        from autoscheduler import Autoscheduler
        from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
        
        qreg_q = QuantumRegister(2, 'q')
        creg_c = ClassicalRegister(2, 'c')
        circuit = QuantumCircuit(qreg_q, creg_c)
        circuit.h(qreg_q[0])
        circuit.cx(qreg_q[0], qreg_q[1])
        circuit.measure(qreg_q[0], creg_c[0])
        circuit.measure(qreg_q[1], creg_c[1])
        
        max_qubits = 16
        shots = 500
        autoscheduler = Autoscheduler()
        scheduled_circuit, shots, times = autoscheduler.schedule(circuit, max_qubits, shots)
        results = autoscheduler.execute(scheduled_circuit,shots,'local',times)
        ```
        
        It it possible to use the method schedule_and_execute instead of schedule and then execute, this method needs to have the machine in which you want to execute the circuit as a mandatory input. If the execution is on a aws machine, it is needed to specify the s3 bucket too. Also, provider is only needed when using Quirk URLs.
        
        ```python
        from autoscheduler import Autoscheduler
        
        circuit = "https://algassert.com/quirk#circuit={'cols':[['H'],['•','X'],['Measure','Measure']]}"
        max_qubits = 4
        shots = 100
        provider = 'aws'
        autoscheduler = Autoscheduler()
        results = autoscheduler.schedule_and_execute(circuit, max_qubits, shots, 'ionq', provider, 'amazon-braket-s3')
        ```
        
        ```python
        from autoscheduler import Autoscheduler
        
        circuit = "https://raw.githubusercontent.com/user/repo/branch/file.py"
        max_qubits = 15
        shots = 1000
        autoscheduler = Autoscheduler()
        results = autoscheduler.schedule_and_execute(circuit, max_qubits, shots, 'ibm_brisbane')
        ```
        
        ```python
        from autoscheduler import Autoscheduler
        from braket.circuits import Circuit
        
        circuit = Circuit()
        circuit.x(0)
        circuit.cnot(0,1)
        
        max_qubits = 8
        shots = 300
        autoscheduler = Autoscheduler()
        results = autoscheduler.schedule_and_execute(circuit, max_qubits, shots, 'ionq', s3_bucket='amazon-braket-s3')
        ```
        
        ```python
        from autoscheduler import Autoscheduler
        from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
        
        qreg_q = QuantumRegister(2, 'q')
        creg_c = ClassicalRegister(2, 'c')
        circuit = QuantumCircuit(qreg_q, creg_c)
        circuit.h(qreg_q[0])
        circuit.cx(qreg_q[0], qreg_q[1])
        circuit.measure(qreg_q[0], creg_c[0])
        circuit.measure(qreg_q[1], creg_c[1])
        
        max_qubits = 16
        shots = 500
        autoscheduler = Autoscheduler()
        results = autoscheduler.schedule_and_execute(circuit, max_qubits, shots, 'ibm_brisbane')
        
        ```
        
        ## Changelog
        The changelog is available [here](https://github.com/Qcraft-UEx/QCRAFT-AutoSchedulQ/blob/main/CHANGELOG.md)
        
        ## License
        Autoscheduler is licensed under the [MIT License](LICENSE)
        
Keywords: quantum,quantum computing,quantum circuit optimization,circuit cost reduction,qiskit,braket
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Provides-Extra: dev
