4. Example Applications

In the current software revision of REDAC, users are supposed to be given circuit configuration files (a concept also known as netlist) which are refered to as config.json in the following. These circuit configuration files encode the actual mathematical problems. Their generation is done by software by tooling which will provided at a later stage.

The usage of REDAC is currently therefore basically the submission of a config.json file, next to some basic information about the simulation parameters (such as simulation runtimes or for data querying of measurement variables).

Given the Python client (section Getting started), you can invoke examples either from your operating system command line or from python code, using the given client as a library.

For the following example, please download the exemplaric config.json file first.

We primarily support the Python programming language as the reference implementation. The way how to upload a configuration file is like

you@localhost> redacli run --host https://redac.anabrid.com [--partition partition_id] config.json
[CSV output of measurement variables]

or, straight from the python programming language (REPL):

you@localhost> python
>>> import json
>>> from anabrid.redaccess.api.client.redac_client import REDACClient
>>> redac = REDACClient("https://redac.anabrid.com")
>>> redac.login(username, password) # to be set by the user
>>> with open("config.json", "r") as f:
>>>     config = json.load(f)
>>> job_id, results = redac.solve(config, 0)
>>> logs = redac.log(job_id)

Afterwards, the variables results resp. logs will hold the job results in a JSON format and the job’s log as a string array.

Note that other than these high-level functions, REDACClient contains several functions that allow to submit one or multiple job asynchronously, to multiple partitions, then wait for them to finish and collect their results all at once:

import asyncio
import json
from anabrid.redaccess.api.client.redac_client import REDACClient

async def submit_batch():
  redac = REDACClient("https://redac.anabrid.com")
  redac.login(username, password)
  with open("config.json", "r") as f:
    config = json.load(f)

  # asynchronously submit three jobs
  jobs = [None, None, None]
  for part_id in range(3):
    job = {
      "config": config,
      "partition_id": part_id,
      "label": "Job"
    }
    jobs[part_id] = asyncio.create_task(redac.submit_job(job))

  # wait until the three jobs were successfully submitted (and returned their ID)
  for part_id in range(3):
    while not jobs[part_id].done():
      asyncio.sleep(0.5)

  # not wait until the jobs are done (in the meantime, you can do some other work)
  for part_id in range(3):
    job_id = jobs[part_id].result()
    is_done = False

    while not is_done:
      is_done = (await redac.get_job_status(job_id).status == "COMPLETED")
      asyncio.sleep(0.5)

  # finally, download and print results
  for part_id in range(3):
    job_id = jobs[part_id].result()
    results = await redac.get_job_results(job_id)
    print(json.dumps(results))

if __name__ == "__main__":
  asyncio.run(submit_batch())

Save this script as batch.py, the execute it with python batch.py. If you are not familiar with the async syntax used here, please refer to the official Python developer’s documentation.