Skip to main content

jiuzhang-sdk ✨

Python SDK for the JiuZhang photonic quantum cloud platform, with cloud GBS task submission, result retrieval, local GBS math, sampling, IR serialization, and local handwritten digit recognition helpers.

The SDK provides three core capability groups:

Capability Uses the JiuZhang cloud platform Result source Typical use
Cloud GBS tasks Yes Executed by the JiuZhang cloud platform Submit GBS experiments, poll status, parse returned results
Local GBS sampling No Generated locally by numerical libraries Teaching, prototyping, local validation, notebook demos
Local handwritten digit recognition No Generated locally by the SDK classifier Jupyter demos, image-recognition tutorials, local algorithm validation

Cloud GBS tasks are executed by the JiuZhang cloud platform. Python scripts and Jupyter notebooks submit requests, poll task status, and read results.

Local GBS sampling runs entirely on the local machine and does not call the cloud API. Results are generated by The Walrus numerical backend from the provided matrix and sampling parameters.

Local handwritten digit recognition also runs without the cloud API. Results are generated from local PCA features, a GBS-style feature layer, and a closed-form classifier.

📦 Installation

Install the SDK:

pip install jiuzhang-sdk

The default installation includes cloud task submission, local GBS math and sampling, and local Blackbird / XIR serialization.

🔐 Cloud Credentials

Before submitting a cloud task, prepare these values from the JiuZhang cloud workspace:

Value Description
api_key Authentication credential used in the X-Jiuzhang-API-Key request header
project_id Cloud project identifier used to associate tasks with a project
quantum_computer_id Cloud device code, for example PH_QC_04

Recommended environment variables:

export JIUZHANG_API_KEY="your-api-key"
export JIUZHANG_PROJECT_ID="your-project-id"
export JIUZHANG_QUANTUM_COMPUTER_ID="PH_QC_04"
export JIUZHANG_BASE_URL="https://cloud.jiuzhangqt.com/api/v1"

☁️ Cloud GBS Workflow

from jiuzhang import CloudClient, GBSParams, parse_gbs_result

client = CloudClient(
    base_url="https://cloud.jiuzhangqt.com/api/v1",
    api_key="your-api-key",
)

params = GBSParams(
    project_id="EXP-demo-project",
    quantum_computer_id="PH_QC_04",
    mt=500,
    pump_energy_nj=4.6,
    squeezing_param=0.35,
    task_name="GBS experiment",
)

estimate = client.estimate_runtime(
    quantum_computer_id=params.quantum_computer_id,
    mt_value=params.mt,
    pump_energy_nj=params.pump_energy_nj,
)

task = client.submit_task(
    project_id=params.project_id,
    task_name=params.task_name,
    quantum_computer_id=params.quantum_computer_id,
    mt_value=params.mt,
    pump_energy_nj=params.pump_energy_nj,
    squeezing_param=params.squeezing_param,
)

task_id = task["data"]["task_id"]
raw_result = client.get_result(task_id)
result = parse_gbs_result(raw_result)

print(result.status_name)
print(result.sample_count)
print(result.experimental_distribution)

client.close()

One-call helper:

result = client.run_gbs(params, poll_interval=2.0, timeout=300.0)
print(result.status_name)

🌐 Cloud API Methods

Method Purpose
CloudClient(base_url, api_key, timeout=30.0) Create an authenticated cloud API client
CloudClient.from_env() Create a client from JIUZHANG_* environment variables
estimate_runtime(quantum_computer_id, mt_value, pump_energy_nj) Estimate runtime before submitting a task
submit_task(project_id, task_name, quantum_computer_id, mt_value, pump_energy_nj, squeezing_param=None) Submit a cloud GBS task
get_result(task_id) Query a task result
run_experiment(...) Estimate, submit, poll, and return raw responses
estimate_gbs(params) Estimate using GBSParams
submit_gbs(params) Submit using GBSParams
run_gbs(params) Run the full workflow and return GBSResult
close() Close the underlying HTTP client

🧾 Cloud Parameter Object

from jiuzhang import GBSParams

params = GBSParams(
    project_id="EXP-demo-project",
    quantum_computer_id="PH_QC_04",
    mt=500,
    pump_energy_nj=4.6,
    squeezing_param=0.35,
    task_name="GBS experiment",
)
Field Description
project_id Cloud project ID
quantum_computer_id Cloud device code
mt Pump pulse time-bin count, validated as 1..500
pump_energy_nj Pump energy in nJ
squeezing_param Optional squeezing parameter
shots Optional shot count field
task_name Display name for the task

Helper methods:

Method Purpose
validate() Validate fields locally
input_mode_count() Return 3 * mt
output_mode_count() Return 9 * (mt + 80)
to_cloud_payload() Build a cloud payload dictionary
summary() Build a compact parameter summary

📊 Parsed Result Object

GBSResult is returned by run_gbs() or by parse_gbs_result(raw_result).

Field or property Description
task_id Cloud task ID
status_name Normalized task status
sample_count Returned sample count
result_map_points Probability distribution curves
experimental_distribution Experimental distribution points
ground_truth_distribution Reference distribution points
download_url Raw result download URL
raw Original response dictionary

🧮 Local GBS Sampling

Local GBS sampling does not call the cloud API. Results are generated on the local machine by The Walrus from the adjacency matrix and sampling parameters.

from jiuzhang.local.gbs import (
    random_adjacency_matrix,
    sample_gbs,
    samples_to_distribution,
)

graph = random_adjacency_matrix(8, scale=0.16, seed=7)
samples = sample_gbs(
    graph,
    shots=24,
    mean_photon_count=1.0,
    detector="pnr",
    cutoff=4,
    max_photons=12,
    seed=123,
)
distribution = samples_to_distribution(samples)
print(distribution)
Function Purpose
random_adjacency_matrix(modes, scale=0.2, seed=None) Generate a symmetric adjacency matrix
sample_gbs(adjacency, shots=10, mean_photon_count=1.0, detector="pnr", cutoff=5, max_photons=30, seed=None, parallel=False) Generate local GBS samples
samples_to_distribution(samples) Convert samples into a normalized pattern distribution

🧩 Local Math and IR Helpers

from jiuzhang.local.gbs import (
    GBSProgram,
    dumps_ir,
    hafnian,
    loop_hafnian,
    threshold_probability,
    to_blackbird,
    to_xir,
    torontonian,
)
Function Purpose
hafnian(matrix, loop=False, approx=False, num_samples=1000, method="glynn") Compute the Hafnian of a square matrix
loop_hafnian(matrix, diagonal=None, reps=None, glynn=True) Compute the loop Hafnian
torontonian(matrix, recursive=True) Compute the Torontonian
threshold_probability(mean, covariance, pattern, hbar=2.0, atol=1e-10, rtol=1e-10) Compute a threshold detection probability
GBSProgram(modes, operations=(), name="gbs_program") Build a local GBS program
dumps_ir(program, format="json") Serialize a program to JSON, Blackbird, or XIR text
loads_ir(payload) Parse JSON local IR
to_blackbird(program) Serialize to Blackbird text
to_xir(program) Serialize to XIR text

🧠 Local Handwritten Digit Recognition

from jiuzhang.local.mnist import run_mnist_recognition

result = run_mnist_recognition(
    train_size=1200,
    test_size=300,
    source="digits",
    n_components=32,
    feature_count=256,
    combine=True,
    random_state=7,
)

print(result.train)
print(result.accuracy)
print(result.confusion_matrix)

Manual training:

from jiuzhang.local.mnist import GBSMNISTClassifier, load_mnist_data

dataset = load_mnist_data(train_size=1200, test_size=300, source="digits")
classifier = GBSMNISTClassifier(n_components=32, feature_count=256)

classifier.fit(dataset.train_data, dataset.train_labels, combine=True)
predictions = classifier.predict(dataset.test_data)
evaluation = classifier.evaluate(dataset.test_data, dataset.test_labels, reuse=True)
Parameter Description
source Dataset source. digits is the bundled offline dataset, and openml downloads MNIST 784
train_size Number of training samples
test_size Number of test samples
n_components PCA components retained before feature extraction
feature_count Number of local GBS-style features
combine True for GBS-RVFL, False for GBS-ELM
regularization Ridge regularization strength for the output layer
random_state Seed for reproducible experiments

📄 License

Proprietary. Copyright 2026 JiuZhang Quantum. All rights reserved.

Download files

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

Source Distribution

jiuzhang_sdk-0.1.3.tar.gz (40.9 kB view details)

Uploaded Source

Built Distribution

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

jiuzhang_sdk-0.1.3-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

Details for the file jiuzhang_sdk-0.1.3.tar.gz.

File metadata

  • Download URL: jiuzhang_sdk-0.1.3.tar.gz
  • Upload date:
  • Size: 40.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for jiuzhang_sdk-0.1.3.tar.gz
Algorithm Hash digest
SHA256 268f1881bd4f57ca7d04d2e5b8fb9cf77a7f865ca711b69274e899f4d98f3706
MD5 20ce8f313bd2978745c2756d3a0ec76b
BLAKE2b-256 c8f94379312b2e7502226856675f2705be14eac55d78ed581eee63efb7d7c423

See more details on using hashes here.

File details

Details for the file jiuzhang_sdk-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: jiuzhang_sdk-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 44.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for jiuzhang_sdk-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6f437d13a271bf5720a52f6bf4bd117fdca9c04acc2b654501e411cd1fe772a3
MD5 63f3d5dfac7adf8600a57fc2262186be
BLAKE2b-256 2ec4da83a36da848e197d8e37a1877baf5aae2174c46ff346564ebe80d9cfc52

See more details on using hashes here.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page