MakieOrg / Makie.jl

Interactive data visualizations and plotting in Julia
https://docs.makie.org/stable
MIT License
2.36k stars 301 forks source link

`limits!` hangs when being passed a an indexed Figure, not an Axis #3564

Closed vandenman closed 7 months ago

vandenman commented 7 months ago

This works as intended

using CairoMakie
fig = Figure()
ax = Axis(fig[1, 1])
scatter!(ax, randn(10), randn(10))
limits!(ax, -100, 100, -100, 100)
fig

Now change the line limits!(ax, -100, 100, -100, 100) to the (incorrect) limits!(fig[1, 1], -100, 100, -100, 100), so:

using CairoMakie
fig = Figure()
ax = Axis(fig[1, 1])
scatter!(ax, randn(10), randn(10))
limits!(fig[1, 1], -100, 100, -100, 100)
fig

and now Julia hangs/ freezes. When this occurs I cannot interrupt it in vscode (which is an issue for the developers of Julia itself I guess) so I have to kill and restart the session.

Desired behavior: an error.

versioninfo() ```julia julia> versioninfo() Julia Version 1.10.0 Commit 3120989f39b (2023-12-25 18:01 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) CPU: 16 × Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz WORD_SIZE: 64 LIBM: libopenlibm LLVM: libLLVM-15.0.7 (ORCJIT, skylake) Threads: 23 on 16 virtual cores Environment: JULIA_EDITOR = code ```
Manifest.toml ```julia (limits_makie) pkg> st -m Status `~/hdd/surfdrive/Postdoc/bugs/limits_makie/Manifest.toml` [621f4979] AbstractFFTs v1.5.0 [398f06c4] AbstractLattices v0.3.0 [1520ce14] AbstractTrees v0.4.4 [79e6a3ab] Adapt v4.0.1 [27a7e980] Animations v0.4.1 [4fba245c] ArrayInterface v7.7.0 [67c07d97] Automa v1.0.3 [13072b0f] AxisAlgorithms v1.1.0 [39de3d68] AxisArrays v0.4.7 [fa961155] CEnum v0.5.0 [96374032] CRlibm v1.0.1 [159f3aea] Cairo v1.0.5 [13f3f980] CairoMakie v0.11.5 [49dc2e85] Calculus v0.5.1 [d360d2e6] ChainRulesCore v1.19.1 [a2cac450] ColorBrewer v0.4.0 [35d6a980] ColorSchemes v3.24.0 [3da002f7] ColorTypes v0.11.4 [c3611d14] ColorVectorSpace v0.10.0 [5ae59095] Colors v0.12.10 [861a8166] Combinatorics v1.0.2 [bbf7d656] CommonSubexpressions v0.3.0 [34da2185] Compat v4.12.0 [187b0558] ConstructionBase v1.5.4 [d38c429a] Contour v0.6.2 [9a962f9c] DataAPI v1.16.0 [864edb3b] DataStructures v0.18.16 [e2d170a0] DataValueInterfaces v1.0.0 [927a84f5] DelaunayTriangulation v0.8.11 [163ba53b] DiffResults v1.1.0 [b552c78f] DiffRules v1.15.1 [31c24e10] Distributions v0.25.107 [ffbed154] DocStringExtensions v0.9.3 [fa6b7ba4] DualNumbers v0.6.8 [4e289a0a] EnumX v1.0.4 [429591f6] ExactPredicates v2.2.7 [411431e0] Extents v0.1.2 [7a1cc6ca] FFTW v1.8.0 [5789e2e9] FileIO v1.16.2 [8fc22ac5] FilePaths v0.8.3 [48062228] FilePathsBase v0.9.21 [1a297f60] FillArrays v1.9.3 [6a86dc24] FiniteDiff v2.22.0 [53c48c17] FixedPointNumbers v0.8.4 [59287772] Formatting v0.4.2 [f6369f11] ForwardDiff v0.10.36 [b38be410] FreeType v4.1.1 [663a7486] FreeTypeAbstraction v0.10.1 [46192b85] GPUArraysCore v0.1.6 [cf35fbd7] GeoInterface v1.3.3 [5c1252a2] GeometryBasics v0.4.9 [a2bd30eb] Graphics v1.1.2 [3955a311] GridLayoutBase v0.10.0 [42e2da0e] Grisu v1.0.2 [34004b35] HypergeometricFunctions v0.3.23 [2803e5a7] ImageAxes v0.6.11 [c817782e] ImageBase v0.1.7 [a09fc81d] ImageCore v0.10.1 [82e4d734] ImageIO v0.6.7 [bc367c6b] ImageMetadata v0.9.9 [9b13fd28] IndirectArrays v1.0.0 [d25df0c9] Inflate v0.1.4 [18e54dd8] IntegerMathUtils v0.1.2 [a98d9a8b] Interpolations v0.15.1 [d1acc4aa] IntervalArithmetic v0.22.5 [8197267c] IntervalSets v0.7.8 [92d709cd] IrrationalConstants v0.2.2 [f1662d9f] Isoband v0.1.1 [c8e1da08] IterTools v1.10.0 [82899510] IteratorInterfaceExtensions v1.0.0 [692b3bcd] JLLWrappers v1.5.0 [682c06a0] JSON v0.21.4 [b835a17e] JpegTurbo v0.1.5 [5ab0869b] KernelDensity v0.6.8 [b964fa9f] LaTeXStrings v1.3.1 [8cdb02fc] LazyModules v0.3.1 [9c8b4983] LightXML v0.9.1 [d3d80556] LineSearches v7.2.0 [9b3f67b0] LinearAlgebraX v0.2.7 [2ab3a3ac] LogExpFunctions v0.3.26 [1914dd2f] MacroTools v0.5.13 [ee78f7c6] Makie v0.20.4 [20f20a25] MakieCore v0.7.2 [dbb5928d] MappedArrays v0.4.2 [0a4f8689] MathTeXEngine v0.5.7 [e1d29d7a] Missings v1.1.0 [7475f97c] Mods v2.2.4 [e94cdb99] MosaicViews v0.3.4 [3b2b4ff1] Multisets v0.4.4 [d41bc354] NLSolversBase v7.8.3 [77ba4419] NaNMath v1.0.2 [f09324ee] Netpbm v1.1.1 [510215fc] Observables v0.5.5 [6fe1bfb0] OffsetArrays v1.13.0 [52e1d378] OpenEXR v0.3.2 [429524aa] Optim v1.7.8 [bac558e1] OrderedCollections v1.6.3 [90014a1f] PDMats v0.11.31 [f57f5aa1] PNGFiles v0.4.3 [19eb6ba3] Packing v0.5.0 [5432bcbf] PaddedViews v0.5.12 [d96e819e] Parameters v0.12.3 [69de0a69] Parsers v2.8.1 [2ae35dd2] Permutations v0.4.20 [3bbf5609] PikaParser v0.6.1 [eebad327] PkgVersion v0.3.3 [995b91a9] PlotUtils v1.4.0 [647866c9] PolygonOps v0.1.2 [f27b6e38] Polynomials v4.0.6 [85a6dd25] PositiveFactorizations v0.2.4 [aea7be01] PrecompileTools v1.2.0 [21216c6a] Preferences v1.4.1 [27ebfcd6] Primes v0.5.5 [92933f4c] ProgressMeter v1.9.0 [4b34888f] QOI v1.0.0 [1fd47b50] QuadGK v2.9.4 [b3c3ace0] RangeArrays v0.3.2 [c84ed2f1] Ratios v0.4.5 [3cdcf5f2] RecipesBase v1.3.4 [189a3867] Reexport v1.2.2 [05181044] RelocatableFolders v1.0.1 [ae029012] Requires v1.3.0 [286e9d63] RingLists v0.2.8 [79098fc4] Rmath v0.7.1 [5eaf0fd0] RoundingEmulator v0.2.1 [6c6a2e73] Scratch v1.2.1 [efcf1570] Setfield v1.1.1 [65257c39] ShaderAbstractions v0.4.0 [992d4aef] Showoff v1.0.3 [73760f76] SignedDistanceFields v0.4.0 [55797a34] SimpleGraphs v0.8.6 [ec83eff0] SimplePartitions v0.3.1 [cc47b68c] SimplePolynomials v0.2.17 [a6525b86] SimpleRandom v0.3.1 [699a6c99] SimpleTraits v0.9.4 [45858cf5] Sixel v0.1.3 [a2af1166] SortingAlgorithms v1.2.1 [276daf66] SpecialFunctions v2.3.1 [c5dd0088] StableHashTraits v1.1.6 [cae243ae] StackViews v0.1.1 [90137ffa] StaticArrays v1.9.1 [1e83bf80] StaticArraysCore v1.4.2 [82ae8749] StatsAPI v1.7.0 [2913bbd2] StatsBase v0.34.2 [4c63d2b9] StatsFuns v1.3.0 [09ab397b] StructArrays v0.6.17 [3783bdb8] TableTraits v1.0.1 [bd369af6] Tables v1.11.1 [62fd8b95] TensorCore v0.1.1 ⌅ [731e570b] TiffImages v0.6.8 [3bb67fe8] TranscodingStreams v0.10.2 [981d1d27] TriplotBase v0.1.0 [9d95972d] TupleTools v1.4.3 [3a884ed6] UnPack v1.0.2 [1cfade01] UnicodeFun v0.4.1 [efce3f68] WoodburyMatrices v1.0.0 [6e34b625] Bzip2_jll v1.0.8+1 [4e9b3aee] CRlibm_jll v1.0.1+0 [83423d85] Cairo_jll v1.16.1+1 [5ae413db] EarCut_jll v2.2.4+0 [2e619515] Expat_jll v2.5.0+0 [b22a6f82] FFMPEG_jll v4.4.4+1 [f5851436] FFTW_jll v3.3.10+0 [a3f928ae] Fontconfig_jll v2.13.93+0 [d7e528f0] FreeType2_jll v2.13.1+0 [559328eb] FriBidi_jll v1.0.10+0 [78b55507] Gettext_jll v0.21.0+0 [7746bdde] Glib_jll v2.76.5+0 [3b182d85] Graphite2_jll v1.3.14+0 [2e76f6c2] HarfBuzz_jll v2.8.1+1 [905a6f67] Imath_jll v3.1.7+0 [1d5cc7b8] IntelOpenMP_jll v2024.0.2+0 [aacddb02] JpegTurbo_jll v3.0.1+0 [c1c5ebd0] LAME_jll v3.100.1+0 [1d63c593] LLVMOpenMP_jll v15.0.7+0 [dd4b983a] LZO_jll v2.10.1+0 ⌅ [e9f186c6] Libffi_jll v3.2.2+1 [d4300ac3] Libgcrypt_jll v1.8.7+0 [7add5ba3] Libgpg_error_jll v1.42.0+0 [94ce4f54] Libiconv_jll v1.17.0+0 [4b2f31a3] Libmount_jll v2.35.0+0 [38a345b3] Libuuid_jll v2.36.0+0 [856f044c] MKL_jll v2024.0.0+0 [e7412a2a] Ogg_jll v1.3.5+1 [18a262bb] OpenEXR_jll v3.1.4+0 [458c3c95] OpenSSL_jll v3.0.12+0 [efe28fd5] OpenSpecFun_jll v0.5.5+0 [91d4177d] Opus_jll v1.3.2+0 [36c8627f] Pango_jll v1.50.14+0 [30392449] Pixman_jll v0.42.2+0 [f50d1b31] Rmath_jll v0.4.0+0 [02c8fc9c] XML2_jll v2.12.2+0 [aed1982a] XSLT_jll v1.1.34+0 [4f6342f7] Xorg_libX11_jll v1.8.6+0 [0c0b7dd1] Xorg_libXau_jll v1.0.11+0 [a3789734] Xorg_libXdmcp_jll v1.1.4+0 [1082639a] Xorg_libXext_jll v1.3.4+4 [ea2f1a96] Xorg_libXrender_jll v0.9.10+4 [14d82f49] Xorg_libpthread_stubs_jll v0.1.1+0 [c7cfdc94] Xorg_libxcb_jll v1.15.0+0 [c5fb5394] Xorg_xtrans_jll v1.5.0+0 [9a68df92] isoband_jll v0.2.3+0 [a4ae2306] libaom_jll v3.4.0+0 [0ac62f75] libass_jll v0.15.1+0 [f638f0a6] libfdk_aac_jll v2.0.2+0 [b53b4c65] libpng_jll v1.6.40+0 [075b6546] libsixel_jll v1.10.3+0 [f27f6e37] libvorbis_jll v1.3.7+1 [1270edf5] x264_jll v2021.5.5+0 [dfaa095f] x265_jll v3.5.0+0 [0dad84c5] ArgTools v1.1.1 [56f22d72] Artifacts [2a0f44e3] Base64 [8bf52ea8] CRC32c [ade2ca70] Dates [8ba89e20] Distributed [f43a241f] Downloads v1.6.0 [7b1f6079] FileWatching [9fa8497b] Future [b77e0a4c] InteractiveUtils [4af54fe1] LazyArtifacts [b27032c2] LibCURL v0.6.4 [76f85450] LibGit2 [8f399da3] Libdl [37e2e46d] LinearAlgebra [56ddb016] Logging [d6f4376e] Markdown [a63ad114] Mmap [ca575930] NetworkOptions v1.2.0 [44cfe95a] Pkg v1.10.0 [de0858da] Printf [3fa0cd96] REPL [9a3f8284] Random [ea8e919c] SHA v0.7.0 [9e88b42a] Serialization [1a1011a3] SharedArrays [6462fe0b] Sockets [2f01184e] SparseArrays v1.10.0 [10745b16] Statistics v1.10.0 [4607b0f0] SuiteSparse [fa267f1f] TOML v1.0.3 [a4e569a6] Tar v1.10.0 [8dfed614] Test [cf7118a7] UUIDs [4ec0a83e] Unicode [e66e0078] CompilerSupportLibraries_jll v1.0.5+1 [deac9b47] LibCURL_jll v8.4.0+0 [e37daf67] LibGit2_jll v1.6.4+0 [29816b5a] LibSSH2_jll v1.11.0+1 [c8ffd9c3] MbedTLS_jll v2.28.2+1 [14a3606d] MozillaCACerts_jll v2023.1.10 [4536629a] OpenBLAS_jll v0.3.23+2 [05823500] OpenLibm_jll v0.8.1+2 [efcefdf7] PCRE2_jll v10.42.0+1 [bea87d4a] SuiteSparse_jll v7.2.1+1 [83775a58] Zlib_jll v1.2.13+1 [8e850b90] libblastrampoline_jll v5.8.0+1 [8e850ede] nghttp2_jll v1.52.0+1 [3f19e933] p7zip_jll v17.4.0+2 ```
Sagnac commented 7 months ago

Looks like this method is being called in a loop: https://github.com/MakieOrg/Makie.jl/blob/5c8d07c6a48e294f1fff1ea4b8a6d27bbb10e933/src/makielayout/blocks/axis.jl#L1375-L1377 Placing a suitable restriction on args seems to do the trick:

diff --git a/src/makielayout/blocks/axis.jl b/src/makielayout/blocks/axis.jl
index 8248577fb..3d270b73a 100644
--- a/src/makielayout/blocks/axis.jl
+++ b/src/makielayout/blocks/axis.jl
@@ -1372,7 +1372,7 @@ function limits!(ax::Axis, rect::Rect2)
     Makie.ylims!(ax, ymin, ymax)
 end

-function limits!(args...)
+function limits!(args::Union{Real, HyperRectangle}...)
     limits!(current_axis(), args...)
 end
vandenman commented 7 months ago

@Sagnac That line indeed looks like the source of the problem and the proposed fix looks like it will solve it. Will you commit a fix or do you prefer if I open a PR?

Sagnac commented 7 months ago

I can prepare a PR later today or tomorrow

Sagnac commented 7 months ago

I've opened a PR with the fix. My initial solution wasn't ideal since it didn't allow for the lims to have a value of nothing so now there's an additional check on the current axis.