@@ -570,5 +570,35 @@ def test_pcm_extend_to_n_rounds():
570570 assert np .allclose (H15_new_error_rates , dem15 .error_rates , atol = 1e-6 )
571571
572572
573+ def test_canonicalize_keeps_duplicate_syndromes_with_different_observables ():
574+ # Same syndrome but different observable flips are distinct mechanisms.
575+ dem = qec .DetectorErrorModel ()
576+ dem .detector_error_matrix = np .array ([[1 , 1 ]], dtype = np .uint8 )
577+ dem .observables_flips_matrix = np .array ([[0 , 1 ]], dtype = np .uint8 )
578+ dem .error_rates = [0.1 , 0.2 ]
579+
580+ dem .canonicalize_for_rounds (1 )
581+
582+ assert dem .detector_error_matrix .shape [1 ] == 2
583+ assert dem .observables_flips_matrix .shape [1 ] == 2
584+ assert np .array_equal (dem .observables_flips_matrix ,
585+ np .array ([[0 , 1 ]], dtype = np .uint8 ))
586+
587+
588+ def test_canonicalize_merges_duplicate_syndromes_with_same_observables ():
589+ # Same syndrome and same observable flip can be represented by one column.
590+ dem = qec .DetectorErrorModel ()
591+ dem .detector_error_matrix = np .array ([[1 , 1 ]], dtype = np .uint8 )
592+ dem .observables_flips_matrix = np .array ([[1 , 1 ]], dtype = np .uint8 )
593+ dem .error_rates = [0.1 , 0.2 ]
594+
595+ dem .canonicalize_for_rounds (1 )
596+
597+ assert dem .detector_error_matrix .shape [1 ] == 1
598+ assert dem .observables_flips_matrix .shape [1 ] == 1
599+ assert np .array_equal (dem .observables_flips_matrix ,
600+ np .array ([[1 ]], dtype = np .uint8 ))
601+
602+
573603if __name__ == "__main__" :
574604 pytest .main ()
0 commit comments