code: def test_alternatives(self) -> None:
      grammar = """
              start: expr NEWLINE? ENDMARKER
              expr: A | B
              A: 'a' | '-'
              B: 'b' | '+'
          """
      self.assertEqual(
          self.calculate_first_sets(grammar),
          {
              "A": {"'a'", "'-'"},
              "B": {"'+'", "'b'"},
              "expr": {"'+'", "'a'", "'b'", "'-'"},
              "start": {"'+'", "'a'", "'b'", "'-'"},
          },
      )
  
imports: import unittest
  from test import test_tools
  from typing import Dict, Set
label_desc: Use image node_id 2 for calling the TestFirstSets obj's underlying member method code with example usage: obj.test_alternatives() without return types