class_docstr: Base class for Ufunc and FusedFunc.
code: def _parse_signature(self, sig):
      m = re.match(
          r"\s*([fdgFDGil]*)\s*\*\s*([fdgFDGil]*)\s*->\s*([*fdgFDGil]*)\s*$",
          sig,
      )
      if m:
          inarg, outarg, ret = (x.strip() for x in m.groups())
          if ret.count("*") > 1:
              raise ValueError(f"{self.name}: Invalid signature: {sig}")
          return inarg, outarg, ret
      m = re.match(r"\s*([fdgFDGil]*)\s*->\s*([fdgFDGil]?)\s*$", sig)
      if m:
          inarg, ret = (x.strip() for x in m.groups())
          return inarg, "", ret
      raise ValueError(f"{self.name}: Invalid signature: {sig}")
  
imports: import itertools
  import json
  import os
  from stat import ST_MTIME
  import argparse
  import re
  import textwrap
  import numpy
label_desc: Use image node_id 2 for calling the Func obj's underlying member method code with example usage: obj._parse_signature(sig) and returns: inarg,  outarg,  ret, inarg,  str,  ret