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) }