code: def retrieve_output_dim(
      self,
      input_shapes: List[Tuple[int, ...]],
      output_idx: int,
      dimension_idx: int,
      default_output_value: int,
  ) -> int:
      output_tag = self.outputs[output_idx][dimension_idx]
      for input_dict, input_shape in zip(self.inputs, input_shapes):
          for key, value in input_dict.items():
              if (
                  isinstance(value, dict)
                  and value.get("name") == output_tag
              ) or value == output_tag:
                  return input_shape[key]
      return default_output_value
  
imports: import subprocess
  from dataclasses import dataclass
  from enum import Enum
  from functools import cached_property
  from typing import Optional, Any, Union, Tuple, List, Dict
  import numpy
  from nebullvm.optional_modules.tensorflow import tensorflow
  from nebullvm.optional_modules.torch import torch
label_desc: Use image node_id 2 for calling the DynamicAxisInfo obj's underlying member method code with example usage: obj.retrieve_output_dim(input_shapes, output_idx, dimension_idx, default_output_value) and returns: default_output_value, input_shape