Skip to main content

artistools

DOI PyPI - Version License

Supported Python versions Installation and pytest codecov

Artistools is collection of plotting, analysis, and file format conversion tools for the ARTIS radiative transfer code.

Installation

Requires Python >= 3.13

The artistools command can be invoked with uvx artistools (after installing uv), installed globally with uv tool install artistools, or installed into your environment with pip install artistools.

Development (editable installation)

For development, you will need a rust compiler and a clone of the repository:

git clone https://github.com/artis-mcrt/artistools.git
cd artistools

To make a uv virtual environment in the clone, with the development tools, run:

uv sync --all-extras
uv run -- prek install

uv run -- artistools then runs the command of the clone. To make the artistools command available outside the clone, also run uv tool install --editable .[extras].

Alternatively, to avoid uv and install into the system environment with pip:

pip install --group dev --editable .[extras]
prek install

To enable tab completion, run artistools completions. The command detects your shell and gives the steps for it.

Citing artistools

If you use artistools for a paper or a presentation, please cite it. For details, see https://zenodo.org/badge/latestdoi/53433932.

Usage

Run "artistools" (or the short alias "at") at the command-line to get a full list of subcommands, and "artistools --version" to check the installed version. Some common commands are:

  • artistools plotspectra (alias: at spec)
  • artistools plotlightcurves (alias: at lc)
  • artistools plotestimators (alias: at estimators)
  • artistools plotnltepops
  • artistools inputmodel describe

Use the -h option to get a list of command-line arguments for each subcommand. Set ARTISTOOLS_TRACEBACK=1 to get the full traceback of an error. Run a command in an ARTIS run folder, or give the path of the folder. A command that reads a model takes the folder with -modelpath, e.g. artistools timesteps -modelpath mymodel. Most of these commands also take the folder as the last positional argument, e.g. artistools plotspectra -t 300 mymodel.

A model on a different host

These commands accept a model path of the form host:path, where host is a name that ssh knows:

  • plotestimators and its --interactive viewer;
  • plotlightcurves and its --interactive viewer;
  • plotspectra and its --interactive viewer;
  • at.scan_estimators in a Python script.
artistools plotspectra -t 300 vae26:~/scratch/mymodel

The rule of rsync decides whether a path is remote: a colon before the first slash makes a remote path. A local folder with such a colon in its name needs "./" at the start, e.g. ./run:2.

artistools starts the server on that host through ssh, and it prints the command and the reason for it. A release of artistools starts uvx artistools@<version> server, with the versions of the local artistools and polars. Thus the host needs only uv. A clone whose package code differs from the release starts its git commit with uvx, if the commit is on a remote branch. The host then also needs git and Rust. For a commit that is only in the clone, the release starts, because the host cannot get the commit. The command sets POLARS_MAX_THREADS=16, because a login node can have hundreds of cores, and other users share them. The server reads the files and makes the data of each plot, e.g. it puts the packets into bins. Only the data to draw comes back, and the parquet caches stay beside the data on the host. A script sends the filter and the columns of each query to the host, and only the rows of the query come back.

An option that reads its files on the local host stops with an error. To start the server with a different command on the host, e.g. an artistools in a clone, set ARTISTOOLS_REMOTE_COMMAND:

export ARTISTOOLS_REMOTE_COMMAND='POLARS_MAX_THREADS=16 ~/artistools/.venv/bin/artistools server'

The environment of such a command must have the same version of polars as the client. The filter of a query goes to the host as a polars expression, and the format of an expression changes between two versions. If the versions differ, the client stops with an error that gives the uvx option.

Use from Python

artistools is mainly a set of commands, but a script or a notebook can call the same functions. import artistools as at gives a small set of names at the top level. Each package holds the other names, e.g. at.spectra and at.inputmodel.

from pathlib import Path

import artistools as at
import polars as pl

modelpath = Path("mymodel")
dfmodel, modelmeta = at.get_modeldata(modelpath)
times_days = at.get_timestep_times(modelpath, loc="mid")
dftemperature = at.scan_estimators(modelpath).filter(pl.col("timestep") == 40).select("modelgridindex", "Te").collect()
dfspectrum = at.spectra.get_spectra(modelpath, timestepmin=40, timestepmax=45)[-1].collect()

A function with the prefix scan_ returns a polars LazyFrame, or one LazyFrame for each direction bin, and reads nothing until .collect(). A function with the prefix read_ reads at once. A function with the prefix get_ can do either, and the tables below say which one returns a LazyFrame. The direction bin -1 is the average over all directions.

Names at the top level

Name Purpose
at.get_modeldata Read model.txt. Return the cells as a LazyFrame, and the model parameters as a dictionary.
at.add_derived_cols_to_modeldata Add columns that follow from the model file, e.g. the volume and the mass of each cell.
at.get_inputparams Return the parameters of input.txt.
at.get_model_name Return the name of the model that holds a path.
at.get_nprocs Return the number of MPI processes of the run.
at.get_timestep_times Return the time in days of each timestep (loc is "start", "mid", "end", or "delta").
at.get_timestep_of_timedays Return the timestep that holds a time in days.
at.scan_estimators Read the estimators of a full run as a LazyFrame, with a row for each timestep and cell.
at.get_deposition Return deposition.out as a LazyFrame.
at.get_composition_data Return the elements and the ion stages of compositiondata.txt as a DataFrame.
at.get_ionstring Return a text such as Fe II for an atomic number and an ion stage.
at.get_ion_tuple Return (26, 2) for a text such as FeII, Fe II, or 26_2.
at.get_elsymbol Return the element symbol of an atomic number.
at.get_atomic_number Return the atomic number of an element symbol.
at.get_z_a_nucname Return the atomic number and the mass number of a text such as Pb208.
at.decode_roman_numeral Return the integer of a Roman numeral.
at.get_path Return a known path by name, e.g. the package folder.
at.firstexisting Return the first file of a list that exists, with a compressed copy as an alternative.
at.zopen Open a file, or its .zst, .gz, or .xz copy.

Main readers in the packages

Name Purpose
at.estimators.read_estimators Read the estimators of a few cells into a dictionary. This is slow for many cells, thus prefer at.scan_estimators.
at.spectra.get_spectra Return a dictionary with a LazyFrame of the spectrum of each direction bin, as an average over a range of timesteps.
at.spectra.get_from_packets Return a dictionary with a LazyFrame of the spectrum of each direction bin from the packets files, for a range of arrival times.
at.lightcurve.scan_lightcurve Read a light curve file. Return one LazyFrame for each direction bin.
at.lightcurve.get_from_packets Return a dictionary with a LazyFrame of the luminosity against time of each direction bin, from the packets files.
at.packets.get_packets Return the number of ranks and a LazyFrame of the packets of a run.
at.nltepops.read_nltepops Read the NLTE populations of a timestep and of one or more cells.
at.atomic.get_levels Return the energy levels of each ion, with the transitions as an option.
at.inputmodel.save_modeldata Write model.txt from a dataframe of the cells.
at.plottools.set_mpl_style Apply the matplotlib style of artistools.

The command of a package

A package that has a plot command gives it as plot, e.g. at.spectra.plot, at.lightcurve.plot, at.estimators.plot, at.nltepops.plot, at.packets.plot, at.nonthermal.plot, and at.gsinetwork.plot. This function is the command itself. Each keyword is one command-line argument, and argsraw gives more arguments as text, e.g. argsraw=["-t", "300"]:

at.spectra.plot(argsraw=[], specpath=[modelpath], timedays="300", outputfile="spectrum.pdf")

Example output

Emission plot NLTE plot Estimator plot

License

Distributed under the MIT license. See LICENSE for more information.

https://github.com/artis-mcrt/artistools

Metadata

Release files for artistools 2026.10.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for artistools 2026.10.8
File Size Uploaded
artistools-2026.10.8.tar.gz 8.9 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for artistools 2026.10.8
File
artistools-2026.10.8-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl CPython 3.15 abi3t, abi3 Linux glibc 2.28+ x86-64 Details
artistools-2026.10.8-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl CPython 3.15 abi3t, abi3 Linux glibc 2.28+ ARM64 Details
artistools-2026.10.8-cp315-abi3.abi3t-macosx_13_0_arm64.whl CPython 3.15 abi3, abi3t macOS 13.0+ ARM64 Details
artistools-2026.10.8-cp314-cp314t-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 Details
artistools-2026.10.8-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
artistools-2026.10.8-cp314-cp314t-macosx_13_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 13.0+ ARM64 Details
artistools-2026.10.8-cp313-abi3-manylinux_2_28_x86_64.whl CPython 3.13 abi3 Linux glibc 2.28+ x86-64 Details
artistools-2026.10.8-cp313-abi3-manylinux_2_28_aarch64.whl CPython 3.13 abi3 Linux glibc 2.28+ ARM64 Details
artistools-2026.10.8-cp313-abi3-macosx_13_0_arm64.whl CPython 3.13 abi3 macOS 13.0+ ARM64 Details

Total release size: 145.7 MB

Release files / artistools-2026.10.8.tar.gz

Download URL artistools-2026.10.8.tar.gz
Size 8.9 MB
Tags Source
SHA-256 checksum
How to use checksums
aa1f6398c41217a435ed487918d9b2c83db9321b9d9012e7d3c4f7e26a59056d
BLAKE2b-256 checksum
How to use checksums
5f2ca52fc5efe649338942e0ab39144a1ef104270e334ced374a186b616f726d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl

Download URL artistools-2026.10.8-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
Size 15.9 MB
Tags CPython 3.15 Linux glibc 2.28+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
0ca85925b31d55195d4bf4b76a8049e3ac278290aec7cf5833c7e359df68d09d
BLAKE2b-256 checksum
How to use checksums
8e50f69e259a381647f2314e2831d1a676b9e71e43bdca64cc4cd6544cfe2f85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl

Download URL artistools-2026.10.8-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl
Size 16.0 MB
Tags CPython 3.15 Linux glibc 2.28+ ARM64 abi3 abi3t
SHA-256 checksum
How to use checksums
d69c3d3ec55261d84d7c9246581d628bf6be72a7bdd56f8b12112b7a4030f2fd
BLAKE2b-256 checksum
How to use checksums
1d86e7ea6b1ba79de00cd0a648d945f6f3ff4c73ee1e4ee5c5680e65c37333b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp315-abi3.abi3t-macosx_13_0_arm64.whl

Download URL artistools-2026.10.8-cp315-abi3.abi3t-macosx_13_0_arm64.whl
Size 13.8 MB
Tags CPython 3.15 abi3 abi3t macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
f78be65976f082ca8185e5d1c071ce61faa95337278a10370b7240ec9aa408d7
BLAKE2b-256 checksum
How to use checksums
3e3f98e503088e37756bcc03d60576ed07801fedc9547ae421d8decbfc2f5b51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp314-cp314t-manylinux_2_28_x86_64.whl

Download URL artistools-2026.10.8-cp314-cp314t-manylinux_2_28_x86_64.whl
Size 15.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
45886af33302c126e6f094c7decfe529cf14d4ea1315a126d18d2b865bb9249f
BLAKE2b-256 checksum
How to use checksums
eb9c0ead37f990e01f6e7e709271d26e4e3fb44afb97920dd862c10cd3e11a25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp314-cp314t-manylinux_2_28_aarch64.whl

Download URL artistools-2026.10.8-cp314-cp314t-manylinux_2_28_aarch64.whl
Size 16.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5e78b7d1484e7d5c7b01433b48edb407388a96f6c5c21241c2142f843c15780d
BLAKE2b-256 checksum
How to use checksums
30ffffbbd2a5627b9abff78252327a494d18d52f4f4673cb6c28102cd76d250e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp314-cp314t-macosx_13_0_arm64.whl

Download URL artistools-2026.10.8-cp314-cp314t-macosx_13_0_arm64.whl
Size 13.8 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
457e12284fb60c85049644d3def4d49ba41865ff5bdc0740061dd54ef7089dd7
BLAKE2b-256 checksum
How to use checksums
da07ad138076cdcf9598864a51d4535eee71173f3390db87a407f886d627b3ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp313-abi3-manylinux_2_28_x86_64.whl

Download URL artistools-2026.10.8-cp313-abi3-manylinux_2_28_x86_64.whl
Size 15.9 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
0bf636a0debf3b8da4060ea2883bd9ab965310c1d149517b096d716bf42bc60c
BLAKE2b-256 checksum
How to use checksums
d26abd249cb4ac23414a15ea59025bfa8b610bd4f465786be2c4c58c6230890b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp313-abi3-manylinux_2_28_aarch64.whl

Download URL artistools-2026.10.8-cp313-abi3-manylinux_2_28_aarch64.whl
Size 16.0 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
04157436ecd0619b2ed74953576ba5d47213c6e361b6a37f41dddd361d47b4fa
BLAKE2b-256 checksum
How to use checksums
504fe4b94f6954543551a2002ad946a36718c4610567792bef59943ba52701ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / artistools-2026.10.8-cp313-abi3-macosx_13_0_arm64.whl

Download URL artistools-2026.10.8-cp313-abi3-macosx_13_0_arm64.whl
Size 13.8 MB
Tags CPython 3.13 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
e733c73bc225a45833efe9ed6617ce8985e0a804c3e2f4a9d6376db57dc4c41d
BLAKE2b-256 checksum
How to use checksums
32f275fd2332c2288c6d607bae7325599b7618c084a79f93b253c60a7401603b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.10.8 This release

10 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page