def METHOD_NAME(self):
    """
    Yield a list of HapCutVariant objects for each connected component ('block')
    """
    state = "BLOCK"  # DFA states are BLOCK and VARIANT; they describe what we expect next
    block = []
    for line in self._file:
        if state == "BLOCK":
            state = "VARIANT"
            if not line.startswith("BLOCK:"):
                raise ParseError('Expected a new block (line starting with "BLOCK:")')
            m = self.block_re.match(line)
            if not m:
                raise ParseError("BLOCK line malformed")
        elif state == "VARIANT":
            if line.startswith("********"):
                # End marker reached, yield the list of variants in this connected component
                if block:
                    yield block
                state = "BLOCK"
                block = []
            else:
                fields = line.strip().split()
                if len(fields) not in (9, 11):
                    raise ParseError(
                        "Expected nine fields (for hapCUT 1) "
                        "or eleven fields (for hapCUT 2) in variant line"
                    )
                (
                    variant_id,
                    haplotype_1,
                    haplotype_2,
                    chromosome,
                    position,
                    reference_allele,
                    alternative_allele,
                    genotype,
                ) = fields[:8]
                if len(fields) == 9:  # hapCUT 1
                    # The last fields are not actually used, we just check
                    # whether they are formatted correctly
                    rest = fields[8]
                    fields = rest.split(":")
                    if len(fields) == 5:
                        if not fields[-1] == "FV":
                            raise ParseError('Expected "FV" after last colon')
                        fields = fields[:-1]
                    if not len(fields) == 4:
                        raise ParseError("Too few elements in last (colon-separated) field")
                    # allele_counts, genotype_likelihoods, delta, mec_variant = fields
                    # allele_counts = [ int(s) for s in allele_counts.split(',') ]
                    # genotype_likelihoods = [ float(s) for s in genotype_likelihoods.split(',') ]
                    # delta = float(delta)
                    # mec_variant = float(mec_variant)
                elif len(fields) == 11:
                    # pruned, switch_qual, flip_qual = fields[8:]
                    pass
                if haplotype_1 == "-" or haplotype_2 == "-":
                    # This happens in hapCUT 2 sometimes
                    continue
                _ = int(variant_id)
                haplotype_1 = int(haplotype_1)
                haplotype_2 = int(haplotype_2)
                position = int(position) - 1
                component_id = block[0].position if block else position
                variant = HapCutVariant(
                    chromosome, position, haplotype_1, haplotype_2, component_id
                )
                block.append(variant)
    if len(block) > 0:
        yield block