Skip to content

Fix high import time #395

Description

@cvanelteren

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]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions