@@ -1180,6 +1180,14 @@ def frobenius_diff(a, b, mx_basis): # assume vary model1, model2 fixed
11801180# init args == (model1, model2, op_label)
11811181
11821182
1183+ def leaky_gate_frob_dist (a , b , mx_basis ):
1184+ n_leak = 1
1185+ return _tools .subspace_restricted_fro_dist (a , b , mx_basis , n_leak )
1186+
1187+
1188+ Leaky_gate_frob_dist = _modf .opsfn_factory (leaky_gate_frob_dist )
1189+
1190+
11831191def jtrace_diff (a , b , mx_basis ): # assume vary model1, model2 fixed
11841192 """
11851193 Jamiolkowski trace distance between a and b
@@ -2456,6 +2464,8 @@ def info_of_opfn_by_name(name):
24562464 "where (a_i,b_i) are corresponding eigenvalues of A and B." ),
24572465 "frob" : ("Frobenius|Distance" ,
24582466 "sqrt( sum( (A_ij - B_ij)^2 ) )" ),
2467+ "la-frob" : ("Frobenius|Distance (subspace)" ,
2468+ "TO WRITE" ),
24592469 "unmodeled" : ("Un-modeled|Error" ,
24602470 "The per-operation budget used to account for un-modeled errors (model violation)" )
24612471 }
@@ -2540,6 +2550,9 @@ def evaluate_opfn_by_name(name, model, target_model, op_label_or_string,
25402550 elif name == "evnudiamond" :
25412551 fn = Eigenvalue_nonunitary_diamondnorm if b else \
25422552 Circuit_eigenvalue_nonunitary_diamondnorm
2553+ elif name == "la-frob" :
2554+ assert b
2555+ fn = Leaky_gate_frob_dist
25432556 elif name == "frob" :
25442557 fn = Fro_diff if b else \
25452558 Circuit_fro_diff
0 commit comments