CMS 3D CMS Logo

MakePyBind11ParameterSets.cc
Go to the documentation of this file.
3 
7 #include <pybind11/embed.h>
8 
9 static void makePSetsFromFile(std::string const& fileName) {
10  std::string initCommand(
11  "from FWCore.ParameterSet.Types import makeCppPSet\n"
12  "exec(open('");
13  initCommand += fileName + "').read())";
14  pybind11::exec(initCommand);
15  pybind11::exec("makeCppPSet(locals(), topPSet)");
16 }
17 
18 static void makePSetsFromString(std::string const& module) {
19  std::string command = module;
20  command += "\nfrom FWCore.ParameterSet.Types import makeCppPSet\nmakeCppPSet(locals(), topPSet)";
21  pybind11::exec(command);
22 }
23 
24 namespace edm {
25  namespace cmspybind11_p3 {
26  std::unique_ptr<ParameterSet> readConfig(std::string const& config) {
27  cmspython3::PyBind11ProcessDesc pythonProcessDesc(config);
28  return pythonProcessDesc.parameterSet();
29  }
30 
31  std::unique_ptr<ParameterSet> readConfig(std::string const& config, int argc, char* argv[]) {
32  cmspython3::PyBind11ProcessDesc pythonProcessDesc(config, argc, argv);
33  return pythonProcessDesc.parameterSet();
34  }
35 
36  void makeParameterSets(std::string const& configtext, std::unique_ptr<ParameterSet>& main) {
37  cmspython3::PyBind11ProcessDesc pythonProcessDesc(configtext);
38  main = pythonProcessDesc.parameterSet();
39  }
40 
41  std::unique_ptr<ParameterSet> readPSetsFrom(std::string const& module) {
42  pybind11::scoped_interpreter guard{};
44  std::unique_ptr<ParameterSet> retVal;
45  {
46  cmspython3::Python11ParameterSet theProcessPSet;
47  pybind11::object mainModule = pybind11::module::import("__main__");
48  mainModule.attr("topPSet") = pybind11::cast(&theProcessPSet);
49 
50  try {
51  // if it ends with py, it's a file
52  if (module.substr(module.size() - 3) == ".py") {
53  makePSetsFromFile(module);
54  } else {
55  makePSetsFromString(module);
56  }
57  } catch (pybind11::error_already_set const& e) {
58  cmspython3::pythonToCppException("Configuration", e.what());
59  }
60  retVal = std::make_unique<edm::ParameterSet>(ParameterSet(theProcessPSet.pset()));
61  }
62  return retVal;
63  }
64  } // namespace cmspybind11_p3
65 } // namespace edm
void pythonToCppException(const std::string &iType, const std::string &error)
void makeParameterSets(std::string const &configtext, std::unique_ptr< ParameterSet > &main)
essentially the same as the previous method
Definition: config.py:1
std::unique_ptr< ParameterSet > readPSetsFrom(std::string const &fileOrString)
std::unique_ptr< edm::ParameterSet > parameterSet() const
static void makePSetsFromString(std::string const &module)
cond::Hash import(Session &source, const cond::Hash &sourcePayloadId, const std::string &inputTypeName, const void *inputPtr, Session &destination)
Definition: CondDBImport.cc:36
std::unique_ptr< ParameterSet > readConfig(std::string const &config)
list command
Definition: mps_check.py:25
HLT enums.
static void makePSetsFromFile(std::string const &fileName)
Definition: main.py:1
Definition: vlib.h:208