Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3952 commits
Select commit Hold shift + click to select a range
2434eef
Adding pytest-mpl to ultraplot workflow (#47)
cvanelteren Jan 30, 2025
a4eafac
Readthedocs fix (#48)
cvanelteren Jan 31, 2025
7d8d1de
Fix margin (#44)
cvanelteren Jan 31, 2025
979d61c
tmp set back to mamba-forge
cvanelteren Jan 31, 2025
8355da8
Workflow needs a dep or otherwise it is skipped (#53)
cvanelteren Jan 31, 2025
cf2cc96
Resetting RTD env to mambaforge (#55)
cvanelteren Jan 31, 2025
b0f8d64
test: adjust test matrix to use one locale and add matrix dimension o…
beckermr Jan 31, 2025
930b07c
Dep build (#57)
cvanelteren Jan 31, 2025
53d6add
fix attempt 2 publish workflow (#58)
cvanelteren Feb 1, 2025
2fa39b9
another attempt (#59)
cvanelteren Feb 1, 2025
cd606ab
fix: remove custom classifier for MPL (#62)
beckermr Feb 1, 2025
4a2f4a8
fix: correct chain of logic for publish workflow (#63)
beckermr Feb 1, 2025
a912237
fix: get pypi publish working (#64)
beckermr Feb 2, 2025
8d1836d
add case where cycler is already a cycle (#65)
cvanelteren Feb 2, 2025
32b49be
fix: make sure PRs do not mess with releases (#67)
beckermr Feb 2, 2025
277dfc8
fix: ensure pypi readme works ok (#70)
beckermr Feb 3, 2025
cbd7513
feat: deduplicate pypi publish workflow (#71)
beckermr Feb 3, 2025
35f7c0f
[pre-commit.ci] pre-commit autoupdate (#73)
pre-commit-ci[bot] Feb 3, 2025
4e1fbf3
use norm explicitly (#76)
cvanelteren Feb 14, 2025
a91b57e
added path explicitly on publish (#77)
cvanelteren Feb 15, 2025
bf6c8f6
fix: remove race condition for pushes of tags (#78)
beckermr Feb 15, 2025
ca07a1f
use seed for reproducibility (#79)
cvanelteren Feb 15, 2025
aa39093
Fix demo function not extracting colormaps (#83)
cvanelteren Feb 19, 2025
d7d1624
allows cycle to be a tuple (#87)
cvanelteren Feb 20, 2025
cd424df
Fixes heatmap not showing labels. (#91)
cvanelteren Feb 21, 2025
9ca858c
Remove autoapi (#92)
cvanelteren Feb 21, 2025
8d91014
explicitly override minor locator if given (#96)
cvanelteren Feb 23, 2025
f6b827a
filter out property if not set (#99)
cvanelteren Feb 25, 2025
79a7eff
Add texgyre to docs (#101)
cvanelteren Feb 27, 2025
ff8247f
Texgyre fix (#102)
cvanelteren Feb 27, 2025
498ec93
rm warnings when downloading data inside env (#104)
cvanelteren Feb 27, 2025
8b2cc1a
prod: only build ultraplot when ultraplot src changes (#106)
cvanelteren Feb 27, 2025
339f6d6
Gitignore baseline (#109)
cvanelteren Feb 28, 2025
2327071
add unittest and fix (#108)
cvanelteren Feb 28, 2025
e08df1f
Update dependencies and ensure docs build on latest ipython (#114)
cvanelteren Mar 2, 2025
7548756
rm ref semver (#112)
cvanelteren Mar 2, 2025
58ec33d
Only store failed tests mpl-pytest (#113)
cvanelteren Mar 2, 2025
a8e4761
fix: matrix test for no changes is running when it should not be (#115)
beckermr Mar 2, 2025
767cab5
prod: add me to maintainers (#117)
beckermr Mar 6, 2025
47300f2
prod: only use readthedocs for PR tests (#118)
beckermr Mar 6, 2025
e84f9e8
feat: enable test coverage with codecov (#121)
beckermr Mar 8, 2025
552ca33
feat: dynamically build what's new (#122)
cvanelteren Mar 9, 2025
27cebca
rm extra == line (#123)
cvanelteren Mar 9, 2025
fbd079a
bugfix for Axes.legend when certain keywords are set to str (#124)
syrte Mar 15, 2025
f38bc7b
reduce verbosity of extension (#127)
cvanelteren Mar 16, 2025
c1b955a
Add add ticks to GeoAxes (#126)
cvanelteren Mar 20, 2025
8670ed6
Update intersphinx links (#128)
cvanelteren Mar 21, 2025
92257bc
Update geo doc (#129)
cvanelteren Mar 21, 2025
a17be1c
Hotfix update geo doc (#130)
cvanelteren Mar 21, 2025
19dd08a
New site, who dis? (#132)
cvanelteren Mar 24, 2025
3af0bfa
Add about page (#133)
cvanelteren Mar 24, 2025
502202a
make it mobile friendly (#134)
cvanelteren Mar 24, 2025
b4a4cc3
Add gallery to github page (#140)
cvanelteren Apr 6, 2025
9d06e26
Fix readme (#142)
cvanelteren Apr 6, 2025
cbdfc68
Fix readme fixed sizes (#143)
cvanelteren Apr 6, 2025
8089edb
added page for errors (#141)
cvanelteren Apr 6, 2025
301e7ad
Bump dawidd6/action-download-artifact from 2 to 6 in /.github/workflo…
dependabot[bot] Apr 6, 2025
55d0cb1
Update archive-pytest-results.yml
beckermr Apr 6, 2025
2d33af8
fix: checkout from correct fork (#145)
beckermr Apr 6, 2025
29d4822
fix: allow forks
beckermr Apr 6, 2025
81c2c41
fix: directly use run id for workflow
beckermr Apr 6, 2025
1948c4b
fix: use force add due to gitignore
beckermr Apr 6, 2025
f888dde
Set seed prior to test to ensure fidelity (#148)
cvanelteren Apr 8, 2025
7518da8
Move warning inside pytest config (#151)
cvanelteren Apr 9, 2025
71bfd57
Fix scaler parsing (#153)
cvanelteren Apr 9, 2025
fe1183d
Update site logo (#154)
cvanelteren Apr 9, 2025
8852174
Fix minor grid showing on cbar (#150)
cvanelteren Apr 9, 2025
46efef6
Add option to place abc indicator outside the axis bbox (#139)
cvanelteren Apr 11, 2025
caa2391
Add unitests for ultraplot.internals.fonts (#156)
cvanelteren Apr 12, 2025
98ec600
Minor refactor of unittests (#157)
cvanelteren Apr 12, 2025
a626970
rm archive
cvanelteren Apr 13, 2025
670739e
make anchor_mode default
cvanelteren Apr 16, 2025
bf7211f
Revert "make anchor_mode default"
cvanelteren Apr 16, 2025
24a1eee
Make anchor_mode default (#161)
cvanelteren Apr 16, 2025
a2cb2bd
Gracefully exit context if cannot set key (#164)
cvanelteren Apr 18, 2025
025a4f7
allow subfigure formatting (#167)
cvanelteren Apr 22, 2025
bc53419
make cbar labelloc possible for all direction (#165)
cvanelteren Apr 22, 2025
dd5a951
add pyarrow to rm pandas error (#171)
cvanelteren Apr 22, 2025
64e2069
Update css (#170)
cvanelteren Apr 22, 2025
8d7f228
mv toc to left (#172)
cvanelteren Apr 24, 2025
f67ba1d
surpress warnings on action (#174)
cvanelteren Apr 25, 2025
59a46b9
surpress warnings on action
cvanelteren Apr 25, 2025
9d11df4
separate logger for ultraplot and matplotlib (#178)
cvanelteren Apr 25, 2025
838251b
Capture warning (#180)
cvanelteren Apr 25, 2025
6be152a
tmp turning of test (#183)
cvanelteren Apr 25, 2025
821eadc
Skip missing tests if added in PR (#175)
cvanelteren Apr 25, 2025
d0675cd
Revert "Skip missing tests if added in PR (#175)" (#184)
beckermr Apr 25, 2025
a86d6d4
Rm conftest from codecov (#187)
cvanelteren Apr 25, 2025
683fc0b
skip tests properly (#186)
cvanelteren Apr 26, 2025
48aaabc
Fix colorbar loc (#182)
cvanelteren Apr 26, 2025
9ebe9d4
Fix bar alpha (#192)
cvanelteren Apr 27, 2025
22cbfb4
Make import uplt to be consistent with rest of repo (#195)
cvanelteren Apr 27, 2025
860b2c6
Ensure that shared labels are consistently updated. (#177)
cvanelteren Apr 28, 2025
c6ee712
sensible defaults and unittest (#189)
cvanelteren Apr 28, 2025
d911cd4
Deprecation fix mpl 3.10 and beyond (#69)
cvanelteren Apr 28, 2025
f5510d5
Add network plotting to UltraPlot (#169)
cvanelteren Apr 29, 2025
9a9eb72
Hotfix test (#196)
cvanelteren Apr 29, 2025
89205de
Discrete colors for quiver (#198)
cvanelteren Apr 29, 2025
0b94056
correct url for basemap objects (#202)
cvanelteren Apr 30, 2025
4072c76
override logx/y/log with updated docstring (#203)
cvanelteren May 1, 2025
aa44035
Add lollipop graph (#194)
cvanelteren May 4, 2025
4f78a79
Fix intersphinx links and refs to docs for networkx (#205)
cvanelteren May 4, 2025
b18b5c4
Avoid getting edges and setting centers for some shaders (#208)
cvanelteren May 8, 2025
dd89675
Fix some references for inset docs (#209)
cvanelteren May 10, 2025
ce842a8
rm dep warning (#210)
cvanelteren May 11, 2025
8b22df2
[Feature add] Share Axes in GeoPlot + bug fixes (#159)
cvanelteren May 11, 2025
60f100d
fix: specify import exception type and add typing-extensions to deps …
beckermr May 12, 2025
618e1c5
perf: run comparison tests in parallel (#213)
beckermr May 13, 2025
8e147a1
fix cycler setting to 1 when only 1 column is parsed (#218)
cvanelteren May 16, 2025
7a0a4b7
Skip sharing logic when colorbar is added to GeoPlots. (#219)
cvanelteren May 16, 2025
9bbf9f1
Restore redirection for tricontourf for GeoPlotting (#222)
cvanelteren May 16, 2025
bfe47c5
fix docs visuals (#223)
cvanelteren May 17, 2025
d413ad4
Allow rasterization on GeoFeatures. (#220)
cvanelteren May 17, 2025
ce6754e
more fixes (#224)
cvanelteren May 19, 2025
93b1271
Colormap docs fixes
cvanelteren May 19, 2025
bbf2e3a
Cartesian docs links fixed (#226)
cvanelteren May 21, 2025
a4b7979
minor fix for mpl3.10 (#229)
cvanelteren May 22, 2025
5240fec
Adjust the ticks to center on 'nice' values (#228)
cvanelteren May 23, 2025
afae3d1
rm unnecessary show in test_center_labels_colormesh_data_type(#241)
cvanelteren May 30, 2025
103517d
Feat bar labels (#240)
cvanelteren May 30, 2025
91a084c
Fix links for 1d plots in docs (#242)
cvanelteren May 31, 2025
b9ff267
Deprecate basemap (#243)
cvanelteren Jun 1, 2025
1a05b0e
Hotfix get_border_axes (#236)
cvanelteren Jun 2, 2025
e5a8ee2
Hotfix panel (#238)
cvanelteren Jun 3, 2025
2520034
hotfix (#246)
cvanelteren Jun 4, 2025
ef66d20
Hotfix GeoAxes indicate zoom. (#249)
cvanelteren Jun 5, 2025
b5405b4
Feature: Beeswarm plot (#251)
cvanelteren Jun 10, 2025
8d1689d
GeoTicks not responsive (#253)
cvanelteren Jun 10, 2025
1b9e475
add top level ignores for local testing (#255)
cvanelteren Jun 12, 2025
abc11ba
Update .gitignore (#257)
cvanelteren Jun 12, 2025
7e49be9
Refactor beeswarm (#254)
cvanelteren Jun 12, 2025
b825849
Fix unused parameters being passed to pie chart (#260)
cvanelteren Jun 14, 2025
3db1449
Update return statements of tests to be compliant with pytest 8.4.0 (…
cvanelteren Jun 16, 2025
5a48107
Bump python to 3.13 (#264)
cvanelteren Jun 16, 2025
789bf3b
Update matplotlib to mpl 3.10 (#263)
cvanelteren Jun 16, 2025
54591c1
fix test_graph_edges_kw and test_quiver_discrete_colors (#267)
cvanelteren Jun 17, 2025
cdf82ef
set rng per test (#268)
cvanelteren Jun 17, 2025
6decf39
Add xdist to image compare (#266)
cvanelteren Jun 18, 2025
553ef6e
Fix issue where view is reset on setting ticklen (#272)
cvanelteren Jun 19, 2025
0215ace
Racing condition xdist fix (#273)
cvanelteren Jun 19, 2025
12f7b87
replace spring with forceatlas2 (#275)
cvanelteren Jun 19, 2025
3bb696d
Revert xdist addition (#277)
cvanelteren Jun 20, 2025
2fd2a70
fix: pass layout_kw in network test function (#278)
beckermr Jun 20, 2025
b6e96b4
fix: this one needs a seed too (#279)
beckermr Jun 20, 2025
1887673
rm paren decorator on network test(#280)
cvanelteren Jun 20, 2025
b56ca6a
Add citation metadata (CITATION.cff, .zenodo.json) to support scholar…
cvanelteren Jun 24, 2025
117f06b
Update README.rst
cvanelteren Jun 24, 2025
38d0dbe
Add doi badge to readme
cvanelteren Jun 24, 2025
2e4cdaa
add zenodo link to citation.cff
cvanelteren Jun 24, 2025
887c9e9
Update CITATON.cff (#286)
cvanelteren Jun 24, 2025
17ff712
rn file
cvanelteren Jun 24, 2025
8e7313b
rn file
cvanelteren Jun 24, 2025
1424358
Update README.rst (#287)
cvanelteren Jun 24, 2025
e0218f3
Mv dynamic function to the subplotgrid (#281)
cvanelteren Jun 25, 2025
c53b8ce
add downloads badge to README.rst (#290)
cvanelteren Jun 28, 2025
2ea0feb
replace color to orange (#291)
cvanelteren Jun 28, 2025
1d71642
Hotfix add all locations to colorbar label (#295)
cvanelteren Jun 29, 2025
b21c21e
Fix DMS not set on some projections (#293)
cvanelteren Jun 30, 2025
37c1432
Bump mamba-org/setup-micromamba in the github-actions group (#299)
dependabot[bot] Jul 1, 2025
b9a6289
fix late binding and proper reversal for funcs (#296)
cvanelteren Jul 2, 2025
2ca1e2b
Feat vert inset cbars (#301)
cvanelteren Jul 3, 2025
e43df1d
Refactor colorbar loc handling (#304)
cvanelteren Jul 30, 2025
2a3512b
update base to use plegend
cvanelteren Aug 1, 2025
4121a1e
Revert "update base to use plegend"
cvanelteren Aug 1, 2025
ff91841
Sync `_legend_dict` on legend location change (#310)
cvanelteren Aug 2, 2025
b79d322
fix color being parsed for none (#312)
cvanelteren Aug 3, 2025
4ed2539
Update axis sharing to allow for top and right sharing.
cvanelteren Aug 5, 2025
aaedff6
Fix edge case where vcenter is not properly set for diverging norms (…
cvanelteren Aug 7, 2025
e2a6a7f
update logic (#315)
cvanelteren Aug 8, 2025
147d68b
Handle non homogeneous arrays (#318)
cvanelteren Aug 11, 2025
f466757
Update Cartopy references (#322)
rcomer Aug 17, 2025
a5e48de
Fix inhomogeneous violin test (#323)
rcomer Aug 17, 2025
e6b7cbc
Fix issue where double decorator does not parse function name (#320)
cvanelteren Aug 18, 2025
ff93437
Fix edgecolor not set on scatter plots with single-row DataFrame data…
Copilot Aug 24, 2025
54b3163
Add suptitle_kw alignment support to UltraPlot (#327)
Copilot Aug 24, 2025
2dd9428
Update Documentation for `abc` Parameter in Subplots and Format Comma…
cvanelteren Aug 25, 2025
e685d52
Fix subplots docs (#330)
cvanelteren Aug 26, 2025
1f227e6
Add members to api (#332)
cvanelteren Aug 26, 2025
9a6baad
rm show from tests (#335)
cvanelteren Aug 27, 2025
29d7227
Revert "Fix edge case where vcenter is not properly set for diverging…
beckermr Aug 27, 2025
3bb4861
Bump the github-actions group with 2 updates (#339)
dependabot[bot] Sep 1, 2025
a619ffd
Extra tests for geobackends (#334)
cvanelteren Sep 5, 2025
fe6e5d4
Fix some links for docs (#341)
cvanelteren Sep 6, 2025
8001535
Fix links docs (#342)
cvanelteren Sep 6, 2025
2311a52
Lazy loading colormaps (#343)
cvanelteren Sep 9, 2025
1c79cfb
Set warning level for mpl to error (#350)
cvanelteren Sep 16, 2025
5fddd32
sanitize and add tests (#346)
cvanelteren Sep 19, 2025
0c06164
Fix order of label transfer (#353)
cvanelteren Sep 29, 2025
da81e1b
Bump the github-actions group with 2 updates (#354)
dependabot[bot] Oct 1, 2025
8f560d8
Add cftime support for non-standard calendars (#344)
cvanelteren Oct 5, 2025
5ab153e
rm debug prints
cvanelteren Oct 5, 2025
7827552
Add unittests for AutoFormatting (#360)
cvanelteren Oct 5, 2025
580b685
[pre-commit.ci] pre-commit autoupdate (#362)
pre-commit-ci[bot] Oct 6, 2025
9cc88a7
Fix: Corrects `SubplotGrid` indexing and sequential `GeoAxes` format…
cvanelteren Oct 8, 2025
d514aa1
Fix circular import rc setting (#365)
cvanelteren Oct 8, 2025
27c2883
Add `curved_quiver` — Curved Vector Field Arrows for 2D Plots (#361)
cvanelteren Oct 13, 2025
cb8da22
Add Colormap parsing to curved-quiver (#369)
cvanelteren Oct 13, 2025
aa58701
Allow non-rectangular grids to use side labels (#376)
cvanelteren Oct 23, 2025
40c3c6f
Test/update label sharing tests (#372)
cvanelteren Oct 25, 2025
e329bbb
Add version checker for UltraPlot (#377)
cvanelteren Oct 25, 2025
836cf41
Feature: allow cycle objects to be set on rc (#378)
cvanelteren Oct 25, 2025
571817a
Add unittest for demos (#386)
cvanelteren Oct 27, 2025
a65d1d9
rm debug comments
cvanelteren Oct 28, 2025
7409ad8
increase timeout limit (#388)
cvanelteren Oct 28, 2025
dd452c2
bump to 60 minutes (#389)
cvanelteren Oct 28, 2025
ca14892
skip test_demos on gha (#391)
cvanelteren Oct 29, 2025
230c9dd
Hotfix: minor update in sharing logic (#387)
cvanelteren Oct 29, 2025
58de687
Housekeeping for `ultraplot-build.yml` (#390)
cvanelteren Oct 29, 2025
2a97153
Feature: Allow multi-span colorbars (#394)
cvanelteren Oct 31, 2025
0146afd
Bump the github-actions group with 2 updates (#398)
dependabot[bot] Nov 1, 2025
02c4aaf
add s and unittest (#400)
cvanelteren Nov 2, 2025
fc156f0
redo with new ticker (#411)
cvanelteren Nov 16, 2025
08235b1
Hotfix: bar labels cause limit to reset for unaffected axis. (#413)
cvanelteren Nov 18, 2025
55d3d67
fix: change default `reduce_C_function` to `np.sum` for `hexbin` (#408)
beckermr Nov 19, 2025
63cf012
Add external context mode for axes (#406)
cvanelteren Nov 20, 2025
f20ce02
Bump actions/checkout from 5 to 6 in the github-actions group (#415)
dependabot[bot] Dec 1, 2025
e985cf9
[pre-commit.ci] pre-commit autoupdate (#416)
pre-commit-ci[bot] Dec 1, 2025
db97f5c
Add placement of legend to axes within a figure (#418)
cvanelteren Dec 7, 2025
4964ee7
There's a typo about zerotrim in doc. (#420)
gepcel Dec 8, 2025
c44ed69
Fix references in documentation for clarity (#421)
gepcel Dec 10, 2025
59ea30a
fix links to apply_norm (#423)
cvanelteren Dec 11, 2025
50f1cda
[Feature] add lon lat labelrotation (#426)
cvanelteren Dec 12, 2025
6b15deb
fix boundary check for ticks
cvanelteren Dec 13, 2025
c3bad07
Revert "fix boundary check for ticks"
cvanelteren Dec 13, 2025
0b75029
Add kiwisolver-based constraint layout for non-orthogonal subplot arr…
cvanelteren Dec 14, 2025
fb8e80f
Rebrand to UltraLayout - rename kiwi_layout to ultralayout and update…
cvanelteren Dec 14, 2025
bc17105
Remove example files and add proper tests under ultraplot/tests
cvanelteren Dec 14, 2025
0682f39
Merge branch 'main' into novo-layout
cvanelteren Dec 14, 2025
e4e8471
Fix: Boundary labels now visible when setting lonlim/latlim (#429)
cvanelteren Dec 15, 2025
4af84bc
Add Copernicus Publications figure standard widths. (#433)
Holmgren825 Dec 16, 2025
06551f6
Fix unequal slicing for Gridspec (#435)
cvanelteren Dec 17, 2025
03848e4
Fix GeoAxes panel alignment with aspect-constrained projections (#432)
cvanelteren Dec 29, 2025
0443eac
Bump the github-actions group with 2 updates (#444)
dependabot[bot] Jan 1, 2026
13664bd
Fix dualx alignment on log axes (#443)
cvanelteren Jan 4, 2026
c88c98a
Subset label sharing and implicit slice labels for axis groups (#440)
cvanelteren Jan 4, 2026
2dd5065
Preserve log formatter when setting log scales (#437)
cvanelteren Jan 4, 2026
d60a25c
added inference of labels for spanning legends (#447)
cvanelteren Jan 4, 2026
1aea20a
[pre-commit.ci] pre-commit autoupdate (#449)
pre-commit-ci[bot] Jan 5, 2026
9380f4b
Avoid title overlap with abc labels (#442)
cvanelteren Jan 7, 2026
5cc177c
stash
cvanelteren Jan 8, 2026
c54275b
Stabilize UltraLayout panels and colorbar placement
cvanelteren Jan 8, 2026
3da0f66
Guard abc/title width calc when text detached (#452)
cvanelteren Jan 9, 2026
3ebd474
Merge branch 'main' into novo-layout
cvanelteren Jan 10, 2026
eda5fe4
dump
cvanelteren Jan 10, 2026
dffc29a
Fix auto layout sizing and panel stacking
cvanelteren Jan 11, 2026
836e4ae
Compat: soften subplot param probes for backends
cvanelteren Jan 11, 2026
0bbb887
Cleanup ultralayout unused code and export grid positions
cvanelteren Jan 11, 2026
cc20930
Remove unused ultralayout placeholders
cvanelteren Jan 11, 2026
167011b
Silence unused shape vars in ultralayout orthogonal check
cvanelteren Jan 11, 2026
31a2f4c
Remove dead aesthetic constraint hooks in ultralayout
cvanelteren Jan 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!-- Thanks for helping us make ultraplot a better package! If this is a bug report, please use the template provided below. If this is a feature request, you can delete the template text (just try to be descriptive with your request). -->

### Description

[Description of the bug or feature.]

### Steps to reproduce

A "[Minimal, Complete and Verifiable Example](http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports)" will make it much easier for maintainers to help you.

```python
# your code here
# we should be able to copy-paste this into python and exactly reproduce your bug
```

**Expected behavior**: [What you expected to happen]

**Actual behavior**: [What actually happened]

### Equivalent steps in matplotlib

Please try to make sure this bug is related to a ultra-specific feature. If you're not sure, try to replicate it with the [native matplotlib API](https://matplotlib.org/3.1.1/api/index.html). Matplotlib bugs belong on the [matplotlib github page](https://github.com/matplotlib/matplotlib).

```python
# your code here, if applicable
import matplotlib.pyplot as plt
```

### Ultra version

Paste the results of `import matplotlib; print(matplotlib.__version__); import ultra; print(ultra.version)` here.
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
groups:
github-actions:
patterns:
- '*'
104 changes: 104 additions & 0 deletions .github/workflows/build-ultraplot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: Build and Test
on:
workflow_call:
inputs:
python-version:
required: true
type: string
matplotlib-version:
required: true
type: string

env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8

jobs:
build-ultraplot:
name: Test Python ${{ inputs.python-version }} with MPL ${{ inputs.matplotlib-version }}
runs-on: ubuntu-latest
timeout-minutes: 60
defaults:
run:
shell: bash -el {0}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- uses: mamba-org/[email protected]
with:
environment-file: ./environment.yml
init-shell: bash
create-args: >-
--verbose
python=${{ inputs.python-version }}
matplotlib=${{ inputs.matplotlib-version }}
cache-environment: true
cache-downloads: false

- name: Build Ultraplot
run: |
pip install --no-build-isolation --no-deps .

- name: Test Ultraplot
run: |
pytest --cov=ultraplot --cov-branch --cov-report term-missing --cov-report=xml ultraplot

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: Ultraplot/ultraplot

compare-baseline:
name: Compare baseline Python ${{ inputs.python-version }} with MPL ${{ inputs.matplotlib-version }}
runs-on: ubuntu-latest
defaults:
run:
shell: bash -el {0}
steps:
- uses: actions/checkout@v6

- uses: mamba-org/[email protected]
with:
environment-file: ./environment.yml
init-shell: bash
create-args: >-
--verbose
python=${{ inputs.python-version }}
matplotlib=${{ inputs.matplotlib-version }}
cache-environment: true
cache-downloads: false

- name: Generate baseline from main
run: |
mkdir -p baseline
git fetch origin ${{ github.event.pull_request.base.sha }}
git checkout ${{ github.event.pull_request.base.sha }}
python -c "import ultraplot as plt; plt.config.Configurator()._save_yaml('ultraplot.yml')"
pytest -W ignore \
--mpl-generate-path=./baseline/ \
--mpl-default-style="./ultraplot.yml"\
ultraplot/tests
git checkout ${{ github.sha }} # Return to PR branch

- name: Image Comparison Ultraplot
run: |
mkdir -p results
python -c "import ultraplot as plt; plt.config.Configurator()._save_yaml('ultraplot.yml')"
pytest -W ignore \
--mpl \
--mpl-baseline-path=./baseline/ \
--mpl-results-path=./results/ \
--mpl-generate-summary=html \
--mpl-default-style="./ultraplot.yml" \
ultraplot/tests

# Return the html output of the comparison even if failed
- name: Upload comparison failures
if: always()
uses: actions/upload-artifact@v6
with:
name: failed-comparisons-${{ inputs.python-version }}-${{ inputs.matplotlib-version }}-${{ github.sha }}
path: results/*
155 changes: 155 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
name: Matrix Test
on:
push:
branches: [main, devel]
pull_request:
branches: [main, devel]

jobs:
run-if-changes:
runs-on: ubuntu-latest
outputs:
run: ${{ (github.event_name == 'push' && github.ref_name == 'main') && 'true' || steps.filter.outputs.python }}
steps:
- uses: actions/checkout@v6
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
python:
- 'ultraplot/**'

get-versions:
runs-on: ubuntu-latest
needs:
- run-if-changes
if: always() && needs.run-if-changes.outputs.run == 'true'
outputs:
python-versions: ${{ steps.set-versions.outputs.python-versions }}
matplotlib-versions: ${{ steps.set-versions.outputs.matplotlib-versions }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- uses: actions/setup-python@v6
with:
python-version: "3.11"

- name: Install dependencies
run: pip install tomli

- id: set-versions
run: |
# Create a Python script to read and parse versions
cat > get_versions.py << 'EOF'
import tomli
import re
import json

# Read pyproject.toml
with open("pyproject.toml", "rb") as f:
data = tomli.load(f)

# Get Python version requirement
python_req = data["project"]["requires-python"]

# Parse min and max versions
min_version = re.search(r">=(\d+\.\d+)", python_req)
max_version = re.search(r"<(\d+\.\d+)", python_req)

python_versions = []
if min_version and max_version:
# Convert version strings to tuples
min_v = tuple(map(int, min_version.group(1).split(".")))
max_v = tuple(map(int, max_version.group(1).split(".")))

# Generate version list
current = min_v
while current < max_v:
python_versions.append(".".join(map(str, current)))
current = (current[0], current[1] + 1)


# parse MPL versions
mpl_req = None
for d in data["project"]["dependencies"]:
if d.startswith("matplotlib"):
mpl_req = d
break
assert mpl_req is not None, "matplotlib version not found in dependencies"
min_version = re.search(r">=(\d+\.\d+)", mpl_req)
max_version = re.search(r"<(\d+\.\d+)", mpl_req)

mpl_versions = []
if min_version and max_version:
# Convert version strings to tuples
min_v = tuple(map(int, min_version.group(1).split(".")))
max_v = tuple(map(int, max_version.group(1).split(".")))

# Generate version list
current = min_v
while current < max_v:
mpl_versions.append(".".join(map(str, current)))
current = (current[0], current[1] + 1)

# If no versions found, default to 3.9
if not mpl_versions:
mpl_versions = ["3.9"]

# Create output dictionary
output = {
"python_versions": python_versions,
"matplotlib_versions": mpl_versions
}

# Print as JSON
print(json.dumps(output))
EOF

# Run the script and capture output
OUTPUT=$(python3 get_versions.py)
PYTHON_VERSIONS=$(echo $OUTPUT | jq -r '.python_versions')
MPL_VERSIONS=$(echo $OUTPUT | jq -r '.matplotlib_versions')

echo "Detected Python versions: ${PYTHON_VERSIONS}"
echo "Detected Matplotlib versions: ${MPL_VERSIONS}"
echo "python-versions=$(echo $PYTHON_VERSIONS | jq -c)" >> $GITHUB_OUTPUT
echo "matplotlib-versions=$(echo $MPL_VERSIONS | jq -c)" >> $GITHUB_OUTPUT

build:
needs:
- get-versions
- run-if-changes
if: always() && needs.run-if-changes.outputs.run == 'true' && needs.get-versions.result == 'success'
strategy:
matrix:
python-version: ${{ fromJson(needs.get-versions.outputs.python-versions) }}
matplotlib-version: ${{ fromJson(needs.get-versions.outputs.matplotlib-versions) }}
fail-fast: false
uses: ./.github/workflows/build-ultraplot.yml
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.python-version }}-${{ matrix.matplotlib-version }}
cancel-in-progress: true
with:
python-version: ${{ matrix.python-version }}
matplotlib-version: ${{ matrix.matplotlib-version }}

build-success:
needs:
- build
- run-if-changes
if: always()
runs-on: ubuntu-latest
steps:
- run: |
if [[ '${{ needs.run-if-changes.outputs.run }}' == 'false' ]]; then
echo "No changes detected, tests skipped."
else
if [[ '${{ needs.build.result }}' == 'success' ]]; then
echo "All tests passed successfully!"
else
echo "Tests failed!"
exit 1
fi
fi
Loading