@@ -998,6 +998,14 @@ def maximum_trace_dist(gate, mx_basis):
998
998
Maximum_trace_dist = _modf .opfn_factory (maximum_trace_dist )
999
999
# init args == (model, op_label)
1000
1000
1001
+ def leaky_maximum_trace_dist (gate , mx_basis ):
1002
+ closestUOpMx = _alg .find_closest_unitary_opmx (gate )
1003
+ _tools .jamiolkowski_iso (closestUOpMx , mx_basis , mx_basis )
1004
+ n_leak = 1
1005
+ return _tools .leaky_jtracedist (gate , closestUOpMx , mx_basis , n_leak )
1006
+
1007
+ Leaky_maximum_trace_dist = _modf .opfn_factory (leaky_maximum_trace_dist )
1008
+
1001
1009
1002
1010
def angles_btwn_rotn_axes (model ):
1003
1011
"""
@@ -1069,6 +1077,12 @@ def entanglement_fidelity(a, b, mx_basis):
1069
1077
Entanglement_fidelity = _modf .opsfn_factory (entanglement_fidelity )
1070
1078
# init args == (model1, model2, op_label)
1071
1079
1080
+ def leaky_entanglement_fidelity (a , b , mx_basis ):
1081
+ n_leak = 1
1082
+ return _tools .leaky_entanglement_fidelity (a , b , mx_basis , n_leak )
1083
+
1084
+ Leaky_entanglement_fidelity = _modf .opsfn_factory (leaky_entanglement_fidelity )
1085
+
1072
1086
1073
1087
def entanglement_infidelity (a , b , mx_basis ):
1074
1088
"""
@@ -1095,6 +1109,11 @@ def entanglement_infidelity(a, b, mx_basis):
1095
1109
Entanglement_infidelity = _modf .opsfn_factory (entanglement_infidelity )
1096
1110
# init args == (model1, model2, op_label)
1097
1111
1112
+ def leaky_entanglement_infidelity (a , b , mx_basis ):
1113
+ return 1 - leaky_entanglement_fidelity (a , b , mx_basis )
1114
+
1115
+ Leaky_entanglement_infidelity = _modf .opsfn_factory (leaky_entanglement_infidelity )
1116
+
1098
1117
1099
1118
def closest_unitary_fidelity (a , b , mx_basis ): # assume vary model1, model2 fixed
1100
1119
"""
@@ -1186,6 +1205,12 @@ def jtrace_diff(a, b, mx_basis): # assume vary model1, model2 fixed
1186
1205
Jt_diff = _modf .opsfn_factory (jtrace_diff )
1187
1206
# init args == (model1, model2, op_label)
1188
1207
1208
+ def leaky_jtrace_diff (a , b , mx_basis ):
1209
+ n_leak = 1
1210
+ return _tools .leaky_jtracedist (a , b , mx_basis , n_leak )
1211
+
1212
+ Leaky_Jt_diff = _modf .opsfn_factory (leaky_jtrace_diff )
1213
+
1189
1214
1190
1215
if _CVXPY_AVAILABLE :
1191
1216
@@ -2394,10 +2419,14 @@ def info_of_opfn_by_name(name):
2394
2419
info = {
2395
2420
"inf" : ("Entanglement|Infidelity" ,
2396
2421
"1.0 - <psi| 1 x Lambda(psi) |psi>" ),
2422
+ "la-inf" : ("Entanglement|Infidelity (subspace)" ,
2423
+ "TO-WRITE" ),
2397
2424
"agi" : ("Avg. Gate|Infidelity" ,
2398
2425
"d/(d+1) (entanglement infidelity)" ),
2399
2426
"trace" : ("1/2 Trace|Distance" ,
2400
2427
"0.5 | Chi(A) - Chi(B) |_tr" ),
2428
+ "la-trace" : ("1/2 Trace|Distance (subspace)" ,
2429
+ "TO-WRITE" ),
2401
2430
"diamond" : ("1/2 Diamond-Dist" ,
2402
2431
"0.5 sup | (1 x (A-B))(rho) |_tr" ),
2403
2432
"nuinf" : ("Non-unitary|Ent. Infidelity" ,
@@ -2467,12 +2496,18 @@ def evaluate_opfn_by_name(name, model, target_model, op_label_or_string,
2467
2496
if name == "inf" :
2468
2497
fn = Entanglement_infidelity if b else \
2469
2498
Circuit_entanglement_infidelity
2499
+ elif name == "la-inf" :
2500
+ assert b
2501
+ fn = Leaky_entanglement_infidelity
2470
2502
elif name == "agi" :
2471
2503
fn = Avg_gate_infidelity if b else \
2472
2504
Circuit_avg_gate_infidelity
2473
2505
elif name == "trace" :
2474
2506
fn = Jt_diff if b else \
2475
2507
Circuit_jt_diff
2508
+ elif name == "la-trace" :
2509
+ assert b
2510
+ fn = Leaky_Jt_diff
2476
2511
elif name == "diamond" :
2477
2512
fn = HalfDiamondNorm if b else \
2478
2513
CircuitHalfDiamondNorm
0 commit comments