Quickstart

The official Nominal Python client.

Nominal is the leading platform for operationalizing test data.

Installation

If you don’t have Python installed, you can download it for free from the Python Software Foundation. We support versions 3.9 through 3.12.

To check whether Python is installed, simply open your Terminal (Mac) or command prompt (Windows), and type python (or python3) in the prompt. If you receive an error, you likely do not have Python installed on your machine.

Installing the Nominal Python Client is as straightforward as installing it with pip:

$$ pip install nominal
Installing with Extras

The nominal client contains several opt-in features that come with their own additional, heavier dependencies. Today, these include:

  • hdf5: ingesting / working with HDF5 files
  • protos: directly streaming data to Nominal using protobuf

You may install these using, for example, pip install nominal[hdf5], or pip install nominal[hdf5,protos] for the latest version of the client. See here for more information.

Version

We use semantic versioning for the Nominal Python Client. To check which version of the client you have installed, you may simply inspect the __version__ variable within the package:

1import nominal
2
3print(nominal.__version__)
Upgrading `nominal` version

To update the version of the client installed using pip, run the following:

$$ pip install --upgrade nominal

As a best practice, we recommend regularly updating your client to ensure that you receive bugfixes and other improvements in a timely fashion.

Connect to Nominal

When using the Nominal client library, there are two primary ways of authenticating:

First, run the following in your terminal and follow on-screen prompts to insert the base_url and API key:

$$ python -m nominal auth set-token
>
># Alternatively, use the globally installed CLI
>$ nom auth set-token

This will store your API key in a config file ~/.nominal.yml. The API key will automatically be used when using the client again.

1import nominal
2
3# Simply grab the "default" client using your stored credentials
4client = nominal.get_default_client()
5
6# Get details about the currently logged-in user to validate authentication
7# Will display an object like: `User(display_name='your_email@your_company.com', ...)`
8print(client.get_user())
1import nominal
2
3# Set login details for the user
4nominal.set_token("<insert api key>")
5
6# Get an instance of the client using provided credentials
7client = nominal.get_default_client()
8
9# Get details about the currently logged-in user to validate authentication
10# Will display an object like: `User(display_name='your_email@your_company.com', ...)`
11print(client.get_user())

NOTE: you should never share your Nominal API key with anyone. We therefore recommend that you not save it in your code and/or scripts.

  • If you trust the computer you are on, use nom to store the credential to disk.
  • Otherwise, use a password manager such as 1password or bitwarden to keep your token safe.
If you’re not sure whether your company has a Nominal tenant, please reach out to us.

Usage examples

Upload a Dataset

Download this example CSV to your local computer:

1import polars as pl
2
3df = pl.read_csv('hf://datasets/nominal-io/frosty-flight/frosty_flight_1k_rows.csv')
4df.write_csv('frosty_flight_1k_rows.csv')

Then upload the CSV file to Nominal:

1import nominal as nm
2
3csv_dataset = nm.upload_csv(
4 'frosty_flight_1k_rows.csv',
5 name = 'Frosty Flight',
6 timestamp_column = 'source_time',
7 timestamp_type = 'iso_8601',
8)
9
10print('Uploaded dataset:', csv_dataset.rid)

See nm.upload_csv()

Create a Run

In Nominal, Runs are containers of multimodal test data - including Datasets, Videos, Logs, and database connections.

To see your organization’s latest Runs, head over to the Runs page

1import nominal as nm
2
3flight_simulator_run = nm.create_run(
4 name = 'High precipitation flight',
5 start = '2024-09-09T12:35:00Z',
6 end = '2024-09-09T13:18:00Z',
7)
8
9print("Created run:", flight_simulator_run.rid)

See nm.create_run()

Add Data to a Run

(Scroll up to Upload a dataset to see how the csv_dataset was created.)

1flight_simulator_run.add_dataset(
2 dataset = csv_dataset,
3 ref_name = 'high-precipitation-flight'
4)

See Run.add_dataset()

Create a Run with Data

Create a Run and add a Dataset to it in one swoop.

nm.create_run_csv() combines upload_csv(), create_run(), and add_dataset().

1import nominal as nm
2
3nm.create_run_csv(
4 'frosty_flight_1k_rows.csv',
5 name = 'Frosty Flight',
6 timestamp_column = 'source_time',
7 timestamp_type = 'iso_8601'
8)

See nm.create_run_csv()

Update Run metadata

1import nominal as nm
2
3run = nm.get_run('ri.scout.gov-staging.run.ce205f7e-9ef1-4a8b-92ae-11edc77441c6')
4run.update(name = 'New Run Title')

See Run.update()

Please refer to the Function Reference and guides on the left-hand sidebar for more extensive examples.

Appendix

Tips & tricks for test engineers getting started with Python.

Python is the fastest growing language in STEM for data analytics. It’s free and functionally equivalent to MATLAB in many respects.

Python IDEs

If you’re new to scripting in Python, below are a few recommendations for Python IDEs (integrated development environments).

Jupyter

The guides on this website are styled after Jupyter notebook, a free and beginner-friendly analysis environment for Python. If you’re creating a lot of charts, or enjoy narrating your analysis code with text, you may find Jupyter productive.

VSCode

VSCode is a more minimalist, equally popular development environment for Python. If you’re creating automation scripts in Python that do not involve charts or analysis, the streamlined UX of VSCode may be appealing.