qrisp.jasp.Jaspr.to_catalyst_jaxpr#
- Jaspr.to_catalyst_jaxpr()[source]#
Compiles the jaspr to the corresponding Catalyst jaxpr.
- Parameters:
- *argstuple
The arguments to call the jaspr with.
- Returns:
- jax.core.Jaxpr
The Jaxpr using Catalyst primitives.
Examples
We create a simple script and inspect the Catalyst Jaxpr:
from qrisp import * from qrisp.jasp import make_jaspr def example_function(i): qv = QuantumFloat(i) cx(qv[0], qv[1]) t(qv[1]) meas_res = measure(qv) meas_res += 1 return meas_res jaspr = make_jaspr(example_function)(2) print(jaspr.to_catalyst_jaxpr()) # Yields # { lambda ; a:AbstractQreg() b:i64[] c:i32[]. let # d:i64[] = convert_element_type[new_dtype=int64 weak_type=True] c # e:i64[] = add b d # f:i64[] = add b 0 # g:i64[] = add b 1 # h:AbstractQbit() = qextract a f # i:AbstractQbit() = qextract a g # j:AbstractQbit() k:AbstractQbit() = qinst[op=CNOT qubits_len=2] h i # l:AbstractQreg() = qinsert a f j # m:AbstractQreg() = qinsert l g k # n:AbstractQbit() = qextract m g # o:AbstractQbit() = qinst[op=T qubits_len=1] n # p:AbstractQreg() = qinsert m g o # q:i64[] = convert_element_type[new_dtype=int64 weak_type=True] c # r:i64[] = add b q # _:i64[] s:i64[] t:AbstractQreg() _:i64[] _:i64[] = while_loop[ # body_jaxpr={ lambda ; u:i64[] v:i64[] w:AbstractQreg() x:i64[] y:i64[]. let # z:AbstractQbit() = qextract w u # ba:bool[] bb:AbstractQbit() = qmeasure z # bc:AbstractQreg() = qinsert w u bb # bd:i64[] = sub u x # be:i64[] = shift_left 2 bd # bf:i64[] = convert_element_type[new_dtype=int64 weak_type=True] ba # bg:i64[] = mul be bf # bh:i64[] = add v bg # bi:i64[] = add u 1 # in (bi, bh, bc, x, y) } # body_nconsts=0 # cond_jaxpr={ lambda ; bj:i64[] bk:i64[] bl:AbstractQreg() bm:i64[] bn:i64[]. let # bo:bool[] = ge bj bn # in (bo,) } # cond_nconsts=0 # nimplicit=0 # preserve_dimensions=True # ] b 0 p b r # bp:i32[] = convert_element_type[new_dtype=int64 weak_type=False] s # bq:i32[] = mul bp 1 # br:i32[] = add bq 1 # in (t, e, br) }