code: def pvalue_for_strand_bias(channels: List[np.ndarray]) -> float:
      """Calculates a rough p-value for strand bias in pileup.
  
      Using the strand and read-supports-variant channels, compares the numbers of
      forward and reverse reads among the supporting reads and returns a p-value
      using a two-tailed binomial test.
  
      Args:
          channels: List of DeepVariant channels. Uses channels[3] (strand) and
            channels[4] (read support).
  
      Returns:
          P-value for whether the supporting reads show strand bias.
      """
      strand = remove_ref_band(channels[3])
      forward_strand = strand == 240
      reverse_strand = strand == 70
  
      read_support = remove_ref_band(channels[4])
      read_support = (read_support == 254) * 1.0
      forward_support = read_support * forward_strand
      reverse_support = read_support * reverse_strand
  
      forward_supporting = int(sum(np.amax(forward_support, axis=1)))
      reverse_supporting = int(sum(np.amax(reverse_support, axis=1)))
  
      return binomial_test(
          k=forward_supporting,
          n=forward_supporting + reverse_supporting,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import enum
  import math
  from typing import List, NamedTuple, Tuple
  from etils import epath
  from IPython import display
  import numpy
  from PIL import Image
  from PIL import ImageDraw
  from third_party.nucleus.protos import variants_pb2
label_desc: Use image node_id 26 for calling a global function with example usage: pvalue_for_strand_bias(channels) and returns: binomial_test