code: def test_binary_shape_functions(self):
      binary_ops = [
          operator.__mul__,
          operator.__truediv__,
          operator.__gt__,
          operator.__add__,
      ]
  
      for fn in binary_ops:
          size_1 = [1, 4, 8]
          size_2 = [4, 1, 8]
          t = torch.jit.trace(fn, (torch.rand([4]), torch.rand([4])))
          inputs = list(t.graph.inputs())
          inputs[0].setType(inputs[0].type().with_sizes(size_1))
          inputs[1].setType(inputs[1].type().with_sizes(size_2))
          torch._C._jit_pass_propagate_shapes_on_graph(t.graph)
          self.assertEqual(
              next(t.graph.outputs()).type().symbolic_sizes(), [4, 4, 8]
          )
  
imports: import operator
  import unittest
  from textwrap import dedent
  import torch
  from torch import nn, Tensor
  from torch.testing import FileCheck
  from torch.testing._internal.common_methods_invocations import sample_inputs_cat_concat
  from torch.testing._internal.common_utils import make_tensor
  from torch.testing._internal.jit_utils import JitTestCase, execWrapper
  from typing import List, Any
label_desc: Use image node_id 9 for calling the TestSymbolicShapeAnalysis obj's underlying member method code with example usage: obj.test_binary_shape_functions() without return types