code: def log_nets(self, net_str_list, running_time, print_info=True):
      net_id_list = [
          self.net_pool.net_str2id[net_str] for net_str in net_str_list
      ]
      nets_num = len(net_id_list)
      new_nets_num = len(set(net_id_list))
  
      net_val_list = [
          self.net_pool.net_id2val[net_id] for net_id in net_id_list
      ]
      mean_val, max_val = np.mean(net_val_list), np.max(net_val_list)
      self.net_log_writer.write(
          "%d.\t nets=%d (total=%d)\t%s\n"
          % (
              self.episode,
              new_nets_num,
              nets_num,
              "\t".join([str(net_id) for net_id in net_id_list]),
          )
      )
      log_str = (
          "%d.\t nets=%d (total=%d)\t mean_val=%s (max_val=%s)\t using %s(min)\t%s"
          % (
              self.episode + 1,
              new_nets_num,
              nets_num,
              mean_val,
              max_val,
              running_time,
              "\t".join([str(net_val) for net_val in net_val_list]),
          )
      )
      if print_info:
          print(log_str)
      self.val_log_writer.write(log_str + "\n")
  
      self.val_log_writer.flush()
      self.net_log_writer.flush()
      self.net_val_wrt_episode.append(net_val_list)
      self.episode += 1
  
imports: import os
  import subprocess
  import json
  import pickle
  import numpy
  from ..data_providers.utils import get_data_provider_by_name
  from .expdir_monitor import ExpdirMonitor
  from ..expdir_monitor import distributed
label_desc: Use image node_id 11 for calling the ArchManager obj's underlying member method code with example usage: obj.log_nets(net_str_list, running_time, print_info) without return types