Skip to main content

Core client library for the QPerfect MIMIQ Cloud API

Project description

MIMIQ Link Python

Build Status PyPI version Python versions License

MIMIQ Link provides secure authentication and connection management for QPerfect's MIMIQ Virtual Quantum Computer. It handles all communication between Python environments and MIMIQ's remote execution services.

Part of the MIMIQ ecosystem by QPerfect.

Overview

MIMIQ Link offers flexible authentication methods to connect to MIMIQ's cloud services:

  • 🌐 Browser-based authentication
  • 🔑 Token-based access - Save and reuse authentication tokens
  • 🔐 Credential-based login - Direct username/password authentication
  • 🔄 Automatic session management - Token refresh and connection handling
  • 🏢 Multi-environment support - Connect to different MIMIQ instances
  • 📦 Job management - Submit, monitor, and retrieve quantum circuit execution results

Installation

From PyPI

pip install mimiqlink

From GitHub

pip install "mimiqlink @ git+https://github.com/qperfect-io/mimiqlink-python.git"

Requirements

  • Python 3.8 or higher
  • Supported on Linux, macOS, and Windows

Note: Most users should install mimiqcircuits which includes this package and provides the full quantum circuit building experience.

Quick Start

Basic Connection

import mimiqlink

# Create connection object
conn = mimiqlink.MimiqConnection()

# Connect using browser authentication (recommended)
conn.connect()

Connection with Credentials

import mimiqlink

conn = mimiqlink.MimiqConnection()

# Connect with username and password
conn.connectUser("your.email@example.com", "yourpassword")

⚠️ Security Warning: Avoid hardcoding credentials in your scripts. Use environment variables or secure configuration files instead.

Authentication Methods

Method 1: Browser Authentication (Recommended)

This method provides the most secure authentication flow:

import mimiqlink

conn = mimiqlink.MimiqConnection()
conn.connect()  # Opens browser for secure login

This will:

  1. Open your default web browser
  2. Direct you to MIMIQ's login page
  3. Securely authenticate your session
  4. Return control to your Python script

Method 2: Token-Based Authentication

Save your authentication token for reuse:

import mimiqlink

# First time: authenticate and the token is saved automatically
conn = mimiqlink.MimiqConnection()
conn.savetoken("qperfect.json")

Then load the token in future sessions:

import mimiqlink

conn = MimiqConnection().loadtoken(filepath="qperfect.json")

Method 3: Credential-Based Authentication

For automated workflows where browser interaction isn't possible:

import mimiqlink
import os

# Using environment variables (recommended)
conn = mimiqlink.MimiqConnection()
conn.connectUser(
    os.environ.get("MIMIQ_EMAIL"),
    os.environ.get("MIMIQ_PASSWORD")
)

Working with Files and Jobs

Submitting a Job

import mimiqlink

conn = mimiqlink.MimiqConnection()
conn.connect()

# Submit a job with circuit files
conn.request(
    name="My Quantum Job",
    label="experiment-001",
    files=["circuit.qasm", "data.json"]
)

Downloading Results

import mimiqlink

conn = mimiqlink.MimiqConnection()
conn.connect()

# Download specific files from a job
job_data = conn.downloadFiles(
    executionRequestId="job-12345",
    fileId="1",
    downloadPath="./results"
)

# Download all job files
all_files = conn.downloadjobFiles(
    executionRequestId="job-12345"
)

Checking Job Status

import mimiqlink

conn = mimiqlink.MimiqConnection()
conn.connect()

# Get job status and information
status = conn.getJobStatus("job-12345")
print(f"Job status: {status}")

Connection Configuration

Custom MIMIQ Instance

Connect to a specific MIMIQ instance (useful for on-premises deployments):

import mimiqlink

conn = mimiqlink.MimiqConnection(url="https://custom-mimiq.example.com/api")
conn.connect()

Connection Timeout

Set custom timeout for API requests:

import mimiqlink

conn = mimiqlink.MimiqConnection(timeout=60)  # 60 seconds
conn.connect()

Usage with MIMIQ Circuits

MIMIQ Link is typically used through the MIMIQ Circuits package:

from mimiqcircuits import *

# MimiqConnection from mimiqcircuits uses mimiqlink internally
conn = MimiqConnection()
conn.connect()

# Build and execute a circuit
circuit = Circuit()
circuit.push(GateH(), 0)
circuit.push(GateCX(), 0, 1)
circuit.push(Measure(), range(2), range(2))

# Execute on MIMIQ cloud
job = conn.execute(circuit, algorithm="auto", nsamples=1000)
results = conn.get_results(job)

Security Best Practices

  1. Never commit credentials to version control
  2. Use environment variables for automated systems:
import os
import mimiqlink

conn = mimiqlink.MimiqConnection()
conn.connectUser(
    os.getenv("MIMIQ_EMAIL"),
    os.getenv("MIMIQ_PASSWORD")
)
  1. Protect token files - treat them like passwords
  2. Use browser authentication when possible for maximum security
  3. Rotate tokens regularly by re-authenticating

Setting Up Environment Variables

Linux/macOS

export MIMIQ_EMAIL="your.email@example.com"
export MIMIQ_PASSWORD="yourpassword"

Windows (Command Prompt)

set MIMIQ_EMAIL=your.email@example.com
set MIMIQ_PASSWORD=yourpassword

Windows (PowerShell)

$env:MIMIQ_EMAIL="your.email@example.com"
$env:MIMIQ_PASSWORD="yourpassword"

Using a .env File

Create a .env file (and add it to .gitignore):

MIMIQ_EMAIL=your.email@example.com
MIMIQ_PASSWORD=yourpassword

Then use python-dotenv:

from dotenv import load_dotenv
import os
import mimiqlink

load_dotenv()

conn = mimiqlink.MimiqConnection()
conn.connectUser(os.getenv("MIMIQ_EMAIL"), os.getenv("MIMIQ_PASSWORD"))

Troubleshooting

Token Expired

If your token has expired, simply reconnect:

conn = mimiqlink.MimiqConnection()
conn.connect()  # This will refresh your token

Checking Connection Status

import mimiqlink

conn = mimiqlink.MimiqConnection()
conn.connect()

# Verify connection is active
if conn.isOpen():
    print("Successfully connected to MIMIQ")
else:
    print("Connection failed")

API Reference

MimiqConnection Class

Constructor:

MimiqConnection()

Methods:

  • connect() - Browser-based authentication
  • connectUser(email, password) - Credential-based authentication
  • request(name, label, files) - Submit a new job
  • downloadFiles(executionRequestId, fileId, downloadPath) - Download specific files
  • downloadjobFiles(executionRequestId) - Download all job files
  • getJobStatus(jobId) - Get job execution status
  • close() - Close connection and clean up resources

Related Packages

Access to MIMIQ

To use MIMIQ's remote services, you need an active subscription:

Contributing

We welcome contributions! Whether you're:

  • 🐛 Fixing bugs
  • 💡 Adding features
  • 📝 Improving documentation
  • ✨ Suggesting enhancements

Feel free to open issues or pull requests.

Support

COPYRIGHT

Copyright © 2022-2023 University of Strasbourg. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


Made with ❤️ by the QPerfect team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mimiqlink-0.8.4.tar.gz (80.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mimiqlink-0.8.4-py3-none-any.whl (84.3 kB view details)

Uploaded Python 3

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page