code: def create(parallel, dirs, config):
      
      profile_dir = utils.safe_makedir(os.path.join(dirs["work"], get_log_dir(config), "ipython"))
      has_mincores = any(x.startswith("mincores=") for x in parallel["resources"])
      cores = min(_get_common_cores(config["resources"]), parallel["system_cores"])
      if cores > 1 and not has_mincores:
          adj_cores = max(1, int(math.floor(cores * float(parallel.get("mem_pct", 1.0)))))
          # if we have less scheduled cores than per machine, use the scheduled count
          if cores > parallel["cores"]:
              cores = parallel["cores"]
          # if we have less total cores required for the entire process, use that
          elif adj_cores > parallel["num_jobs"] * parallel["cores_per_job"]:
              cores = parallel["num_jobs"] * parallel["cores_per_job"]
          else:
              cores = adj_cores
              cores = per_machine_target_cores(cores, parallel["num_jobs"])
          parallel["resources"].append("mincores=%s" % cores)
      return ipython_cluster.cluster_view(parallel["scheduler"].lower(), parallel["queue"],
                                          parallel["num_jobs"], parallel["cores_per_job"],
                                          profile=profile_dir, start_wait=parallel["timeout"],
                                          extra_params={"resources": parallel["resources"],
                                                        "mem": parallel["mem"],
                                                        "tag": parallel.get("tag"),
                                                        "run_local": parallel.get("run_local"),
                                                        "local_controller": parallel.get("local_controller")},
                                          retries=parallel.get("retries"))
docs: Create a cluster based on the provided parallel arguments.
  
      Returns an IPython view on the cluster, enabling processing on jobs.
  
      Adds a mincores specification if he have machines with a larger
      number of cores to allow jobs to be batched together for shared
      memory usage.