code: def MakeSimpleProtoClass(fields, full_name=None, pool=None):
      """Create a Protobuf class whose fields are basic types.
  
      Note: this doesn't validate field names!
  
      Args:
        fields: dict of {name: field_type} mappings for each field in the proto. If
            this is an OrderedDict the order will be maintained, otherwise the
            fields will be sorted by name.
        full_name: optional str, the fully-qualified name of the proto type.
        pool: optional DescriptorPool instance.
      Returns:
        a class, the new protobuf class with a FileDescriptor.
      """
      factory = message_factory.MessageFactory(pool=pool)
  
      if full_name is not None:
          try:
              proto_cls = _GetMessageFromFactory(factory, full_name)
              return proto_cls
          except KeyError:
              # The factory's DescriptorPool doesn't know about this class yet.
              pass
  
      # Get a list of (name, field_type) tuples from the fields dict. If fields was
      # an OrderedDict we keep the order, but otherwise we sort the field to ensure
      # consistent ordering.
      field_items = fields.items()
      if not isinstance(fields, OrderedDict):
          field_items = sorted(field_items)
  
      # Use a consistent file name that is unlikely to conflict with any imported
      # proto files.
      fields_hash = hashlib.sha1()
      for f_name, f_type in field_items:
          fields_hash.update(f_name.encode("utf-8"))
          fields_hash.update(str(f_type).encode("utf-8"))
      proto_file_name = fields_hash.hexdigest() + ".proto"
  
      # If the proto is anonymous, use the same hash to name it.
      if full_name is None:
          full_name = (
              "net.proto2.python.public.proto_builder.AnonymousProto_"
              + fields_hash.hexdigest()
          )
          try:
              proto_cls = _GetMessageFromFactory(factory, full_name)
              return proto_cls
          except KeyError:
              # The factory's DescriptorPool doesn't know about this class yet.
              pass
  
      # This is the first time we see this proto: add a new descriptor to the pool.
      factory.pool.Add(
          _MakeFileDescriptorProto(
              proto_file_name, full_name, field_items
          )
      )
      return _GetMessageFromFactory(factory, full_name)
  
file_path: catboost/contrib/python/protobuf/py3/google/protobuf/proto_builder.py
imports: from collections import OrderedDict
  import hashlib
  import os
  from google.protobuf import descriptor_pb2
  from google.protobuf import descriptor
  from google.protobuf import message_factory
label_desc: Use image node_id 2 for calling a global function with example usage: MakeSimpleProtoClass(fields, full_name, pool) and returns: _GetMessageFromFactory, proto_cls, proto_cls