class_docstr: Type signature for a ufunc.
  
  Attributes
  ----------
  type : str
      Character representing the nominal type.
  func_data : str or None or FullTypeDescr or FuncNameSuffix, optional
      The string representing the expression to insert into the data
      array, if any.
  in_ : str or None, optional
      The typecode(s) of the inputs.
  out : str or None, optional
      The typecode(s) of the outputs.
  astype : dict or None, optional
      If astype['x'] is 'y', uses PyUFunc_x_x_As_y_y/PyUFunc_xx_x_As_yy_y
      instead of PyUFunc_x_x/PyUFunc_xx_x.
  cfunc_alias : str or none, optional
      Appended to inner loop C function name, e.g., FLOAT_{cfunc_alias}. See make_arrays.
      NOTE: it doesn't support 'astype'
  dispatch : str or None, optional
      Dispatch-able source name without its extension '.dispatch.c' that
      contains the definition of ufunc, dispatched at runtime depending on the
      specified targets of the dispatch-able source.
      NOTE: it doesn't support 'astype'
class_docstr_tok: ["Type","signature","for","a","ufunc",".","Attributes","--","--","--","--","--","type",":","str","Character","representing","the","nominal","type",".","func_data",":","str","or","None","or","FullTypeDescr","or","FuncNameSuffix",",","optional","The","string","representing","the","expression","to","insert","into","the","data","array",",","if","any",".","in_",":","str","or","None",",","optional","The","typecode","(","s",")","of","the","inputs",".","out",":","str","or","None",",","optional","The","typecode","(","s",")","of","the","outputs",".","astype",":","dict","or","None",",","optional","If","astype","[","'","x","'","]","is","'","y","'",",","uses","PyUFunc_x_x_As_y_y\/PyUFunc_xx_x_As_yy_y","instead","of","PyUFunc_x_x\/PyUFunc_xx_x",".","cfunc_alias",":","str","or","none",",","optional","Appended","to","inner","loop","C","function","name",",","e.g.",",","FLOAT_","{","cfunc_alias","}",".","See","make_arrays",".","NOTE",":","it","does","n't","support","'astype'","dispatch",":","str","or","None",",","optional","Dispatch-able","source","name","without","its","extension","'.dispatch.c","'","that","contains","the","definition","of","ufunc",",","dispatched","at","runtime","depending","on","the","specified","targets","of","the","dispatch-able","source",".","NOTE",":","it","does","n't","support","'astype","'"]
code: def finish_signature(self, nin, nout):
      if self.in_ is None:
          self.in_ = self.type * nin
      assert len(self.in_) == nin
      if self.out is None:
          self.out = self.type * nout
      assert len(self.out) == nout
      self.astype = self.astype_dict.get(self.type, None)
  
imports: import os
  import re
  import struct
  import sys
  import textwrap
  import argparse
  import string
label_desc: Use image node_id 2 for calling the TypeDescription obj's underlying member method code with example usage: obj.finish_signature(nin, nout) without return types