9 #include <unordered_map>
10 #include <boost/any.hpp>
11 #include <boost/property_tree/json_parser.hpp>
12 #include "knowrob/integration/InterfaceUtils.h"
13 #include "knowrob/formulas/ModalFormula.h"
14 #include "knowrob/semweb/Triple.h"
15 #include "knowrob/queries/QueryTree.h"
16 #include "knowrob/queries/QueryError.h"
17 #include "knowrob/KnowledgeBase.h"
38 if (std::getenv(
"KNOWROB_SETTINGS")) {
39 config_path = std::getenv(
"KNOWROB_SETTINGS");
43 boost::property_tree::ptree config;
44 boost::property_tree::read_json(
55 std::vector<std::unique_ptr<QueryTree>> queryTrees;
56 for (
auto &phi : args) {
57 auto qt = std::make_unique<QueryTree>(phi);
58 if (qt->numPaths() > 1) {
59 throw QueryError(
"Disjunctions are not allowed in assertions. "
60 "Appears in statement {}.", *phi);
61 }
else if (qt->numPaths() == 0) {
62 throw QueryError(
"Invalid assertion: '{}'", *phi);
64 queryTrees.push_back(std::move(qt));
67 int numPredicates = 0;
68 for (
auto &qt: queryTrees) {
69 for (
auto &psi: qt->begin()->nodes()) {
77 std::vector<TriplePtr> data(numPredicates);
78 std::vector<TriplePatternPtr> buf(numPredicates);
79 uint32_t dataIndex = 0;
82 for (
auto &qt: queryTrees) {
83 for (
auto &psi: qt->begin()->nodes()) {
84 switch (psi->type()) {
86 buf[dataIndex] = std::make_shared<TriplePattern>(
87 std::static_pointer_cast<Predicate>(psi),
false);
89 data[dataIndex].owned =
true;
90 buf[dataIndex]->instantiateInto(*data[dataIndex].ptr);
94 throw QueryError(
"Invalid assertion: '{}'", *psi);
100 if (kb_->insertAll(data)) {
101 std::cout <<
"success, " << dataIndex <<
" statement(s) were asserted." <<
"\n";
104 std::cout <<
"assertion failed." <<
"\n";
115 auto epistemicOperator = boost::any_cast<int>(
options.at(
"epistemicOperator"));
118 auto aboutAgentIRI = boost::any_cast<std::string>(
options.at(
"aboutAgentIRI"));
119 auto confidence = boost::any_cast<double>(
options.at(
"confidence"));
120 if (!aboutAgentIRI.empty()) {
121 if (confidence != 1.0) {
122 mFormula = std::make_shared<ModalFormula>(
123 modals::B(aboutAgentIRI, confidence), mFormula);
125 mFormula = std::make_shared<ModalFormula>(
131 auto aboutAgentIRI = boost::any_cast<std::string>(
options.at(
"aboutAgentIRI"));
132 if (!aboutAgentIRI.empty()) {
133 mFormula = std::make_shared<ModalFormula>(
138 auto temporalOperator = boost::any_cast<int>(
options.at(
"temporalOperator"));
141 auto minPastTimestamp = boost::any_cast<double>(
options.at(
"minPastTimestamp"));
142 auto maxPastTimestamp = boost::any_cast<double>(
options.at(
"maxPastTimestamp"));
144 auto minPastTimePoint =
147 auto maxPastTimePoint =
152 if (minPastTimestamp != -1 || maxPastTimestamp != -1) {
153 if (minPastTimestamp == -1) {
154 mFormula = std::make_shared<ModalFormula>(
156 maxPastTimePoint)), mFormula);
157 }
else if (maxPastTimestamp == -1) {
158 mFormula = std::make_shared<ModalFormula>(
160 std::nullopt)), mFormula);
162 mFormula = std::make_shared<ModalFormula>(
164 maxPastTimePoint)), mFormula);
167 mFormula = std::make_shared<ModalFormula>(
171 if (minPastTimestamp != -1 || maxPastTimestamp != -1) {
172 if (minPastTimestamp == -1) {
173 mFormula = std::make_shared<ModalFormula>(
175 maxPastTimePoint)), mFormula);
176 }
else if (maxPastTimestamp == -1) {
177 mFormula = std::make_shared<ModalFormula>(
179 std::nullopt)), mFormula);
181 mFormula = std::make_shared<ModalFormula>(
183 maxPastTimePoint)), mFormula);
186 mFormula = std::make_shared<ModalFormula>(
199 class_<InterfaceUtils>(
"InterfaceUtils")
204 enum_<EpistemicOperator>(
"EpistemicOperator")
207 enum_<TemporalOperator>(
"TemporalOperator")
static boost::property_tree::ptree loadSettings()
static FormulaPtr applyModality(const std::unordered_map< std::string, boost::any > &options, FormulaPtr phi)
static bool assertStatements(const KnowledgeBasePtr &kb, const std::vector< FormulaPtr > &args)
std::shared_ptr< ModalFormula > K(const FormulaPtr &phi)
std::shared_ptr< ModalFormula > P(const FormulaPtr &phi)
std::shared_ptr< ModalFormula > B(const FormulaPtr &phi)
std::shared_ptr< ModalFormula > H(const FormulaPtr &phi)
void createType< InterfaceUtils >()
TimePoint fromSeconds(double seconds)
std::shared_ptr< KnowledgeBase > KnowledgeBasePtr
TripleTemplate< std::string > TripleCopy
std::shared_ptr< Formula > FormulaPtr