code: def _make_node(Name, Fields, Attributes, Bases):
      NBFields = len(Fields)
  
      def create_node(self, *args, **kwargs):
          if args:
              if (
                  len(args) + len([k for k in kwargs if k in Fields])
                  != NBFields
              ):
                  raise TypeError(
                      "{} constructor takes either 0 or {} mandatory arguments".format(
                          Name, NBFields
                      )
                  )
              for argname, argval in zip(Fields, args):
                  setattr(self, argname, argval)
          if kwargs:
              for argname, argval in kwargs.items():
                  setattr(self, argname, argval)
  
      setattr(
          _sys.modules[__name__],
          Name,
          type(
              Name,
              Bases,
              {
                  "__init__": create_node,
                  "_fields": Fields,
                  "_attributes": Attributes,
              },
          ),
      )
  
file_path: catboost/contrib/python/gast/gast/gast.py
imports: import sys
  import ast
  from ast import boolop, cmpop, excepthandler, expr, expr_context, operator
  from ast import slice, stmt, unaryop, mod, AST
  from ast import iter_child_nodes, walk
label_desc: Use image node_id 1 for calling a global function with example usage: _make_node(Name, Fields, Attributes, Bases) without return types