Skip to content

dr3du4/Quant_Gogh_Fractals

Repository files navigation

Quant Gogh Fractals

Generates unique Julia-set fractals driven by a quantum circuit executed on a hardware-realistic noise model of IQM's 20-qubit Garnet processor.

Each run produces a different fractal because:

  1. The quantum circuit uses randomly sampled gate angles.
  2. IQM's hardware noise model (T1/T2 relaxation, gate errors, readout errors) introduces authentic quantum imperfections that shift the fractal parameter.

The visual style references Vincent van Gogh's The Starry Night through a custom blue-yellow colormap and an optional composite with the original painting.


How it works

Random U gates (θ, φ, λ)
        │
        ▼
┌─────────────────────────────────────┐
│  Quantum Circuit (2 qubits)         │
│  H(q0) → CNOT(q0→q1)               │
│  → U(θ₁,φ₁,λ₁) on q0              │
│  → U(θ₂,φ₂,λ₂) on q1              │
└──────────────┬──────────────────────┘
               │  transpile to IQM native gates (PRX + CZ)
               ▼
┌─────────────────────────────────────┐
│  IQMFakeGarnet  (8 192 shots)       │
│  Hardware-realistic noise model     │
│  based on IQM Garnet 20-qubit QPU   │
└──────────────┬──────────────────────┘
               │  measurement counts {00, 01, 10, 11}
               ▼
     c = (P₀₀ − P₁₁) + i·(P₀₁ − P₁₀)
               │
               ▼
┌─────────────────────────────────────┐
│  Julia set   z → z² + c            │
│  1000×1000 px, 100 iterations       │
│  Van Gogh blue-yellow colormap      │
└──────────────┬──────────────────────┘
               │
               ▼
       fractal.png  +  new_image.png

Why two random U gates?

The original Bell state alone creates a symmetric state where P(|00⟩) = P(|11⟩) and P(|01⟩) = P(|10⟩), which would always give c = 0 (a trivial Julia set). Applying an independent random U gate to each qubit breaks this symmetry so that all four probabilities are distinct, yielding a genuinely complex-valued c.


Installation

pip install "iqm-client[qiskit]" qiskit qiskit-aer numpy matplotlib Pillow

Note: The old qiskit-iqm package is deprecated. Use iqm-client[qiskit] (documented at docs.meetiqm.com).


Usage

# Optional: place gogh_night.png in the project directory for the composite output
python fractal.py

Kompozycja krok po kroku (po polsku)

  1. Krok 1 — fraktal. Skrypt liczy c z obwodu (lub FIXED_C), rysuje zbiór Julii i zapisuje fractal.png.
  2. Krok 2 — Van Gogh na wierzch. Jeśli COMPOSITE_WITH_GOGH jest włączone i jest plik gogh_night.png, fraktal jest używany jako tło na całą kanwę (powiększenie „cover”), a obraz malarski jest wklejony na środek z kanałem alfa — efekt w new_image.png.
    Logika w gogh_style.compose_gogh_over_fractal (margines pad_ratio wokół obrazka, żeby widać obramowanie fraktala).

Przykłady (4 gotowe c):

python generate_examples.py

examples/*.png (same fraktale), potem examples/*_gogh.png (z nałożonym obrazem).

Output files

File Description
fractal.png Julia-set fractal (1000×1000 px, 300 DPI)
new_image.png Fractal composited with gogh_night.png (if present)

Using real IQM hardware (IQM Resonance)

To run on an actual IQM quantum computer instead of the noise simulator, replace the backend setup in fractal.py with:

import os
from qiskit import transpile
from iqm.qiskit_iqm import IQMProvider

# Store your token in the IQM_TOKEN environment variable
provider = IQMProvider("https://cocos.resonance.meetiqm.com/garnet")
backend = provider.get_backend()

circuit_meas = circuit.copy()
circuit_meas.measure_all()
transpiled = transpile(circuit_meas, backend=backend)
job = backend.run(transpiled, shots=SHOTS)
counts = job.result().get_counts()

Get your API token at resonance.meetiqm.com.


Dependencies

Package Role
iqm-client[qiskit] IQM fake backend & Resonance cloud access
qiskit Quantum circuit construction & transpilation
qiskit-aer Statevector visualization (plot_state_qsphere)
numpy Vectorised Julia set computation
matplotlib Fractal rendering & colormap
Pillow Image compositing


Zastosowania i potencjał projektu

Czy zbiory Julii mają zastosowania poza sztuką?

Tak — i to zaskakująco szerokie:

Kryptografia i generatory liczb pseudolosowych Iteracje fraktalne są czułe na wartość parametru c — mała zmiana daje zupełnie inny obraz. Ta własność (chaos deterministyczny) jest wykorzystywana do projektowania generatorów liczb pseudolosowych i funkcji jednokierunkowych w kryptografii.

Kompresja obrazów (IFS — Iterated Function Systems) Fraktale są podstawą algorytmów kompresji opartych na samopodobieństwie. Algorytm fractal image compression (Jacquin, 1992) koduje obraz jako zestaw transformacji afinicznych — osiąga wyższe współczynniki kompresji niż JPEG przy zachowaniu jakości.

Modelowanie złożonych układów Granice zbiorów Julii odpowiadają tzw. atraktorom dziwnym, które pojawiają się w modelowaniu turbulencji, wzrostu kryształów, dynamiki rynków finansowych czy rozprzestrzeniania się chorób.

Wizualizacja danych kwantowych Obwody kwantowe operują na przestrzeni zespolonej — amplitudy są liczbami zespolonymi. Mapowanie amplitud na fraktal jest naturalnym sposobem wizualizacji stanu kwantowego w formie, którą człowiek może intuicyjnie interpretować.


Potencjał tego projektu

Ten projekt to więcej niż generator ładnych obrazków. Wskazuje on na kilka realnych kierunków badawczych:

1. Kwantowy generator sztuki proceduralnej Każde uruchomienie obwodu kwantowego daje unikalny, niepowtarzalny fraktal — prawdziwa losowość kwantowa (w odróżnieniu od pseudolosowości klasycznej). To fundament dla systemów generatywnego NFT, gier czy architektury proceduralnej.

2. Wizualizacja stanów kwantowych Parametr c enkoduje informację o splątaniu kubitu. Można zbadać, jak różne typy splątania (stany Bella, GHZ, W) przekładają się na różne klasy fraktali — jest to potencjalnie nowy sposób klasyfikacji stanów kwantowych.

3. Kwantowa weryfikacja obwodów Porównując fraktal wygenerowany przez idealny symulator z fraktalem z prawdziwego sprzętu (IQM Resonance), można wizualnie ocenić poziom szumów i dekoherencji — „fingerprint" konkretnego procesora kwantowego.

4. Algorytm Quantum Walk na fraktalu Spacery kwantowe (quantum walks) na grafach o strukturze fraktalnej wykazują inne właściwości niż klasyczne spacery losowe. Zbadanie dynamiki kwantowej na zbiorze Julii jako grafie to otwarty temat badawczy.

5. Sztuka i edukacja kwantowa Projekt obniża barierę wejścia do obliczeń kwantowych — fraktal jest natychmiast zrozumiałym, pięknym wynikiem działania obwodu kwantowego. To skuteczne narzędzie dydaktyczne dla studentów fizyki, informatyki i matematyki.


Conference abstract (EN)

This paper presents a method for generating geometric fractals using quantum computation. A 2-qubit quantum circuit consisting of a Bell state and two independent randomized unitary U gates is executed on a hardware-realistic noise model of IQM's Garnet processor. The four measurement probabilities of the resulting quantum state are mapped to a single complex number c, which serves as the parameter in the Julia set iteration formula z → z² + c. Each run of the program yields a unique fractal due to both the randomly sampled gate angles and the stochastic nature of quantum hardware noise. The visualization references Van Gogh's Starry Night through a custom blue-yellow colormap and image compositing. The project demonstrates an original intersection of quantum mechanics and generative computer art.

About

Creator of VanGogh art based on qunatum fractals

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages