@@ -745,13 +745,13 @@ TEST(DecoderTest, GetBlockSizeAndSyndromeSize) {
745745 EXPECT_EQ (decoder2->get_syndrome_size (), new_syndrome_size);
746746}
747747
748- TEST (StimDemDecoderFactory , ConstructsLutDecoderFromStimDemText) {
748+ TEST (StimDemGetDecoder , ConstructsLutDecoderFromStimDemText) {
749749 const std::string dem_text = R"( error(0.1) D0 L0
750750error(0.1) D1 L0
751751error(0.05) D0 D1
752752)" ;
753753
754- auto d = cudaq::qec::get_decoder_from_stim_dem (" single_error_lut" , dem_text);
754+ auto d = cudaq::qec::get_decoder (" single_error_lut" , dem_text);
755755 ASSERT_NE (d, nullptr );
756756 EXPECT_EQ (d->get_syndrome_size (), 2u );
757757 EXPECT_EQ (d->get_block_size (), 3u );
@@ -778,26 +778,32 @@ error(0.05) D0 D1
778778 }
779779}
780780
781- TEST (StimDemDecoderFactory, UnifiedGetDecoderAcceptsStimDemString ) {
781+ TEST (StimDemGetDecoder, StaticDecoderGetAcceptsStimDemString ) {
782782 const std::string dem_text = R"( error(0.1) D0 L0
783783error(0.1) D1 L0
784784error(0.05) D0 D1
785785)" ;
786786
787- auto check = [&](std::unique_ptr<cudaq::qec::decoder> d) {
788- ASSERT_NE (d, nullptr );
789- EXPECT_EQ (d->get_syndrome_size (), 2u );
790- EXPECT_EQ (d->get_block_size (), 3u );
791- auto result = d->decode (std::vector<cudaq::qec::float_t >{1.0 , 1.0 });
792- EXPECT_TRUE (result.converged );
793- ASSERT_EQ (result.result .size (), 3u );
794- EXPECT_FLOAT_EQ (result.result [2 ], 1.0 );
795- };
796- check (cudaq::qec::get_decoder (" single_error_lut" , dem_text));
797- check (cudaq::qec::decoder::get (" single_error_lut" , dem_text));
787+ auto d = cudaq::qec::decoder::get (" single_error_lut" , dem_text);
788+ ASSERT_NE (d, nullptr );
789+ EXPECT_EQ (d->get_syndrome_size (), 2u );
790+ EXPECT_EQ (d->get_block_size (), 3u );
791+ auto result = d->decode (std::vector<cudaq::qec::float_t >{1.0 , 1.0 });
792+ EXPECT_TRUE (result.converged );
793+ ASSERT_EQ (result.result .size (), 3u );
794+ EXPECT_FLOAT_EQ (result.result [2 ], 1.0 );
795+ }
796+
797+ TEST (StimDemGetDecoder, DeprecatedStimDemHelperStillWorks) {
798+ const std::string dem_text = " error(0.1) D0 L0\n " ;
799+
800+ auto d = cudaq::qec::get_decoder_from_stim_dem (" single_error_lut" , dem_text);
801+ ASSERT_NE (d, nullptr );
802+ EXPECT_EQ (d->get_syndrome_size (), 1u );
803+ EXPECT_EQ (d->get_block_size (), 1u );
798804}
799805
800- TEST (StimDemDecoderFactory, UnifiedGetDecoderStillAcceptsParityCheckMatrix ) {
806+ TEST (StimDemGetDecoder, StillAcceptsParityCheckMatrix ) {
801807 cudaqx::tensor<uint8_t > H ({2 , 3 });
802808 H.copy (std::vector<uint8_t >{1 , 0 , 1 , 0 , 1 , 1 }.data (), {2 , 3 });
803809 auto d = cudaq::qec::get_decoder (" single_error_lut" , H);
@@ -806,7 +812,7 @@ TEST(StimDemDecoderFactory, UnifiedGetDecoderStillAcceptsParityCheckMatrix) {
806812 EXPECT_EQ (d->get_block_size (), 3u );
807813}
808814
809- TEST (StimDemDecoderFactory , RepeatedDetectorOrObservableTargetsXorFold) {
815+ TEST (StimDemGetDecoder , RepeatedDetectorOrObservableTargetsXorFold) {
810816 const std::string dem_text = R"( error(0.1) D0 D0
811817error(0.1) L0 L0
812818)" ;
@@ -821,34 +827,40 @@ error(0.1) L0 L0
821827 << " duplicate L0 in error 1 should XOR-cancel to 0" ;
822828}
823829
824- TEST (StimDemDecoderFactory, ThrowsOnProbabilityOutOfRange) {
830+ TEST (StimDemGetDecoder, DemWithoutObservablesDoesNotAddODefault) {
831+ auto dem = cudaq::qec::dem_from_stim_text (" error(0.1) D0\n " );
832+ auto defaults = cudaq::qec::dem_defaults_for_missing_keys (
833+ [](const std::string &) { return false ; }, dem);
834+
835+ EXPECT_EQ (defaults.O , nullptr );
836+ ASSERT_NE (defaults.error_rate_vec , nullptr );
837+ EXPECT_EQ (defaults.error_rate_vec ->size (), 1u );
838+ }
839+
840+ TEST (StimDemGetDecoder, ThrowsOnProbabilityOutOfRange) {
825841 const std::string dem_text = " error(1.5) D0\n " ;
826- EXPECT_THROW (
827- cudaq::qec::get_decoder_from_stim_dem (" single_error_lut" , dem_text),
828- std::runtime_error);
842+ EXPECT_THROW (cudaq::qec::get_decoder (" single_error_lut" , dem_text),
843+ std::runtime_error);
829844}
830845
831- TEST (StimDemDecoderFactory, ThrowsOnMalformedStimDem) {
832- EXPECT_THROW (cudaq::qec::get_decoder_from_stim_dem (" single_error_lut" ,
833- " not a valid DEM" ),
846+ TEST (StimDemGetDecoder, ThrowsOnMalformedStimDem) {
847+ EXPECT_THROW (cudaq::qec::get_decoder (" single_error_lut" , " not a valid DEM" ),
834848 std::runtime_error);
835849}
836850
837- TEST (StimDemDecoderFactory , ThrowsOnUnknownDecoderName) {
851+ TEST (StimDemGetDecoder , ThrowsOnUnknownDecoderName) {
838852 const std::string dem_text = " error(0.1) D0 L0\n " ;
839- EXPECT_THROW (
840- cudaq::qec::get_decoder_from_stim_dem (" __no_such_decoder__" , dem_text),
841- std::runtime_error);
853+ EXPECT_THROW (cudaq::qec::get_decoder (" __no_such_decoder__" , dem_text),
854+ std::runtime_error);
842855}
843856
844- TEST (StimDemDecoderFactory , ThrowsOnEmptyErrorMechanisms) {
857+ TEST (StimDemGetDecoder , ThrowsOnEmptyErrorMechanisms) {
845858 const std::string dem_text = " detector(0, 0, 0)\n " ;
846- EXPECT_THROW (
847- cudaq::qec::get_decoder_from_stim_dem (" single_error_lut" , dem_text),
848- std::runtime_error);
859+ EXPECT_THROW (cudaq::qec::get_decoder (" single_error_lut" , dem_text),
860+ std::runtime_error);
849861}
850862
851- TEST (StimDemDecoderFactory , StimDemTargetCategoriesAreExhaustive) {
863+ TEST (StimDemGetDecoder , StimDemTargetCategoriesAreExhaustive) {
852864 const std::vector<stim::DemTarget> samples = {
853865 stim::DemTarget::separator (),
854866 stim::DemTarget::relative_detector_id (0 ),
@@ -865,14 +877,13 @@ TEST(StimDemDecoderFactory, StimDemTargetCategoriesAreExhaustive) {
865877 }
866878}
867879
868- TEST (StimDemDecoderFactory , UserOptionsAreNotOverwritten) {
880+ TEST (StimDemGetDecoder , UserOptionsAreNotOverwritten) {
869881 const std::string dem_text = R"( error(0.1) D0 L0
870882error(0.1) D1 L0
871883error(0.05) D0 D1
872884)" ;
873885 cudaqx::heterogeneous_map opts;
874886 opts.insert (" error_rate_vec" , std::vector<double >{0.5 });
875- EXPECT_THROW (
876- cudaq::qec::get_decoder_from_stim_dem (" single_error_lut" , dem_text, opts),
877- std::runtime_error);
887+ EXPECT_THROW (cudaq::qec::get_decoder (" single_error_lut" , dem_text, opts),
888+ std::runtime_error);
878889}
0 commit comments