class_docstr: Synthetic Reasoning Natural Language benchmark inspired by "Transformers as Soft Reasoners over Language"
      https://arxiv.org/abs/2002.05867
code: def generate_problem(
      self,
  ) -> Tuple[
      List[LanguageRule], LanguageFact, List[LanguageRule], LanguageFact
  ]:
      subject_category = random.choice(list(self.subjects.keys()))
      subject = random.choice(self.subjects[subject_category])
      rules = generate_rules(
          self.attribute_groups,
          subject,
          subject_category,
          specific_category=self.specific_category,
      )
      test_fact, test_rules_used, target_fact = generate_test(
          self.attribute_groups,
          subject,
          subject_category,
          rules,
          self.use_specific_attributes,
      )
      return rules, test_fact, test_rules_used, target_fact
  
imports: import random
  import dataclasses
  from copy import copy
  from typing import List, Dict, Literal, Tuple
  from dataclasses import dataclass
  from .scenario import Scenario, Instance, Reference, TRAIN_SPLIT, VALID_SPLIT, TEST_SPLIT, CORRECT_TAG, Input, Output
label_desc: Use image node_id 2 for calling the SRNScenario obj's underlying member method code with example usage: obj.generate_problem() and returns: rules,  test_fact,  test_rules_used,  target_fact