diff --git a/README.md b/README.md index 1afb0bb..5e27237 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DesignSafe API (dapi) -![dapi](dapi.png) +![dapi](https://raw.githubusercontent.com/DesignSafe-CI/dapi/main/dapi.png) [![build and test](https://github.com/DesignSafe-CI/dapi/actions/workflows/build-test.yml/badge.svg)](https://github.com/DesignSafe-CI/dapi/actions/workflows/build-test.yml) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md) diff --git a/docs/dapi.html b/docs/dapi.html new file mode 100644 index 0000000..5d5d0e3 --- /dev/null +++ b/docs/dapi.html @@ -0,0 +1,277 @@ + + + + + + + dapi API documentation + + + + + + + + + +
+
+

+dapi

+ +

dapi is a library that simplifies the process of submitting, running, and monitoring TAPIS v2 / AgavePy jobs on DesignSafe via Jupyter Notebooks.

+ +

Features

+ +
    +
  • Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. dapi abstracts away the complexities.

  • +
  • Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.

  • +
+ +

Installation

+ +
+
pip3 install dapi
+
+
+
+ + + + + +
 1"""
+ 2`dapi` is a library that simplifies the process of submitting, running, and monitoring [TAPIS v2 / AgavePy](https://agavepy.readthedocs.io/en/latest/index.html) jobs on [DesignSafe](https://designsafe-ci.org) via [Jupyter Notebooks](https://jupyter.designsafe-ci.org).
+ 3
+ 4
+ 5## Features
+ 6
+ 7* Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. `dapi` abstracts away the complexities.
+ 8
+ 9* Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.
+10
+11## Installation
+12
+13```shell
+14pip3 install dapi
+15```
+16
+17"""
+18from . import jobs
+
+ + +
+
+ + \ No newline at end of file diff --git a/docs/dapi/db.html b/docs/dapi/db.html new file mode 100644 index 0000000..b048597 --- /dev/null +++ b/docs/dapi/db.html @@ -0,0 +1,263 @@ + + + + + + + dapi.db API documentation + + + + + + + + + +
+
+

+dapi.db

+ + + + + + +
1name = "designsafe_db"
+2from .db import DSDatabase
+
+ + +
+
+
+ name = +'designsafe_db' + + +
+ + + + +
+
+ + \ No newline at end of file diff --git a/docs/dapi/db/config.html b/docs/dapi/db/config.html new file mode 100644 index 0000000..a203167 --- /dev/null +++ b/docs/dapi/db/config.html @@ -0,0 +1,263 @@ + + + + + + + dapi.db.config API documentation + + + + + + + + + +
+
+

+dapi.db.config

+ + + + + + +
1# Mapping of shorthand names to actual database names and environment prefixes
+2db_config = {
+3    "ngl": {"dbname": "sjbrande_ngl_db", "env_prefix": "NGL_"},
+4    "vp": {"dbname": "sjbrande_vpdb", "env_prefix": "VP_"},
+5    "eq": {"dbname": "post_earthquake_recovery", "env_prefix": "EQ_"},
+6}
+
+ + +
+
+
+ db_config = + + {'ngl': {'dbname': 'sjbrande_ngl_db', 'env_prefix': 'NGL_'}, 'vp': {'dbname': 'sjbrande_vpdb', 'env_prefix': 'VP_'}, 'eq': {'dbname': 'post_earthquake_recovery', 'env_prefix': 'EQ_'}} + + +
+ + + + +
+
+ + \ No newline at end of file diff --git a/docs/dapi/db/db.html b/docs/dapi/db/db.html new file mode 100644 index 0000000..8bb3612 --- /dev/null +++ b/docs/dapi/db/db.html @@ -0,0 +1,702 @@ + + + + + + + dapi.db.db API documentation + + + + + + + + + +
+
+

+dapi.db.db

+ + + + + + +
 1import os
+ 2import pandas as pd
+ 3from sqlalchemy import create_engine, exc
+ 4from sqlalchemy.orm import sessionmaker
+ 5from sqlalchemy import text
+ 6
+ 7from .config import db_config
+ 8
+ 9
+10class DSDatabase:
+11    """A database utility class for connecting to a DesignSafe SQL database.
+12
+13    This class provides functionality to connect to a MySQL database using
+14    SQLAlchemy and PyMySQL. It supports executing SQL queries and returning
+15    results in different formats.
+16
+17    Attributes:
+18        user (str): Database username, defaults to 'dspublic'.
+19        password (str): Database password, defaults to 'R3ad0nlY'.
+20        host (str): Database host address, defaults to '129.114.52.174'.
+21        port (int): Database port, defaults to 3306.
+22        db (str): Database name, can be 'sjbrande_ngl_db', 'sjbrande_vpdb', or 'post_earthquake_recovery'.
+23        recycle_time (int): Time in seconds to recycle database connections.
+24        engine (Engine): SQLAlchemy engine for database connection.
+25        Session (sessionmaker): SQLAlchemy session maker bound to the engine.
+26    """
+27
+28    def __init__(self, dbname="ngl"):
+29        """Initializes the DSDatabase instance with environment variables and creates the database engine.
+30
+31        Args:
+32            dbname (str): Shorthand for the database name. Must be one of 'ngl', 'vp', or 'eq'.
+33        """
+34
+35        if dbname not in db_config:
+36            raise ValueError(
+37                f"Invalid database shorthand '{dbname}'. Allowed shorthands are: {', '.join(db_config.keys())}"
+38            )
+39
+40        config = db_config[dbname]
+41        env_prefix = config["env_prefix"]
+42
+43        self.user = os.getenv(f"{env_prefix}DB_USER", "dspublic")
+44        self.password = os.getenv(f"{env_prefix}DB_PASSWORD", "R3ad0nlY")
+45        self.host = os.getenv(f"{env_prefix}DB_HOST", "129.114.52.174")
+46        self.port = os.getenv(f"{env_prefix}DB_PORT", 3306)
+47        self.db = config["dbname"]
+48
+49        # Setup the database connection
+50        self.engine = create_engine(
+51            f"mysql+pymysql://{self.user}:{self.password}@{self.host}:{self.port}/{self.db}",
+52            pool_recycle=3600,  # 1 hour in seconds
+53        )
+54        self.Session = sessionmaker(bind=self.engine)
+55
+56    def read_sql(self, sql, output_type="DataFrame"):
+57        """Executes a SQL query and returns the results.
+58
+59        Args:
+60            sql (str): The SQL query string to be executed.
+61            output_type (str, optional): The format for the query results. Defaults to 'DataFrame'.
+62                Possible values are 'DataFrame' for a pandas DataFrame, or 'dict' for a list of dictionaries.
+63
+64        Returns:
+65            pandas.DataFrame or list of dict: The result of the SQL query.
+66
+67        Raises:
+68            ValueError: If the SQL query string is empty or if the output type is not valid.
+69            SQLAlchemyError: If an error occurs during query execution.
+70        """
+71        if not sql:
+72            raise ValueError("SQL query string is required")
+73
+74        if output_type not in ["DataFrame", "dict"]:
+75            raise ValueError('Output type must be either "DataFrame" or "dict"')
+76
+77        session = self.Session()
+78
+79        try:
+80            if output_type == "DataFrame":
+81                return pd.read_sql_query(sql, session.bind)
+82            else:
+83                # Convert SQL string to a text object
+84                sql_text = text(sql)
+85                result = session.execute(sql_text)
+86                return [dict(row) for row in result]
+87        except exc.SQLAlchemyError as e:
+88            raise Exception(f"SQLAlchemyError: {e}")
+89        finally:
+90            session.close()
+91
+92    def close(self):
+93        """Close the database connection."""
+94        self.engine.dispose()
+
+ + +
+
+ +
+ + class + DSDatabase: + + + +
+ +
11class DSDatabase:
+12    """A database utility class for connecting to a DesignSafe SQL database.
+13
+14    This class provides functionality to connect to a MySQL database using
+15    SQLAlchemy and PyMySQL. It supports executing SQL queries and returning
+16    results in different formats.
+17
+18    Attributes:
+19        user (str): Database username, defaults to 'dspublic'.
+20        password (str): Database password, defaults to 'R3ad0nlY'.
+21        host (str): Database host address, defaults to '129.114.52.174'.
+22        port (int): Database port, defaults to 3306.
+23        db (str): Database name, can be 'sjbrande_ngl_db', 'sjbrande_vpdb', or 'post_earthquake_recovery'.
+24        recycle_time (int): Time in seconds to recycle database connections.
+25        engine (Engine): SQLAlchemy engine for database connection.
+26        Session (sessionmaker): SQLAlchemy session maker bound to the engine.
+27    """
+28
+29    def __init__(self, dbname="ngl"):
+30        """Initializes the DSDatabase instance with environment variables and creates the database engine.
+31
+32        Args:
+33            dbname (str): Shorthand for the database name. Must be one of 'ngl', 'vp', or 'eq'.
+34        """
+35
+36        if dbname not in db_config:
+37            raise ValueError(
+38                f"Invalid database shorthand '{dbname}'. Allowed shorthands are: {', '.join(db_config.keys())}"
+39            )
+40
+41        config = db_config[dbname]
+42        env_prefix = config["env_prefix"]
+43
+44        self.user = os.getenv(f"{env_prefix}DB_USER", "dspublic")
+45        self.password = os.getenv(f"{env_prefix}DB_PASSWORD", "R3ad0nlY")
+46        self.host = os.getenv(f"{env_prefix}DB_HOST", "129.114.52.174")
+47        self.port = os.getenv(f"{env_prefix}DB_PORT", 3306)
+48        self.db = config["dbname"]
+49
+50        # Setup the database connection
+51        self.engine = create_engine(
+52            f"mysql+pymysql://{self.user}:{self.password}@{self.host}:{self.port}/{self.db}",
+53            pool_recycle=3600,  # 1 hour in seconds
+54        )
+55        self.Session = sessionmaker(bind=self.engine)
+56
+57    def read_sql(self, sql, output_type="DataFrame"):
+58        """Executes a SQL query and returns the results.
+59
+60        Args:
+61            sql (str): The SQL query string to be executed.
+62            output_type (str, optional): The format for the query results. Defaults to 'DataFrame'.
+63                Possible values are 'DataFrame' for a pandas DataFrame, or 'dict' for a list of dictionaries.
+64
+65        Returns:
+66            pandas.DataFrame or list of dict: The result of the SQL query.
+67
+68        Raises:
+69            ValueError: If the SQL query string is empty or if the output type is not valid.
+70            SQLAlchemyError: If an error occurs during query execution.
+71        """
+72        if not sql:
+73            raise ValueError("SQL query string is required")
+74
+75        if output_type not in ["DataFrame", "dict"]:
+76            raise ValueError('Output type must be either "DataFrame" or "dict"')
+77
+78        session = self.Session()
+79
+80        try:
+81            if output_type == "DataFrame":
+82                return pd.read_sql_query(sql, session.bind)
+83            else:
+84                # Convert SQL string to a text object
+85                sql_text = text(sql)
+86                result = session.execute(sql_text)
+87                return [dict(row) for row in result]
+88        except exc.SQLAlchemyError as e:
+89            raise Exception(f"SQLAlchemyError: {e}")
+90        finally:
+91            session.close()
+92
+93    def close(self):
+94        """Close the database connection."""
+95        self.engine.dispose()
+
+ + +

A database utility class for connecting to a DesignSafe SQL database.

+ +

This class provides functionality to connect to a MySQL database using +SQLAlchemy and PyMySQL. It supports executing SQL queries and returning +results in different formats.

+ +

Attributes: + user (str): Database username, defaults to 'dspublic'. + password (str): Database password, defaults to 'R3ad0nlY'. + host (str): Database host address, defaults to '129.114.52.174'. + port (int): Database port, defaults to 3306. + db (str): Database name, can be 'sjbrande_ngl_db', 'sjbrande_vpdb', or 'post_earthquake_recovery'. + recycle_time (int): Time in seconds to recycle database connections. + engine (Engine): SQLAlchemy engine for database connection. + Session (sessionmaker): SQLAlchemy session maker bound to the engine.

+
+ + +
+ +
+ + DSDatabase(dbname='ngl') + + + +
+ +
29    def __init__(self, dbname="ngl"):
+30        """Initializes the DSDatabase instance with environment variables and creates the database engine.
+31
+32        Args:
+33            dbname (str): Shorthand for the database name. Must be one of 'ngl', 'vp', or 'eq'.
+34        """
+35
+36        if dbname not in db_config:
+37            raise ValueError(
+38                f"Invalid database shorthand '{dbname}'. Allowed shorthands are: {', '.join(db_config.keys())}"
+39            )
+40
+41        config = db_config[dbname]
+42        env_prefix = config["env_prefix"]
+43
+44        self.user = os.getenv(f"{env_prefix}DB_USER", "dspublic")
+45        self.password = os.getenv(f"{env_prefix}DB_PASSWORD", "R3ad0nlY")
+46        self.host = os.getenv(f"{env_prefix}DB_HOST", "129.114.52.174")
+47        self.port = os.getenv(f"{env_prefix}DB_PORT", 3306)
+48        self.db = config["dbname"]
+49
+50        # Setup the database connection
+51        self.engine = create_engine(
+52            f"mysql+pymysql://{self.user}:{self.password}@{self.host}:{self.port}/{self.db}",
+53            pool_recycle=3600,  # 1 hour in seconds
+54        )
+55        self.Session = sessionmaker(bind=self.engine)
+
+ + +

Initializes the DSDatabase instance with environment variables and creates the database engine.

+ +

Args: + dbname (str): Shorthand for the database name. Must be one of 'ngl', 'vp', or 'eq'.

+
+ + +
+
+
+ user + + +
+ + + + +
+
+
+ password + + +
+ + + + +
+
+
+ host + + +
+ + + + +
+
+
+ port + + +
+ + + + +
+
+
+ db + + +
+ + + + +
+
+
+ engine + + +
+ + + + +
+
+
+ Session + + +
+ + + + +
+
+ +
+ + def + read_sql(self, sql, output_type='DataFrame'): + + + +
+ +
57    def read_sql(self, sql, output_type="DataFrame"):
+58        """Executes a SQL query and returns the results.
+59
+60        Args:
+61            sql (str): The SQL query string to be executed.
+62            output_type (str, optional): The format for the query results. Defaults to 'DataFrame'.
+63                Possible values are 'DataFrame' for a pandas DataFrame, or 'dict' for a list of dictionaries.
+64
+65        Returns:
+66            pandas.DataFrame or list of dict: The result of the SQL query.
+67
+68        Raises:
+69            ValueError: If the SQL query string is empty or if the output type is not valid.
+70            SQLAlchemyError: If an error occurs during query execution.
+71        """
+72        if not sql:
+73            raise ValueError("SQL query string is required")
+74
+75        if output_type not in ["DataFrame", "dict"]:
+76            raise ValueError('Output type must be either "DataFrame" or "dict"')
+77
+78        session = self.Session()
+79
+80        try:
+81            if output_type == "DataFrame":
+82                return pd.read_sql_query(sql, session.bind)
+83            else:
+84                # Convert SQL string to a text object
+85                sql_text = text(sql)
+86                result = session.execute(sql_text)
+87                return [dict(row) for row in result]
+88        except exc.SQLAlchemyError as e:
+89            raise Exception(f"SQLAlchemyError: {e}")
+90        finally:
+91            session.close()
+
+ + +

Executes a SQL query and returns the results.

+ +

Args: + sql (str): The SQL query string to be executed. + output_type (str, optional): The format for the query results. Defaults to 'DataFrame'. + Possible values are 'DataFrame' for a pandas DataFrame, or 'dict' for a list of dictionaries.

+ +

Returns: + pandas.DataFrame or list of dict: The result of the SQL query.

+ +

Raises: + ValueError: If the SQL query string is empty or if the output type is not valid. + SQLAlchemyError: If an error occurs during query execution.

+
+ + +
+
+ +
+ + def + close(self): + + + +
+ +
93    def close(self):
+94        """Close the database connection."""
+95        self.engine.dispose()
+
+ + +

Close the database connection.

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/docs/dapi/dir.html b/docs/dapi/dir.html deleted file mode 100644 index efe6956..0000000 --- a/docs/dapi/dir.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - -dapi.dir API documentation - - - - - - - - - - - -
-
-
-

Module dapi.dir

-
-
-
- -Expand source code - -
import os
-
-
-def get_ds_path_uri(ag, path):
-    """
-    Given a path on DesignSafe, determine the correct input URI.
-
-    Args:
-        ag (object): Agave object to fetch profiles or metadata.
-        path (str): The directory path.
-
-    Returns:
-        str: The corresponding input URI.
-
-    Raises:
-        ValueError: If no matching directory pattern is found.
-    """
-
-    # If any of the following directory patterns are found in the path,
-    # process them accordingly.
-    directory_patterns = [
-        ("jupyter/MyData", "designsafe.storage.default", True),
-        ("jupyter/mydata", "designsafe.storage.default", True),
-        ("jupyter/CommunityData", "designsafe.storage.community", False),
-        ("/MyData", "designsafe.storage.default", True),
-        ("/mydata", "designsafe.storage.default", True),
-    ]
-
-    for pattern, storage, use_username in directory_patterns:
-        if pattern in path:
-            path = path.split(pattern).pop()
-            input_dir = ag.profiles.get()["username"] + path if use_username else path
-            input_uri = f"agave://{storage}/{input_dir}"
-            return input_uri.replace(" ", "%20")
-
-    project_patterns = [
-        ("jupyter/MyProjects", "project-"),
-        ("jupyter/projects", "project-"),
-    ]
-
-    for pattern, prefix in project_patterns:
-        if pattern in path:
-            path = path.split(pattern + "/").pop()
-            project_id = path.split("/")[0]
-            query = {"value.projectId": str(project_id)}
-            path = path.split(project_id).pop()
-            project_uuid = ag.meta.listMetadata(q=str(query))[0]["uuid"]
-            input_uri = f"agave://{prefix}{project_uuid}{path}"
-            return input_uri.replace(" ", "%20")
-
-    raise ValueError(f"No matching directory pattern found for: {path}")
-
-
-
-
-
-
-
-

Functions

-
-
-def get_ds_path_uri(ag, path) -
-
-

Given a path on DesignSafe, determine the correct input URI.

-

Args

-
-
ag : object
-
Agave object to fetch profiles or metadata.
-
path : str
-
The directory path.
-
-

Returns

-
-
str
-
The corresponding input URI.
-
-

Raises

-
-
ValueError
-
If no matching directory pattern is found.
-
-
- -Expand source code - -
def get_ds_path_uri(ag, path):
-    """
-    Given a path on DesignSafe, determine the correct input URI.
-
-    Args:
-        ag (object): Agave object to fetch profiles or metadata.
-        path (str): The directory path.
-
-    Returns:
-        str: The corresponding input URI.
-
-    Raises:
-        ValueError: If no matching directory pattern is found.
-    """
-
-    # If any of the following directory patterns are found in the path,
-    # process them accordingly.
-    directory_patterns = [
-        ("jupyter/MyData", "designsafe.storage.default", True),
-        ("jupyter/mydata", "designsafe.storage.default", True),
-        ("jupyter/CommunityData", "designsafe.storage.community", False),
-        ("/MyData", "designsafe.storage.default", True),
-        ("/mydata", "designsafe.storage.default", True),
-    ]
-
-    for pattern, storage, use_username in directory_patterns:
-        if pattern in path:
-            path = path.split(pattern).pop()
-            input_dir = ag.profiles.get()["username"] + path if use_username else path
-            input_uri = f"agave://{storage}/{input_dir}"
-            return input_uri.replace(" ", "%20")
-
-    project_patterns = [
-        ("jupyter/MyProjects", "project-"),
-        ("jupyter/projects", "project-"),
-    ]
-
-    for pattern, prefix in project_patterns:
-        if pattern in path:
-            path = path.split(pattern + "/").pop()
-            project_id = path.split("/")[0]
-            query = {"value.projectId": str(project_id)}
-            path = path.split(project_id).pop()
-            project_uuid = ag.meta.listMetadata(q=str(query))[0]["uuid"]
-            input_uri = f"agave://{prefix}{project_uuid}{path}"
-            return input_uri.replace(" ", "%20")
-
-    raise ValueError(f"No matching directory pattern found for: {path}")
-
-
-
-
-
-
-
- -
- - - \ No newline at end of file diff --git a/docs/dapi/index.html b/docs/dapi/index.html deleted file mode 100644 index e2fc7fd..0000000 --- a/docs/dapi/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -dapi API documentation - - - - - - - - - - - -
-
-
-

Namespace dapi

-
-
-
-
-

Sub-modules

-
-
dapi.jobs
-
-

dapi is a library that simplifies the process of submitting, running, and monitoring [TAPIS v2 / …

-
-
-
-
-
-
-
-
-
-
- -
- - - \ No newline at end of file diff --git a/docs/dapi/jobs.html b/docs/dapi/jobs.html index ca4ff96..428b636 100644 --- a/docs/dapi/jobs.html +++ b/docs/dapi/jobs.html @@ -1,605 +1,283 @@ - - - -dapi.jobs API documentation - - - - - - - - - - + + + + dapi.jobs API documentation + + + + + + + -
-
-
-

Module dapi.jobs

-
-
-
- -Expand source code - -
import time
-from datetime import datetime, timedelta, timezone
-from tqdm import tqdm
-import logging
-
-# Configuring the logging system
-# logging.basicConfig(
-#     level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
-# )
-
-def get_status(ag, job_id, time_lapse=15):
-    """
-    Retrieves and monitors the status of a job from Agave.
-
-    This function initially waits for the job to start, displaying its progress using
-    a tqdm progress bar. Once the job starts, it monitors the job's status up to
-    a maximum duration specified by the job's "maxHours". If the job completes or fails
-    before reaching this maximum duration, it returns the job's final status.
-
-    Args:
-      ag (object): The Agave job object used to interact with the job.
-      job_id (str): The unique identifier of the job to monitor.
-      time_lapse (int, optional): Time interval, in seconds, to wait between status
-        checks. Defaults to 15 seconds.
-
-    Returns:
-      str: The final status of the job. Typical values include "FINISHED", "FAILED",
-           and "STOPPED".
-
-    Raises:
-      No exceptions are explicitly raised, but potential exceptions raised by the Agave
-      job object or other called functions/methods will propagate.
-    """
-
-    previous_status = None
-    # Initially check if the job is already running
-    status = ag.jobs.getStatus(jobId=job_id)["status"]
-
-    job_details = ag.jobs.get(jobId=job_id)
-    max_hours = job_details["maxHours"]
-
-    # Using tqdm to provide visual feedback while waiting for job to start
-    with tqdm(desc="Waiting for job to start", dynamic_ncols=True) as pbar:
-        while status not in ["RUNNING", "FINISHED", "FAILED", "STOPPED"]:
-            time.sleep(time_lapse)
-            status = ag.jobs.getStatus(jobId=job_id)["status"]
-            pbar.update(1)
-            pbar.set_postfix_str(f"Status: {status}")
-
-    # Once the job is running, monitor it for up to maxHours
-    max_iterations = int(max_hours * 3600 // time_lapse)
-
-    # Using tqdm for progress bar
-    for _ in tqdm(range(max_iterations), desc="Monitoring job", ncols=100):
-        status = ag.jobs.getStatus(jobId=job_id)["status"]
-
-        # Print status if it has changed
-        if status != previous_status:
-            tqdm.write(f"\tStatus: {status}")
-            previous_status = status
-
-        # Break the loop if job reaches one of these statuses
-        if status in ["FINISHED", "FAILED", "STOPPED"]:
-            break
-
-        time.sleep(time_lapse)
-    else:
-        # This block will execute if the for loop completes without a 'break'
-        logging.warn("Warning: Maximum monitoring time reached!")
-
-    return status
-
-
-def runtime_summary(ag, job_id, verbose=False):
-    """Get the runtime of a job.
-
-    Args:
-        ag (object): The Agave object that has the job details.
-        job_id (str): The ID of the job for which the runtime needs to be determined.
-        verbose (bool): If True, prints all statuses. Otherwise, prints only specific statuses.
-
-    Returns:
-        None: This function doesn't return a value, but it prints the runtime details.
-
-    """
-
-    print("Runtime Summary")
-    print("---------------")
-
-    job_history = ag.jobs.getHistory(jobId=job_id)
-    total_time = job_history[-1]["created"] - job_history[0]["created"]
-
-    status_times = {}
-
-    for i in range(len(job_history) - 1):
-        current_status = job_history[i]["status"]
-        elapsed_time = job_history[i + 1]["created"] - job_history[i]["created"]
-
-        # Aggregate times for each status
-        if current_status in status_times:
-            status_times[current_status] += elapsed_time
-        else:
-            status_times[current_status] = elapsed_time
-
-    # Filter the statuses if verbose is False
-    if not verbose:
-        filtered_statuses = {
-            "PENDING",
-            "QUEUED",
-            "RUNNING",
-            "FINISHED",
-            "FAILED",
+    
+    
+
+

+dapi.jobs

+ +

dapi is a library that simplifies the process of submitting, running, and monitoring TAPIS v2 / AgavePy jobs on DesignSafe via Jupyter Notebooks.

+ +

Features

+ +
    +
  • Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. dapi abstracts away the complexities.

  • +
  • Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.

  • +
+ +

Installation

+ +
+
pip3 install dapi
+
+
+
+ + + + + +
 1"""
+ 2`dapi` is a library that simplifies the process of submitting, running, and monitoring [TAPIS v2 / AgavePy](https://agavepy.readthedocs.io/en/latest/index.html) jobs on [DesignSafe](https://designsafe-ci.org) via [Jupyter Notebooks](https://jupyter.designsafe-ci.org).
+ 3
+ 4
+ 5## Features
+ 6
+ 7* Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. `dapi` abstracts away the complexities.
+ 8
+ 9* Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.
+10
+11## Installation
+12
+13```shell
+14pip3 install dapi
+15```
+16
+17"""
+18from .dir import get_ds_path_uri
+19from .jobs import get_status, runtime_summary, generate_job_info, get_archive_path
+
+ + +
+
+ \ No newline at end of file diff --git a/docs/dapi/jobs/dir.html b/docs/dapi/jobs/dir.html index 514cb97..7a269db 100644 --- a/docs/dapi/jobs/dir.html +++ b/docs/dapi/jobs/dir.html @@ -1,193 +1,372 @@ - - - -dapi.jobs.dir API documentation - - - - - - - - - - + + + + dapi.jobs.dir API documentation + + + + + + + -
-
-
-

Module dapi.jobs.dir

-
-
-
- -Expand source code - -
import os
-
-
-def get_ds_path_uri(ag, path):
-    """
-    Given a path on DesignSafe, determine the correct input URI.
-
-    Args:
-        ag (object): Agave object to fetch profiles or metadata.
-        path (str): The directory path.
-
-    Returns:
-        str: The corresponding input URI.
-
-    Raises:
-        ValueError: If no matching directory pattern is found.
-    """
-
-    # If any of the following directory patterns are found in the path,
-    # process them accordingly.
-    directory_patterns = [
-        ("jupyter/MyData", "designsafe.storage.default", True),
-        ("jupyter/mydata", "designsafe.storage.default", True),
-        ("jupyter/CommunityData", "designsafe.storage.community", False),
-        ("/MyData", "designsafe.storage.default", True),
-        ("/mydata", "designsafe.storage.default", True),
-    ]
-
-    for pattern, storage, use_username in directory_patterns:
-        if pattern in path:
-            path = path.split(pattern).pop()
-            input_dir = ag.profiles.get()["username"] + path if use_username else path
-            input_uri = f"agave://{storage}/{input_dir}"
-            return input_uri.replace(" ", "%20")
-
-    project_patterns = [
-        ("jupyter/MyProjects", "project-"),
-        ("jupyter/projects", "project-"),
-    ]
-
-    for pattern, prefix in project_patterns:
-        if pattern in path:
-            path = path.split(pattern + "/").pop()
-            project_id = path.split("/")[0]
-            query = {"value.projectId": str(project_id)}
-            path = path.split(project_id).pop()
-            project_uuid = ag.meta.listMetadata(q=str(query))[0]["uuid"]
-            input_uri = f"agave://{prefix}{project_uuid}{path}"
-            return input_uri.replace(" ", "%20")
-
-    raise ValueError(f"No matching directory pattern found for: {path}")
-
-
-
-
-
-
-
-

Functions

-
-
-def get_ds_path_uri(ag, path) -
-
-

Given a path on DesignSafe, determine the correct input URI.

-

Args

-
-
ag : object
-
Agave object to fetch profiles or metadata.
-
path : str
-
The directory path.
-
-

Returns

-
-
str
-
The corresponding input URI.
-
-

Raises

-
-
ValueError
-
If no matching directory pattern is found.
-
-
- -Expand source code - -
def get_ds_path_uri(ag, path):
-    """
-    Given a path on DesignSafe, determine the correct input URI.
-
-    Args:
-        ag (object): Agave object to fetch profiles or metadata.
-        path (str): The directory path.
-
-    Returns:
-        str: The corresponding input URI.
-
-    Raises:
-        ValueError: If no matching directory pattern is found.
-    """
-
-    # If any of the following directory patterns are found in the path,
-    # process them accordingly.
-    directory_patterns = [
-        ("jupyter/MyData", "designsafe.storage.default", True),
-        ("jupyter/mydata", "designsafe.storage.default", True),
-        ("jupyter/CommunityData", "designsafe.storage.community", False),
-        ("/MyData", "designsafe.storage.default", True),
-        ("/mydata", "designsafe.storage.default", True),
-    ]
-
-    for pattern, storage, use_username in directory_patterns:
-        if pattern in path:
-            path = path.split(pattern).pop()
-            input_dir = ag.profiles.get()["username"] + path if use_username else path
-            input_uri = f"agave://{storage}/{input_dir}"
-            return input_uri.replace(" ", "%20")
-
-    project_patterns = [
-        ("jupyter/MyProjects", "project-"),
-        ("jupyter/projects", "project-"),
-    ]
-
-    for pattern, prefix in project_patterns:
-        if pattern in path:
-            path = path.split(pattern + "/").pop()
-            project_id = path.split("/")[0]
-            query = {"value.projectId": str(project_id)}
-            path = path.split(project_id).pop()
-            project_uuid = ag.meta.listMetadata(q=str(query))[0]["uuid"]
-            input_uri = f"agave://{prefix}{project_uuid}{path}"
-            return input_uri.replace(" ", "%20")
-
-    raise ValueError(f"No matching directory pattern found for: {path}")
-
-
-
-
-
-
-
- -
- - + + +
+
+ \ No newline at end of file diff --git a/docs/dapi/jobs/index.html b/docs/dapi/jobs/index.html deleted file mode 100644 index e2e246c..0000000 --- a/docs/dapi/jobs/index.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -dapi.jobs API documentation - - - - - - - - - - - -
-
-
-

Module dapi.jobs

-
-
-

dapi is a library that simplifies the process of submitting, running, and monitoring TAPIS v2 / AgavePy jobs on DesignSafe via Jupyter Notebooks.

-

Features

-
    -
  • -

    Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. dapi abstracts away the complexities.

    -
  • -
  • -

    Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.

    -
  • -
-

Installation

-
pip3 install dapi
-
-
- -Expand source code - -
"""
-`dapi` is a library that simplifies the process of submitting, running, and monitoring [TAPIS v2 / AgavePy](https://agavepy.readthedocs.io/en/latest/index.html) jobs on [DesignSafe](https://designsafe-ci.org) via [Jupyter Notebooks](https://jupyter.designsafe-ci.org).
-
-
-## Features
-
-* Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. `dapi` abstracts away the complexities.
-
-* Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.
-
-## Installation
-
-```shell
-pip3 install dapi
-```
-
-"""
-from .dir import get_ds_path_uri
-from .jobs import get_status, runtime_summary, generate_job_info, get_archive_path
-
-
-
-

Sub-modules

-
-
dapi.jobs.dir
-
-
-
-
dapi.jobs.jobs
-
-
-
-
-
-
-
-
-
-
-
-
- -
- - - \ No newline at end of file diff --git a/docs/dapi/jobs/jobs.html b/docs/dapi/jobs/jobs.html index 5bade0e..517cd37 100644 --- a/docs/dapi/jobs/jobs.html +++ b/docs/dapi/jobs/jobs.html @@ -1,605 +1,791 @@ - - - -dapi.jobs.jobs API documentation - - - - - - - - - - + + + + dapi.jobs.jobs API documentation + + + + + + + -
-
-
-

Module dapi.jobs.jobs

-
-
-
- -Expand source code - -
import time
-from datetime import datetime, timedelta, timezone
-from tqdm import tqdm
-import logging
-
-# Configuring the logging system
-# logging.basicConfig(
-#     level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
-# )
-
-def get_status(ag, job_id, time_lapse=15):
-    """
-    Retrieves and monitors the status of a job from Agave.
-
-    This function initially waits for the job to start, displaying its progress using
-    a tqdm progress bar. Once the job starts, it monitors the job's status up to
-    a maximum duration specified by the job's "maxHours". If the job completes or fails
-    before reaching this maximum duration, it returns the job's final status.
-
-    Args:
-      ag (object): The Agave job object used to interact with the job.
-      job_id (str): The unique identifier of the job to monitor.
-      time_lapse (int, optional): Time interval, in seconds, to wait between status
-        checks. Defaults to 15 seconds.
-
-    Returns:
-      str: The final status of the job. Typical values include "FINISHED", "FAILED",
-           and "STOPPED".
-
-    Raises:
-      No exceptions are explicitly raised, but potential exceptions raised by the Agave
-      job object or other called functions/methods will propagate.
-    """
-
-    previous_status = None
-    # Initially check if the job is already running
-    status = ag.jobs.getStatus(jobId=job_id)["status"]
-
-    job_details = ag.jobs.get(jobId=job_id)
-    max_hours = job_details["maxHours"]
-
-    # Using tqdm to provide visual feedback while waiting for job to start
-    with tqdm(desc="Waiting for job to start", dynamic_ncols=True) as pbar:
-        while status not in ["RUNNING", "FINISHED", "FAILED", "STOPPED"]:
-            time.sleep(time_lapse)
-            status = ag.jobs.getStatus(jobId=job_id)["status"]
-            pbar.update(1)
-            pbar.set_postfix_str(f"Status: {status}")
-
-    # Once the job is running, monitor it for up to maxHours
-    max_iterations = int(max_hours * 3600 // time_lapse)
-
-    # Using tqdm for progress bar
-    for _ in tqdm(range(max_iterations), desc="Monitoring job", ncols=100):
-        status = ag.jobs.getStatus(jobId=job_id)["status"]
-
-        # Print status if it has changed
-        if status != previous_status:
-            tqdm.write(f"\tStatus: {status}")
-            previous_status = status
-
-        # Break the loop if job reaches one of these statuses
-        if status in ["FINISHED", "FAILED", "STOPPED"]:
-            break
-
-        time.sleep(time_lapse)
-    else:
-        # This block will execute if the for loop completes without a 'break'
-        logging.warn("Warning: Maximum monitoring time reached!")
-
-    return status
-
-
-def runtime_summary(ag, job_id, verbose=False):
-    """Get the runtime of a job.
-
-    Args:
-        ag (object): The Agave object that has the job details.
-        job_id (str): The ID of the job for which the runtime needs to be determined.
-        verbose (bool): If True, prints all statuses. Otherwise, prints only specific statuses.
-
-    Returns:
-        None: This function doesn't return a value, but it prints the runtime details.
-
-    """
-
-    print("Runtime Summary")
-    print("---------------")
-
-    job_history = ag.jobs.getHistory(jobId=job_id)
-    total_time = job_history[-1]["created"] - job_history[0]["created"]
-
-    status_times = {}
-
-    for i in range(len(job_history) - 1):
-        current_status = job_history[i]["status"]
-        elapsed_time = job_history[i + 1]["created"] - job_history[i]["created"]
-
-        # Aggregate times for each status
-        if current_status in status_times:
-            status_times[current_status] += elapsed_time
-        else:
-            status_times[current_status] = elapsed_time
-
-    # Filter the statuses if verbose is False
-    if not verbose:
-        filtered_statuses = {
-            "PENDING",
-            "QUEUED",
-            "RUNNING",
-            "FINISHED",
-            "FAILED",
+    
+    
+
+

+dapi.jobs.jobs

+ + + + + + +
  1import time
+  2from datetime import datetime, timedelta, timezone
+  3from tqdm import tqdm
+  4import logging
+  5
+  6# Configuring the logging system
+  7# logging.basicConfig(
+  8#     level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
+  9# )
+ 10
+ 11
+ 12def get_status(ag, job_id, time_lapse=15):
+ 13    """
+ 14    Retrieves and monitors the status of a job from Agave.
+ 15
+ 16    This function initially waits for the job to start, displaying its progress using
+ 17    a tqdm progress bar. Once the job starts, it monitors the job's status up to
+ 18    a maximum duration specified by the job's "maxHours". If the job completes or fails
+ 19    before reaching this maximum duration, it returns the job's final status.
+ 20
+ 21    Args:
+ 22      ag (object): The Agave job object used to interact with the job.
+ 23      job_id (str): The unique identifier of the job to monitor.
+ 24      time_lapse (int, optional): Time interval, in seconds, to wait between status
+ 25        checks. Defaults to 15 seconds.
+ 26
+ 27    Returns:
+ 28      str: The final status of the job. Typical values include "FINISHED", "FAILED",
+ 29           and "STOPPED".
+ 30
+ 31    Raises:
+ 32      No exceptions are explicitly raised, but potential exceptions raised by the Agave
+ 33      job object or other called functions/methods will propagate.
+ 34    """
+ 35
+ 36    previous_status = None
+ 37    # Initially check if the job is already running
+ 38    status = ag.jobs.getStatus(jobId=job_id)["status"]
+ 39
+ 40    job_details = ag.jobs.get(jobId=job_id)
+ 41    max_hours = job_details["maxHours"]
+ 42
+ 43    # Using tqdm to provide visual feedback while waiting for job to start
+ 44    with tqdm(desc="Waiting for job to start", dynamic_ncols=True) as pbar:
+ 45        while status not in ["RUNNING", "FINISHED", "FAILED", "STOPPED"]:
+ 46            time.sleep(time_lapse)
+ 47            status = ag.jobs.getStatus(jobId=job_id)["status"]
+ 48            pbar.update(1)
+ 49            pbar.set_postfix_str(f"Status: {status}")
+ 50
+ 51    # Once the job is running, monitor it for up to maxHours
+ 52    max_iterations = int(max_hours * 3600 // time_lapse)
+ 53
+ 54    # Using tqdm for progress bar
+ 55    for _ in tqdm(range(max_iterations), desc="Monitoring job", ncols=100):
+ 56        status = ag.jobs.getStatus(jobId=job_id)["status"]
+ 57
+ 58        # Print status if it has changed
+ 59        if status != previous_status:
+ 60            tqdm.write(f"\tStatus: {status}")
+ 61            previous_status = status
+ 62
+ 63        # Break the loop if job reaches one of these statuses
+ 64        if status in ["FINISHED", "FAILED", "STOPPED"]:
+ 65            break
+ 66
+ 67        time.sleep(time_lapse)
+ 68    else:
+ 69        # This block will execute if the for loop completes without a 'break'
+ 70        logging.warn("Warning: Maximum monitoring time reached!")
+ 71
+ 72    return status
+ 73
+ 74
+ 75def runtime_summary(ag, job_id, verbose=False):
+ 76    """Get the runtime of a job.
+ 77
+ 78    Args:
+ 79        ag (object): The Agave object that has the job details.
+ 80        job_id (str): The ID of the job for which the runtime needs to be determined.
+ 81        verbose (bool): If True, prints all statuses. Otherwise, prints only specific statuses.
+ 82
+ 83    Returns:
+ 84        None: This function doesn't return a value, but it prints the runtime details.
+ 85
+ 86    """
+ 87
+ 88    print("Runtime Summary")
+ 89    print("---------------")
+ 90
+ 91    job_history = ag.jobs.getHistory(jobId=job_id)
+ 92    total_time = job_history[-1]["created"] - job_history[0]["created"]
+ 93
+ 94    status_times = {}
+ 95
+ 96    for i in range(len(job_history) - 1):
+ 97        current_status = job_history[i]["status"]
+ 98        elapsed_time = job_history[i + 1]["created"] - job_history[i]["created"]
+ 99
+100        # Aggregate times for each status
+101        if current_status in status_times:
+102            status_times[current_status] += elapsed_time
+103        else:
+104            status_times[current_status] = elapsed_time
+105
+106    # Filter the statuses if verbose is False
+107    if not verbose:
+108        filtered_statuses = {
+109            "PENDING",
+110            "QUEUED",
+111            "RUNNING",
+112            "FINISHED",
+113            "FAILED",
+114        }
+115        status_times = {
+116            status: time
+117            for status, time in status_times.items()
+118            if status in filtered_statuses
+119        }
+120
+121    # Determine the max width of status names for alignment
+122    max_status_width = max(len(status) for status in status_times.keys())
+123
+124    # Print the aggregated times for each unique status in a table format
+125    for status, time in status_times.items():
+126        print(f"{status.upper():<{max_status_width + 2}} time: {time}")
+127
+128    print(f"{'TOTAL':<{max_status_width + 2}} time: {total_time}")
+129    print("---------------")
+130
+131
+132def generate_job_info(
+133    ag,
+134    appid: str,
+135    jobname: str = "dsjob",
+136    queue: str = "development",
+137    nnodes: int = 1,
+138    nprocessors: int = 1,
+139    runtime: str = "00:10:00",
+140    inputs=None,
+141    parameters=None,
+142) -> dict:
+143    """Generate a job information dictionary based on provided arguments.
+144
+145    Args:
+146        ag (object): The Agave object to interact with the platform.
+147        appid (str): The application ID for the job.
+148        jobname (str, optional): The name of the job. Defaults to 'dsjob'.
+149        queue (str, optional): The batch queue name. Defaults to 'skx-dev'.
+150        nnodes (int, optional): The number of nodes required. Defaults to 1.
+151        nprocessors (int, optional): The number of processors per node. Defaults to 1.
+152        runtime (str, optional): The maximum runtime in the format 'HH:MM:SS'. Defaults to '00:10:00'.
+153        inputs (dict, optional): The inputs for the job. Defaults to None.
+154        parameters (dict, optional): The parameters for the job. Defaults to None.
+155
+156    Returns:
+157        dict: A dictionary containing the job information.
+158
+159    Raises:
+160        ValueError: If the provided appid is not valid.
+161    """
+162
+163    try:
+164        app = ag.apps.get(appId=appid)
+165    except Exception:
+166        raise ValueError(f"Invalid app ID: {appid}")
+167
+168    job_info = {
+169        "appId": appid,
+170        "name": jobname,
+171        "batchQueue": queue,
+172        "nodeCount": nnodes,
+173        "processorsPerNode": nprocessors,
+174        "memoryPerNode": "1",
+175        "maxRunTime": runtime,
+176        "archive": True,
+177        "inputs": inputs,
+178        "parameters": parameters,
+179    }
+180
+181    return job_info
+182
+183
+184def get_archive_path(ag, job_id):
+185    """
+186    Get the archive path for a given job ID and modifies the user directory
+187    to '/home/jupyter/MyData'.
+188
+189    Args:
+190        ag (object): The Agave object to interact with the platform.
+191        job_id (str): The job ID to retrieve the archive path for.
+192
+193    Returns:
+194        str: The modified archive path.
+195
+196    Raises:
+197        ValueError: If the archivePath format is unexpected.
+198    """
+199
+200    # Fetch the job info.
+201    job_info = ag.jobs.get(jobId=job_id)
+202
+203    # Try to split the archive path to extract the user.
+204    try:
+205        user, _ = job_info.archivePath.split("/", 1)
+206    except ValueError:
+207        raise ValueError(f"Unexpected archivePath format for jobId={job_id}")
+208
+209    # Construct the new path.
+210    new_path = job_info.archivePath.replace(user, "/home/jupyter/MyData")
+211
+212    return new_path
+
+ + +
+
+ +
+ + def + get_status(ag, job_id, time_lapse=15): + + + +
+ +
13def get_status(ag, job_id, time_lapse=15):
+14    """
+15    Retrieves and monitors the status of a job from Agave.
+16
+17    This function initially waits for the job to start, displaying its progress using
+18    a tqdm progress bar. Once the job starts, it monitors the job's status up to
+19    a maximum duration specified by the job's "maxHours". If the job completes or fails
+20    before reaching this maximum duration, it returns the job's final status.
+21
+22    Args:
+23      ag (object): The Agave job object used to interact with the job.
+24      job_id (str): The unique identifier of the job to monitor.
+25      time_lapse (int, optional): Time interval, in seconds, to wait between status
+26        checks. Defaults to 15 seconds.
+27
+28    Returns:
+29      str: The final status of the job. Typical values include "FINISHED", "FAILED",
+30           and "STOPPED".
+31
+32    Raises:
+33      No exceptions are explicitly raised, but potential exceptions raised by the Agave
+34      job object or other called functions/methods will propagate.
+35    """
+36
+37    previous_status = None
+38    # Initially check if the job is already running
+39    status = ag.jobs.getStatus(jobId=job_id)["status"]
+40
+41    job_details = ag.jobs.get(jobId=job_id)
+42    max_hours = job_details["maxHours"]
+43
+44    # Using tqdm to provide visual feedback while waiting for job to start
+45    with tqdm(desc="Waiting for job to start", dynamic_ncols=True) as pbar:
+46        while status not in ["RUNNING", "FINISHED", "FAILED", "STOPPED"]:
+47            time.sleep(time_lapse)
+48            status = ag.jobs.getStatus(jobId=job_id)["status"]
+49            pbar.update(1)
+50            pbar.set_postfix_str(f"Status: {status}")
+51
+52    # Once the job is running, monitor it for up to maxHours
+53    max_iterations = int(max_hours * 3600 // time_lapse)
+54
+55    # Using tqdm for progress bar
+56    for _ in tqdm(range(max_iterations), desc="Monitoring job", ncols=100):
+57        status = ag.jobs.getStatus(jobId=job_id)["status"]
+58
+59        # Print status if it has changed
+60        if status != previous_status:
+61            tqdm.write(f"\tStatus: {status}")
+62            previous_status = status
+63
+64        # Break the loop if job reaches one of these statuses
+65        if status in ["FINISHED", "FAILED", "STOPPED"]:
+66            break
+67
+68        time.sleep(time_lapse)
+69    else:
+70        # This block will execute if the for loop completes without a 'break'
+71        logging.warn("Warning: Maximum monitoring time reached!")
+72
+73    return status
+
+ + +

Retrieves and monitors the status of a job from Agave.

+ +

This function initially waits for the job to start, displaying its progress using +a tqdm progress bar. Once the job starts, it monitors the job's status up to +a maximum duration specified by the job's "maxHours". If the job completes or fails +before reaching this maximum duration, it returns the job's final status.

+ +

Args: + ag (object): The Agave job object used to interact with the job. + job_id (str): The unique identifier of the job to monitor. + time_lapse (int, optional): Time interval, in seconds, to wait between status + checks. Defaults to 15 seconds.

+ +

Returns: + str: The final status of the job. Typical values include "FINISHED", "FAILED", + and "STOPPED".

+ +

Raises: + No exceptions are explicitly raised, but potential exceptions raised by the Agave + job object or other called functions/methods will propagate.

+
+ + +
+
+ +
+ + def + runtime_summary(ag, job_id, verbose=False): + + + +
+ +
 76def runtime_summary(ag, job_id, verbose=False):
+ 77    """Get the runtime of a job.
+ 78
+ 79    Args:
+ 80        ag (object): The Agave object that has the job details.
+ 81        job_id (str): The ID of the job for which the runtime needs to be determined.
+ 82        verbose (bool): If True, prints all statuses. Otherwise, prints only specific statuses.
+ 83
+ 84    Returns:
+ 85        None: This function doesn't return a value, but it prints the runtime details.
+ 86
+ 87    """
+ 88
+ 89    print("Runtime Summary")
+ 90    print("---------------")
+ 91
+ 92    job_history = ag.jobs.getHistory(jobId=job_id)
+ 93    total_time = job_history[-1]["created"] - job_history[0]["created"]
+ 94
+ 95    status_times = {}
+ 96
+ 97    for i in range(len(job_history) - 1):
+ 98        current_status = job_history[i]["status"]
+ 99        elapsed_time = job_history[i + 1]["created"] - job_history[i]["created"]
+100
+101        # Aggregate times for each status
+102        if current_status in status_times:
+103            status_times[current_status] += elapsed_time
+104        else:
+105            status_times[current_status] = elapsed_time
+106
+107    # Filter the statuses if verbose is False
+108    if not verbose:
+109        filtered_statuses = {
+110            "PENDING",
+111            "QUEUED",
+112            "RUNNING",
+113            "FINISHED",
+114            "FAILED",
+115        }
+116        status_times = {
+117            status: time
+118            for status, time in status_times.items()
+119            if status in filtered_statuses
+120        }
+121
+122    # Determine the max width of status names for alignment
+123    max_status_width = max(len(status) for status in status_times.keys())
+124
+125    # Print the aggregated times for each unique status in a table format
+126    for status, time in status_times.items():
+127        print(f"{status.upper():<{max_status_width + 2}} time: {time}")
+128
+129    print(f"{'TOTAL':<{max_status_width + 2}} time: {total_time}")
+130    print("---------------")
+
+ + +

Get the runtime of a job.

+ +

Args: + ag (object): The Agave object that has the job details. + job_id (str): The ID of the job for which the runtime needs to be determined. + verbose (bool): If True, prints all statuses. Otherwise, prints only specific statuses.

+ +

Returns: + None: This function doesn't return a value, but it prints the runtime details.

+
+ + +
+
+ +
+ + def + generate_job_info( ag, appid: str, jobname: str = 'dsjob', queue: str = 'development', nnodes: int = 1, nprocessors: int = 1, runtime: str = '00:10:00', inputs=None, parameters=None) -> dict: + + + +
+ +
133def generate_job_info(
+134    ag,
+135    appid: str,
+136    jobname: str = "dsjob",
+137    queue: str = "development",
+138    nnodes: int = 1,
+139    nprocessors: int = 1,
+140    runtime: str = "00:10:00",
+141    inputs=None,
+142    parameters=None,
+143) -> dict:
+144    """Generate a job information dictionary based on provided arguments.
+145
+146    Args:
+147        ag (object): The Agave object to interact with the platform.
+148        appid (str): The application ID for the job.
+149        jobname (str, optional): The name of the job. Defaults to 'dsjob'.
+150        queue (str, optional): The batch queue name. Defaults to 'skx-dev'.
+151        nnodes (int, optional): The number of nodes required. Defaults to 1.
+152        nprocessors (int, optional): The number of processors per node. Defaults to 1.
+153        runtime (str, optional): The maximum runtime in the format 'HH:MM:SS'. Defaults to '00:10:00'.
+154        inputs (dict, optional): The inputs for the job. Defaults to None.
+155        parameters (dict, optional): The parameters for the job. Defaults to None.
+156
+157    Returns:
+158        dict: A dictionary containing the job information.
+159
+160    Raises:
+161        ValueError: If the provided appid is not valid.
+162    """
+163
+164    try:
+165        app = ag.apps.get(appId=appid)
+166    except Exception:
+167        raise ValueError(f"Invalid app ID: {appid}")
+168
+169    job_info = {
+170        "appId": appid,
+171        "name": jobname,
+172        "batchQueue": queue,
+173        "nodeCount": nnodes,
+174        "processorsPerNode": nprocessors,
+175        "memoryPerNode": "1",
+176        "maxRunTime": runtime,
+177        "archive": True,
+178        "inputs": inputs,
+179        "parameters": parameters,
+180    }
+181
+182    return job_info
+
+ + +

Generate a job information dictionary based on provided arguments.

+ +

Args: + ag (object): The Agave object to interact with the platform. + appid (str): The application ID for the job. + jobname (str, optional): The name of the job. Defaults to 'dsjob'. + queue (str, optional): The batch queue name. Defaults to 'skx-dev'. + nnodes (int, optional): The number of nodes required. Defaults to 1. + nprocessors (int, optional): The number of processors per node. Defaults to 1. + runtime (str, optional): The maximum runtime in the format 'HH:MM:SS'. Defaults to '00:10:00'. + inputs (dict, optional): The inputs for the job. Defaults to None. + parameters (dict, optional): The parameters for the job. Defaults to None.

+ +

Returns: + dict: A dictionary containing the job information.

+ +

Raises: + ValueError: If the provided appid is not valid.

+
+ + +
+
+ +
+ + def + get_archive_path(ag, job_id): + + + +
+ +
185def get_archive_path(ag, job_id):
+186    """
+187    Get the archive path for a given job ID and modifies the user directory
+188    to '/home/jupyter/MyData'.
+189
+190    Args:
+191        ag (object): The Agave object to interact with the platform.
+192        job_id (str): The job ID to retrieve the archive path for.
+193
+194    Returns:
+195        str: The modified archive path.
+196
+197    Raises:
+198        ValueError: If the archivePath format is unexpected.
+199    """
+200
+201    # Fetch the job info.
+202    job_info = ag.jobs.get(jobId=job_id)
+203
+204    # Try to split the archive path to extract the user.
+205    try:
+206        user, _ = job_info.archivePath.split("/", 1)
+207    except ValueError:
+208        raise ValueError(f"Unexpected archivePath format for jobId={job_id}")
+209
+210    # Construct the new path.
+211    new_path = job_info.archivePath.replace(user, "/home/jupyter/MyData")
+212
+213    return new_path
+
+ + +

Get the archive path for a given job ID and modifies the user directory +to '/home/jupyter/MyData'.

+ +

Args: + ag (object): The Agave object to interact with the platform. + job_id (str): The job ID to retrieve the archive path for.

+ +

Returns: + str: The modified archive path.

+ +

Raises: + ValueError: If the archivePath format is unexpected.

+
+ + +
+
+ \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..fdb1644 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/search.js b/docs/search.js new file mode 100644 index 0000000..dd19c2f --- /dev/null +++ b/docs/search.js @@ -0,0 +1,46 @@ +window.pdocSearch = (function(){ +/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();odapi is a library that simplifies the process of submitting, running, and monitoring TAPIS v2 / AgavePy jobs on DesignSafe via Jupyter Notebooks.

\n\n

Features

\n\n
    \n
  • Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. dapi abstracts away the complexities.

  • \n
  • Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.

  • \n
\n\n

Installation

\n\n
\n
pip3 install dapi\n
\n
\n"}, "dapi.db": {"fullname": "dapi.db", "modulename": "dapi.db", "kind": "module", "doc": "

\n"}, "dapi.db.name": {"fullname": "dapi.db.name", "modulename": "dapi.db", "qualname": "name", "kind": "variable", "doc": "

\n", "default_value": "'designsafe_db'"}, "dapi.db.config": {"fullname": "dapi.db.config", "modulename": "dapi.db.config", "kind": "module", "doc": "

\n"}, "dapi.db.config.db_config": {"fullname": "dapi.db.config.db_config", "modulename": "dapi.db.config", "qualname": "db_config", "kind": "variable", "doc": "

\n", "default_value": "{'ngl': {'dbname': 'sjbrande_ngl_db', 'env_prefix': 'NGL_'}, 'vp': {'dbname': 'sjbrande_vpdb', 'env_prefix': 'VP_'}, 'eq': {'dbname': 'post_earthquake_recovery', 'env_prefix': 'EQ_'}}"}, "dapi.db.db": {"fullname": "dapi.db.db", "modulename": "dapi.db.db", "kind": "module", "doc": "

\n"}, "dapi.db.db.DSDatabase": {"fullname": "dapi.db.db.DSDatabase", "modulename": "dapi.db.db", "qualname": "DSDatabase", "kind": "class", "doc": "

A database utility class for connecting to a DesignSafe SQL database.

\n\n

This class provides functionality to connect to a MySQL database using\nSQLAlchemy and PyMySQL. It supports executing SQL queries and returning\nresults in different formats.

\n\n

Attributes:\n user (str): Database username, defaults to 'dspublic'.\n password (str): Database password, defaults to 'R3ad0nlY'.\n host (str): Database host address, defaults to '129.114.52.174'.\n port (int): Database port, defaults to 3306.\n db (str): Database name, can be 'sjbrande_ngl_db', 'sjbrande_vpdb', or 'post_earthquake_recovery'.\n recycle_time (int): Time in seconds to recycle database connections.\n engine (Engine): SQLAlchemy engine for database connection.\n Session (sessionmaker): SQLAlchemy session maker bound to the engine.

\n"}, "dapi.db.db.DSDatabase.__init__": {"fullname": "dapi.db.db.DSDatabase.__init__", "modulename": "dapi.db.db", "qualname": "DSDatabase.__init__", "kind": "function", "doc": "

Initializes the DSDatabase instance with environment variables and creates the database engine.

\n\n

Args:\n dbname (str): Shorthand for the database name. Must be one of 'ngl', 'vp', or 'eq'.

\n", "signature": "(dbname='ngl')"}, "dapi.db.db.DSDatabase.user": {"fullname": "dapi.db.db.DSDatabase.user", "modulename": "dapi.db.db", "qualname": "DSDatabase.user", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.password": {"fullname": "dapi.db.db.DSDatabase.password", "modulename": "dapi.db.db", "qualname": "DSDatabase.password", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.host": {"fullname": "dapi.db.db.DSDatabase.host", "modulename": "dapi.db.db", "qualname": "DSDatabase.host", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.port": {"fullname": "dapi.db.db.DSDatabase.port", "modulename": "dapi.db.db", "qualname": "DSDatabase.port", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.db": {"fullname": "dapi.db.db.DSDatabase.db", "modulename": "dapi.db.db", "qualname": "DSDatabase.db", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.engine": {"fullname": "dapi.db.db.DSDatabase.engine", "modulename": "dapi.db.db", "qualname": "DSDatabase.engine", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.Session": {"fullname": "dapi.db.db.DSDatabase.Session", "modulename": "dapi.db.db", "qualname": "DSDatabase.Session", "kind": "variable", "doc": "

\n"}, "dapi.db.db.DSDatabase.read_sql": {"fullname": "dapi.db.db.DSDatabase.read_sql", "modulename": "dapi.db.db", "qualname": "DSDatabase.read_sql", "kind": "function", "doc": "

Executes a SQL query and returns the results.

\n\n

Args:\n sql (str): The SQL query string to be executed.\n output_type (str, optional): The format for the query results. Defaults to 'DataFrame'.\n Possible values are 'DataFrame' for a pandas DataFrame, or 'dict' for a list of dictionaries.

\n\n

Returns:\n pandas.DataFrame or list of dict: The result of the SQL query.

\n\n

Raises:\n ValueError: If the SQL query string is empty or if the output type is not valid.\n SQLAlchemyError: If an error occurs during query execution.

\n", "signature": "(self, sql, output_type='DataFrame'):", "funcdef": "def"}, "dapi.db.db.DSDatabase.close": {"fullname": "dapi.db.db.DSDatabase.close", "modulename": "dapi.db.db", "qualname": "DSDatabase.close", "kind": "function", "doc": "

Close the database connection.

\n", "signature": "(self):", "funcdef": "def"}, "dapi.jobs": {"fullname": "dapi.jobs", "modulename": "dapi.jobs", "kind": "module", "doc": "

dapi is a library that simplifies the process of submitting, running, and monitoring TAPIS v2 / AgavePy jobs on DesignSafe via Jupyter Notebooks.

\n\n

Features

\n\n
    \n
  • Simplified TAPIS v2 Calls: No need to fiddle with complex API requests. dapi abstracts away the complexities.

  • \n
  • Seamless Integration with DesignSafe Jupyter Notebooks: Launch DesignSafe applications directly from the Jupyter environment.

  • \n
\n\n

Installation

\n\n
\n
pip3 install dapi\n
\n
\n"}, "dapi.jobs.dir": {"fullname": "dapi.jobs.dir", "modulename": "dapi.jobs.dir", "kind": "module", "doc": "

\n"}, "dapi.jobs.dir.get_ds_path_uri": {"fullname": "dapi.jobs.dir.get_ds_path_uri", "modulename": "dapi.jobs.dir", "qualname": "get_ds_path_uri", "kind": "function", "doc": "

Given a path on DesignSafe, determine the correct input URI.

\n\n

Args:\n ag (object): Agave object to fetch profiles or metadata.\n path (str): The directory path.

\n\n

Returns:\n str: The corresponding input URI.

\n\n

Raises:\n ValueError: If no matching directory pattern is found.

\n", "signature": "(ag, path):", "funcdef": "def"}, "dapi.jobs.jobs": {"fullname": "dapi.jobs.jobs", "modulename": "dapi.jobs.jobs", "kind": "module", "doc": "

\n"}, "dapi.jobs.jobs.get_status": {"fullname": "dapi.jobs.jobs.get_status", "modulename": "dapi.jobs.jobs", "qualname": "get_status", "kind": "function", "doc": "

Retrieves and monitors the status of a job from Agave.

\n\n

This function initially waits for the job to start, displaying its progress using\na tqdm progress bar. Once the job starts, it monitors the job's status up to\na maximum duration specified by the job's \"maxHours\". If the job completes or fails\nbefore reaching this maximum duration, it returns the job's final status.

\n\n

Args:\n ag (object): The Agave job object used to interact with the job.\n job_id (str): The unique identifier of the job to monitor.\n time_lapse (int, optional): Time interval, in seconds, to wait between status\n checks. Defaults to 15 seconds.

\n\n

Returns:\n str: The final status of the job. Typical values include \"FINISHED\", \"FAILED\",\n and \"STOPPED\".

\n\n

Raises:\n No exceptions are explicitly raised, but potential exceptions raised by the Agave\n job object or other called functions/methods will propagate.

\n", "signature": "(ag, job_id, time_lapse=15):", "funcdef": "def"}, "dapi.jobs.jobs.runtime_summary": {"fullname": "dapi.jobs.jobs.runtime_summary", "modulename": "dapi.jobs.jobs", "qualname": "runtime_summary", "kind": "function", "doc": "

Get the runtime of a job.

\n\n

Args:\n ag (object): The Agave object that has the job details.\n job_id (str): The ID of the job for which the runtime needs to be determined.\n verbose (bool): If True, prints all statuses. Otherwise, prints only specific statuses.

\n\n

Returns:\n None: This function doesn't return a value, but it prints the runtime details.

\n", "signature": "(ag, job_id, verbose=False):", "funcdef": "def"}, "dapi.jobs.jobs.generate_job_info": {"fullname": "dapi.jobs.jobs.generate_job_info", "modulename": "dapi.jobs.jobs", "qualname": "generate_job_info", "kind": "function", "doc": "

Generate a job information dictionary based on provided arguments.

\n\n

Args:\n ag (object): The Agave object to interact with the platform.\n appid (str): The application ID for the job.\n jobname (str, optional): The name of the job. Defaults to 'dsjob'.\n queue (str, optional): The batch queue name. Defaults to 'skx-dev'.\n nnodes (int, optional): The number of nodes required. Defaults to 1.\n nprocessors (int, optional): The number of processors per node. Defaults to 1.\n runtime (str, optional): The maximum runtime in the format 'HH:MM:SS'. Defaults to '00:10:00'.\n inputs (dict, optional): The inputs for the job. Defaults to None.\n parameters (dict, optional): The parameters for the job. Defaults to None.

\n\n

Returns:\n dict: A dictionary containing the job information.

\n\n

Raises:\n ValueError: If the provided appid is not valid.

\n", "signature": "(\tag,\tappid: str,\tjobname: str = 'dsjob',\tqueue: str = 'development',\tnnodes: int = 1,\tnprocessors: int = 1,\truntime: str = '00:10:00',\tinputs=None,\tparameters=None) -> dict:", "funcdef": "def"}, "dapi.jobs.jobs.get_archive_path": {"fullname": "dapi.jobs.jobs.get_archive_path", "modulename": "dapi.jobs.jobs", "qualname": "get_archive_path", "kind": "function", "doc": "

Get the archive path for a given job ID and modifies the user directory\nto '/home/jupyter/MyData'.

\n\n

Args:\n ag (object): The Agave object to interact with the platform.\n job_id (str): The job ID to retrieve the archive path for.

\n\n

Returns:\n str: The modified archive path.

\n\n

Raises:\n ValueError: If the archivePath format is unexpected.

\n", "signature": "(ag, job_id):", "funcdef": "def"}}, "docInfo": {"dapi": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 105}, "dapi.db": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.name": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.config": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.config.db_config": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 69, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 127}, "dapi.db.db.DSDatabase.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 18, "bases": 0, "doc": 35}, "dapi.db.db.DSDatabase.user": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.password": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.host": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.port": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.db": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.engine": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.Session": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.db.db.DSDatabase.read_sql": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 98}, "dapi.db.db.DSDatabase.close": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 7}, "dapi.jobs": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 105}, "dapi.jobs.dir": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.jobs.dir.get_ds_path_uri": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 54}, "dapi.jobs.jobs": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "dapi.jobs.jobs.get_status": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 161}, "dapi.jobs.jobs.runtime_summary": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 72}, "dapi.jobs.jobs.generate_job_info": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 150, "bases": 0, "doc": 146}, "dapi.jobs.jobs.get_archive_path": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 67}}, "length": 25, "save": true}, "index": {"qualname": {"root": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.name": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "b": {"docs": {"dapi.db.config.db_config": {"tf": 1}, "dapi.db.db.DSDatabase.db": {"tf": 1}}, "df": 2}, "s": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.user": {"tf": 1}, "dapi.db.db.DSDatabase.password": {"tf": 1}, "dapi.db.db.DSDatabase.host": {"tf": 1}, "dapi.db.db.DSDatabase.port": {"tf": 1}, "dapi.db.db.DSDatabase.db": {"tf": 1}, "dapi.db.db.DSDatabase.engine": {"tf": 1}, "dapi.db.db.DSDatabase.Session": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 11}}}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.config.db_config": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}, "f": {"docs": {}, "df": 0, "o": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase.user": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase.password": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.port": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.host": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.engine": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.db.db.DSDatabase.Session": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 3}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}}}}}}}}}, "fullname": {"root": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"dapi": {"tf": 1}, "dapi.db": {"tf": 1}, "dapi.db.name": {"tf": 1}, "dapi.db.config": {"tf": 1}, "dapi.db.config.db_config": {"tf": 1}, "dapi.db.db": {"tf": 1}, "dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.user": {"tf": 1}, "dapi.db.db.DSDatabase.password": {"tf": 1}, "dapi.db.db.DSDatabase.host": {"tf": 1}, "dapi.db.db.DSDatabase.port": {"tf": 1}, "dapi.db.db.DSDatabase.db": {"tf": 1}, "dapi.db.db.DSDatabase.engine": {"tf": 1}, "dapi.db.db.DSDatabase.Session": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.db.db.DSDatabase.close": {"tf": 1}, "dapi.jobs": {"tf": 1}, "dapi.jobs.dir": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 25}}}, "b": {"docs": {"dapi.db": {"tf": 1}, "dapi.db.name": {"tf": 1}, "dapi.db.config": {"tf": 1}, "dapi.db.config.db_config": {"tf": 1.4142135623730951}, "dapi.db.db": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.__init__": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.user": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.password": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.host": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.port": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.db": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.engine": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.Session": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.close": {"tf": 1.4142135623730951}}, "df": 16}, "s": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.user": {"tf": 1}, "dapi.db.db.DSDatabase.password": {"tf": 1}, "dapi.db.db.DSDatabase.host": {"tf": 1}, "dapi.db.db.DSDatabase.port": {"tf": 1}, "dapi.db.db.DSDatabase.db": {"tf": 1}, "dapi.db.db.DSDatabase.engine": {"tf": 1}, "dapi.db.db.DSDatabase.Session": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 11}}}}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.dir": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.name": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.config": {"tf": 1}, "dapi.db.config.db_config": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}, "f": {"docs": {}, "df": 0, "o": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase.user": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase.password": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.port": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.host": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.engine": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.db.db.DSDatabase.Session": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.jobs": {"tf": 1}, "dapi.jobs.dir": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.4142135623730951}}, "df": 8}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 3}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}}}}}}}}}, "annotation": {"root": {"docs": {}, "df": 0}}, "default_value": {"root": {"docs": {"dapi.db.name": {"tf": 1.4142135623730951}, "dapi.db.config.db_config": {"tf": 4}}, "df": 2, "x": {"2": {"7": {"docs": {"dapi.db.name": {"tf": 1.4142135623730951}, "dapi.db.config.db_config": {"tf": 5.477225575051661}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.name": {"tf": 1}}, "df": 1}}}}}}}}}, "b": {"docs": {"dapi.db.name": {"tf": 1}, "dapi.db.config.db_config": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.config.db_config": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.config.db_config": {"tf": 1.7320508075688772}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.config.db_config": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {"dapi.db.config.db_config": {"tf": 1.7320508075688772}}, "df": 1}}, "q": {"docs": {"dapi.db.config.db_config": {"tf": 1.4142135623730951}}, "df": 1}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.config.db_config": {"tf": 1}}, "df": 1}}}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"dapi.db.config.db_config": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.config.db_config": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "p": {"docs": {"dapi.db.config.db_config": {"tf": 1.4142135623730951}}, "df": 1, "d": {"docs": {}, "df": 0, "b": {"docs": {"dapi.db.config.db_config": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.config.db_config": {"tf": 1}}, "df": 1}}}}}}}}}}, "signature": {"root": {"0": {"0": {"docs": {}, "df": 0, ":": {"1": {"0": {"docs": {}, "df": 0, ":": {"0": {"0": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "docs": {}, "df": 0}, "1": {"5": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}, "docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}, "3": {"9": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 2.449489742783178}}, "df": 3}, "docs": {}, "df": 0}, "docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 3.7416573867739413}, "dapi.db.db.DSDatabase.read_sql": {"tf": 4.898979485566356}, "dapi.db.db.DSDatabase.close": {"tf": 3.1622776601683795}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 3.7416573867739413}, "dapi.jobs.jobs.get_status": {"tf": 4.69041575982343}, "dapi.jobs.jobs.runtime_summary": {"tf": 4.69041575982343}, "dapi.jobs.jobs.generate_job_info": {"tf": 11}, "dapi.jobs.jobs.get_archive_path": {"tf": 3.7416573867739413}}, "df": 8, "d": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 2}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 2}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 5}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 3, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 3}, "n": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}}, "bases": {"root": {"docs": {}, "df": 0}}, "doc": {"root": {"0": {"0": {"docs": {}, "df": 0, ":": {"1": {"0": {"docs": {}, "df": 0, ":": {"0": {"0": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "docs": {}, "df": 0}, "1": {"1": {"4": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "2": {"9": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "5": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}, "7": {"4": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}, "3": {"3": {"0": {"6": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "5": {"2": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"dapi": {"tf": 6.855654600401044}, "dapi.db": {"tf": 1.7320508075688772}, "dapi.db.name": {"tf": 1.7320508075688772}, "dapi.db.config": {"tf": 1.7320508075688772}, "dapi.db.config.db_config": {"tf": 1.7320508075688772}, "dapi.db.db": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase": {"tf": 4.123105625617661}, "dapi.db.db.DSDatabase.__init__": {"tf": 2.6457513110645907}, "dapi.db.db.DSDatabase.user": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.password": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.host": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.port": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.db": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.engine": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.Session": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.read_sql": {"tf": 3.7416573867739413}, "dapi.db.db.DSDatabase.close": {"tf": 1.7320508075688772}, "dapi.jobs": {"tf": 6.855654600401044}, "dapi.jobs.dir": {"tf": 1.7320508075688772}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 3.7416573867739413}, "dapi.jobs.jobs": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.get_status": {"tf": 4.242640687119285}, "dapi.jobs.jobs.runtime_summary": {"tf": 3.4641016151377544}, "dapi.jobs.jobs.generate_job_info": {"tf": 4.58257569495584}, "dapi.jobs.jobs.get_archive_path": {"tf": 3.7416573867739413}}, "df": 25, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"dapi": {"tf": 1.7320508075688772}, "dapi.jobs": {"tf": 1.7320508075688772}}, "df": 2}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 3.1622776601683795}, "dapi.db.db.DSDatabase.__init__": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 3}}}}, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 2}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {"dapi": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase": {"tf": 1}, "dapi.jobs": {"tf": 1.7320508075688772}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 4}}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 2}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 2.6457513110645907}}, "df": 4}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1, "d": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "v": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.7320508075688772}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.jobs": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 6}, "n": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 3, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 3, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 3}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 3, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}, "f": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.7320508075688772}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 6}, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.7320508075688772}}, "df": 4, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {"dapi": {"tf": 1}, "dapi.db.db.DSDatabase": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.7320508075688772}, "dapi.jobs": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 9, "n": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1, "d": {"docs": {"dapi": {"tf": 1}, "dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 7}}, "g": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 5, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 5, "p": {"docs": {}, "df": 0, "y": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}, "p": {"docs": {}, "df": 0, "i": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 7}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 2}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1.7320508075688772}}, "df": 1, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}}}}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 3}}, "e": {"docs": {"dapi": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1.7320508075688772}, "dapi.db.db.DSDatabase.read_sql": {"tf": 2.8284271247461903}, "dapi.db.db.DSDatabase.close": {"tf": 1}, "dapi.jobs": {"tf": 1.7320508075688772}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.get_status": {"tf": 3.7416573867739413}, "dapi.jobs.jobs.runtime_summary": {"tf": 2.6457513110645907}, "dapi.jobs.jobs.generate_job_info": {"tf": 4.123105625617661}, "dapi.jobs.jobs.get_archive_path": {"tf": 2.8284271247461903}}, "df": 11}, "i": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 3}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1.4142135623730951}, "dapi.jobs": {"tf": 1.4142135623730951}}, "df": 2}}}}, "o": {"docs": {"dapi": {"tf": 1}, "dapi.db.db.DSDatabase": {"tf": 3}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.jobs": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 2.449489742783178}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 2.8284271247461903}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.7320508075688772}}, "df": 9}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 2}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}}, "df": 1}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.7320508075688772}}, "df": 1, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}, "d": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.read_sql": {"tf": 2.23606797749979}}, "df": 2, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.7320508075688772}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase": {"tf": 2}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 2}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.4142135623730951}}, "df": 8, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 2.23606797749979}}, "df": 1, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}, "j": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}, "c": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "k": {"docs": {}, "df": 0, "x": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "d": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "p": {"3": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.7320508075688772}}, "df": 2}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {"dapi": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.7320508075688772}, "dapi.jobs": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.7320508075688772}}, "df": 7}, "n": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 4, "e": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}, "c": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}, "r": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.7320508075688772}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 5}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 2.6457513110645907}}, "df": 3}}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.runtime_summary": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.4142135623730951}}, "df": 5}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}}}, "r": {"3": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"0": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}, "docs": {}, "df": 0}}}, "docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 2}}}}}}, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 6}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 5}, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}, "d": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}}}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}}}}}, "v": {"2": {"docs": {"dapi": {"tf": 1.4142135623730951}, "dapi.jobs": {"tf": 1.4142135623730951}}, "df": 2}, "docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}, "p": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "b": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 4}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 3.605551275463989}, "dapi.jobs.jobs.runtime_summary": {"tf": 2}, "dapi.jobs.jobs.generate_job_info": {"tf": 2.449489742783178}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.7320508075688772}}, "df": 4, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi": {"tf": 1.7320508075688772}, "dapi.jobs": {"tf": 1.7320508075688772}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}, "dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 4, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1.4142135623730951}, "dapi.jobs": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 2}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2, "s": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 3}}}, "g": {"docs": {}, "df": 0, "l": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1.7320508075688772}, "dapi.jobs.jobs.get_archive_path": {"tf": 1.4142135623730951}}, "df": 7, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 3, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 2, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 2, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase.close": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"dapi": {"tf": 1.4142135623730951}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.jobs": {"tf": 1.4142135623730951}, "dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.generate_job_info": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 6}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"dapi": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.jobs": {"tf": 1}}, "df": 3}}}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 2}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 2}}}}}, "x": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}, "d": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}}}}, "q": {"docs": {"dapi.db.db.DSDatabase.__init__": {"tf": 1}}, "df": 1}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1.4142135623730951}}, "df": 1}}, "p": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}}}}}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"dapi.db.db.DSDatabase.read_sql": {"tf": 2.449489742783178}}, "df": 1}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1.4142135623730951}}, "df": 1}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}, "h": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "e": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}, "dapi.db.db.DSDatabase.__init__": {"tf": 1}, "dapi.db.db.DSDatabase.read_sql": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 4, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"dapi.db.db.DSDatabase": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}}, "df": 1}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}, "y": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1.4142135623730951}}, "df": 1}, "u": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.get_status": {"tf": 1}, "dapi.jobs.jobs.runtime_summary": {"tf": 1}}, "df": 2}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"dapi.jobs.dir.get_ds_path_uri": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"dapi.jobs.jobs.runtime_summary": {"tf": 1}, "dapi.jobs.jobs.get_archive_path": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"dapi.jobs.jobs.generate_job_info": {"tf": 1}}, "df": 1}}}}}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true}; + + // mirrored in build-search-index.js (part 1) + // Also split on html tags. this is a cheap heuristic, but good enough. + elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/); + + let searchIndex; + if (docs._isPrebuiltIndex) { + console.info("using precompiled search index"); + searchIndex = elasticlunr.Index.load(docs); + } else { + console.time("building search index"); + // mirrored in build-search-index.js (part 2) + searchIndex = elasticlunr(function () { + this.pipeline.remove(elasticlunr.stemmer); + this.pipeline.remove(elasticlunr.stopWordFilter); + this.addField("qualname"); + this.addField("fullname"); + this.addField("annotation"); + this.addField("default_value"); + this.addField("signature"); + this.addField("bases"); + this.addField("doc"); + this.setRef("fullname"); + }); + for (let doc of docs) { + searchIndex.addDoc(doc); + } + console.timeEnd("building search index"); + } + + return (term) => searchIndex.search(term, { + fields: { + qualname: {boost: 4}, + fullname: {boost: 2}, + annotation: {boost: 2}, + default_value: {boost: 2}, + signature: {boost: 2}, + bases: {boost: 2}, + doc: {boost: 1}, + }, + expand: true + }); +})(); \ No newline at end of file diff --git a/examples/mpm/template-mpm-run.ipynb b/examples/mpm/template-mpm-run.ipynb index 2e806b3..c9480cf 100644 --- a/examples/mpm/template-mpm-run.ipynb +++ b/examples/mpm/template-mpm-run.ipynb @@ -13,12 +13,12 @@ "id": "abe5d8a3-32da-4233-b605-9fd51d053ec1", "metadata": {}, "source": [ - "## Install dapi" + "## Install DSJobs" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 1, "id": "b7fa3e9a-7bf3-441c-917f-fb57a94ee017", "metadata": {}, "outputs": [ @@ -27,7 +27,7 @@ "output_type": "stream", "text": [ "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.3.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.3.2\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } @@ -48,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 2, "id": "8593c08c-c96a-4a66-9b52-80b8b5c27e44", "metadata": { "tags": [ @@ -77,13 +77,13 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 3, "id": "91b811a4-45d9-4223-a145-c0f4e393af66", "metadata": {}, "outputs": [], "source": [ "from agavepy.agave import Agave\n", - "import dapi as ds\n", + "import dapi\n", "import json\n", "import os" ] @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 4, "id": "0153c5cc-f4b9-460b-b4c6-d92eb8c6ede5", "metadata": {}, "outputs": [ @@ -110,9 +110,9 @@ "---Job Info---\n", "\n", "{\n", - " \"appId\": \"mpm-1.0.0\",\n", + " \"appId\": \"mpm-1.1.0u3\",\n", " \"name\": \"mpm-uniaxial\",\n", - " \"batchQueue\": \"skx-dev\",\n", + " \"batchQueue\": \"development\",\n", " \"nodeCount\": 1,\n", " \"processorsPerNode\": 1,\n", " \"memoryPerNode\": \"1\",\n", @@ -137,12 +137,12 @@ "ag = Agave.restore()\n", "\n", "# generate and modify job info\n", - "job_info = ds.generate_job_info(\n", + "job_info = dapi.jobs.generate_job_info(\n", " ag, appid=\"mpm-1.1.0u3\", jobname=\"mpm-uniaxial\", runtime=duration\n", ")\n", "\n", "# specify input path and file\n", - "job_info[\"inputs\"] = {\"inputDirectory\": [ds.get_ds_path_uri(ag, path)]}\n", + "job_info[\"inputs\"] = {\"inputDirectory\": [dapi.jobs.get_ds_path_uri(ag, path)]}\n", "job_info[\"parameters\"] = {\"inputfile\": [input_file]}\n", "print(\"\\n---Job Info---\\n\\n\" + json.dumps(job_info, indent=2))" ] @@ -157,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 5, "id": "4e6dc010-d821-45d5-805b-84620363f468", "metadata": {}, "outputs": [], @@ -167,7 +167,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 6, "id": "06dd17dc-2540-46b3-9036-3245a9b6cfae", "metadata": {}, "outputs": [ @@ -175,7 +175,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting for job to start: 2it [00:30, 15.13s/it, Status: RUNNING] \n", + "Waiting for job to start: 2it [00:30, 15.14s/it, Status: RUNNING]\n", "Monitoring job: 0%| | 0/40 [00:00