Source code for pydialogue.language.queries

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This module provides functions that create request sentences from parameters.
"""

from . import components as lc
from . import describers as tdescribers
from . import helpers as he


[docs] @he.auto_fill([6], ["speaker"]) def get(tmp=(None, None), player=(None, None), neg=(None, None), rel=(None, None), entity=(None, None), prepos_location=(None, None), speaker=None): """ Creates a request for the verb get in the following format: <tmp> <player> (neg) <get> <entity> <prepos_location> For example, "Hannah, get the book on the shelf." """ from . import desc_mappers as dm if lc.verb_inf(rel[0]) != "get": return None get_res = lc.Sentence([tmp[1], player[1], lc.Word(","), neg[1], rel[1], entity[1], prepos_location[1], lc.Word('.')], speaker=speaker) get_desc = tdescribers.get((None, None), (None, None), neg, rel, entity, prepos_location) get_desc.args["AM-DIS"] = lc.Arg(player[0], player[1]) if tmp[0] is not None: get_desc.args["AM-TMP"] = lc.Arg(tmp[0], tmp[1]) get_res.describers = [get_desc] get_res.customizers["request_mapping"] = lc.Customizer(he.returns_same, {"sentence": get_res}) get_res.customizers["desc_mapping"] = lc.Customizer(dm.get, {}) return get_res
[docs] @he.auto_fill([6], ["speaker"]) def drop(tmp=(None, None), player=(None, None), neg=(None, None), rel=(None, None), entity=(None, None), prepos_location=(None, None), speaker=None): """ Creates a request for the verb drop in the following format: <tmp> <player> (neg) <drop> <entity> <prepos_location> where prepos_location refers to the target location. For example, "Max, drop the cup on the table." """ from . import desc_mappers as dm if lc.verb_inf(rel[0]) != "drop": return None drop_res = lc.Sentence([tmp[1], player[1], lc.Word(","), neg[1], rel[1], entity[1], prepos_location[1], lc.Word('.')], speaker=speaker) drop_res_desc = tdescribers.drop((None, None), (None, None), neg, rel, entity, prepos_location) drop_res_desc.args["AM-DIS"] = lc.Arg(player[0], player[1]) if tmp[0] is not None: drop_res_desc.args["AM-TMP"] = lc.Arg(tmp[0], tmp[1]) drop_res.describers = [drop_res_desc] drop_res.customizers['request_mapping'] = lc.Customizer(he.returns_same, {"sentence": drop_res}) drop_res.customizers["desc_mapping"] = lc.Customizer(dm.drop, {}) return drop_res
[docs] @he.auto_fill([6], ["speaker"]) def look(tmp=(None, None), player=(None, None), neg=(None, None), rel=(None, None), thing_looked=(None, None), speaker=None): """ Creates a request for the verb look in the following format: <tmp> <player> (neg) <look> <thing_looked> <item_location> For example, "Max, look in the clothing drawer in the bedroom." """ from . import desc_mappers as dm if lc.verb_inf(rel[0]) != "look": return None look_response = lc.Sentence([tmp[1], player[1], lc.Word(","), neg[1], rel[1], thing_looked[1], lc.Word('.')], speaker=speaker) describer = tdescribers.look((None, None), (None, None), neg, rel, thing_looked, look_response) describer.args["AM-DIS"] = lc.Arg(player[0], player[1]) if tmp[0] is not None: describer.args["AM-TMP"] = lc.Arg(tmp[0], tmp[1]) look_response.describers = [describer] look_response.customizers["request_mapping"] = lc.Customizer(he.returns_same, {"sentence": look_response}) look_response.customizers["desc_mapping"] = lc.Customizer(dm.look, {}) return look_response
[docs] @he.auto_fill([7], ["speaker"]) def go(tmp=(None, None), player=(None, None), neg=(None, None), rel=(None, None), direction=(None, None), source_location=(None, None), target_location=(None, None), speaker=None): """ Creates a request for the verb go in the following format: <tmp> <player> (neg) <go> <direction> <source_location> <target_location> For example, "Andy, go north from the guest room." """ from . import desc_mappers as dm if lc.verb_inf(rel[0]) != "go": return None go_res = lc.Sentence([tmp[1], player[1], lc.Word(","), neg[1], rel[1], direction[1], source_location[1], target_location[1], lc.Word('.')], speaker=speaker) go_desc = tdescribers.go((None, None), (None, None), neg, rel, direction, source_location, target_location, go_res) go_desc.args["AM-DIS"] = lc.Arg(player[0], player[1]) if tmp[0] is not None: go_desc.args["AM-TMP"] = lc.Arg(tmp[0], tmp[1]) go_res.describers = [go_desc] go_res.customizers["request_mapping"] = lc.Customizer(he.returns_same, {"sentence": go_res}) go_res.customizers["desc_mapping"] = lc.Customizer(dm.go, {}) return go_res
[docs] def cont_connector(sentences, speaker=None, connector=None): """ Connects multiple requests in a single compound request using a connector. """ from . import sentences as tsentences requests = [] for sent in sentences: req = sent.run_customizer("request_mapping") requests.append(req) if connector is not None: res = tsentences.cont_and(requests, connector, speaker) else: res = tsentences.cont(requests, speaker) return res