q+=" WHERE "+" AND ".join(map("".join,self.constraints))
returnq+""+"".join(self.restrictions)
defadd_query(queries,sentences,query_def):
# add a query to queries
# - sentences is an array of sentence segment that can be collected together
# - query_def definition of a query
forsinmap("".join,itertools.product(*sentences)):
queries.append([s,query_def])
returnqueries
defgenerate_scql(queries):
# Take a list of queries and generate the scQL query
fors,qinqueries:
print(s)
print(q.to_scql())
prefix_to_uri={
"ex":"http://example.org/",
"scql_actions":"http://askco.re/scql/actions#",
"scql_types":"http://askco.re/scql/types#",
"geo":"http://www.opengis.net/ont/geosparql#"
}
defmu(curie):
# split curie accordin to :
x=curie.split(":",1)
returnprefix_to_uri[x[0]]+x[1]
desire_perf=["I would like","I am interested in","I want to see","He would like","He is interested in"]
queries=[]
queries=add_query(queries,[desire_perf,["a point cloud of the rescue area"]],select_query([[mu("geo:Geometry"),"area"],[mu("scql_types:lidar_frame"),"scan"]],[["scan.pose","inside","area"],["area.uri","=",mu("ex:rescue_area")]],[]))
queries=add_query(queries,[desire_perf,["a point cloud"]],select_query([[mu("scql_types:lidar_frame>"),"scan"]],[["scan.pose","inside","%area"]],[]))
#PERFORM scql_actions:bring_to askcore_things:box AS box TO "POINT(10, 10)"^^geo:wktLiteral WHERE box <askcore_things:contains> <askcore_things:medication>
queries=add_query(queries,[["I would like you to bring a box to sepcific coordinates"]],perform_query(mu("scql_actions:bring_to"),["ex:box","box"],f'"POINT(10, 10)"^^{mu("geo:wktLiteral")}',[["box",mu("ex:contains"),mu("ex:medication")]],[]))
#PERFORM scql_actions:bring_to scql_types:agent_pose AS source TO scql_types:agent_pose AS target WHERE target.agent = <agent_1> AND source.agent = <agent_2>
#PERFORM scql_actions:move_to TO scql_types:salient_point AS point WHERE point.pose INSIDE %area
#PERFORM scql_actions:move_to TO scql_types:agent_pose AS target WHERE target.agent = <agent_1>
#PERFORM scql_actions:explore scql_types:lidar_frame IN %area USING scql:dataset = %dataset_uri
#SELECT scql_types:image img, scql_types:salient_point sp WHERE distance(img.pose, sp.pose) < 1 AND sp.type = ex:human
#PERFORM scql_actions:bring_to askcore_things:box AS box TO scql_types:salient_point sp WHERE sp.type = ex:human AND sp.pose inside %area AND box <askcore_things:contains> <askcore_things:medication>