12#include <boost/python/class.hpp>
13#include <boost/python/def.hpp>
14#include <boost/python/list.hpp>
15#include <boost/python/overloads.hpp>
24std::once_flag INIT_FLAG;
34 auto &mgr = AlgorithmManager::Instance();
35 std::call_once(INIT_FLAG, []() {
36 PyRun_SimpleString(
"import atexit\n"
37 "def cleanupAlgorithmManager():\n"
38 " from mantid.api import AlgorithmManager\n"
39 " AlgorithmManager.shutdown()\n"
40 "atexit.register(cleanupAlgorithmManager)");
47 return self->
create(algName, version);
50std::shared_ptr<Algorithm> createUnmanaged(
AlgorithmManagerImpl *self,
const std::string &algName,
51 const int &version = -1) {
104boost::python::list runningInstancesOf(
AlgorithmManagerImpl const *
const self,
const std::string &algName) {
105 std::vector<IAlgorithm_const_sptr> mgrAlgs;
112 boost::python::list algs;
113 for (
auto &mgrAlg : mgrAlgs) {
128BOOST_PYTHON_FUNCTION_OVERLOADS(create_overloads, create, 2, 3)
129BOOST_PYTHON_FUNCTION_OVERLOADS(createUnmanaged_overloads, createUnmanaged, 2, 3)
138 class_<AlgorithmManagerImpl, boost::noncopyable>(
"AlgorithmManagerImpl", no_init)
139 .def(
"create", &create, create_overloads((arg(
"name"), arg(
"version")),
"Creates a managed algorithm."))
140 .def(
"createUnmanaged", &createUnmanaged,
141 createUnmanaged_overloads((arg(
"name"), arg(
"version")),
"Creates an unmanaged algorithm."))
143 .def(
"getAlgorithm", &getAlgorithm, (arg(
"self"), arg(
"id_holder")),
144 "Return the algorithm instance identified by the given id.")
145 .def(
"removeById", &removeById, (arg(
"self"), arg(
"id_holder")),
"Remove an algorithm from the managed list")
146 .def(
"runningInstancesOf", &runningInstancesOf, (arg(
"self"), arg(
"algorithm_name")),
147 "Returns a list of managed algorithm instances that are "
148 "currently executing")
149 .def(
"clear", &clear, arg(
"self"),
"Clears the current list of managed algorithms")
150 .def(
"shutdown", &shutdown, arg(
"self"),
"Cancels all running algorithms and waits for them to exit")
151 .def(
"cancelAll", &cancelAll, arg(
"self"),
"Requests that all currently running algorithms be cancelled")
152 .def(
"Instance", instance, return_value_policy<reference_existing_object>(),
153 "Return a reference to the singleton instance")
154 .staticmethod(
"Instance");
void export_AlgorithmManager()
#define GNU_DIAG_OFF(x)
This is a collection of macros for turning compiler warnings off in a controlled manner.
The AlgorithmManagerImpl class is responsible for controlling algorithm instances.
std::shared_ptr< Algorithm > createUnmanaged(const std::string &algName, const int &version=-1) const
Creates an unmanaged algorithm with the option of choosing a version.
IAlgorithm_sptr getAlgorithm(AlgorithmID id) const
Returns a shared pointer by algorithm id.
void removeById(AlgorithmID id)
Removes the given algorithm from the managed list.
IAlgorithm_sptr create(const std::string &algName, const int &version=-1)
Creates a managed algorithm with the option of choosing a version.
std::vector< IAlgorithm_const_sptr > runningInstancesOf(const std::string &algorithmName) const
Returns all running (& managed) occurances of the named algorithm, oldest first.
void cancelAll()
Requests cancellation of all running algorithms.
void clear()
Clears all managed algorithm objects that are not currently running.
Defines a structure for releasing the Python GIL using the RAII pattern.
std::shared_ptr< IAlgorithm > IAlgorithm_sptr
shared pointer to Mantid::API::IAlgorithm
std::unique_ptr< T > create(const P &parent, const IndexArg &indexArg, const HistArg &histArg)
This is the create() method that all the other create() methods call.
Provides a concrete type to wrap & return AlgorithmIDs that are actually just typedefs for void*.
API::AlgorithmID id
held ID value