code: def test_left_recursion(self) -> None:
      grammar = """
          start: expr NEWLINE
          expr: ('-' term | expr '+' term | term)
          term: NUMBER
          foo: 'foo'
          bar: 'bar'
          baz: 'baz'
          """
      self.assertEqual(
          self.calculate_first_sets(grammar),
          {
              "expr": {"NUMBER", "'-'"},
              "term": {"NUMBER"},
              "start": {"NUMBER", "'-'"},
              "foo": {"'foo'"},
              "bar": {"'bar'"},
              "baz": {"'baz'"},
          },
      )
  
imports: import unittest
  from test import test_tools
  from typing import Dict, Set
label_desc: Use image node_id 16 for calling the TestFirstSets obj's underlying member method code with example usage: obj.test_left_recursion() without return types