Basic operations

In this tutorial, we will perform basic operations on demo data in Starburst Galaxy.

Prerequisites

This tutorial assumes you have completed the setup and connected to a database with the astronauts and missions demo data, including setup of a Python environment with Ibis and the Trino backend installed.

Code
import os import ibis from dotenv import load_dotenv  ibis.options.interactive = True  load_dotenv()  user = 'dopep89606@hartaria.com/accountadmin' password = os.getenv("PASSWORD") host = os.getenv("HOSTNAME") port = os.getenv("PORTNUMBER") catalog = "sample" schema = "demo"  con = ibis.trino.connect(  user=user,  password=password,  host=host,  port=port,  database=catalog,  schema=schema, ) con
1
Import necessary libraries.
2
Use Ibis in interactive mode.
3
Load environment variables.
4
Load secrets from environment variables.
5
Use the sample demo data.
6
Connect to Starburst Galaxy.
7
Display the connection object.
<ibis.backends.trino.Backend at 0x727cf116e8f0>

Load tables

Once you have a connection, you can assign tables to variables.

astronauts = con.table("astronauts") missions = con.table("missions")
1
Create astonauts variable.
2
Create missions variable.

You can display slices of data:

astronauts[0:5]
1
Display the first 5 rows of the astronauts table.
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ id  number  nationwide_number  name  original_name  sex  year_of_birth  nationality  military_civilian  selection  year_of_selection  mission_number  total_number_of_missions  occupation  year_of_mission  mission_title  ascend_shuttle  in_orbit  descend_shuttle  hours_mission  total_hrs_sum  field21  eva_hrs_mission  total_eva_hrs ┃ ┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ int32int32int32stringstringstringint32stringstringstringint32int32int32stringint32stringstringstringstringfloat64float64int32float64float64 │ ├───────┼────────┼───────────────────┼─────────────────────┼─────────────────────────┼────────┼───────────────┼────────────────┼───────────────────┼────────────────────────┼───────────────────┼────────────────┼──────────────────────────┼────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼───────────────┼───────────────┼─────────┼─────────────────┼───────────────┤ │ 111Gagarin, Yuri ГАГАРИН Юрий Алексеевичmale 1934U.S.S.R/Russiamilitary TsPK-1 196011pilot 1961Vostok 1 Vostok 1 Vostok 2 Vostok 3 1.771.7700.00.0 │ │ 222Titov, Gherman ТИТОВ Герман Степановичmale 1935U.S.S.R/Russiamilitary TsPK-1 196011pilot 1961Vostok 2 Vostok 2 Vostok 2 Vostok 2 25.0025.3000.00.0 │ │ 331Glenn, John H., Jr.Glenn, John H., Jr. male 1921U.S. military NASA Astronaut Group 1195912pilot 1962MA-6 MA-6 MA-6 MA-6 5.00218.0000.00.0 │ │ 431Glenn, John H., Jr.Glenn, John H., Jr. male 1921U.S. military NASA Astronaut Group 2195922PSP 1998STS-95 STS-95 STS-95 STS-95 213.00218.0000.00.0 │ │ 542Carpenter, M. ScottCarpenter, M. Scott male 1925U.S. military NASA- 1 195911Pilot 1962Mercury-Atlas 7Mercury-Atlas 7Mercury-Atlas 7Mercury-Atlas 75.005.0000.00.0 │ └───────┴────────┴───────────────────┴─────────────────────┴─────────────────────────┴────────┴───────────────┴────────────────┴───────────────────┴────────────────────────┴───────────────────┴────────────────┴──────────────────────────┴────────────┴─────────────────┴─────────────────┴─────────────────┴─────────────────┴─────────────────┴───────────────┴───────────────┴─────────┴─────────────────┴───────────────┘ 
missions[0:5]
1
Display the first 5 rows of the missions table.
┏━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓ ┃ id  company_name  location  date  detail  status_rocket  cost  status_mission ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩ │ int32stringstringstringstringstringfloat64string │ ├───────┼──────────────┼───────────────────────────────────────────────────────────┼────────────────────────────┼──────────────────────────────────────────────┼───────────────┼─────────┼────────────────┤ │ 0SpaceX LC-39A, Kennedy Space Center, Florida, USA Fri Aug 07, 2020 05:12 UTCFalcon 9 Block 5 | Starlink V1 L9 & BlackSkyStatusActive 50.00Success  │ │ 1CASC Site 9401 (SLS-2), Jiuquan Satellite Launch Center, ChinaThu Aug 06, 2020 04:01 UTCLong March 2D | Gaofen-9 04 & Q-SAT StatusActive 29.75Success  │ │ 2SpaceX Pad A, Boca Chica, Texas, USA Tue Aug 04, 2020 23:57 UTCStarship Prototype | 150 Meter Hop StatusActive NULLSuccess  │ │ 3Roscosmos Site 200/39, Baikonur Cosmodrome, Kazakhstan Thu Jul 30, 2020 21:25 UTCProton-M/Briz-M | Ekspress-80 & Ekspress-103StatusActive 65.00Success  │ │ 4ULA SLC-41, Cape Canaveral AFS, Florida, USA Thu Jul 30, 2020 11:50 UTCAtlas V 541 | Perseverance StatusActive 145.00Success  │ └───────┴──────────────┴───────────────────────────────────────────────────────────┴────────────────────────────┴──────────────────────────────────────────────┴───────────────┴─────────┴────────────────┘ 

Table schemas

You can view the schemas of the tables:

astronauts.schema()
1
Display the schema of the astronauts table.
ibis.Schema { id int32 number int32 nationwide_number int32 name string original_name string sex string year_of_birth int32 nationality string military_civilian string selection string year_of_selection int32 mission_number int32 total_number_of_missions int32 occupation string year_of_mission int32 mission_title string ascend_shuttle string in_orbit string descend_shuttle string hours_mission float64 total_hrs_sum float64 field21 int32 eva_hrs_mission float64 total_eva_hrs float64 }
missions.schema()
1
Display the schema of the missions table.
ibis.Schema { id int32 company_name string location string date string detail string status_rocket string cost float64 status_mission string }

Selecting columns

With Ibis, you can run SQL-like queries on your tables. For example, you can select specific columns from a table:

t = astronauts.select("name", "nationality", "mission_title", "mission_number", "hours_mission") t.head(3)
1
Select specific columns from the astronauts table.
2
Display the results.
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ name  nationality  mission_title  mission_number  hours_mission ┃ ┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ stringstringstringint32float64 │ ├─────────────────────┼────────────────┼───────────────┼────────────────┼───────────────┤ │ Gagarin, Yuri U.S.S.R/RussiaVostok 1 11.77 │ │ Titov, Gherman U.S.S.R/RussiaVostok 2 125.00 │ │ Glenn, John H., Jr.U.S. MA-6 15.00 │ └─────────────────────┴────────────────┴───────────────┴────────────────┴───────────────┘ 

And from the missions table:

t = missions.select("company_name", "status_rocket", "cost", "status_mission") t.head(3)
1
Select specific columns from the missions table.
2
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓ ┃ company_name  status_rocket  cost  status_mission ┃ ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩ │ stringstringfloat64string │ ├──────────────┼───────────────┼─────────┼────────────────┤ │ SpaceX StatusActive 50.00Success  │ │ CASC StatusActive 29.75Success  │ │ SpaceX StatusActive NULLSuccess  │ └──────────────┴───────────────┴─────────┴────────────────┘ 

You can also apply filters to your queries:

t = astronauts.filter(~astronauts["nationality"].like("U.S.%")) t.head(3)
1
Filter astronauts table by nationality.
2
Display the results.
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ id  number  nationwide_number  name  original_name  sex  year_of_birth  nationality  military_civilian  selection  year_of_selection  mission_number  total_number_of_missions  occupation  year_of_mission  mission_title  ascend_shuttle  in_orbit  descend_shuttle  hours_mission  total_hrs_sum  field21  eva_hrs_mission  total_eva_hrs ┃ ┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ int32int32int32stringstringstringint32stringstringstringint32int32int32stringint32stringstringstringstringfloat64float64int32float64float64 │ ├───────┼────────┼───────────────────┼───────────────────────────┼──────────────────────────┼────────┼───────────────┼─────────────┼───────────────────┼────────────────────────┼───────────────────┼────────────────┼──────────────────────────┼─────────────────┼─────────────────┼───────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────┼─────────┼─────────────────┼───────────────┤ │ 681011Jugderdemidiin GurragchaaЖүгдэрдэмидийн Гүррагчааmale 1947Mongolia civilian 1978 Intercosmos Group197811flight engineer1981Soyuz 39 Soyuz 39 Soyuz 39Soyuz 39 188.7188.7000.00.00 │ │ 731031Dumitru Prunariu Dumitru-Dorin Prunariu male 1952Romania civilian 1978 Intercosmos Group197811MSP 1981Soyuz 40 Soyuz 40 Soyuz 40Soyuz 40 188.7188.7000.00.00 │ │ 811081Chrétien, Jean-Loup Chrétien, Jean-Loup male 1938France military CNES-1 198013MSP 1982Salyut 7 Soyuz T-6 Salyut 7Soyuz T-6 190.01043.3200.05.95 │ └───────┴────────┴───────────────────┴───────────────────────────┴──────────────────────────┴────────┴───────────────┴─────────────┴───────────────────┴────────────────────────┴───────────────────┴────────────────┴──────────────────────────┴─────────────────┴─────────────────┴───────────────┴────────────────┴──────────┴─────────────────┴───────────────┴───────────────┴─────────┴─────────────────┴───────────────┘ 

And in the missions table:

t = missions.filter(missions["status_mission"] == "Failure") t.head(3)
1
Filter missions table by mission status.
2
Display the results.
┏━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓ ┃ id  company_name  location  date  detail  status_rocket  cost  status_mission ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩ │ int32stringstringstringstringstringfloat64string │ ├───────┼──────────────┼─────────────────────────────────────────────────────────┼────────────────────────────┼─────────────────────────────────────────────┼───────────────┼─────────┼────────────────┤ │ 11ExPace Site 95, Jiuquan Satellite Launch Center, China Fri Jul 10, 2020 04:17 UTCKuaizhou 11 | Jilin-1 02E, CentiSpace-1 S2 StatusActive 28.3Failure  │ │ 15Rocket Lab Rocket Lab LC-1A, M?\x81hia Peninsula, New Zealand Sat Jul 04, 2020 21:19 UTCElectron/Curie | Pics Or It Didn??¦t HappenStatusActive 7.5Failure  │ │ 27Virgin OrbitCosmic Girl, Mojave Air and Space Port, California, USAMon May 25, 2020 19:50 UTCLauncherOne | Demo Flight StatusActive 12.0Failure  │ └───────┴──────────────┴─────────────────────────────────────────────────────────┴────────────────────────────┴─────────────────────────────────────────────┴───────────────┴─────────┴────────────────┘ 

Mutating columns

t = missions.mutate(date=ibis.coalesce(ibis._["date"], None)) t = t.order_by(t["date"].asc()) t.head(3)
1
Mutate the date column.
2
Order the results by the date column.
3
Display the results.
┏━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓ ┃ id  company_name  location  date  detail  status_rocket  cost  status_mission ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩ │ int32stringstringstringstringstringfloat64string │ ├───────┼──────────────┼───────────────────────────────────────────────────┼────────────────────────────┼──────────────────────────────┼───────────────┼─────────┼────────────────┤ │ 4268US Air ForceSLC-17A, Cape Canaveral AFS, Florida, USA Fri Apr 01, 1960 11:40 UTCThor DM-18 Able-II | TIROS-1StatusRetiredNULLSuccess  │ │ 3366RVSN USSR Site 43/3, Plesetsk Cosmodrome, Russia Fri Apr 02, 1971 08:20 UTCVoskhod | Cosmos 403 StatusRetiredNULLSuccess  │ │ 1262Arianespace ELA-2, Guiana Space Centre, French Guiana, FranceFri Apr 02, 1999 22:03 UTCAriane 42P | Insat-2E StatusRetiredNULLSuccess  │ └───────┴──────────────┴───────────────────────────────────────────────────┴────────────────────────────┴──────────────────────────────┴───────────────┴─────────┴────────────────┘ 

Aggregating and grouping results

Ibis also supports aggregate functions and grouping. For example, you can count the number of rows in a table and group the results by a specific column:

t = astronauts.filter(~astronauts["nationality"].like("U.S.%")).agg(  [  ibis._.count().name("number_trips"),  ibis._["hours_mission"].max().name("longest_time"),  ibis._["hours_mission"].min().name("shortest_time"),  ] ) t.head(3)
1
Filter the astronauts table.
2
Aggregate the results.
3
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ number_trips  longest_time  shortest_time ┃ ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ int64float64float64 │ ├──────────────┼──────────────┼───────────────┤ │ 1496902.3521.0 │ └──────────────┴──────────────┴───────────────┘ 

You can add a group by:

t = (  astronauts.filter(~astronauts["nationality"].like("U.S.%"))  .group_by("nationality")  .agg(  [  ibis._.count().name("number_trips"),  ibis._["hours_mission"].max().name("longest_time"),  ibis._["hours_mission"].min().name("shortest_time"),  ]  ) ) t.head(3)
1
Filter the astronauts table.
2
Group by nationality.
3
Aggregate the results.
4
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ nationality  number_trips  longest_time  shortest_time ┃ ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ stringint64float64float64 │ ├──────────────┼──────────────┼──────────────┼───────────────┤ │ Hungry 1188.75188.75 │ │ Canada 184887.00193.77 │ │ Saudi Arabia1170.00170.00 │ └──────────────┴──────────────┴──────────────┴───────────────┘ 

And order the results by ‘number_trips’ and ‘longest_time’ in descending order:

t = (  astronauts.filter(~astronauts["nationality"].like("U.S.%"))  .group_by("nationality")  .agg(  [  ibis._.count().name("number_trips"),  ibis._["hours_mission"].max().name("longest_time"),  ibis._["hours_mission"].min().name("shortest_time"),  ]  )  .order_by([ibis.desc("number_trips"), ibis.desc("longest_time")]) ) t.head(3)
1
Filter the astronauts table.
2
Group by nationality.
3
Aggregate the results.
4
Order the result.
5
Display the results.
┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ nationality  number_trips  longest_time  shortest_time ┃ ┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ stringint64float64float64 │ ├─────────────┼──────────────┼──────────────┼───────────────┤ │ Japan 206902.35189.90 │ │ Canada 184887.00193.77 │ │ France 184721.83118.80 │ └─────────────┴──────────────┴──────────────┴───────────────┘ 

For the missions table, you can group by ‘company_name’ and ‘status_rocket’, and then sum the ‘cost’:

t = (  missions.filter(missions["status_mission"] == "Failure")  .group_by(["company_name", "status_rocket"])  .agg(ibis._["cost"].sum().name("cost"))  .order_by(ibis.desc("cost")) ) t.head(3)
1
Filter the missions table.
2
Group by company_name and status_rocket.
3
Aggregate the results.
4
Order the results.
5
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┓ ┃ company_name  status_rocket  cost ┃ ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━┩ │ stringstringfloat64 │ ├──────────────┼───────────────┼─────────┤ │ NASA StatusRetired900.0 │ │ Northrop StatusActive 255.0 │ │ Arianespace StatusActive 237.0 │ └──────────────┴───────────────┴─────────┘ 

Writing tables

Finally, let’s write a table back to Starburst Galaxy.

Warning

You cannot write to the sample catalog; uncomment the code and write to a catalog you have write access to.

#con.create_table("t", t, overwrite=True)

Next steps

Now that you’ve connected to Starburst Galaxy and learned the basics, you can query your own data. See the rest of the Ibis documentation or Starburst Galaxy documentation. You can open an issue if you run into one!

Back to top