MCPcopy Create free account
hub / github.com/SZAILAB/MaterialDFT-Demo / execute_case

Function execute_case

cpp_core/src/module_impl.cpp:354–4335  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

352}
353
354py::dict execute_case(const py::dict &request) {
355 const auto execute_case_wall_start = std::chrono::steady_clock::now();
356 py::dict run_meta;
357 run_meta["backend"] = "cpp_core";
358 run_meta["cpp_core_version"] = "0.1.0";
359
360 std::string mode = "unknown";
361 try {
362 if (!request.contains("mode")) {
363 return make_error_result(
364 "INPUT_INVALID", "PREPARE", "mode is required", run_meta, "other", 0);
365 }
366 mode = py::cast<std::string>(request["mode"]);
367 run_meta["mode"] = mode;
368
369 std::optional<int> omp_threads_resources;
370 if (request.contains("resources") && py::isinstance<py::dict>(request["resources"])) {
371 const py::dict resources = py::cast<py::dict>(request["resources"]);
372 omp_threads_resources = parse_optional_positive_int_dict_entry(
373 resources, "omp_num_threads", "request.resources");
374 }
375 std::optional<int> omp_threads_runtime_policy;
376 if (request.contains("runtime_policy") && py::isinstance<py::dict>(request["runtime_policy"])) {
377 const py::dict runtime_policy = py::cast<py::dict>(request["runtime_policy"]);
378 omp_threads_runtime_policy = parse_optional_positive_int_dict_entry(
379 runtime_policy, "omp_num_threads", "request.runtime_policy");
380 }
381 const std::optional<int> omp_threads_env = parse_optional_positive_int_env("OMP_NUM_THREADS");
382
383 int omp_threads_target = 1;
384 std::string omp_threads_source = "default";
385 if (omp_threads_resources.has_value()) {
386 omp_threads_target = *omp_threads_resources;
387 omp_threads_source = "resources";
388 } else if (omp_threads_runtime_policy.has_value()) {
389 omp_threads_target = *omp_threads_runtime_policy;
390 omp_threads_source = "runtime_policy";
391 } else if (omp_threads_env.has_value()) {
392 omp_threads_target = *omp_threads_env;
393 omp_threads_source = "env";
394 }
395
396#ifdef MaterialDFT_HAS_OPENMP
397 omp_set_num_threads(omp_threads_target);
398 const int omp_threads_actual = std::max(1, omp_get_max_threads());
399#else
400 const int omp_threads_actual = 1;
401#endif
402 run_meta["omp_num_threads_requested"] = omp_threads_target;
403 run_meta["omp_num_threads_source"] = omp_threads_source;
404 run_meta["omp_num_threads_actual"] = omp_threads_actual;
405
406 if (mode == "relax") {
407 return execute_relax_case(
408 request,
409 run_meta,
410 [](const py::dict& step_request) { return execute_case(step_request); });
411 }

Callers

nothing calls this directly

Calls 15

make_error_resultFunction · 0.85
execute_relax_caseFunction · 0.85
require_dictFunction · 0.85
require_listFunction · 0.85
parse_supported_kpointsFunction · 0.85
parse_lattice_angFunction · 0.85
check_klattice_basicFunction · 0.85
inv3Function · 0.85
matvecFunction · 0.85

Tested by

no test coverage detected