UltraPlot has a lot of greedy imports (see for example the * imports in __init__.py), we could reduce the import time by making modules available on demand rather than importing everything greedily. For an overview of the import time I used pyinstrument to identify "hot" spots
⮞pyinstrumentimport.py_.___/_______/_Recorded:10:57:43Samples:572/_//_////_\///_/////_'/ // Duration: 1.217 CPU time: 2.444/ _/ v5.1.1Program: import.py1.217 <module> import.py:1└─ 1.217 <module> ultraplot/__init__.py:1 ├─ 0.628 <module> ultraplot/internals/__init__.py:1 │ ├─ 0.314 <module> ultraplot/internals/docstring.py:1 │ │ ├─ 0.232 <module> matplotlib/axes/__init__.py:1 │ │ │ [18 frames hidden] matplotlib │ │ └─ 0.080 <module> matplotlib/figure.py:1 │ │ [10 frames hidden] matplotlib, mpl_toolkits │ ├─ 0.116 <module> matplotlib/__init__.py:1 │ │ [7 frames hidden] matplotlib, pyparsing, PIL │ ├─ 0.113 <module> numpy/__init__.py:1 │ │ [15 frames hidden] numpy, typing │ └─ 0.073 <module> ultraplot/internals/inputs.py:1 │ └─ 0.073 <module> cartopy/__init__.py:1 │ [7 frames hidden] cartopy, pyproj, urllib, http ├─ 0.307 <module> ultraplot/config.py:1 │ ├─ 0.289 <module> IPython/__init__.py:1 │ │ [35 frames hidden] IPython, prompt_toolkit, jedi, stack_... │ └─ 0.014 Configurator.__init__ ultraplot/config.py:789 │ └─ 0.014 Configurator._init ultraplot/config.py:891 ├─ 0.076 <module> mpl_toolkits/basemap/__init__.py:1 │ ├─ 0.036 [self] mpl_toolkits/basemap/__init__.py │ └─ 0.014 str.strip <built-in> ├─ 0.056 <module> ultraplot/axes/__init__.py:1 │ └─ 0.028 <module> ultraplot/axes/cartesian.py:1 │ └─ 0.021 <module> ultraplot/axes/plot.py:1 │ └─ 0.019 PlotAxes ultraplot/axes/plot.py:1534 │ └─ 0.019 _concatenate_inherited ultraplot/internals/docstring.py:62 ├─ 0.056 register_colors ultraplot/config.py:578 │ └─ 0.052 _standardize_colors ultraplot/colors.py:710 │ └─ 0.048 to_xyz ultraplot/utils.py:681 │ └─ 0.046 to_xyza ultraplot/utils.py:708 │ ├─ 0.028 to_rgba ultraplot/utils.py:615 │ └─ 0.018 rgb_to_hcl ultraplot/externals/hsluv.py:106 │ └─ 0.016 rgb_to_CIExyz ultraplot/externals/hsluv.py:263 ├─ 0.028 <module> matplotlib/pyplot.py:1 │ [5 frames hidden] matplotlib └─ 0.018 <module> ultraplot/ticker.py:1 └─ 0.014 <module> cartopy/mpl/ticker.py:1 └─ 0.014 <module> cartopy/mpl/geoaxes.py:1To view this report with different options, run: pyinstrument --load-prev 2025-10-30T10-57-43 [options]
UltraPlot has a lot of greedy imports (see for example the * imports in
__init__.py), we could reduce the import time by making modules available on demand rather than importing everything greedily. For an overview of the import time I used pyinstrument to identify "hot" spots