class_docstr: Basic tests for the wrapped DeBruijnGraph class.
code: def test_ref_cycle_detector(self, ref, smallest_good_k):
      min_k = max(smallest_good_k - 5, 1)
      max_k = min(smallest_good_k + 5, len(ref))
      for k in range(min_k, max_k):
          # The build fails, returning None, with a k < smallest_good_k. If
          # k >= smallest_good_k, then we expect a real non-None instance.
          result = debruijn_graph.build(
              ref, [], self.single_k_dbg_options(k)
          )
          if k < smallest_good_k:
              self.assertIsNone(
                  result, "Cycle not detected for k={}".format(k)
              )
          else:
              self.assertIsNotNone(
                  result, "False cycle detected for k={}".format(k)
              )
  
imports: from absl.testing import absltest
  from absl.testing import parameterized
  from third_party.nucleus.io import fasta
  from third_party.nucleus.io import sam
  from third_party.nucleus.testing import test_utils
  from third_party.nucleus.util import ranges
  from deepvariant import testdata
  from deepvariant.protos import realigner_pb2
  from deepvariant.realigner.python import debruijn_graph
label_desc: Use image node_id 12 for calling the DeBruijnGraphWrapTest obj's underlying member method code with example usage: obj.test_ref_cycle_detector(ref, smallest_good_k) without return types