Skip to content

Commit e645650

Browse files
final Riley PR suggestion regarding nontrivial singular vectors
1 parent d962130 commit e645650

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

pygsti/modelmembers/povms/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,11 @@ def calc_physical_subspace(dense_ideal_povm, epsilon = 1e-9):
578578
J[:,i] = vectorized_povm
579579

580580
_,S,Vt = _np.linalg.svd(J)
581-
return Vt[:len(S),]
581+
#Only return nontrivial singular vectors
582+
non_zero_mask = _np.abs(S) > 1e-13
583+
non_trivial_vecs = Vt[non_zero_mask]
584+
non_trivial_vecs = non_trivial_vecs.reshape(-1, Vt.shape[1]) # Reshape to ensure it's 2D
585+
return non_trivial_vecs
582586

583587
phys_directions = calc_physical_subspace(dense_ideal_povm)
584588

pygsti/modelmembers/states/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,13 @@ def calc_physical_subspace(ideal_prep, epsilon = 1e-9):
286286
exp_errgen.from_vector(new_vec)
287287
J[:,i] = (exp_errgen.to_dense() @ ideal_prep - ideal_prep)[1:]/epsilon
288288

289-
_,S,V = _np.linalg.svd(J)
290-
return V[:len(S),]
289+
_,S,Vt = _np.linalg.svd(J)
290+
291+
#Only return nontrivial singular vectors
292+
non_zero_mask = _np.abs(S) > 1e-13
293+
non_trivial_vecs = Vt[non_zero_mask]
294+
non_trivial_vecs = non_trivial_vecs.reshape(-1, Vt.shape[1]) # Reshape to ensure it's 2D
295+
return non_trivial_vecs
291296

292297
phys_directions = calc_physical_subspace(dense_state)
293298

0 commit comments

Comments
 (0)