class_docstr: DataClass holding information about a matching of variants.
  
  The haplotype labeling algorithm, at its core, searches for an assignment of
  genotypes to the candidate variants and the truth variants that result in the
  same diploid haplotype sequences, which we call a match. All of the
  information in that previous sentence is captured here as class attributes:
  
  Attributes:
    haplotypes: list[str]. The sorted list of haplotypes produced by this match.
    candidates: list[nucleus.proto.Variant]: The list of candidate variants.
    truths: list[nucleus.proto.Variant]: The list of true variants.
    candidate_genotypes: list[tuple]: The genotypes that, when assigned to the
      candidate variants, give rise to haplotypes.
    truth_genotypes: list[tuple]: The genotypes that, when assigned to the known
      variants, give rise to haplotypes.
class_docstr_tok: ["DataClass","holding","information","about","a","matching","of","variants",".","The","haplotype","labeling","algorithm",",","at","its","core",",","searches","for","an","assignment","of","genotypes","to","the","candidate","variants","and","the","truth","variants","that","result","in","the","same","diploid","haplotype","sequences",",","which","we","call","a","match",".","All","of","the","information","in","that","previous","sentence","is","captured","here","as","class","attributes",":","Attributes",":","haplotypes",":","list","[","str","]",".","The","sorted","list","of","haplotypes","produced","by","this","match",".","candidates",":","list","[","nucleus.proto.Variant","]",":","The","list","of","candidate","variants",".","truths",":","list","[","nucleus.proto.Variant","]",":","The","list","of","true","variants",".","candidate_genotypes",":","list","[","tuple","]",":","The","genotypes","that",",","when","assigned","to","the","candidate","variants",",","give","rise","to","haplotypes",".","truth_genotypes",":","list","[","tuple","]",":","The","genotypes","that",",","when","assigned","to","the","known","variants",",","give","rise","to","haplotypes","."]
docstr: Quality of this match.
  
  Lower scores are better.
  
  Returns:
    tuple[int] where all elements are >= 0: The tuple is suitable for sorting
    matches, so that sorted(matches, key=lambda x: x.match_metrics) will rank
    matches so that the best option is first.
code: def match_metrics(self):
      """Quality of this match.
  
      Lower scores are better.
  
      Returns:
        tuple[int] where all elements are >= 0: The tuple is suitable for sorting
        matches, so that sorted(matches, key=lambda x: x.match_metrics) will rank
        matches so that the best option is first.
      """
      return (
          self.n_false_negatives,
          self.n_false_positives,
          self.n_true_positives,
      )
  
imports: import collections
  import copy
  import enum
  import heapq
  import itertools
  from absl import logging
  from deepvariant.labeler import variant_labeler
  from deepvariant.protos import deepvariant_pb2
  from third_party.nucleus.io import fasta
  from third_party.nucleus.util import ranges
  from third_party.nucleus.util import variant_utils
  from third_party.nucleus.util import variantcall_utils
label_desc: Use image node_id 4 for calling the HaplotypeMatch obj's underlying member method code with example usage: obj.match_metrics() and returns: self,  self,  self