diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d549ff8530cc217b74cf891886ff2552d117a38..79f586e5636e5c9435ba33ab92b52470c30aee54 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,7 +73,7 @@ build dev on gitlab.pasteur.fr: --docker-password="$DOCKER_TOKEN" --docker-email=kubernetes@pasteur.fr --dry-run=client - -n "$NAMESPACE" -o yaml | kubectl apply -f - + -o yaml | kubectl apply -f - - helmfile lint - helmfile template - helmfile sync diff --git a/Project.toml b/Project.toml index 92409a387837513b5781a01d55322e3bee3853d1..c0988dd6a547e0f579a517e251b1c385ea5b8d2f 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "NyxUI" uuid = "2c32e805-e4ca-4d0f-96f6-9d2d6204339d" authors = ["François Laurent <francois.laurent@pasteur.fr>"] -version = "0.1.0" +version = "0.2.0" [deps] Bonito = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" @@ -11,14 +11,18 @@ Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e" GenieSession = "03cc5b98-4f21-4eb6-99f2-22eced81f962" JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" +LarvaTagger = "8b3b36f1-dfed-446e-8561-ea19fe966a4d" LazyArtifacts = "4af54fe1-eca0-43a8-85a7-787d91b784e3" NyxPlots = "e8b8ccdb-0776-4145-b74f-57bbbfff4409" NyxWidgets = "c288fd06-43d3-4b04-8307-797133353e2e" Observables = "510215fc-4207-5dde-b226-833fc4488ee2" +ObservationPolicies = "6317928a-6b1a-42e8-b853-b8e2fc3e9ca3" OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +PlanarLarvae = "c2615984-ef14-4d40-b148-916c85b43307" PlotlyBase = "a03496cd-edff-5a9b-9e67-9cda94a718b5" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Stipple = "4acbeb90-81a0-11ea-1966-bdaff8155998" StippleUI = "a3c5d34a-b254-4859-a8fa-b86abb7e84a3" StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +TidyObservables = "c8131bbd-73a8-4254-a42d-d5d4c5febb31" diff --git a/README.md b/README.md index bfddaa8a59120b2c8c1835ac81a578b8cd9506fc..4b6613d49b827be7f5327db4ddfc1184f91a04a3 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,12 @@ The Nyx project focuses on the neural activity and locomotion of the *Drosophila # NyxUI.jl -Web interface meant to be served at [nyx.pasteur.cloud](https://nyx.pasteur.cloud/). +Web interface meant to be served at [nyx.pasteur.cloud](https://nyx.pasteur.cloud/) (public) and [nyx.dev.pasteur.cloud](https://nyx.dev.pasteur.cloud/) (internal). -It features an app catalog, with currently a single available app: +It features an app catalog, with the following apps: -* an editor for muscular activity programs. +* an editor for muscular activity programs, +* [LarvaTagger.jl](https://gitlab.pasteur.fr/nyx/larvatagger.jl) without any automating tagging backends. ## Local installation @@ -29,3 +30,9 @@ julia --project=. routes.jl You may be asked whether to authorize ports 9284 and 9285; please give the app permission. From there, in a web browser, open http://localhost:9284/ to access the app. + +Note that the generated files can be found somewhere in directory *storage/exports*. + +The download buttons in the LarvaTagger app will not work in the web browser. +To make them work, the reverse proxy setup in the container image called *front* is required. +If you have [Podman](https://podman.io/), as an alternative to the above installation procedure, you can simply run `front/build.sh --now` and, once the container is up and running, connect to http://localhost:8080/. diff --git a/front/Containerfile b/front/Containerfile index 662262b35b6df9b4739083ca259bd3ebf8b50171..ca3adb2ca753e1ccc03e122f5601699f51eaeb6d 100644 --- a/front/Containerfile +++ b/front/Containerfile @@ -5,7 +5,10 @@ COPY . /app WORKDIR /app RUN git rev-parse --short HEAD > src/version.txt \ - && rm -rf .git public storage + && rm -rf .git public storage \ + && git clone --branch dev https://gitlab.pasteur.fr/nyx/LarvaTagger.jl /app/LarvaTagger.jl \ + && (cd LarvaTagger.jl && git rev-parse --short HEAD) > src/apps/larvatagger/version.txt \ + && rm -rf LarvaTagger.jl/.git FROM docker.io/nginxinc/nginx-unprivileged:1.27 @@ -13,7 +16,7 @@ ENV JULIA_PROJECT /app ENV JULIA_DEPOT_PATH /app/julia ENV JULIAUP_DEPOT_PATH /app/juliaup -ARG JULIA_VERSION=1.10.7 +ARG JULIA_VERSION=1.10.8 # UID/GID should match with same arguments defined in: # https://github.com/nginxinc/docker-nginx-unprivileged/blob/main/mainline/debian/Dockerfile @@ -30,9 +33,10 @@ ENV PATH "$PATH:$JULIA_PROJECT/.juliaup/bin" RUN cd "$JULIA_PROJECT" \ && cp front/Manifest.toml . \ - && julia -e 'using Pkg; Pkg.instantiate()' \ + && julia -e 'using Pkg; Pkg.instantiate(); Pkg.develop(PackageSpec(path="LarvaTagger.jl"))' \ && mkdir -p public \ - && chmod a+x front/entrypoint.sh + && chmod a+x front/entrypoint.sh \ + && juliaup config versionsdbupdateinterval 0 ARG PUBLIC_URL diff --git a/front/Containerfile.local b/front/Containerfile.local index fe9d00be6787f412c9d4d895313223a840769cb6..1449a18a07a320562569f5b34085d88edbb3e1ea 100644 --- a/front/Containerfile.local +++ b/front/Containerfile.local @@ -6,7 +6,7 @@ COPY ./NyxUI.jl/front/proxy.conf /etc/nginx/conf.d/default.conf ENV JULIAUP_DEPOT_PATH /juliaup ENV JULIA_DEPOT_PATH /julia -ARG JULIA_VERSION=1.10.7 +ARG JULIA_VERSION=1.10.8 RUN curl -fsSL https://install.julialang.org \ | sh -s -- --yes --default-channel $JULIA_VERSION @@ -16,14 +16,16 @@ ENV PATH "$PATH:/root/.juliaup/bin" COPY ./NyxWidgets.jl /app/NyxWidgets.jl COPY ./NyxPlots.jl /app/NyxPlots.jl COPY ./NyxUI.jl /app/NyxUI.jl +COPY ./LarvaTagger.jl /app/LarvaTagger.jl ENV JULIA_PROJECT /app/NyxUI.jl RUN cd /app/NyxUI.jl \ - && julia -e 'using Pkg; Pkg.add([PackageSpec(path="../NyxWidgets.jl"), PackageSpec(path="../NyxPlots.jl")]); Pkg.instantiate();' \ + && julia -e 'using Pkg; Pkg.add([PackageSpec(path="../NyxWidgets.jl"), PackageSpec(path="../NyxPlots.jl"), PackageSpec(url="https://gitlab.pasteur.fr/nyx/PlanarLarvae.jl"), PackageSpec(url="https://gitlab.com/dbc-nyx/ObservationPolicies.jl"), PackageSpec(url="https://gitlab.com/dbc-nyx/TidyObservables.jl"), PackageSpec(path="../LarvaTagger.jl")]); Pkg.instantiate();' \ && mkdir -p public \ && chmod a+x front/entrypoint.sh \ - && sed -i -E 's/worker_processes .*;/worker_processes 2;/' /etc/nginx/nginx.conf + && sed -i -E 's/worker_processes .*;/worker_processes 2;/' /etc/nginx/nginx.conf \ + && juliaup config versionsdbupdateinterval 0 ENTRYPOINT ["/app/NyxUI.jl/front/entrypoint.sh"] CMD [] diff --git a/front/Manifest.toml b/front/Manifest.toml index eead5c8a00b39085359de72b2b85bfd8c44b1f67..7b87bea4414da2f15a4abc08c99fb472c32226cf 100644 --- a/front/Manifest.toml +++ b/front/Manifest.toml @@ -1,8 +1,51 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.7" +julia_version = "1.10.8" manifest_format = "2.0" -project_hash = "7b4a57cbc9fc956109742c120d30a1b52ed917fd" +project_hash = "f30a6bd140cd9f9b66d3656725e83b8d83e18ee6" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "50c3c56a52972d78e8be9fd135bfb91c9574c140" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.1.1" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AdaptivePredicates]] +git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6" +uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" +version = "1.2.0" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.Animations]] +deps = ["Colors"] +git-tree-sha1 = "e092fa223bf66a3c41f9c022bd074d916dc303e7" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.2" [[deps.ArgParse]] deps = ["Logging", "TextWrap"] @@ -17,9 +60,32 @@ version = "1.1.1" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +[[deps.Automa]] +deps = ["PrecompileTools", "SIMD", "TranscodingStreams"] +git-tree-sha1 = "a8f503e8e1a5f583fbef15a8440c8c7e32185df2" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "1.1.0" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.1.0" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.7" + [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +[[deps.Bessels]] +git-tree-sha1 = "4435559dc39793d53a9e3d278e185e920b4619ef" +uuid = "0e736298-9ec6-45e8-9647-e4fc86a2fe38" +version = "0.2.8" + [[deps.BitFlags]] git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" @@ -27,9 +93,34 @@ version = "0.1.9" [[deps.Bonito]] deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MsgPack", "Observables", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] -git-tree-sha1 = "534820940e4359c09adc615f8bd06ca90d508ba6" +git-tree-sha1 = "d7635780a8cfe0cb43c075276fd358c5b166695e" uuid = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" -version = "4.0.1" +version = "3.2.4" + +[[deps.BufferedStreams]] +git-tree-sha1 = "6863c5b7fc997eadcabdbaf6c5f201dc30032643" +uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" +version = "1.2.2" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.9+0" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CRC32c]] +uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" + +[[deps.CRlibm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" +uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" +version = "1.0.1+0" [[deps.CSTParser]] deps = ["Tokenize"] @@ -37,6 +128,28 @@ git-tree-sha1 = "0157e592151e39fa570645e2b2debcdfb8a0f112" uuid = "00ebfdb7-1f24-5e51-bd34-a7502290713f" version = "3.4.3" +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "009060c9a6168704143100f36ab08f06c2af4642" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.2+1" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "1713c74e00545bfe14605d2a2be1712de8fbcb58" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.25.1" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CircularArrays]] +deps = ["OffsetArrays"] +git-tree-sha1 = "e24a6f390e5563583bb4315c73035b5b3f3e7ab4" +uuid = "7a955b69-7140-5f4e-a0ed-f168c5e2e749" +version = "1.4.0" + [[deps.CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] git-tree-sha1 = "7eee164f122511d3e4e1ebadb7956939ea7e1c77" @@ -49,11 +162,17 @@ git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.6" +[[deps.ColorBrewer]] +deps = ["Colors", "JSON"] +git-tree-sha1 = "e771a63cc8b539eca78c85b0cabd9233d6c8f06f" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.1" + [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "c785dfb1b3bfddd1da557e861b919819b82bbe5b" +git-tree-sha1 = "26ec26c98ae1453c692efded2b17e15125a5bea1" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.27.1" +version = "3.28.0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] @@ -72,13 +191,11 @@ deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statist git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" version = "0.11.0" +weakdeps = ["SpecialFunctions"] [deps.ColorVectorSpace.extensions] SpecialFunctionsExt = "SpecialFunctions" - [deps.ColorVectorSpace.weakdeps] - SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" - [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] git-tree-sha1 = "64e15186f0aa277e174aa81798f7eb8598e0157e" @@ -112,6 +229,22 @@ git-tree-sha1 = "f36e5e8fdffcb5646ea5da81495a5a7566005127" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" version = "2.4.3" +[[deps.ConstructionBase]] +git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.8" +weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + [[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" @@ -137,6 +270,12 @@ version = "1.0.0" deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +[[deps.DelaunayTriangulation]] +deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] +git-tree-sha1 = "5620ff4ee0084a6ab7097a27ba0c19290200b037" +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "1.6.4" + [[deps.DelimitedFiles]] deps = ["Mmap"] git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" @@ -149,10 +288,43 @@ git-tree-sha1 = "cd6756e833c377e0ce9cd63fb97689a255f12323" uuid = "04572ae6-984a-583e-9378-9577a1c2574d" version = "1.33.4+0" +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "c7e3a542b999843086e2f29dac96a618c105be1d" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.12" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "03aa5d44647eaec98e1920635cdfed5d5560a8b9" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.117" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocOpt]] +deps = ["Dates", "Printf"] +git-tree-sha1 = "9c2681389ed8d9cf6193b1ba31796f12456b111a" +uuid = "968ba79b-81e4-546f-ab3a-2eecfa62a9db" +version = "0.5.0" + [[deps.DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" @@ -170,18 +342,80 @@ deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.4+0" + +[[deps.EnumX]] +git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.4" + +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArrays"] +git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.8" + [[deps.ExceptionUnwrapping]] deps = ["Test"] git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" version = "0.1.11" +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d55dffd9ae73ff72f1c0482454dcf2ec6c6c4a63" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.5+0" + +[[deps.Extents]] +git-tree-sha1 = "063512a13dbe9c40d999c439268539aa552d1ae6" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.5" + [[deps.EzXML]] deps = ["Printf", "XML2_jll"] git-tree-sha1 = "380053d61bb9064d6aa4a9777413b40429c79901" uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615" version = "1.2.0" +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "8cc47f299902e13f90405ddb5bf87e5d474c0d38" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "6.1.2+0" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "7de7c78d681078f027389e067864a8d53bd7c3c9" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.8.1" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4d81ed14783ec49ce9f2e168208a12ce1815aa25" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+3" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "2dd20384bf8c6d411b5c7370865b1e9b26cb2ea3" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.6" +weakdeps = ["HTTP"] + + [deps.FileIO.extensions] + HTTPExt = "HTTP" + +[[deps.FilePaths]] +deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"] +git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629" +uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" +version = "0.8.3" + [[deps.FilePathsBase]] deps = ["Compat", "Dates"] git-tree-sha1 = "7878ff7172a8e6beedd1dea14bd27c3c6340d361" @@ -196,17 +430,59 @@ weakdeps = ["Mmap", "Test"] [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.13.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + [[deps.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.5" +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "21fac3c77d7b5a9fc03b0ec503aa1a6392c34d2b" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.15.0+0" + [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" version = "1.3.7" +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.1.1" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "786e968a8d2fb167f2e4880baba62e0e26bd8e4e" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.3+1" + +[[deps.FreeTypeAbstraction]] +deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] +git-tree-sha1 = "d52e255138ac21be31fa633200b65e4e71d26802" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.10.6" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "846f7026a9decf3679419122b49f8a1fdb48d2d5" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.16+0" + [[deps.GMP_jll]] deps = ["Artifacts", "Libdl"] uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" @@ -230,39 +506,244 @@ git-tree-sha1 = "5f5ffc33251d0d5f110072f7a0c07717c9453c97" uuid = "5c4fdc26-39e3-47cf-9034-e533e09961c2" version = "1.1.0" +[[deps.GeoFormatTypes]] +git-tree-sha1 = "8e233d5167e63d708d41f87597433f59a0f213fe" +uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f" +version = "0.4.4" + +[[deps.GeoInterface]] +deps = ["DataAPI", "Extents", "GeoFormatTypes"] +git-tree-sha1 = "294e99f19869d0b0cb71aef92f19d03649d028d5" +uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" +version = "1.4.1" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "f0895e73ba6c469ec8efaa13712eb5ee1a3647a3" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.5.2" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Giflib_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6570366d757b50fabae9f4315ad74d2e40c0560a" +uuid = "59f7168a-df46-5410-90c8-f2779963d0ec" +version = "5.2.3+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "b0036b392358c80d2d2124746c2bf3d48d457938" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.82.4+0" + [[deps.Glob]] git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" version = "1.3.1" +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "01979f9b37367603e2848ea225918a3b3861b606" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+1" + +[[deps.GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "dc6bed05c15523624909b3953686c5f5ffa10adc" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.11.1" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HDF5]] +deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "Requires", "UUIDs"] +git-tree-sha1 = "e856eef26cf5bf2b0f95f8f4fc37553c72c8641c" +uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" +version = "0.17.2" + + [deps.HDF5.extensions] + MPIExt = "MPI" + + [deps.HDF5.weakdeps] + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + +[[deps.HDF5_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] +git-tree-sha1 = "38c8874692d48d5440d5752d6c74b0c6b0b60739" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "1.14.2+1" + [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] git-tree-sha1 = "c67b33b085f6e2faf8bf79a61962e7339a81129c" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" version = "1.10.15" +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "55c53be97790242c29031e5cd45e8ac296dadda3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "8.5.0+0" + [[deps.HttpCommon]] deps = ["Dates", "Nullables", "Test", "URIParser"] git-tree-sha1 = "46313284237aa6ca67a6bce6d6fbd323d19cff59" uuid = "77172c1b-203f-54ac-aa54-3f1198fe9f90" version = "0.5.0" +[[deps.Hwloc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "50aedf345a709ab75872f80a2779568dc0bb461b" +uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" +version = "2.11.2+3" + +[[deps.HypergeometricFunctions]] +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "2bd56245074fab4015b9174f24ceba8293209053" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.27" + [[deps.Hyperscript]] deps = ["Test"] git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4" uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" version = "0.0.5" +[[deps.ImageAxes]] +deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] +git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.12" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageCore]] +deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.5" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] +git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.9" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.10" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.1.11+0" + +[[deps.IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + +[[deps.Inflate]] +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.5" + [[deps.Inflector]] deps = ["Unicode"] git-tree-sha1 = "c82a172a07c94887709e613cc67cec0b472fb742" uuid = "6d011eab-0732-4556-8808-e463c76bf3b6" version = "1.1.0" +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "0f14a5456bdc6b9731a5682f439a672750a09e48" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2025.0.4+0" + [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.15.1" +weakdeps = ["Unitful"] + + [deps.Interpolations.extensions] + InterpolationsUnitfulExt = "Unitful" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm_jll", "LinearAlgebra", "MacroTools", "RoundingEmulator"] +git-tree-sha1 = "eb6ca9aef11db0c08b7ac0a5952c6c6ba6fbebf0" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "0.22.22" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + + [deps.IntervalArithmetic.weakdeps] + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + +[[deps.IntervalSets]] +git-tree-sha1 = "dba9ddf07f77f60450fe5d2e2beb9854d9a49bd0" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.10" +weakdeps = ["Random", "RecipesBase", "Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + +[[deps.InverseFunctions]] +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.Isoband]] +deps = ["isoband_jll"] +git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137" +uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + [[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" @@ -292,6 +773,18 @@ version = "1.14.1" [deps.JSON3.weakdeps] ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "fa6d0bcff8583bac20f1ffa708c3913ca605c611" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.5" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "eac1206917768cb54957c65a615460d87b455fc1" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.1.1+0" + [[deps.JuliaFormatter]] deps = ["CSTParser", "CommonMark", "DataStructures", "Glob", "PrecompileTools", "TOML", "Tokenize"] git-tree-sha1 = "59cf7ad64f1b0708a4fa4369879d33bad3239b56" @@ -300,19 +793,62 @@ version = "1.0.62" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "10da5154188682e5c0726823c2b5125957ec3778" +git-tree-sha1 = "a729439c18f7112cbbd9fcdc1771ecc7f071df6a" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.9.38" +version = "0.9.39" + +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] +git-tree-sha1 = "7d703202e65efa1369de1279c162b915e245eed1" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.9" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aaafe88dccbd957a8d82f7d05be9b69172e0cee3" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "4.0.1+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c602b1127f4751facb671441ca72715cc95938a" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.3+0" [[deps.LaTeXStrings]] git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.4.0" +[[deps.LarvaTagger]] +deps = ["Bonito", "Colors", "Dates", "DocOpt", "Format", "LinearAlgebra", "Logging", "Makie", "Meshes", "NearestNeighbors", "NyxWidgets", "Observables", "ObservationPolicies", "OrderedCollections", "PlanarLarvae", "Random", "StaticArrays", "Statistics", "TidyObservables", "WGLMakie"] +git-tree-sha1 = "c9c185beb0bf417ed98afe9b8b9da557a0b886b7" +repo-rev = "main" +repo-url = "https://gitlab.pasteur.fr/nyx/larvatagger.jl" +uuid = "8b3b36f1-dfed-446e-8561-ea19fe966a4d" +version = "0.19.1" + [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" @@ -340,16 +876,74 @@ version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "27ecae93dd25ee0909666e6835051dd684cc035e" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+2" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "8be878062e0ffa2c3f67bb58a595375eda5de80b" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.11.0+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "ff3b4b9d35de638936a525ecd36e86a8bb919d11" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.7.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "df37206100d39f79b3376afb6b9cee4970041c61" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.51.1+0" + [[deps.Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "61dfdba58e585066d8bce214c5a51eaa0539f269" +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.17.0+1" +version = "1.18.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "89211ea35d9df5831fca5d33552c02bd33878419" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.3+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "4ab7581296671007fc33f07a721631b8855f4b1d" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.7.1+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e888ad02ce716b319e6bdb985d2ef300e7089889" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.3+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.29" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" @@ -365,21 +959,73 @@ git-tree-sha1 = "688d6d9e098109051ae33d126fcfc88c4ce4a021" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" version = "3.1.0" +[[deps.MAT]] +deps = ["BufferedStreams", "CodecZlib", "HDF5", "SparseArrays"] +git-tree-sha1 = "1d2dd9b186742b0f317f2530ddcbf00eebb18e96" +uuid = "23992714-dd62-5051-b70f-ba57cb901cac" +version = "0.10.7" + [[deps.MIMEs]] git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb" uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65" version = "0.1.4" +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "5de60bc6cb3899cd318d80d627560fae2e2d99ae" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2025.0.1+1" + +[[deps.MPICH_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "7715e65c47ba3941c502bffb7f266a41a7f54423" +uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" +version = "4.2.3+0" + +[[deps.MPIPreferences]] +deps = ["Libdl", "Preferences"] +git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" +uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" +version = "0.1.11" + +[[deps.MPItrampoline_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "70e830dab5d0775183c99fc75e4c24c614ed7142" +uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" +version = "5.5.1+2" + [[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +git-tree-sha1 = "72aebe0b5051e5143a079a4685a46da330a40472" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.13" +version = "0.5.15" + +[[deps.Makie]] +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "9680336a5b67f9f9f6eaa018f426043a8cd68200" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.22.1" + +[[deps.MakieCore]] +deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"] +git-tree-sha1 = "c731269d5a2c85ffdc689127a9ba6d73e978a4b1" +uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" +version = "0.9.0" + +[[deps.MappedArrays]] +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.2" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] +git-tree-sha1 = "f45c8916e8385976e1ccd055c9874560c257ab13" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.6.2" + [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" @@ -391,11 +1037,29 @@ deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.2+1" +[[deps.Meshes]] +deps = ["Bessels", "CircularArrays", "Distances", "IterTools", "LinearAlgebra", "NearestNeighbors", "Random", "Rotations", "SparseArrays", "StaticArrays", "StatsBase", "Tables", "TransformsBase"] +git-tree-sha1 = "a1a152787767f3393362276452897605584964b1" +uuid = "eacbb407-ea5a-433e-ab97-5258b1ca43fa" +version = "0.29.0" + +[[deps.MicrosoftMPI_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" +uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" +version = "10.1.4+3" + [[deps.Millboard]] git-tree-sha1 = "ea6a5b7e56e76d8051023faaa11d91d1d881dac3" uuid = "39ec1447-df44-5f4c-beaa-866f30b4d3b2" version = "0.2.5" +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + [[deps.Mixers]] deps = ["MacroTools"] git-tree-sha1 = "58ec7ac60dad6e8ca4553225251dfd380e3930dd" @@ -405,6 +1069,12 @@ version = "0.1.2" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2023.1.10" @@ -415,6 +1085,18 @@ git-tree-sha1 = "f5db02ae992c260e4826fe78c942954b48e1d9c2" uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" version = "1.2.1" +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "8a3271d8309285f4db73b4f662b1b290c715e85e" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.21" + +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + [[deps.Nettle]] deps = ["Libdl", "Nettle_jll"] git-tree-sha1 = "6fa48cbae828267848ee32c1bb31d1652e210d7d" @@ -423,9 +1105,9 @@ version = "1.0.0" [[deps.Nettle_jll]] deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "19961ade0a39b98575505bed6f842e8a0ec35af9" +git-tree-sha1 = "fd4678a4bd1f7156c98691200fab47c76b376360" uuid = "4c82536e-c426-54e4-b420-14f461c4ed8b" -version = "3.10.0+2" +version = "3.10.1+0" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" @@ -438,30 +1120,76 @@ version = "1.0.0" [[deps.NyxPlots]] deps = ["Bonito", "Observables", "PlotlyBase"] -git-tree-sha1 = "3d54e1c527baaf6a003e0d7a4fce5fcb9d3dd775" +git-tree-sha1 = "796b76b7aa7d642cf41b60c2f4635f4140048db9" repo-rev = "main" repo-url = "https://gitlab.com/dbc-nyx/NyxPlots.jl" uuid = "e8b8ccdb-0776-4145-b74f-57bbbfff4409" -version = "0.1.2" +version = "0.2.0" [[deps.NyxWidgets]] deps = ["Bonito", "Colors", "Format", "LazyArtifacts", "Observables"] -git-tree-sha1 = "936f80aa61413c47da00f96abbc0186078698bca" +git-tree-sha1 = "d5addf940e4265b3ca2a6fe29b8ff24bf3b13b98" repo-rev = "main" repo-url = "https://gitlab.com/dbc-nyx/NyxWidgets.jl" uuid = "c288fd06-43d3-4b04-8307-797133353e2e" -version = "0.1.1" +version = "0.2.1" [[deps.Observables]] git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" uuid = "510215fc-4207-5dde-b226-833fc4488ee2" version = "0.5.5" +[[deps.ObservationPolicies]] +deps = ["Observables"] +git-tree-sha1 = "d54b4c26b41238806c172f85e1913736c2583b0a" +repo-rev = "main" +repo-url = "https://gitlab.com/dbc-nyx/ObservationPolicies.jl" +uuid = "6317928a-6b1a-42e8-b853-b8e2fc3e9ca3" +version = "0.2.4" + +[[deps.OffsetArrays]] +git-tree-sha1 = "5e1897147d1ff8d98883cda2be2187dcf57d8f0c" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.15.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" version = "0.3.23+4" +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "97db9e07fe2091882c765380ef58ec553074e9c7" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.3" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.2.4+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenMPI_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] +git-tree-sha1 = "2dace87e14256edb1dd0724ab7ba831c779b96bd" +uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" +version = "5.0.6+0" + [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" @@ -474,11 +1202,52 @@ git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "3.0.15+3" +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.3+0" + [[deps.OrderedCollections]] git-tree-sha1 = "12f1439c4f986bb868acda6ea33ebc78e19b95ad" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.7.0" +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "966b85253e959ea89c53a9abebbf2e964fbf593b" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.32" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "67186a2bc9a90f9f85ff3cc8277868961fb57cbd" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.3" + +[[deps.Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "bc5bf2ea3d5351edf285a06b0016788a121ce92c" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.5.1" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.12" + [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" @@ -491,17 +1260,48 @@ git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.8.1" +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" version = "1.10.0" +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + +[[deps.PlanarLarvae]] +deps = ["DelimitedFiles", "HDF5", "JSON3", "LinearAlgebra", "MAT", "Meshes", "OrderedCollections", "Random", "SHA", "StaticArrays", "Statistics", "StatsBase", "StructTypes"] +git-tree-sha1 = "d964d040e319fe3bd9140e5bf91d648de6acc96f" +repo-rev = "main" +repo-url = "https://gitlab.pasteur.fr/nyx/PlanarLarvae.jl" +uuid = "c2615984-ef14-4d40-b148-916c85b43307" +version = "0.16.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] +git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.3" + [[deps.PlotlyBase]] deps = ["ColorSchemes", "Dates", "DelimitedFiles", "DocStringExtensions", "JSON", "LaTeXStrings", "Logging", "Parameters", "Pkg", "REPL", "Requires", "Statistics", "UUIDs"] git-tree-sha1 = "56baf69781fc5e61607c3e46227ab17f7040ffa2" uuid = "a03496cd-edff-5a9b-9e67-9cda94a718b5" version = "0.8.19" +[[deps.PolygonOps]] +git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" +uuid = "647866c9-e3ac-4575-94e7-e3d426903924" +version = "0.1.2" + [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" @@ -518,6 +1318,41 @@ version = "1.4.3" deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "8f6bc219586aef8baf0ff9a5fe16ee9c70cb65e4" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.2" + +[[deps.PtrArrays]] +git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.3.0" + +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "8b3fc30bc0390abdce15f8822c889f669baed73d" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.2" + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + +[[deps.Quaternions]] +deps = ["LinearAlgebra", "Random", "RealDot"] +git-tree-sha1 = "994cc27cdacca10e68feb291673ec3a76aa2fae9" +uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" +version = "0.7.6" + [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" @@ -526,6 +1361,27 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +deps = ["Requires"] +git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.5" +weakdeps = ["FixedPointNumbers"] + + [deps.Ratios.extensions] + RatiosFixedPointNumbersExt = "FixedPointNumbers" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + [[deps.RecipesBase]] deps = ["PrecompileTools"] git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" @@ -551,18 +1407,51 @@ version = "1.3.0" [[deps.Revise]] deps = ["CodeTracking", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "b5e7c125687aa818de948ef8a0b9dc59f043342c" +git-tree-sha1 = "9bb80533cb9769933954ea4ffbecb3025a783198" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.7.1" +version = "3.7.2" weakdeps = ["Distributed"] [deps.Revise.extensions] DistributedExt = "Distributed" +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.8.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.Rotations]] +deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays"] +git-tree-sha1 = "5680a9276685d392c87407df00d57c9924d9f11e" +uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" +version = "1.7.1" +weakdeps = ["RecipesBase"] + + [deps.Rotations.extensions] + RotationsRecipesBaseExt = "RecipesBase" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" +[[deps.SIMD]] +deps = ["PrecompileTools"] +git-tree-sha1 = "fea870727142270bdf7624ad675901a1ee3b4c87" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.7.1" + [[deps.Scratch]] deps = ["Dates"] git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" @@ -572,24 +1461,125 @@ version = "1.2.1" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +[[deps.ShaderAbstractions]] +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"] +git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6" +uuid = "65257c39-d410-5151-9873-9b3e5be5013e" +version = "0.5.0" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SignedDistanceFields]] +deps = ["Random", "Statistics", "Test"] +git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.0" + [[deps.SimpleBufferStream]] git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" version = "1.2.0" +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.3" + [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" version = "1.10.0" +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "64cca0c26b4f31ba18f13f6c12af7c85f478cfde" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.5.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "02c8bd479d26dbeff8a7eb1d77edfc10dacabc01" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.11" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" version = "1.10.0" +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "29321314c920c26684834965ec2ce0dacc9cf8e5" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.4" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "b423576adc27097764a90e163157bcfc9acf0f46" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.2" +weakdeps = ["ChainRulesCore", "InverseFunctions"] + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + [[deps.Stipple]] deps = ["Dates", "FilePathsBase", "Genie", "GenieSession", "GenieSessionFileSession", "JSON3", "Logging", "MacroTools", "Mixers", "Observables", "OrderedCollections", "Parameters", "Pkg", "PrecompileTools", "Random", "Reexport", "Requires", "StructTypes", "Tables"] git-tree-sha1 = "9dbe489bf243b6f652b32a221cbe13346ccac1e4" @@ -624,12 +1614,37 @@ git-tree-sha1 = "b765e46ba27ecf6b44faf70df40c57aa3a547dcb" uuid = "69024149-9ee7-55f6-a4c4-859efe599b68" version = "0.3.7" +[[deps.StructArrays]] +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "5a3a31c41e15a1e042d60f2f4942adccba05d3c9" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.7.0" + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] + StructArraysLinearAlgebraExt = "LinearAlgebra" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" + + [deps.StructArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + [[deps.StructTypes]] deps = ["Dates", "UUIDs"] git-tree-sha1 = "159331b30e94d7b11379037feeb9b690950cace8" uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" version = "1.11.0" +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" @@ -678,6 +1693,20 @@ git-tree-sha1 = "50cb5f85d5646bc1422aa0238aa5bfca99ca9ae7" uuid = "b189fb0b-2eb5-4ed4-bc0c-d34c51242431" version = "2.1.1" +[[deps.TidyObservables]] +deps = ["Observables"] +git-tree-sha1 = "0589ec7397374678942cae9aa356b4bb6c1e9bf4" +repo-rev = "main" +repo-url = "https://gitlab.com/dbc-nyx/TidyObservables.jl" +uuid = "c8131bbd-73a8-4254-a42d-d5d4c5febb31" +version = "0.1.1" + +[[deps.TiffImages]] +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "f21231b166166bebc73b99cea236071eb047525b" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.11.3" + [[deps.Tokenize]] git-tree-sha1 = "468b4685af4abe0e9fd4d7bf495a6554a6276e75" uuid = "0796e94c-ce3b-5d07-9a54-7f471281c624" @@ -688,6 +1717,17 @@ git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.11.3" +[[deps.TransformsBase]] +deps = ["AbstractTrees"] +git-tree-sha1 = "2412fb54902b0063c69c2bcfbec6b571120cc856" +uuid = "28dd2a49-a57a-4bfb-84ca-1a49db9b96b8" +version = "0.1.2" + +[[deps.TriplotBase]] +git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b" +uuid = "981d1d27-644d-49a2-9326-4793e63143c3" +version = "0.1.0" + [[deps.URIParser]] deps = ["Unicode"] git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" @@ -711,18 +1751,113 @@ version = "1.0.2" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "c0667a8e676c53d390a09dc6870b3d8d6650e2bf" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.22.0" +weakdeps = ["ConstructionBase", "InverseFunctions"] + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + +[[deps.WGLMakie]] +deps = ["Bonito", "Colors", "FileIO", "FreeTypeAbstraction", "GeometryBasics", "Hyperscript", "LinearAlgebra", "Makie", "Observables", "PNGFiles", "PrecompileTools", "RelocatableFolders", "ShaderAbstractions", "StaticArrays"] +git-tree-sha1 = "d76bbe29bdac0dc4096e3838c044ed079bb8682b" +uuid = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" +version = "0.11.1" + +[[deps.WebP]] +deps = ["CEnum", "ColorTypes", "FileIO", "FixedPointNumbers", "ImageCore", "libwebp_jll"] +git-tree-sha1 = "aa1ca3c47f119fbdae8770c29820e5e6119b83f2" +uuid = "e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1" +version = "0.1.3" + [[deps.WidgetsBase]] deps = ["Observables"] git-tree-sha1 = "30a1d631eb06e8c868c559599f915a62d55c2601" uuid = "eead4739-05f7-45a1-878c-cee36b57321c" version = "0.1.4" +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "1.0.0" + [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] git-tree-sha1 = "04a51d15436a572301b5abbb9d099713327e9fc4" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" version = "2.10.4+0" +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "7d1671acbe47ac88e981868a078bd6b4e27c5191" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.42+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "56c6604ec8b2d82cc4cfe01aa03b00426aac7e1f" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.6.4+1" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "9dafcee1d24c4f024e7edc92603cedba72118283" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+3" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e9216fdcd8514b7072b43653874fd688e4c6c003" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.12+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "89799ae67c17caa5b3b5a19b8469eeee474377db" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.5+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d7155fea91a4123ef59f42c4afb5ab3b4ca95058" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+3" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "a490c6212a0e90d2d55111ac956f7c4fa9c277a6" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+1" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c57201109a9e4c0585b208bb408bc41d205ac4e9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.2+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "1a74296303b6524a0472a8cb12d3d87a78eb3612" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.0+3" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6dba04dbfb72ae3ebe5418ba33d087ba8aa8cb00" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.1+0" + [[deps.YAML]] deps = ["Base64", "Dates", "Printf", "StringEncodings"] git-tree-sha1 = "dea63ff72079443240fbd013ba006bcbc8a9ac00" @@ -734,17 +1869,95 @@ deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" version = "1.2.13+1" +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "622cf78670d067c738667aaa96c553430b65e269" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.7+0" + +[[deps.isoband_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" +uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4" +version = "0.2.3+0" + +[[deps.libaec_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f5733a5a9047722470b95a81e1b172383971105c" +uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" +version = "1.1.3+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "522c1df09d05a71785765d19c9524661234738e9" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.11.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.2+0" + [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" version = "5.11.0+0" +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.3+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "055a96774f383318750a1a5e10fd4151f04c29c5" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.46+0" + +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] +git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.5+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+2" + +[[deps.libwebp_jll]] +deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"] +git-tree-sha1 = "d2408cac540942921e7bd77272c32e58c33d8a77" +uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" +version = "1.5.0+0" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" version = "1.52.0+1" +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2021.12.0+0" + [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "10164.0.1+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dcc541bb19ed5b0ede95581fb2e41ecf179527d2" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.6.0+0" diff --git a/front/build-run-local.sh b/front/build-run-local.sh index 2d209dc30aafc6fb78bdd3aa9c6a801dea58ad3f..79c9f43c516b343ebe6ad3c278c5d3cd2efc4a21 100755 --- a/front/build-run-local.sh +++ b/front/build-run-local.sh @@ -11,13 +11,14 @@ IMAGE=nyx-dev podman rmi -f $IMAGE || true +rm -rf ../LarvaTagger.jl; cp -Rp ../../LarvaTagger/LarvaTagger.jl ../ + podman build --tag $IMAGE -f "$CONTAINERFILE" .. # --no-cache #mkdir -p public podman run -d -p 8081:80 -p 9484:9284 -p 9485:9285 \ $IMAGE -# -v `realpath ./public`:/usr/share/nginx/html \ CONTAINER=`podman ps | grep $IMAGE | cut -d' ' -f1` diff --git a/front/entrypoint.sh b/front/entrypoint.sh index 44cf7549089f588a81a3ee33ef6c780b9627e5e0..ae9288c705d3be255e713840b01b6dda44475ac1 100644 --- a/front/entrypoint.sh +++ b/front/entrypoint.sh @@ -3,7 +3,7 @@ set -m -/docker-entrypoint.sh nginx -g "daemon off;" & +/docker-entrypoint.sh nginx -g "daemon off;" &>/dev/null & NGINX_PID=$! diff --git a/k8s/front-deployment.yaml b/k8s/front-deployment.yaml deleted file mode 100644 index 6cdee87c1596605c2b807c2f750e789a7403b48f..0000000000000000000000000000000000000000 --- a/k8s/front-deployment.yaml +++ /dev/null @@ -1,38 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: ${APP_NAME}-front - labels: - app: $APP_NAME -spec: - replicas: 1 - selector: - matchLabels: - app: $APP_NAME - template: - metadata: - labels: - app: $APP_NAME - nyxui/component: front - spec: - containers: - - name: $APP_NAME - image: $FQ_IMAGE_NAME - resources: - limits: - cpu: "2" - ephemeral-storage: 1Gi - memory: 4Gi - requests: - cpu: "2" - ephemeral-storage: 1Gi - memory: 4Gi - ports: - - name: http - containerPort: 8080 - protocol: TCP - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL \ No newline at end of file diff --git a/k8s/front-service.yaml b/k8s/front-service.yaml deleted file mode 100644 index 64f770f72932c56f81bed168bf45da31af8a6c3d..0000000000000000000000000000000000000000 --- a/k8s/front-service.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: ${APP_NAME}-front -spec: - selector: - app: $APP_NAME - nyxui/component: front - ports: - - protocol: TCP - port: 80 - targetPort: http - name: http diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml deleted file mode 100644 index cbaeb77f35b7d87eb9c0558c74e54e514c918842..0000000000000000000000000000000000000000 --- a/k8s/ingress.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: $APP_NAME - labels: - app: $APP_NAME -spec: - ingressClassName: internal - rules: - - host: $PUBLIC_URL - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: ${APP_NAME}-front - port: - number: 80 diff --git a/nyxui/Chart.yaml b/nyxui/Chart.yaml index 94afc3b14e04b5366844eab130c7c49b0e5bffc5..567ea86302b3a01ca09c28aa9ff20c3b221acfe9 100644 --- a/nyxui/Chart.yaml +++ b/nyxui/Chart.yaml @@ -15,10 +15,10 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 +version: 0.2.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.1" +appVersion: "0.2.0" diff --git a/routes.jl b/routes.jl index 3e6bc03f7bc64ea4600ede766529f57d98e427be..bca171df89008462befc35e52176fb0814e628c7 100755 --- a/routes.jl +++ b/routes.jl @@ -31,7 +31,7 @@ if Genie.Configuration.isprod() end function modelview(model, view) - page(model, NyxUI.add_footer(view); title=nyxui_title) + page(model, view; title=nyxui_title) end Stipple.Layout.add_css(nyxui_css) @@ -49,6 +49,13 @@ route("/muscles") do MuscleApp.handler(modelview) end +include("src/apps/larvatagger/app.jl") +LarvaTagger.bonito_app.name = "larvatagger" + +route("/larvatagger") do + LarvaTagger.handler(modelview) +end + run_as_script = isinteractive() up(; async=run_as_script) #display(NyxUI.bonitoserver()) diff --git a/src/BonitoServer.jl b/src/BonitoServer.jl index be863e6b67fe2682ce9011326fde7f5f002f7847..e8488437d46a3fe3591d691353672dbe52198a11 100644 --- a/src/BonitoServer.jl +++ b/src/BonitoServer.jl @@ -55,14 +55,21 @@ function route(session::AbstractString, suffix::AbstractString="", return join(parts, "/") end -addsession(args...; kwargs...) = addsession(bonitoserver(; kwargs...), args...) +function addsession(args...; restart=false, kwargs...) + addsession(bonitoserver(; kwargs...), args...; restart=restart) +end -function addsession(server::Bonito.Server, named_app, session_id) - appname = name(named_app) - if !Bonito.has_route(server.routes, route(session_id, appname)) - @info "New user session" session_id appname +function addsession(server::Bonito.Server, named_app, session_id; restart=false) + app_name = name(named_app) + app_route = route(session_id, app_name) + if restart || !Bonito.has_route(server.routes, app_route) + if Bonito.has_route(server.routes, app_route) + @info "New handler" session_id app_name + else + @info "New user session" session_id app_name + end app = named_app.app - Bonito.route!(server, route(session_id, appname) => app(session_id)) + Bonito.route!(server, app_route => app(session_id)) Bonito.HTTPServer.start(server) end end diff --git a/src/GenieExtras.jl b/src/GenieExtras.jl index 53ca6eb3c9bf6fe4194c3dcb8002f39ccc06538b..40cf48a4fa308ea6ab9a3b9c735bfdc133852c19 100644 --- a/src/GenieExtras.jl +++ b/src/GenieExtras.jl @@ -2,7 +2,7 @@ module GenieExtras import Genie.Renderer.Html -export publish_css, add_footer +export publish_css, appinfo, add_footer const project_root = dirname(Base.current_project()) @@ -30,7 +30,7 @@ function publish_css(; clear=true) return css_dir end -function footer() +function appinfo() version = string(pkgversion(@__MODULE__)) if endswith(version, ".0") version = version[1:end-2] @@ -39,12 +39,14 @@ function footer() if isfile(versionfile) version = join((version, readchomp(versionfile)), "-") end - tagurl = "https://gitlab.com/dbc-nyx/NyxUI.jl/-/tags" - Html.footer("NyxUI.jl <a href=\"$tagurl\">v$version</a>") + tagurl = "https://gitlab.pasteur.fr/nyx/NyxUI/-/tags" + return "NyxUI.jl <a href=\"$tagurl\">v$version</a>" end -add_footer(ui::AbstractString) = "$ui$(footer())" +footer() = Html.footer(appinfo()) -add_footer(ui::Function) = () -> add_footer(ui()) +add_footer(ui::AbstractString, footer=footer) = "$ui$(footer())" + +add_footer(ui::Function, footer=footer) = () -> add_footer(ui(), footer) end diff --git a/src/Storage.jl b/src/Storage.jl index 24c879e4f79c269a1af82ceacf2e7e70b57f35aa..d037cbbb1a12c2e5a746c1db706b7eca5aa8fd34 100644 --- a/src/Storage.jl +++ b/src/Storage.jl @@ -3,7 +3,7 @@ module Storage using Dates using TOML -export getconfig, getbucket, clear_oldest +export getconfig, getbucket, clear_oldest, purge_appdata const __storage_location__ = get(ENV, "STORAGE", joinpath(dirname(Base.current_project()), "storage")) @@ -32,10 +32,12 @@ function getconfig(key, morekeys...; default=nothing) config isa Dict ? default : config end -getbucket(session_id) = joinpath(__storage_location__, "exports", session_id) +function getbucket(session_id, appname) + joinpath(__storage_location__, "exports", session_id, appname) +end -function getbucket(session_id, mode) - session_bucket = getbucket(session_id) +function getbucket(session_id, appname, mode) + session_bucket = getbucket(session_id, appname) if mode === :read session_bucket elseif mode === :write @@ -50,8 +52,10 @@ end function getbucket(; child_resource) parts = splitpath(child_resource) - session_id = parts[findfirst(==("exports"), parts) + 1] - return getbucket(session_id) + exports = findfirst(==("exports"), parts) + session_id = parts[exports + 1] + appname = parts[exports + 2] + return getbucket(session_id, appname) end function clear_oldest(session_bucket) @@ -61,4 +65,11 @@ function clear_oldest(session_bucket) rm(oldest; recursive=true) end +function purge_appdata(session_id, appname) + bucket = getbucket(session_id, appname, :read) + isdir(bucket) && rm(bucket; recursive=true) + exportdir = joinpath("public", session_id, appname) + isdir(exportdir) && rm(exportdir; recursive=true) +end + end diff --git a/src/apps/catalog/app.jl b/src/apps/catalog/app.jl index 240cf82bb95dd1eefd6c767f6ebab700d3ad2162..cc5c45f9791c9adea27df3892548c63051ec4e4e 100644 --- a/src/apps/catalog/app.jl +++ b/src/apps/catalog/app.jl @@ -34,10 +34,10 @@ function app_catalog_view() Html.div(class=caption, "Coming soon!"), ), ]))), - item(item(class=app, Html.a(href="", class="disabled", [ + item(item(class=app, Html.a(href=Router.link_to(:get_larvatagger), [ Html.h1("LarvaTagger", style=header2), imageview(src="/images/LarvaTagger.png", style=img, - Html.div(class=caption, "Coming soon!"), + Html.div(class=caption, "Partially available"), ), ]))), ]), diff --git a/src/apps/larvatagger/app.jl b/src/apps/larvatagger/app.jl new file mode 100644 index 0000000000000000000000000000000000000000..dbdea6201e1c0fe84e2a892f9758f348ceaa7d84 --- /dev/null +++ b/src/apps/larvatagger/app.jl @@ -0,0 +1,164 @@ +module LarvaTagger + +using NyxUI, NyxUI.Storage, NyxUI.GenieExtras +using NyxWidgets.Base: Cache +import LarvaTagger as LT +using GenieSession, Stipple +import Stipple: @app, @init, @private, @in, @onchange, @onbutton, @click +import StippleUI: tooltip + +const sizefactors = Dict("1.0"=>1., "1.5"=>1.5, "2.0"=>2.) +const sizefactors_str = Dict(v=>k for (k,v) in pairs(sizefactors)) +const appheight = Dict("1.0"=>"900px", "1.5"=>"1300px", "2.0"=>"1700px") +const appwidth = Dict("1.0"=>"1680px", "1.5"=>"2280px", "2.0"=>"2880px") + +mutable struct Model + sizefactor + app # TODO: check whether explicitly closing apps helps + appdata +end + +const bonito_models = Cache{String, Model}() + +const bonito_app = NamedApp("larvatagger", + function (session) + bucket = getbucket(session, "larvatagger", :read) + mkpath(bucket) + model = lock(bonito_models) do + if haskey(bonito_models, session) + bonito_models.cache[session] + else + inputfile = Ref{Union{Nothing, String}}(nothing) + bonito_models.cache[session] = Model(1.0, nothing, inputfile) + end + end + exportdir = joinpath("public", session, "larvatagger") + function prepare_download(srcfile) + mkpath(exportdir) + filename = basename(srcfile) + tempfile = joinpath(exportdir, filename) + if !samefile(srcfile, tempfile) + open(tempfile, "w") do fout + open(srcfile, "r") do fin + write(fout, read(fin)) + end + end + end + return "/$session/larvatagger/$filename" + end + isnothing(model.app) || close(model.app) + model.app = app = LT.larvaeditor(model.appdata; + root_directory=bucket, + enable_uploads=true, + enable_downloads=true, + prepare_download=prepare_download, + enable_new_directories=true, + enable_delete=true, + viewfactor=model.sizefactor) + return app + end +) + +function purgesession(session) + model = lock(bonito_models) do + pop!(bonito_models.cache, session) + end + isnothing(model.app) || close(model.app) + purge_appdata(session, "larvatagger") + BonitoServer.addsession(bonito_app, session; restart=true) +end + + +@app begin + @private bonito_session_id = "" + @in sizefactor = "1.0" + @in reset_bonito_session = false + + @onchange isready begin + genie_session = GenieSession.session() + bonito_session_id = genie_session.id[1:32] + if haskey(bonito_models, bonito_session_id) + sizefactor = sizefactors_str[bonito_models[bonito_session_id].sizefactor] + else + BonitoServer.addsession(bonito_app, bonito_session_id) + end + url = bonito_url(bonito_app, bonito_session_id) + width = appwidth[sizefactor] + height = appheight[sizefactor] + run(__model__, """ + const iframe = document.getElementById('bonito'); + iframe.src = '$url'; + iframe.style.height = '$height'; + document.getElementById('footer').style.width = '$width'; + document.getElementById('iframe_alt_text').style.display = 'none'; + """) + end + + @onchange sizefactor begin + new_sizefactor = sizefactors[sizefactor] + if new_sizefactor != bonito_models[bonito_session_id].sizefactor + @info "New size factor; refreshing the iframe" + bonito_models[bonito_session_id].sizefactor = new_sizefactor + BonitoServer.addsession(bonito_app, bonito_session_id; restart=true) # restart + width = appwidth[sizefactor] + height = appheight[sizefactor] + run(__model__, """ + const iframe = document.getElementById('bonito'); + iframe.style.height = '$height'; + iframe.src += ''; + document.getElementById('footer').style.width = '$width'; + """) + end + end + + @onbutton reset_bonito_session begin + purgesession(bonito_session_id) + # reset UI to defaults + bonito_session_id[!] = "" + sizefactor[!] = "1.0" + # reload page + run(__model__, "location.reload(true);") + end +end + +function view() + [ + Html.div("Refresh the page if the present message does not disappear after a few seconds"; + id="iframe_alt_text", + style="width:$(appwidth["1.0"]);margin:auto;padding:2rem;"), + Html.iframe(; id="bonito", style="width:100%;height:0;border:none;"), + Html.div([ + Html.div([ + Html.span("2D view size factor: "; style="margin-right:0.5rem;"), + Html.select(:sizefactor; options=collect(keys(sizefactors)), + multiple=false, clearable=false, counter=false, usechips=false, + dense=true, var"options-dense"=true)]; + style="display:flex;flex-direction:horizontal;align-items:center;"), + Html.span("Reset session", @click(:reset_bonito_session), + style="cursor:pointer;", + [tooltip("Useful when the app crashes. All data will be lost!")]), + Html.span(appinfo())]; + id="footer", + ), + ] +end + +function appinfo() + version = string(pkgversion(LT)) + if endswith(version, ".0") + version = version[1:end-2] + end + versionfile = joinpath(@__DIR__, "version.txt") + if isfile(versionfile) + version = join((version, readchomp(versionfile)), "-") + end + tagurl = "https://gitlab.pasteur.fr/nyx/LarvaTagger.jl/-/tags" + return "LarvaTagger.jl <a href=\"$tagurl\">v$version</a>" +end + +function handler(_) + model = @init + page(model, view; title="LarvaTagger") +end + +end diff --git a/src/apps/muscles/Backbone.jl b/src/apps/muscles/Backbone.jl index eb4758a59f0e5864392c222e985a7d631015d9b1..5547f559f2007fab4c3a50d8d513536747340842 100644 --- a/src/apps/muscles/Backbone.jl +++ b/src/apps/muscles/Backbone.jl @@ -9,7 +9,7 @@ include("MuscleWidgets.jl") using .MuscleWidgets export hasmodel, getmodel, setmodel, newsequence, getsequence, withsequences, - exportsequence, loadsequence, deletesequence + exportsequence, loadsequence, deletesequence, purgesession # mutable struct Backbone{W} # widget::Union{Nothing, W} @@ -132,10 +132,10 @@ end ## persistent storage -function exportsequence(session_id) +function exportsequence(session_id; appname="muscles") sequence = getsequence(session_id) isempty(sequence.program_name) && return "" - dir = getbucket(session_id, :write) + dir = getbucket(session_id, appname, :write) filepath = joinpath(dir, sequence.program_name * ".json") MuscleActivities.to_json_file(filepath, sequence) return filepath @@ -166,4 +166,20 @@ function deletesequence(session_id) end end +function purgesession(session_id; appname="muscles") + model = lock(__backbone_cache__) do + if session_id in keys(__backbone_cache__.cache) + #pop!(__valid_sessions__, session_id) # not sure what to do with it + pop!(__backbone_cache__.cache, session_id) + end + end + lock(__sequences__) do + if session_id in keys(__sequences__.cache) + pop!(__sequences__.cache, session_id) + end + end + purge_appdata(session_id, appname) + return model +end + end diff --git a/src/apps/muscles/MuscleWidgets.jl b/src/apps/muscles/MuscleWidgets.jl index e5577ed86345d7c58f1d200b59fb2ccd05e3ea1c..0c12617989856f547b119331022cb1afdbc5c42b 100644 --- a/src/apps/muscles/MuscleWidgets.jl +++ b/src/apps/muscles/MuscleWidgets.jl @@ -22,7 +22,6 @@ struct MuscleWidget sequence::AbstractObservable colormap::AbstractObservable colorscheme::AbstractObservable - setvalue::AbstractObservable overview::Muscles.MultiSegmentMuscleWidget individualsegments::Vector{Muscles.MuscleWidget} heatmaps::Vector{Heatmap} @@ -39,17 +38,16 @@ function MuscleWidget(sequence) on(colormap) do c colorscheme[] = scale2scheme(c) end - setvalue = Observable{Float64}(1) editmode = Observable(false) # - overview = Muscles.MultiSegmentMuscleWidget(; musclelabel=false) + overview = Muscles.MultiSegmentMuscleWidget(; musclelabel=false, sidelabel=:right) individualsegments = [Muscles.MuscleWidget(; segment=segment.segment, side=segment.side, upsidedown=segment.side=="right", segmentlabel=true, style="width: 40%; margin-top: 2rem;") for segment in segments(overview)] - moveto = clipboard = zlim = nothing + moveto = clipboard = zlim = setvalue = nothing heatmaps = Heatmap[] for segment in individualsegments halfsegment = sequence[][segment.segment, segment.side] @@ -61,10 +59,12 @@ function MuscleWidget(sequence) pick=moveto, clipboard=clipboard, setvalue=setvalue, - zlim=zlim) + zlim=zlim, + prompt_on_assign=true) moveto = heatmap.pick clipboard = heatmap.clipboard zlim = heatmap.zlim + setvalue = heatmap.setvalue push!(heatmaps, heatmap) end detailedviews = [Div(widget, heatmap; style=:row) @@ -137,7 +137,7 @@ function MuscleWidget(sequence) heatmaps[layer-1].editing[] = b end end - return MuscleWidget(sequence, colormap, colorscheme, setvalue, overview, + return MuscleWidget(sequence, colormap, colorscheme, overview, individualsegments, heatmaps, animation, editmode) end diff --git a/src/apps/muscles/app.jl b/src/apps/muscles/app.jl index 082584919dcbe8e831b50d195d406f2e2ff249b1..6140bd2cb844c63fc6efdb74953b6a4ca7958b12 100644 --- a/src/apps/muscles/app.jl +++ b/src/apps/muscles/app.jl @@ -1,6 +1,6 @@ module MuscleApp -using NyxUI, NyxUI.Storage +using NyxUI, NyxUI.Storage, NyxUI.GenieExtras using Observables using Genie, GenieSession, Stipple, StippleUI import Stipple: @app, @init, @private, @in, @out, @onchange, @onbutton, @notify @@ -21,7 +21,7 @@ const maxlength = getconfig("muscle-activity", "maxlength") const bonito_app = NamedApp(:inherit, Backbone.app) @app begin - @private back_session_id = "" + @private bonito_session_id = "" @private sequence = MuscleActivity("") @in new_sequence_click = false @@ -39,7 +39,6 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @out first_time_in_editmode = true # and in the heatmap view @in editmode = false @out editmode_disable = true - @in setvalue = 1.0 @in series_length::Float64 = 21 @in time_interval = 0.05 @in start_time = 0.0 @@ -52,6 +51,8 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @in delete_sequence_click = false @out no_sequences_yet = true + @in reset_bonito_session = false + @onchange isready begin _, url = init_model(__model__) run(__model__, """ @@ -61,7 +62,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) loader.style.display = 'block'; iframe.src = '$url'; """) - session_id = back_session_id + session_id = bonito_session_id model = getmodel(session_id) if true # TODO: diagnose missing Stipple initialization # restore state after page reload (Ctrl+R) @@ -71,7 +72,6 @@ const bonito_app = NamedApp(:inherit, Backbone.app) colormap = model.colormap[] editmode = model.editmode[] sequence_name = name - setvalue = model.setvalue[] seq = model.sequence[] series_length = length(seq.times) time_interval = step(seq.times) @@ -94,8 +94,33 @@ const bonito_app = NamedApp(:inherit, Backbone.app) end end + @onbutton reset_bonito_session begin + model = purgesession(bonito_session_id; appname=bonito_app.name) + # reset UI to defaults + #bonito_session_id[!] = "" + sequence[!] = MuscleActivity("") + new_sequence_type[!] = "Empty" + make_new_sequences_random[!] = false + sequence_names[!] = String[] + selected_sequence_name[!] = "" + selected_sequence_index[!] = 0 + sequence_name[!] = "" + export_sequence_link[!] = "" + colormap[!] = default_colormap + first_time_in_editmode[!] = true + editmode[!] = false + series_length[!] = 21 + time_interval[!] = 0.05 + start_time[!] = 0.0 + heatmap_view[!] = false + no_sequences_yet[!] = true + # reload page + setmodel(bonito_session_id, sequence) + run(__model__, "location.reload(true);") + end + @onchange start_time, time_interval, series_length begin - model = getmodel(back_session_id) + model = getmodel(bonito_session_id) seq = model.sequence[] # input validation valid = true @@ -140,7 +165,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) end @onbutton new_sequence_click begin - sequence = newsequence(back_session_id, new_sequence_type, sequence_names, + sequence = newsequence(bonito_session_id, new_sequence_type, sequence_names, start_time, time_interval, round(Int, series_length)) # propagate name = sequence.program_name @@ -169,7 +194,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @onchange selected_sequence_name begin isempty(selected_sequence_name) && return - seq = getsequence(back_session_id, selected_sequence_name) + seq = getsequence(bonito_session_id, selected_sequence_name) if !isnothing(seq) ix = findfirst(==(selected_sequence_name), sequence_names) selected_sequence_index[!] = ix @@ -204,7 +229,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) break end end - model = getmodel(back_session_id) + model = getmodel(bonito_session_id) if valid model.sequence[].program_name = sequence[!].program_name = sequence_name sequence_names[!][selected_sequence_index] = sequence_name @@ -216,12 +241,17 @@ const bonito_app = NamedApp(:inherit, Backbone.app) end @onchange colormap begin - model = getmodel(back_session_id) + model = getmodel(bonito_session_id) model.colormap[] = colormap end @onchange editmode begin - model = getmodel(back_session_id) + if editmode && isempty(sequence_name) + @notify "Create a new program or load one first" :error + editmode = false + return + end + model = getmodel(bonito_session_id) model.editmode[] = editmode editmode_disable = !editmode if editmode && first_time_in_editmode && heatmap_view @@ -240,24 +270,20 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @notify "Toggle the \"edit mode\" off to browse the sequence with the heatmap" :info end - @onchange setvalue begin - model = getmodel(back_session_id) - model.setvalue[] = setvalue - end - @onbutton export_sequence_click begin - filepath = exportsequence(back_session_id) + filepath = exportsequence(bonito_session_id; appname=bonito_app.name) if isempty(filepath) @notify "No available motor programs; create one first" :error else filename = basename(filepath) - mkpath("./public/$back_session_id") - open("./public/$back_session_id/$filename", "w") do o + appname = bonito_app.name + mkpath("./public/$bonito_session_id/$appname") + open("./public/$bonito_session_id/$appname/$filename", "w") do o open(filepath, "r") do i write(o, read(i)) end end - export_sequence_link = "/$back_session_id/$filename" + export_sequence_link = "/$bonito_session_id/$appname/$filename" end end @@ -277,7 +303,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) if !isempty(fileuploads) file = fileuploads["path"] try - sequence = loadsequence(back_session_id, file) + sequence = loadsequence(bonito_session_id, file) if !(sequence.program_name in sequence_names) push!(sequence_names, sequence.program_name) end @@ -298,13 +324,13 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @notify "Selection copied! Press Ctrl while clicking to paste" :info end @onchange area_selected begin - @notify "Click inside the selected area to assign the setvalue, or press Ctrl while clicking to copy the selection" :info + @notify "Click inside the selected area to assign a value, or press Ctrl while clicking to copy the selection" :info end @onbutton delete_sequence_click begin isempty(selected_sequence_name) && return # update the model - deletesequence(back_session_id) + deletesequence(bonito_session_id) popat!(sequence_names, selected_sequence_index) if length(sequence_names) < selected_sequence_index selected_sequence_index[!] -= 1 @@ -313,7 +339,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) n = round(Int, series_length) stop_time = start_time + (n-1) * time_interval time_support = start_time:time_interval:stop_time - model = getmodel(back_session_id) + model = getmodel(bonito_session_id) muscles = model.overview sequence = MuscleActivity("", time_support, muscles) # update the view @@ -331,6 +357,12 @@ const bonito_app = NamedApp(:inherit, Backbone.app) # update the view notify(sequence_names) end + + @onchange no_sequences_yet begin + if no_sequences_yet && editmode + editmode = false + end + end end function dropdown(key, options, label; margin=true, class=nothing) @@ -366,8 +398,6 @@ function muscle_view(bonito_url=""; channel=":channel") Html.div(class="edit-panel", style=col, [ toggle("Toggle edit mode", :editmode, color="blue"), textfield("Motor program name", :sequence_name, disable=:editmode_disable), - textfield("Set value", :setvalue, type="number", step="any", - disable=:editmode_disable), textfield("Number of time steps", :series_length, type="number", step="1", disable=:editmode_disable), textfield("Time interval", :time_interval, type="number", step="any", @@ -379,6 +409,12 @@ function muscle_view(bonito_url=""; channel=":channel") disable=:no_sequences_yet)), ]) + footer = Html.div([ + Html.span("Reset session", @click(:reset_bonito_session), style="cursor:pointer;", + [tooltip("Useful when the app crashes. All data will be lost!")]), + Html.span(appinfo()), + ]; id="footer", style="width:1354.617px;") + Html.div(style=col, [ topbar, Html.div(style=row, [ @@ -389,6 +425,7 @@ function muscle_view(bonito_url=""; channel=":channel") ]), sidepanel, ]), + footer, ]) end @@ -420,7 +457,7 @@ function init_model(muscle_model=nothing) setmodel(session_id, muscle_model.sequence[!]) end BonitoServer.addsession(bonito_app, session_id) - muscle_model.back_session_id[!] = session_id + muscle_model.bonito_session_id[!] = session_id url = bonito_url(bonito_app, session_id) return muscle_model, url end diff --git a/src/apps/muscles/bonito.css b/src/apps/muscles/bonito.css index 0feaf047580dcb279aa96fab0a9137f1febc2312..ca696314b5442f86ad184b63a4f0080ef30b64b6 100644 --- a/src/apps/muscles/bonito.css +++ b/src/apps/muscles/bonito.css @@ -1,4 +1,4 @@ -.nyx-animated-layers, .nyx-player select, .nyx-player span { +.nyx-animated-layers, .nyx-player select, .nyx-player span, .nyx-segment-side-label-left, .nyx-segment-side-label-right { font-family: Open Sans; } diff --git a/src/nyxui.css b/src/nyxui.css index 12eb97966aee199dd1718486bdf93ff6be27dda1..6535400e12621ae7d486eb49e7e0f9ca006a1af0 100644 --- a/src/nyxui.css +++ b/src/nyxui.css @@ -54,3 +54,14 @@ footer { text-align: right; padding-right: 1rem; } + +#footer { + display: flex; + flex-direction: horizontal; + justify-content: space-between; + align-items: center; + height: 40px; + max-width: 100%; + padding: 0; + padding-left: 1rem; +}