code: def test_tdt(self):
      pedigree = hl.Pedigree.read(resource("tdt.fam"))
      tdt_tab = hl.transmission_disequilibrium_test(
          hl.split_multi_hts(
              hl.import_vcf(resource("tdt.vcf"), min_partitions=4)
          ),
          pedigree,
      )
  
      truth = hl.import_table(
          resource("tdt_results.tsv"),
          types={
              "POSITION": hl.tint32,
              "T": hl.tint32,
              "U": hl.tint32,
              "Chi2": hl.tfloat64,
              "Pval": hl.tfloat64,
          },
      )
      truth = truth.transmute(
          locus=hl.locus(truth.CHROM, truth.POSITION),
          alleles=[truth.REF, truth.ALT],
      ).key_by("locus", "alleles")
  
      if tdt_tab.count() != truth.count():
          self.fail(
              "Result has {} rows but should have {} rows".format(
                  tdt_tab.count(), truth.count()
              )
          )
  
      bad = tdt_tab.filter(hl.is_nan(tdt_tab.p_value), keep=False).join(
          truth.filter(hl.is_nan(truth.Pval), keep=False), how="outer"
      )
      bad.describe()
  
      bad = bad.filter(
          ~(
              (bad.t == bad.T)
              & (bad.u == bad.U)
              & (hl.abs(bad.chi_sq - bad.Chi2) < 0.001)
              & (hl.abs(bad.p_value - bad.Pval) < 0.001)
          )
      )
  
      if bad.count() != 0:
          bad.order_by(hl.asc(bad.u)).show()
          self.fail(
              "Found rows in violation of the predicate (see show output)"
          )
  
imports: import unittest
  import hail
  from ..helpers import *
label_desc: Use image node_id 14 for calling the Tests obj's underlying member method code with example usage: obj.test_tdt() without return types