Skip to main content

Querying the NEEMs (Narrative Enabled Episodic Memories) datasbase

Project description

NEEMQuery

A python library for easily querying NEEMS which have been migrated to an SQL database using the neem_to_sql converter. NEEMQuery uses SQLAlchemy and provides similar interface to the users. This makes if feel very familiar to SQLAlchemhy or SQL users in general.

Installation

pip install neemquery

Example Usage

All below examples assume the neems are located in a 'test' database at 'localhost' which can be accessed by 'newuser' using password 'password'.

Getting a robot plan for a certain neem:

Highest Abstraction Level:

This is done by using the NeemInterface class which provides a higher level of abstraction and hides the complexity of the underlying SQL queries.

from neem_query.neem_interface import NeemInterface

ni = NeemInterface("mysql+pymysql://newuser:password@localhost/test")

neem_id = 2
df = ni.query_task_sequence_of_neem(neem_id).get_result().df

print(df)

Medium Abstraction Level:

This is done by using the NeemQuery class directly and using predefined joins and filters to build the query.

from neem_query import NeemQuery

nq = NeemQuery("mysql+pymysql://newuser:password@localhost/test")

neem_ids = [2]

df = (nq.select_task_type().
      select_time_columns().
      select_neem_id().
      select_from_tasks().
      join_task_types().
      join_neems_metadata().filter_by_sql_neem_id(neem_ids).
      join_task_time_interval().
      order_by_interval_begin()).get_result().df

print(df)

Lowest Abstraction Level:

This is done by using the NeemQuery class directly and explicitly writing the SQL query with the correct join conditions and column names and table names.

from neem_query import NeemQuery, TaskType
from neem_query.neems_database import SomaHasIntervalBegin, SomaHasIntervalEnd, DulExecutesTask,\
    DulHasTimeInterval, Neem
from sqlalchemy import and_

nq = NeemQuery("mysql+pymysql://newuser:password@localhost/test")

neem_ids = [2]

df = (nq.select(TaskType.o).
      select(SomaHasIntervalBegin.o).select(SomaHasIntervalEnd.o).
      select(DulExecutesTask.neem_id).
      select_from(DulExecutesTask).
      join_neem_id_tables(TaskType, DulExecutesTask,
                          and_(TaskType.s == DulExecutesTask.dul_Task_o,
                               TaskType.o != "owl:NamedIndividual")).
      join(Neem,
           Neem._id == DulExecutesTask.neem_id).filter(Neem.ID.in_(neem_ids)).
      join_neem_id_tables(DulHasTimeInterval, DulExecutesTask,
                          DulHasTimeInterval.dul_Event_s == DulExecutesTask.dul_Action_s).
      join_neem_id_tables(SomaHasIntervalBegin, DulHasTimeInterval,
                          SomaHasIntervalBegin.dul_TimeInterval_s == DulHasTimeInterval.dul_TimeInterval_o).
      join_neem_id_tables(SomaHasIntervalEnd, DulHasTimeInterval,
                          SomaHasIntervalEnd.dul_TimeInterval_s == DulHasTimeInterval.dul_TimeInterval_o).
      order_by(SomaHasIntervalBegin.o)).get_result().df

print(df)

The result for all of the above examples is exactly the same, and it looks like this:

           task_type          begin            end                   neem_id
0  soma:PhysicalTask 1608292974.092 1608293007.087  5fdca2bcdab33892cea161a0
1  soma:PhysicalTask 1608292995.581 1608293007.041  5fdca2bcdab33892cea161a0
2      soma:Fetching 1608292995.851 1608292996.978  5fdca2bcdab33892cea161a0
3      soma:Reaching 1608292996.124 1608292996.292  5fdca2bcdab33892cea161a0
4     soma:PickingUp 1608292996.546 1608292996.808  5fdca2bcdab33892cea161a0
5  soma:Transporting 1608292999.264 1608292999.863  5fdca2bcdab33892cea161a0
6      soma:MovingTo 1608292999.555 1608292999.657  5fdca2bcdab33892cea161a0
7       soma:Placing 1608293005.093 1608293006.889  5fdca2bcdab33892cea161a0
8      soma:Lowering 1608293005.355 1608293005.462  5fdca2bcdab33892cea161a0
9     soma:Releasing 1608293006.717 1608293006.831  5fdca2bcdab33892cea161a0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neemquery-1.0.12.tar.gz (64.8 kB view details)

Uploaded Source

Built Distribution

NEEMQuery-1.0.12-py3-none-any.whl (50.3 kB view details)

Uploaded Python 3

File details

Details for the file neemquery-1.0.12.tar.gz.

File metadata

  • Download URL: neemquery-1.0.12.tar.gz
  • Upload date:
  • Size: 64.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for neemquery-1.0.12.tar.gz
Algorithm Hash digest
SHA256 425e39bcdddbdf25dafd50e7e8efdcb275760239a93681600cd2b0039e3041c5
MD5 7bbc34534222e24530ab1e450668ee88
BLAKE2b-256 254cff6ec02540b64fe4a69b8541daac7186767f92abca66b55065d3cce69b55

See more details on using hashes here.

File details

Details for the file NEEMQuery-1.0.12-py3-none-any.whl.

File metadata

  • Download URL: NEEMQuery-1.0.12-py3-none-any.whl
  • Upload date:
  • Size: 50.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for NEEMQuery-1.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 ef70f457e1c4fa98947d9675f9a6bd408e709ca3e78b2a40d84e03cc2f21bcc0
MD5 87891284d65c64e58f498df4410220ba
BLAKE2b-256 972b3b225e2f645659f0a7c7f297853720abd724d7d655d88417b0508a8caada

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page