code: def _broadcast_shapes(s1, s2):
      
  
      n1 = len(s1)
      n2 = len(s2)
      n = max(n1, n2)
      res = [1] * n
  
      for i in range(n):
          if i >= n1:
              c1 = 1
          else:
              c1 = s1[n1-1-i]
  
          if i >= n2:
              c2 = 1
          else:
              c2 = s2[n2-1-i]
  
          if c1 == 1:
              rc = c2
          elif c2 == 1 or c1 == c2:
              rc = c1
          else:
              raise ValueError('array shapes %r and %r are not compatible' % (s1, s2))
  
          res[n-1-i] = rc
  
      return tuple(res)
docs: Given array shapes `s1` and `s2`, compute the shape of the array that would
      result from broadcasting them together.