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: Gets the number of candidates whose matched genotype is (0, 0).
  
  Since the candidates don't have expected genotypes, we can only count each
  site instead of each genotype. So this is the number of candidates whose
  matched genotype is (0, 0).
  
  Returns:
    int >= 0.
code: def n_false_positives(self):
      """Gets the number of candidates whose matched genotype is (0, 0).
  
      Since the candidates don't have expected genotypes, we can only count each
      site instead of each genotype. So this is the number of candidates whose
      matched genotype is (0, 0).
  
      Returns:
        int >= 0.
      """
      if self._n_false_positives is None:
          self._n_false_positives = sum(
              sum(gt) == 0 for gt in self.candidate_genotypes
          )
      return self._n_false_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 6 for calling the HaplotypeMatch obj's underlying member method code with example usage: obj.n_false_positives() and returns: self