From e5953f2064a44a20a953a42bbd534166207c2441 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Sat, 4 Oct 2025 11:14:06 +0200 Subject: [PATCH 01/19] ci(semantic-release): set persist credentials to false Set persist credentials to false. --- .github/workflows/Release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index f5310542..7fb43fbb 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -13,6 +13,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + with: + persist-credentials: false - name: Semantic Release uses: cycjimmy/semantic-release-action@v5 id: semantic-release From 909f37b52e3465a6afe220f1cf9e887070c4aace Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 09:41:32 +0100 Subject: [PATCH 02/19] chore: add .worktrees to .gitignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 📦 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 46eea050..43001948 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ docs/build/ docs/pdf/build/ docs/site/ docs/Manifest.toml + +.worktrees/ From 1b363b8223d21a5f9ba923ea65e33d93b3402e34 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 09:50:17 +0100 Subject: [PATCH 03/19] refactor: move CUDA to weak dependency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move CUDA from [deps] to [weakdeps] - Add TrackingCUDAExt extension 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- Project.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 690b2809..a6b6ab9f 100644 --- a/Project.toml +++ b/Project.toml @@ -8,7 +8,6 @@ Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" Acquisition = "d4bbf60b-102b-5ffb-8f97-a7ea5817e69f" Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" Bumper = "8ce10254-0962-460f-a3d8-1f77fea1446e" -CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" @@ -20,6 +19,12 @@ StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" TrackingLoopFilters = "0814aff9-93cb-554c-9fff-9bf1cfdb5efa" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" +[weakdeps] +CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[extensions] +TrackingCUDAExt = "CUDA" + [compat] Accessors = "0.1" Acquisition = "0.1.1" From 4e415475c98412e77c9e07c6ba065b94594af65c Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 09:54:11 +0100 Subject: [PATCH 04/19] refactor: remove CUDA imports and GPU exports from main module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove 'using CUDA' statement - Remove GPU file inclusion - Remove GPU type exports (moved to extension) - Keep abstract type for extension dispatch 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/Tracking.jl | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Tracking.jl b/src/Tracking.jl index cab84fda..d62e82e5 100644 --- a/src/Tracking.jl +++ b/src/Tracking.jl @@ -1,6 +1,5 @@ module Tracking -using CUDA using DocStringExtensions using GNSSSignals using LoopVectorization @@ -48,10 +47,7 @@ export get_early, SatState, SystemSatsState, CPUSatDownconvertAndCorrelator, - GPUSatDownconvertAndCorrelator, - GPUSystemDownconvertAndCorrelator, CPUDownconvertAndCorrelator, - GPUDownconvertAndCorrelator, ConventionalPLLAndDLL, DefaultPostCorrFilter, TrackState, @@ -61,8 +57,7 @@ export get_early, get_sat_state, get_system, estimate_cn0, - get_default_correlator, - convert_code_to_texture_memory + get_default_correlator const Maybe{T} = Union{T,Nothing} @@ -128,7 +123,6 @@ end include("sample_parameters.jl") include("downconvert_and_correlate.jl") include("downconvert_and_correlate_cpu.jl") -include("downconvert_and_correlate_gpu.jl") include("conventional_pll_and_dll.jl") include("tracking_state.jl") include("track.jl") From 33756ba15bcd129315905f02e3bb0c72168b49a2 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 09:57:51 +0100 Subject: [PATCH 05/19] feat: add TrackingCUDAExt extension entry point MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extension activates when CUDA is loaded and provides GPU types. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ext/TrackingCUDAExt/TrackingCUDAExt.jl | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 ext/TrackingCUDAExt/TrackingCUDAExt.jl diff --git a/ext/TrackingCUDAExt/TrackingCUDAExt.jl b/ext/TrackingCUDAExt/TrackingCUDAExt.jl new file mode 100644 index 00000000..8a904607 --- /dev/null +++ b/ext/TrackingCUDAExt/TrackingCUDAExt.jl @@ -0,0 +1,24 @@ +module TrackingCUDAExt + +using Tracking +using CUDA + +# Import dependencies needed by GPU code +using GNSSSignals +using StaticArrays +using Dictionaries +using Accessors +using DocStringExtensions +using Unitful: Hz +import Adapt + +# Re-export GPU functionality to make it available when CUDA is loaded +export GPUSatDownconvertAndCorrelator, + GPUSystemDownconvertAndCorrelator, + GPUDownconvertAndCorrelator, + convert_code_to_texture_memory + +# Include the GPU implementation +include("downconvert_and_correlate_gpu.jl") + +end From baeea628ee2ce1fe06b0ecc25cffa6f3d61eb366 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 10:03:13 +0100 Subject: [PATCH 06/19] refactor: move GPU implementation to extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All CUDA-specific code now lives in TrackingCUDAExt extension. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- {src => ext/TrackingCUDAExt}/downconvert_and_correlate_gpu.jl | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {src => ext/TrackingCUDAExt}/downconvert_and_correlate_gpu.jl (100%) diff --git a/src/downconvert_and_correlate_gpu.jl b/ext/TrackingCUDAExt/downconvert_and_correlate_gpu.jl similarity index 100% rename from src/downconvert_and_correlate_gpu.jl rename to ext/TrackingCUDAExt/downconvert_and_correlate_gpu.jl From e119311fb39b4ff7d7ebb67a218fe5d2a1314b75 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 10:36:18 +0100 Subject: [PATCH 07/19] fix: export types and functions needed by CUDA extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Export the following types and functions required by TrackingCUDAExt: Types: - AbstractCorrelator - AbstractDownconvertAndCorrelator - MultipleSystemType - MultipleSystemSatsState Functions: - get_num_accumulators - get_correlator_sample_shifts - calc_signal_samples_to_integrate - update - get_code_frequency - get_code_length - get_codes - get_modulation - get_secondary_code - update_accumulator This resolves the UndefVarError: AbstractCorrelator not defined error that prevented the CUDA extension from loading. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/documenter.yml | 50 ++++++++++++++++++++++++++++++++ docs/Project.toml | 3 ++ src/Tracking.jl | 16 +++++++++- test/Project.toml | 1 + 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/documenter.yml create mode 100644 docs/Project.toml diff --git a/.github/workflows/documenter.yml b/.github/workflows/documenter.yml new file mode 100644 index 00000000..06f1572b --- /dev/null +++ b/.github/workflows/documenter.yml @@ -0,0 +1,50 @@ +name: Documentation +# This is a standard Julia setup for GitHub CI +on: + push: + branches: + - main # update to match your main branch + tags: '*' + pull_request: + +jobs: + build: + permissions: + contents: write + pull-requests: read + statuses: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: '1' + - uses: julia-actions/cache@v1 + +# Now this is where things focus on the documentation +# build and deployment. + +# IMPORTANT! If your documentation is for a Julia package, +# with formal Julia package structure (`src` folder and top level Project.toml) +# then you need to include this extra step (simply uncomment it): + + - name: Develop local package + run: julia -e 'using Pkg; Pkg.develop(path="."); Pkg.instantiate()' + +# The next steps continue with the `doc` folder build. + + # This is really all you care about; 2-steps process + # step 1, assumming the documentation Project.toml file is in `docs` folder + - name: Install docs dependencies + run: julia --project=docs/ -e 'using Pkg; Pkg.instantiate()' + # step 2 (note project path remains the same!) + - name: Build and deploy + env: + # An access token must be provided to "push" the documentation build. + # GitHub automates this via your account with this line: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # See the discussion around "TagBot" in the Documenter.jl website: + # https://documenter.juliadocs.org/stable/man/hosting/#GitHub-Actions + # for automating creating tagged documentation builds after + # registering your package in the Julia General Registry + run: julia --project=docs/ docs/make.jl \ No newline at end of file diff --git a/docs/Project.toml b/docs/Project.toml new file mode 100644 index 00000000..e95e4101 --- /dev/null +++ b/docs/Project.toml @@ -0,0 +1,3 @@ +[deps] +Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +GNSSSignals = "52c80523-2a4e-5c38-8979-05588f836870" diff --git a/src/Tracking.jl b/src/Tracking.jl index d62e82e5..080f7ae8 100644 --- a/src/Tracking.jl +++ b/src/Tracking.jl @@ -57,7 +57,21 @@ export get_early, get_sat_state, get_system, estimate_cn0, - get_default_correlator + get_default_correlator, + AbstractCorrelator, + AbstractDownconvertAndCorrelator, + MultipleSystemType, + MultipleSystemSatsState, + get_num_accumulators, + get_correlator_sample_shifts, + calc_signal_samples_to_integrate, + update, + get_code_frequency, + get_code_length, + get_codes, + get_modulation, + get_secondary_code, + update_accumulator const Maybe{T} = Union{T,Nothing} diff --git a/test/Project.toml b/test/Project.toml index 660f58eb..1d5d11ce 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -12,5 +12,6 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +Tracking = "10b2438b-ffd4-5096-aa58-44041d5c8f3b" TrackingLoopFilters = "0814aff9-93cb-554c-9fff-9bf1cfdb5efa" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" From b209890c59caf3126c9b6f0573a1e5ffb6813bff Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 10:52:05 +0100 Subject: [PATCH 08/19] fix: properly export GPU types from extension to parent module - Declare global variables in Tracking module for GPU types - Use __init__ function in TrackingCUDAExt to assign types to parent module - GPU types (GPUSatDownconvertAndCorrelator, GPUSystemDownconvertAndCorrelator, GPUDownconvertAndCorrelator) and convert_code_to_texture_memory function are now accessible via Tracking.* when CUDA is loaded - Extension exports don't propagate to parent module, so explicit assignment via @eval in __init__ is required Fixes issue where GPU types existed in TrackingCUDAExt but were not accessible in the Tracking namespace despite export statements. --- ext/TrackingCUDAExt/TrackingCUDAExt.jl | 18 ++++++++++++------ src/Tracking.jl | 13 +++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/ext/TrackingCUDAExt/TrackingCUDAExt.jl b/ext/TrackingCUDAExt/TrackingCUDAExt.jl index 8a904607..747a3ec0 100644 --- a/ext/TrackingCUDAExt/TrackingCUDAExt.jl +++ b/ext/TrackingCUDAExt/TrackingCUDAExt.jl @@ -12,13 +12,19 @@ using DocStringExtensions using Unitful: Hz import Adapt -# Re-export GPU functionality to make it available when CUDA is loaded -export GPUSatDownconvertAndCorrelator, - GPUSystemDownconvertAndCorrelator, - GPUDownconvertAndCorrelator, - convert_code_to_texture_memory - # Include the GPU implementation include("downconvert_and_correlate_gpu.jl") +# Make GPU types available in the parent Tracking module +# In package extensions, export doesn't propagate to the parent module, +# so we explicitly assign them to the parent module's namespace in __init__ +function __init__() + @eval Tracking begin + GPUSatDownconvertAndCorrelator = $GPUSatDownconvertAndCorrelator + GPUSystemDownconvertAndCorrelator = $GPUSystemDownconvertAndCorrelator + GPUDownconvertAndCorrelator = $GPUDownconvertAndCorrelator + convert_code_to_texture_memory = $convert_code_to_texture_memory + end +end + end diff --git a/src/Tracking.jl b/src/Tracking.jl index 080f7ae8..7b6d9a04 100644 --- a/src/Tracking.jl +++ b/src/Tracking.jl @@ -140,4 +140,17 @@ include("downconvert_and_correlate_cpu.jl") include("conventional_pll_and_dll.jl") include("tracking_state.jl") include("track.jl") + +# Pre-declare GPU types that will be assigned by TrackingCUDAExt +# These need to exist in the parent module for extensions to assign to them +function __init__() + # GPU types are assigned by TrackingCUDAExt when CUDA is loaded +end + +# Declare global variables for GPU types (assigned by extension) +global GPUSatDownconvertAndCorrelator +global GPUSystemDownconvertAndCorrelator +global GPUDownconvertAndCorrelator +global convert_code_to_texture_memory + end From 344f9b08393c12ae5e0b97097dcfbe76648c4f8f Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 11:15:16 +0100 Subject: [PATCH 09/19] fix: remove __init__() pattern and update tests to import from TrackingCUDAExt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove __init__() from extension (user requested to avoid it) - Remove global declarations from main module - Update extension to use simple export pattern - Update test imports to use Tracking.TrackingCUDAExt.GPUDownconvertAndCorrelator - GPU types now accessible as Tracking.TrackingCUDAExt.TypeName 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ext/TrackingCUDAExt/TrackingCUDAExt.jl | 16 +++++----------- src/Tracking.jl | 12 ------------ test/downconvert_and_correlate.jl | 2 +- test/track.jl | 3 ++- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/ext/TrackingCUDAExt/TrackingCUDAExt.jl b/ext/TrackingCUDAExt/TrackingCUDAExt.jl index 747a3ec0..0b61576b 100644 --- a/ext/TrackingCUDAExt/TrackingCUDAExt.jl +++ b/ext/TrackingCUDAExt/TrackingCUDAExt.jl @@ -15,16 +15,10 @@ import Adapt # Include the GPU implementation include("downconvert_and_correlate_gpu.jl") -# Make GPU types available in the parent Tracking module -# In package extensions, export doesn't propagate to the parent module, -# so we explicitly assign them to the parent module's namespace in __init__ -function __init__() - @eval Tracking begin - GPUSatDownconvertAndCorrelator = $GPUSatDownconvertAndCorrelator - GPUSystemDownconvertAndCorrelator = $GPUSystemDownconvertAndCorrelator - GPUDownconvertAndCorrelator = $GPUDownconvertAndCorrelator - convert_code_to_texture_memory = $convert_code_to_texture_memory - end -end +# Export GPU types - accessible as Tracking.TrackingCUDAExt.GPUDownconvertAndCorrelator +export GPUSatDownconvertAndCorrelator, + GPUSystemDownconvertAndCorrelator, + GPUDownconvertAndCorrelator, + convert_code_to_texture_memory end diff --git a/src/Tracking.jl b/src/Tracking.jl index 7b6d9a04..e2db5685 100644 --- a/src/Tracking.jl +++ b/src/Tracking.jl @@ -141,16 +141,4 @@ include("conventional_pll_and_dll.jl") include("tracking_state.jl") include("track.jl") -# Pre-declare GPU types that will be assigned by TrackingCUDAExt -# These need to exist in the parent module for extensions to assign to them -function __init__() - # GPU types are assigned by TrackingCUDAExt when CUDA is loaded -end - -# Declare global variables for GPU types (assigned by extension) -global GPUSatDownconvertAndCorrelator -global GPUSystemDownconvertAndCorrelator -global GPUDownconvertAndCorrelator -global convert_code_to_texture_memory - end diff --git a/test/downconvert_and_correlate.jl b/test/downconvert_and_correlate.jl index 8a716f01..239d2ca1 100644 --- a/test/downconvert_and_correlate.jl +++ b/test/downconvert_and_correlate.jl @@ -8,12 +8,12 @@ using Pkg using Bumper: SlabBuffer using Tracking: CPUDownconvertAndCorrelator, - GPUDownconvertAndCorrelator, SystemSatsState, SatState, TrackState, downconvert_and_correlate, get_last_fully_integrated_correlator +import Tracking.TrackingCUDAExt: GPUDownconvertAndCorrelator # Helper function to check CUDA.jl version function is_cuda_below_version(version_string::String) diff --git a/test/track.jl b/test/track.jl index b415f9a6..2ddeb6b0 100644 --- a/test/track.jl +++ b/test/track.jl @@ -18,7 +18,6 @@ using Tracking: SatState, TrackState, SystemSatsState, - GPUDownconvertAndCorrelator, track, get_code_phase, get_carrier_phase, @@ -33,6 +32,8 @@ using Tracking: get_num_ants, get_default_correlator +import Tracking.TrackingCUDAExt: GPUDownconvertAndCorrelator + @testset "Tracking with signal of type $type" for type in (Int16, Int32, Int64, Float32, Float64) gpsl1 = GPSL1() From 984bdc696a646ff535a0c6fe2e8592fc14e442ac Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 11:19:03 +0100 Subject: [PATCH 10/19] docs: update README for CUDA weak dependency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Note that GPU features require explicit CUDA loading - Add GPU support section with usage example 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ef6b2724..ade45fe9 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Moreover, Tracking.jl allows tracking of signals from phased antenna arrays mean * Secondary code detection * Bit detection * Phased array tracking -* GPU acceleration (CUDA) +* GPU acceleration (requires `using CUDA`) ## Getting started @@ -32,4 +32,16 @@ Install: ```julia julia> ] pkg> add Tracking +``` + +### GPU Support + +To use GPU acceleration features, you need to explicitly load CUDA: + +```julia +using Tracking +using CUDA # Activates GPU functionality + +# GPU types are available via the extension module +correlator = Tracking.TrackingCUDAExt.GPUDownconvertAndCorrelator(...) ``` \ No newline at end of file From 7aeb3cbd9a7f5d221654f48ae8ec5cadf94314af Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 11:29:33 +0100 Subject: [PATCH 11/19] refactor: move GPU tests to extension, remove CUDA from main tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Created ext/TrackingCUDAExt/test/runtests.jl with GPU-specific tests - Extracted GPU downconvert_and_correlate tests from test/downconvert_and_correlate.jl - Extracted "Track multiple signals with GPU" test from test/track.jl - Removed CUDA imports and GPUDownconvertAndCorrelator imports from main test files - Updated test/Project.toml to remove CUDA and Pkg dependencies - Main tests now run without CUDA dependency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ext/TrackingCUDAExt/test/Project.toml | 8 + ext/TrackingCUDAExt/test/runtests.jl | 222 ++++++++++++++++++++++++++ test/Project.toml | 2 - test/downconvert_and_correlate.jl | 102 +++--------- test/track.jl | 117 +------------- 5 files changed, 255 insertions(+), 196 deletions(-) create mode 100644 ext/TrackingCUDAExt/test/Project.toml create mode 100644 ext/TrackingCUDAExt/test/runtests.jl diff --git a/ext/TrackingCUDAExt/test/Project.toml b/ext/TrackingCUDAExt/test/Project.toml new file mode 100644 index 00000000..7aa5f3a7 --- /dev/null +++ b/ext/TrackingCUDAExt/test/Project.toml @@ -0,0 +1,8 @@ +[deps] +Bumper = "8ce10254-0962-460f-a3d8-1f77fea1446e" +CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" +GNSSSignals = "52c80523-2a4e-5c38-8979-05588f836870" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +Tracking = "10b2438b-ffd4-5096-aa58-44041d5c8f3b" +Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" diff --git a/ext/TrackingCUDAExt/test/runtests.jl b/ext/TrackingCUDAExt/test/runtests.jl new file mode 100644 index 00000000..d365a1f1 --- /dev/null +++ b/ext/TrackingCUDAExt/test/runtests.jl @@ -0,0 +1,222 @@ +module TrackingCUDAExtTests + +using Test: @test, @testset, @inferred +using Unitful: Hz +using CUDA: CUDA, cu +using GNSSSignals: GPSL1, gen_code, get_code_frequency, get_code_center_frequency_ratio, get_code +using Pkg +using Bumper: SlabBuffer +using Tracking: + CPUDownconvertAndCorrelator, + SystemSatsState, + SatState, + TrackState, + downconvert_and_correlate, + get_last_fully_integrated_correlator, + track, + get_code_phase, + get_carrier_phase, + get_carrier_doppler, + get_code_doppler, + get_last_fully_integrated_filtered_prompt, + NumAnts, + get_default_correlator +import Tracking.TrackingCUDAExt: GPUDownconvertAndCorrelator + +# Helper function to check CUDA.jl version +function is_cuda_below_version(version_string::String) + cuda_version = Pkg.installed()["CUDA"] + return cuda_version < VersionNumber(version_string) +end + +@testset "GPU Downconvert and Correlate" begin + !CUDA.functional() && return + + gpsl1 = GPSL1() + sampling_frequency = 5e6Hz + code_phase = 10.5 + num_samples_signal = 5000 + intermediate_frequency = 0.0Hz + + system_sats_state = SystemSatsState( + gpsl1, + [SatState(gpsl1, 1, code_phase, 1000.0Hz), SatState(gpsl1, 2, 11.0, 500.0Hz)]; + ) + multiple_system_sats_state = (system_sats_state,) + + downconvert_and_correlator = + GPUDownconvertAndCorrelator(multiple_system_sats_state, num_samples_signal) + + track_state = TrackState(multiple_system_sats_state) + + preferred_num_code_blocks_to_integrate = 1 + + signal = cu( + gen_code( + num_samples_signal, + gpsl1, + 1, + sampling_frequency, + get_code_frequency(gpsl1) + 1000Hz * get_code_center_frequency_ratio(gpsl1), + code_phase, + ) .* cis.(2π * (0:(num_samples_signal-1)) * 1000.0Hz / sampling_frequency), + ) + + next_track_state = @inferred downconvert_and_correlate( + downconvert_and_correlator, + signal, + track_state, + preferred_num_code_blocks_to_integrate, + sampling_frequency, + intermediate_frequency, + ) + + # GPU uses floating point arithmetic and might differ a little with the fixed point arithmetic + if is_cuda_below_version("5.8.0") + @test real.( + get_last_fully_integrated_correlator(next_track_state, 1).accumulators + ) ≈ [2921, 4949, 2921] + else + # Unfortuntely, the texture index rounding is off with CUDA 5.9 TODO: report + accumulator = + real.( + get_last_fully_integrated_correlator(next_track_state, 1).accumulators + ) + @test 2900 < accumulator[1] < 3000 + @test 4900 < accumulator[2] < 5000 + @test 2900 < accumulator[3] < 3000 + end + + signal = cu( + gen_code( + num_samples_signal, + gpsl1, + 2, + sampling_frequency, + get_code_frequency(gpsl1) + 500Hz * get_code_center_frequency_ratio(gpsl1), + 11.0, + ) .* cis.(2π * (0:(num_samples_signal-1)) * 500.0Hz / sampling_frequency), + ) + + next_track_state = @inferred downconvert_and_correlate( + downconvert_and_correlator, + signal, + track_state, + preferred_num_code_blocks_to_integrate, + sampling_frequency, + intermediate_frequency, + ) + + # GPU uses floating point arithmetic and might differ a little with the fixed point arithmetic + if is_cuda_below_version("5.8.0") + @test real.( + get_last_fully_integrated_correlator(next_track_state, 2).accumulators + ) ≈ [2919, 4947, 2919] + else + # Unfortuntely, the texture index rounding is off with CUDA 5.9 TODO: report + accumulator = + real.( + get_last_fully_integrated_correlator(next_track_state, 2).accumulators + ) + @test 2900 < accumulator[1] < 3000 + @test 4900 < accumulator[2] < 5000 + @test 2900 < accumulator[3] < 3000 + end +end + +@testset "Track multiple signals with GPU" begin + !CUDA.functional() && return + gpsl1 = GPSL1() + carrier_doppler = 200Hz + start_code_phase = 100 + code_frequency = carrier_doppler / 1540 + get_code_frequency(gpsl1) + sampling_frequency = 4e6Hz + prn = 1 + range = 0:3999 + start_carrier_phase = π / 2 + + num_samples = 4000 + num_ants = NumAnts(3) + + correlator = get_default_correlator(gpsl1, num_ants) + sat_states = + [SatState(gpsl1, 1, start_code_phase, carrier_doppler - 20Hz; num_ants, correlator)] + + system_sats_state = SystemSatsState(gpsl1, sat_states) + + # TODO: Why doesn't @inferred work here? + downconvert_and_correlator = + GPUDownconvertAndCorrelator((system_sats_state,), num_samples) + + track_state = @inferred TrackState(system_sats_state) + + signal = + cis.(2π .* carrier_doppler .* range ./ sampling_frequency .+ start_carrier_phase) .* + get_code.( + gpsl1, + code_frequency .* range ./ sampling_frequency .+ start_code_phase, + prn, + ) + signal_mat = cu(repeat(signal; outer = (1, 3))) + + track_state = @inferred track( + signal_mat, + track_state, + sampling_frequency; + downconvert_and_correlator, + ) + + iterations = 2000 + code_phases = zeros(iterations) + carrier_phases = zeros(iterations) + tracked_code_phases = zeros(iterations) + tracked_carrier_phases = zeros(iterations) + tracked_code_dopplers = zeros(iterations) + tracked_carrier_dopplers = zeros(iterations) + tracked_prompts = zeros(ComplexF64, iterations) + for i = 1:iterations + carrier_phase = + mod2pi( + 2π * carrier_doppler * 4000 * i / sampling_frequency + + start_carrier_phase + + π, + ) - π + code_phase = + mod(code_frequency * 4000 * i / sampling_frequency + start_code_phase, 1023) + signal = + cis.(2π .* carrier_doppler .* range ./ sampling_frequency .+ carrier_phase) .* + get_code.( + gpsl1, + code_frequency .* range ./ sampling_frequency .+ code_phase, + prn, + ) + signal_mat = cu(repeat(signal; outer = (1, 3))) + track_state = @inferred track( + signal_mat, + track_state, + sampling_frequency; + downconvert_and_correlator, + ) + comp_carrier_phase = + mod2pi( + 2π * carrier_doppler * 4000 * (i + 1) / sampling_frequency + + start_carrier_phase + + π, + ) - π + comp_code_phase = mod( + code_frequency * 4000 * (i + 1) / sampling_frequency + start_code_phase, + 1023, + ) + tracked_code_phases[i] = get_code_phase(track_state) + tracked_carrier_phases[i] = get_carrier_phase(track_state) + tracked_carrier_dopplers[i] = get_carrier_doppler(track_state) / Hz + tracked_code_dopplers[i] = get_code_doppler(track_state) / Hz + tracked_prompts[i] = get_last_fully_integrated_filtered_prompt(track_state) + code_phases[i] = comp_code_phase + carrier_phases[i] = comp_carrier_phase + end + @test tracked_code_phases[end] ≈ code_phases[end] atol = 1e-2 + @test tracked_carrier_phases[end] + π ≈ carrier_phases[end] atol = 5e-5 +end + +end diff --git a/test/Project.toml b/test/Project.toml index 1d5d11ce..8cb1fb5d 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -2,11 +2,9 @@ Acquisition = "d4bbf60b-102b-5ffb-8f97-a7ea5817e69f" BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" Bumper = "8ce10254-0962-460f-a3d8-1f77fea1446e" -CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" GNSSSignals = "52c80523-2a4e-5c38-8979-05588f836870" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" diff --git a/test/downconvert_and_correlate.jl b/test/downconvert_and_correlate.jl index 239d2ca1..cf9f16e3 100644 --- a/test/downconvert_and_correlate.jl +++ b/test/downconvert_and_correlate.jl @@ -2,9 +2,7 @@ module DownconvertAndCorrelateTest using Test: @test, @testset, @inferred using Unitful: Hz -using CUDA: CUDA, cu using GNSSSignals: GPSL1, gen_code, get_code_frequency, get_code_center_frequency_ratio -using Pkg using Bumper: SlabBuffer using Tracking: CPUDownconvertAndCorrelator, @@ -13,22 +11,13 @@ using Tracking: TrackState, downconvert_and_correlate, get_last_fully_integrated_correlator -import Tracking.TrackingCUDAExt: GPUDownconvertAndCorrelator - -# Helper function to check CUDA.jl version -function is_cuda_below_version(version_string::String) - cuda_version = Pkg.installed()["CUDA"] - return cuda_version < VersionNumber(version_string) -end @testset "Downconvert and Correlator" begin downconvert_and_correlator = CPUDownconvertAndCorrelator(Val(5e6Hz)) @test downconvert_and_correlator.buffer isa SlabBuffer end -@testset "Downconvert and correlate with $type" for type in (:CPU, :GPU) - type == :GPU && !CUDA.functional() && return - +@testset "Downconvert and correlate with CPU" begin gpsl1 = GPSL1() sampling_frequency = 5e6Hz code_phase = 10.5 @@ -44,25 +33,20 @@ end maximum_expected_sampling_frequency = Val(sampling_frequency) downconvert_and_correlator = - type == :CPU ? CPUDownconvertAndCorrelator(maximum_expected_sampling_frequency) : - GPUDownconvertAndCorrelator(multiple_system_sats_state, num_samples_signal) - - array_transform = type == :CPU ? Array : cu + CPUDownconvertAndCorrelator(maximum_expected_sampling_frequency) track_state = TrackState(multiple_system_sats_state) preferred_num_code_blocks_to_integrate = 1 - signal = array_transform( - gen_code( - num_samples_signal, - gpsl1, - 1, - sampling_frequency, - get_code_frequency(gpsl1) + 1000Hz * get_code_center_frequency_ratio(gpsl1), - code_phase, - ) .* cis.(2π * (0:(num_samples_signal-1)) * 1000.0Hz / sampling_frequency), - ) + signal = gen_code( + num_samples_signal, + gpsl1, + 1, + sampling_frequency, + get_code_frequency(gpsl1) + 1000Hz * get_code_center_frequency_ratio(gpsl1), + code_phase, + ) .* cis.(2π * (0:(num_samples_signal-1)) * 1000.0Hz / sampling_frequency) next_track_state = @inferred downconvert_and_correlate( downconvert_and_correlator, @@ -73,38 +57,18 @@ end intermediate_frequency, ) - # GPU uses floating point arithmetic and might differ a little with the fixed point arithmetic - if type == :CPU - @test real.( - get_last_fully_integrated_correlator(next_track_state, 1).accumulators - ) ≈ [2921, 4949, 2917] - else - if is_cuda_below_version("5.8.0") - @test real.( - get_last_fully_integrated_correlator(next_track_state, 1).accumulators - ) ≈ [2921, 4949, 2921] - else - # Unfortuntely, the texture index rounding is off with CUDA 5.9 TODO: report - accumulator = - real.( - get_last_fully_integrated_correlator(next_track_state, 1).accumulators - ) - @test 2900 < accumulator[1] < 3000 - @test 4900 < accumulator[2] < 5000 - @test 2900 < accumulator[3] < 3000 - end - end + @test real.( + get_last_fully_integrated_correlator(next_track_state, 1).accumulators + ) ≈ [2921, 4949, 2917] - signal = array_transform( - gen_code( - num_samples_signal, - gpsl1, - 2, - sampling_frequency, - get_code_frequency(gpsl1) + 500Hz * get_code_center_frequency_ratio(gpsl1), - 11.0, - ) .* cis.(2π * (0:(num_samples_signal-1)) * 500.0Hz / sampling_frequency), - ) + signal = gen_code( + num_samples_signal, + gpsl1, + 2, + sampling_frequency, + get_code_frequency(gpsl1) + 500Hz * get_code_center_frequency_ratio(gpsl1), + 11.0, + ) .* cis.(2π * (0:(num_samples_signal-1)) * 500.0Hz / sampling_frequency) next_track_state = @inferred downconvert_and_correlate( downconvert_and_correlator, @@ -115,27 +79,9 @@ end intermediate_frequency, ) - # GPU uses floating point arithmetic and might differ a little with the fixed point arithmetic - if type == :CPU - @test real.( - get_last_fully_integrated_correlator(next_track_state, 2).accumulators - ) ≈ [2919, 4947, 2915] - else - if is_cuda_below_version("5.8.0") - @test real.( - get_last_fully_integrated_correlator(next_track_state, 2).accumulators - ) ≈ [2919, 4947, 2919] - else - # Unfortuntely, the texture index rounding is off with CUDA 5.9 TODO: report - accumulator = - real.( - get_last_fully_integrated_correlator(next_track_state, 2).accumulators - ) - @test 2900 < accumulator[1] < 3000 - @test 4900 < accumulator[2] < 5000 - @test 2900 < accumulator[3] < 3000 - end - end + @test real.( + get_last_fully_integrated_correlator(next_track_state, 2).accumulators + ) ≈ [2919, 4947, 2915] end end diff --git a/test/track.jl b/test/track.jl index 2ddeb6b0..479048d5 100644 --- a/test/track.jl +++ b/test/track.jl @@ -4,7 +4,6 @@ using Test: @test, @testset, @inferred using Random: Random using Unitful: Hz, kHz, MHz using Statistics: mean -using CUDA: CUDA, cu using GNSSSignals: GPSL1, GPSL5, @@ -29,10 +28,7 @@ using Tracking: get_last_fully_integrated_filtered_prompt, get_code_length, NumAnts, - get_num_ants, - get_default_correlator - -import Tracking.TrackingCUDAExt: GPUDownconvertAndCorrelator + get_num_ants @testset "Tracking with signal of type $type" for type in (Int16, Int32, Int64, Float32, Float64) @@ -491,115 +487,4 @@ end # plot(imag.(tracked_prompts)) end -@testset "Track multiple signals with GPU" begin - !CUDA.functional() && return - gpsl1 = GPSL1() - carrier_doppler = 200Hz - start_code_phase = 100 - code_frequency = carrier_doppler / 1540 + get_code_frequency(gpsl1) - sampling_frequency = 4e6Hz - prn = 1 - range = 0:3999 - start_carrier_phase = π / 2 - - num_samples = 4000 - num_ants = NumAnts(3) - - correlator = get_default_correlator(gpsl1, num_ants) - sat_states = - [SatState(gpsl1, 1, start_code_phase, carrier_doppler - 20Hz; num_ants, correlator)] - - system_sats_state = SystemSatsState(gpsl1, sat_states) - - # TODO: Why doesn't @inferred work here? - downconvert_and_correlator = - GPUDownconvertAndCorrelator((system_sats_state,), num_samples) - - track_state = @inferred TrackState(system_sats_state) - - signal = - cis.(2π .* carrier_doppler .* range ./ sampling_frequency .+ start_carrier_phase) .* - get_code.( - gpsl1, - code_frequency .* range ./ sampling_frequency .+ start_code_phase, - prn, - ) - signal_mat = cu(repeat(signal; outer = (1, 3))) - - track_state = @inferred track( - signal_mat, - track_state, - sampling_frequency; - downconvert_and_correlator, - ) - - iterations = 2000 - code_phases = zeros(iterations) - carrier_phases = zeros(iterations) - tracked_code_phases = zeros(iterations) - tracked_carrier_phases = zeros(iterations) - tracked_code_dopplers = zeros(iterations) - tracked_carrier_dopplers = zeros(iterations) - tracked_prompts = zeros(ComplexF64, iterations) - for i = 1:iterations - carrier_phase = - mod2pi( - 2π * carrier_doppler * 4000 * i / sampling_frequency + - start_carrier_phase + - π, - ) - π - code_phase = - mod(code_frequency * 4000 * i / sampling_frequency + start_code_phase, 1023) - signal = - cis.(2π .* carrier_doppler .* range ./ sampling_frequency .+ carrier_phase) .* - get_code.( - gpsl1, - code_frequency .* range ./ sampling_frequency .+ code_phase, - prn, - ) - signal_mat = cu(repeat(signal; outer = (1, 3))) - track_state = @inferred track( - signal_mat, - track_state, - sampling_frequency; - downconvert_and_correlator, - ) - comp_carrier_phase = - mod2pi( - 2π * carrier_doppler * 4000 * (i + 1) / sampling_frequency + - start_carrier_phase + - π, - ) - π - comp_code_phase = mod( - code_frequency * 4000 * (i + 1) / sampling_frequency + start_code_phase, - 1023, - ) - tracked_code_phases[i] = get_code_phase(track_state) - tracked_carrier_phases[i] = get_carrier_phase(track_state) - tracked_carrier_dopplers[i] = get_carrier_doppler(track_state) / Hz - tracked_code_dopplers[i] = get_code_doppler(track_state) / Hz - tracked_prompts[i] = get_last_fully_integrated_filtered_prompt(track_state) - code_phases[i] = comp_code_phase - carrier_phases[i] = comp_carrier_phase - end - @test tracked_code_phases[end] ≈ code_phases[end] atol = 1e-2 - @test tracked_carrier_phases[end] + π ≈ carrier_phases[end] atol = 5e-5 - - # using PyPlot - # pygui(true) - # figure("carrier_phases") - # plot(tracked_carrier_phases) - # plot(carrier_phases) - # grid(true) - # figure("Code Phases") - # plot(300 * (tracked_code_phases .- code_phases)) - # figure("Carrier Doppler") - # plot(tracked_carrier_dopplers) - # figure("Code Doppler") - # plot(tracked_code_dopplers) - # figure("Prompt") - # plot(real.(tracked_prompts)) - # plot(imag.(tracked_prompts)) -end - end From 51e3ca01017e9eea65d105d726503044f6b9a894 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 11:36:17 +0100 Subject: [PATCH 12/19] fix: use Base.get_extension to access GPU types in extension tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated extension tests to properly access GPU types using Base.get_extension instead of direct module reference, which is the correct pattern for Julia package extensions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ext/TrackingCUDAExt/test/Manifest.toml | 1013 ++++++++++++++++++++++++ ext/TrackingCUDAExt/test/runtests.jl | 6 +- 2 files changed, 1018 insertions(+), 1 deletion(-) create mode 100644 ext/TrackingCUDAExt/test/Manifest.toml diff --git a/ext/TrackingCUDAExt/test/Manifest.toml b/ext/TrackingCUDAExt/test/Manifest.toml new file mode 100644 index 00000000..7d4eff62 --- /dev/null +++ b/ext/TrackingCUDAExt/test/Manifest.toml @@ -0,0 +1,1013 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.12.0" +manifest_format = "2.0" +project_hash = "d25b289dbcf88dd738126dd88597e4f8204d5b68" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + + [deps.AbstractFFTs.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "3b86719127f50670efe356bc11073d84b4ed7a5d" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.42" + + [deps.Accessors.extensions] + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.Acquisition]] +deps = ["DocStringExtensions", "FFTW", "GNSSSignals", "LinearAlgebra", "LoopVectorization", "RecipesBase", "Statistics", "Unitful"] +git-tree-sha1 = "3cc336e026cf3b088508e37c3a27642abb528983" +uuid = "d4bbf60b-102b-5ffb-8f97-a7ea5817e69f" +version = "0.1.1" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.4.0" +weakdeps = ["SparseArrays", "StaticArrays"] + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "d81ae5489e13bc03567d4fbbb06c546a5e53c857" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.22.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "29bb0eb6f578a587a49da16564705968667f5fa8" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "1.1.2" + + [deps.Atomix.extensions] + AtomixCUDAExt = "CUDA" + AtomixMetalExt = "Metal" + AtomixOpenCLExt = "OpenCL" + AtomixoneAPIExt = "oneAPI" + + [deps.Atomix.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2" + oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" + +[[deps.BFloat16s]] +deps = ["LinearAlgebra", "Printf", "Random"] +git-tree-sha1 = "0a6d6d072cb5f2baeba7667023075801f6ea4a7d" +uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" +version = "0.6.0" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.BitTwiddlingConvenienceFunctions]] +deps = ["Static"] +git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" +uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" +version = "0.1.6" + +[[deps.Bumper]] +deps = ["UnsafeArrays"] +git-tree-sha1 = "e3cd36a329dc00c8ced78cc0e89edada02763f40" +uuid = "8ce10254-0962-460f-a3d8-1f77fea1446e" +version = "0.7.1" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Preferences", "Static"] +git-tree-sha1 = "f3a21d7fc84ba618a779d1ed2fcca2e682865bab" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.7" + +[[deps.CUDA]] +deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Compiler_jll", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "DataFrames", "ExprTools", "GPUArrays", "GPUCompiler", "GPUToolbox", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "StaticArrays", "Statistics", "demumble_jll"] +git-tree-sha1 = "38b6a1fe14fba13cdc0a44ecd2485eb5f7e16ca0" +uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" +version = "5.9.4" + + [deps.CUDA.extensions] + ChainRulesCoreExt = "ChainRulesCore" + EnzymeCoreExt = "EnzymeCore" + SparseMatricesCSRExt = "SparseMatricesCSR" + SpecialFunctionsExt = "SpecialFunctions" + + [deps.CUDA.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.CUDA_Compiler_jll]] +deps = ["Artifacts", "CUDA_Driver_jll", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "b63428872a0f60d87832f5899369837cd930b76d" +uuid = "d1e2174e-dfdc-576e-b43e-73b79eb1aca8" +version = "0.3.0+0" + +[[deps.CUDA_Driver_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "2023be0b10c56d259ea84a94dbfc021aa452f2c6" +uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" +version = "13.0.2+0" + +[[deps.CUDA_Runtime_Discovery]] +deps = ["Libdl"] +git-tree-sha1 = "f9a521f52d236fe49f1028d69e549e7f2644bb72" +uuid = "1af6417a-86b4-443c-805f-a4643ffb695f" +version = "1.0.0" + +[[deps.CUDA_Runtime_jll]] +deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "92cd84e2b760e471d647153ea5efc5789fc5e8b2" +uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" +version = "0.19.2+0" + +[[deps.CloseOpenIntervals]] +deps = ["Static", "StaticArrayInterface"] +git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" +uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" +version = "0.1.13" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.13.1" + +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.0.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.3.0+1" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConstructionBase]] +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.6.0" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.CpuId]] +deps = ["Markdown"] +git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" +uuid = "adafc99b-e345-5852-983c-f28acb93d879" +version = "0.3.1" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.8.1" + +[[deps.DataStructures]] +deps = ["OrderedCollections"] +git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.19.3" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" + +[[deps.Dictionaries]] +deps = ["Indexing", "Random", "Serialization"] +git-tree-sha1 = "a86af9c4c4f33e16a2b2ff43c2113b2f390081fa" +uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" +version = "0.4.5" + +[[deps.DocStringExtensions]] +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.5" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.10.0" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6d6219a004b8cf1e0b4dbe27a2860b8e04eba0be" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.11+0" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +version = "1.11.0" + +[[deps.GNSSSignals]] +deps = ["DocStringExtensions", "FixedPointNumbers", "Statistics", "Unitful"] +git-tree-sha1 = "a648025284d2f826c93defa5b0021a6991a08d68" +uuid = "52c80523-2a4e-5c38-8979-05588f836870" +version = "0.17.3" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "KernelAbstractions", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "ScopedValues", "Serialization", "Statistics"] +git-tree-sha1 = "8ddb438e956891a63a5367d7fab61550fc720026" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "11.2.6" + + [deps.GPUArrays.extensions] + JLD2Ext = "JLD2" + + [deps.GPUArrays.weakdeps] + JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.2.0" + +[[deps.GPUCompiler]] +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "Tracy", "UUIDs"] +git-tree-sha1 = "90554fe518adab1b4c8f7a04d26c414482a240ca" +uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" +version = "1.7.4" + +[[deps.GPUToolbox]] +deps = ["LLVM"] +git-tree-sha1 = "9e9186b09a13b7f094f87d1a9bb266d8780e1b1c" +uuid = "096a3bc2-3ced-46d0-87f4-dd12716f4bfc" +version = "1.0.0" + +[[deps.HashArrayMappedTries]] +git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" +uuid = "076d061b-32b6-4027-95e0-9a2c6f6d7e74" +version = "0.2.0" + +[[deps.HostCPUFeatures]] +deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] +git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" +uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" +version = "0.1.17" + +[[deps.IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + +[[deps.Indexing]] +git-tree-sha1 = "ce1566720fd6b19ff3411404d4b977acd4814f9f" +uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" +version = "1.1.1" + +[[deps.InlineStrings]] +git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.5" + + [deps.InlineStrings.extensions] + ArrowTypesExt = "ArrowTypes" + ParsersExt = "Parsers" + + [deps.InlineStrings.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2025.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[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.InvertedIndices]] +git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.1" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.1" + +[[deps.JuliaNVTXCallbacks_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "af433a10f3942e882d3c671aacb203e006a5808f" +uuid = "9c1d0b0a-7046-5b2e-a33f-ea22f176ac7e" +version = "0.2.1+0" + +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "MacroTools", "PrecompileTools", "Requires", "StaticArrays", "UUIDs"] +git-tree-sha1 = "b5a371fcd1d989d844a4354127365611ae1e305f" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.39" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + LinearAlgebraExt = "LinearAlgebra" + SparseArraysExt = "SparseArrays" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Unicode"] +git-tree-sha1 = "ce8614210409eaa54ed5968f4b50aa96da7ae543" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "9.4.4" +weakdeps = ["BFloat16s"] + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "8e76807afb59ebb833e9b131ebf1a8c006510f33" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.38+0" + +[[deps.LLVMLoopInfo]] +git-tree-sha1 = "2e5c102cfc41f48ae4740c7eca7743cc7e7b75ea" +uuid = "8b046642-f1f6-4319-8d3c-209ddc03c586" +version = "1.0.0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.4.0" + +[[deps.LayoutPointers]] +deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" +uuid = "10f19ff3-798f-405d-979b-55457f8fc047" +version = "0.1.17" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.11.1+1" + +[[deps.LibGit2]] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.9.0+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.3+1" + +[[deps.LibTracyClient_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d2bc4e1034b2d43076b50f0e34ea094c2cb0a717" +uuid = "ad6e5548-8b26-5c9f-8ef3-ef0ad883f3a5" +version = "0.9.1+6" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.12.0" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" + +[[deps.LoopVectorization]] +deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +git-tree-sha1 = "a9fc7883eb9b5f04f46efb9a540833d1fad974b3" +uuid = "bdcacae8-1622-11e9-2a5c-532679323890" +version = "0.12.173" + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + ForwardDiffNNlibExt = ["ForwardDiff", "NNlib"] + SpecialFunctionsExt = "SpecialFunctions" + + [deps.LoopVectorization.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2025.2.0+0" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + +[[deps.Markdown]] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2025.5.20" + +[[deps.NVTX]] +deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] +git-tree-sha1 = "6b573a3e66decc7fc747afd1edbf083ff78c813a" +uuid = "5da4648a-3479-48b8-97b9-01cb529c0a1f" +version = "1.0.1" + +[[deps.NVTX_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "af2232f69447494514c25742ba1503ec7e9877fe" +uuid = "e98f9f5b-d649-5603-91fd-7774390e6439" +version = "3.2.2+0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.3.0" + +[[deps.OffsetArrays]] +git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.17.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.29+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.5.1+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.1" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.12.0" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" + +[[deps.PolyesterWeave]] +deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] +git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" +uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" +version = "0.2.2" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.3.3" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.0" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "2542fd0b9476562d80b65d00968c9c5286d5917b" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "3.1.1" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.REPL]] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.11.0" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.Random123]] +deps = ["Random", "RandomNumbers"] +git-tree-sha1 = "dbe5fd0b334694e905cb9fda73cd8554333c46e2" +uuid = "74087812-796a-5b5d-8853-05524746bad3" +version = "1.7.1" + +[[deps.RandomNumbers]] +deps = ["Random"] +git-tree-sha1 = "c6ec94d2aaba1ab2ff983052cf6a606ca5985902" +uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" +version = "1.6.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SLEEFPirates]] +deps = ["IfElse", "Static", "VectorizationBase"] +git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" +uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" +version = "0.6.43" + +[[deps.SciMLPublic]] +git-tree-sha1 = "ed647f161e8b3f2973f24979ec074e8d084f1bee" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.0.0" + +[[deps.ScopedValues]] +deps = ["HashArrayMappedTries", "Logging"] +git-tree-sha1 = "c3b2323466378a2ba15bea4b2f73b081e022f473" +uuid = "7e506255-f358-4e82-b7e4-beb19740aa63" +version = "1.5.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.3.0" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.8" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.2" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.12.0" + +[[deps.Static]] +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "1.3.1" + +[[deps.StaticArrayInterface]] +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] +git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" +uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" +version = "1.8.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "b8693004b385c842357406e3af647701fe783f98" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.15" + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + + [deps.StaticArrays.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "725421ae8e530ec29bcbdddbe91ff8053421d023" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.4.1" + +[[deps.StructArrays]] +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.7.2" +weakdeps = ["Adapt", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "SparseArrays", "StaticArrays"] + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] + StructArraysLinearAlgebraExt = "LinearAlgebra" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" + +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.8.3+2" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.12.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" + +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "d969183d3d244b6c33796b5ed01ab97328f2db85" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.5" + +[[deps.Tracking]] +deps = ["Accessors", "Acquisition", "Adapt", "Bumper", "ConstructionBase", "Dictionaries", "DocStringExtensions", "GNSSSignals", "LinearAlgebra", "LoopVectorization", "StaticArrays", "StructArrays", "TrackingLoopFilters", "Unitful"] +path = "../../.." +uuid = "10b2438b-ffd4-5096-aa58-44041d5c8f3b" +version = "0.15.8" +weakdeps = ["CUDA"] + + [deps.Tracking.extensions] + TrackingCUDAExt = "CUDA" + +[[deps.TrackingLoopFilters]] +deps = ["DocStringExtensions", "LinearAlgebra", "Test", "Unitful"] +git-tree-sha1 = "dc5a48bc1188de3ac05b3cd021a26190bff79084" +uuid = "0814aff9-93cb-554c-9fff-9bf1cfdb5efa" +version = "0.1.2" + +[[deps.Tracy]] +deps = ["ExprTools", "LibTracyClient_jll", "Libdl"] +git-tree-sha1 = "73e3ff50fd3990874c59fef0f35d10644a1487bc" +uuid = "e689c965-62c8-4b79-b2c5-8359227902fd" +version = "0.1.6" + + [deps.Tracy.extensions] + TracyProfilerExt = "TracyProfiler_jll" + + [deps.Tracy.weakdeps] + TracyProfiler_jll = "0c351ed6-8a68-550e-8b79-de6f926da83c" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "83360bda12f61c250835830cc40b64f487cc2230" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.25.1" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + ForwardDiffExt = "ForwardDiff" + InverseFunctionsUnitfulExt = "InverseFunctions" + LatexifyExt = ["Latexify", "LaTeXStrings"] + PrintfExt = "Printf" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" + Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" + Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.UnsafeArrays]] +git-tree-sha1 = "efcbb6828697ffffc245a9de7300552535abe005" +uuid = "c4a57d5a-5b31-53a6-b365-19f8c011fbd6" +version = "1.0.8" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "b13c4edda90890e5b04ba24e20a310fbe6f249ff" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.3.0" +weakdeps = ["LLVM"] + + [deps.UnsafeAtomics.extensions] + UnsafeAtomicsLLVM = ["LLVM"] + +[[deps.VectorizationBase]] +deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "d1d9a935a26c475ebffd54e9c7ad11627c43ea85" +uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" +version = "0.21.72" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.3.1+2" + +[[deps.demumble_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6498e3581023f8e530f34760d18f75a69e3a4ea8" +uuid = "1e29f10c-031c-5a83-9565-69cddfc27673" +version = "1.3.0+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.13.1+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.64.0+1" + +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "1350188a69a6e46f799d3945beef36435ed7262f" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2022.0.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.5.0+2" diff --git a/ext/TrackingCUDAExt/test/runtests.jl b/ext/TrackingCUDAExt/test/runtests.jl index d365a1f1..dcfe9b3b 100644 --- a/ext/TrackingCUDAExt/test/runtests.jl +++ b/ext/TrackingCUDAExt/test/runtests.jl @@ -2,6 +2,7 @@ module TrackingCUDAExtTests using Test: @test, @testset, @inferred using Unitful: Hz +using Tracking using CUDA: CUDA, cu using GNSSSignals: GPSL1, gen_code, get_code_frequency, get_code_center_frequency_ratio, get_code using Pkg @@ -21,7 +22,10 @@ using Tracking: get_last_fully_integrated_filtered_prompt, NumAnts, get_default_correlator -import Tracking.TrackingCUDAExt: GPUDownconvertAndCorrelator + +# Access extension types via Base.get_extension +const TrackingCUDAExt = Base.get_extension(Tracking, :TrackingCUDAExt) +const GPUDownconvertAndCorrelator = TrackingCUDAExt.GPUDownconvertAndCorrelator # Helper function to check CUDA.jl version function is_cuda_below_version(version_string::String) From c85b15b20da289d5056f9936f16cc4015189f1ae Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 11:40:01 +0100 Subject: [PATCH 13/19] ci: update Buildkite pipeline to run GPU extension tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated the CI pipeline to test GPU functionality from the extension tests instead of the main test suite, since GPU tests have been moved to ext/TrackingCUDAExt/test/. Changes: - Run GPU extension tests directly using the extension test environment - First instantiate the extension test dependencies - Then execute the GPU test suite - Removed standard julia-test plugin in favor of custom commands 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .buildkite/pipeline.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 7e5d1452..8402d9bc 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -2,25 +2,25 @@ env: SECRET_CODECOV_TOKEN: "Q3fuMdJjaQy9h/uk43rwSqz8M6ulvlCedU2Ir0S3QLP4t9F8cf7pzrTkX+nVhkGycZ/r5FRtTOwPr445R3wK5v9mEAsJN5GMOgI5w/L8m2XDwLmW3PN8RMno+fm2JVxZyPMNNmIQqbYEmmQcBS6Q3nywW3xi0Cl5umJuwDB+NdOFbpq3wc2wrnbOAbwlBJoCJmlH+F4ncuVY6EMmsgNKAf9RqUNWQxIthG616X1cNwuYEpL4dO/PWY2GMXWXTQ8ndO/713p4b5yIlzDP0mr2MrO+1A5fhgPc7Vr+f9mUlIAx+9AsWQYPrqPTkr2L5+mfaTodVE3u2Cop877WJZQD7w==;U2FsdGVkX1/wk2jzfWlRZ66IWgionQK/5Fu0pg3u0b26hhmmMjAjOklyi7QZKhJHjjt4KjK/dJzhd3eK28S0qQ==" steps: - - label: "Julia v1.10" + - label: "Julia v1.10 - GPU Tests" plugins: - JuliaCI/julia#v1: version: "1.10" - - JuliaCI/julia-test#v1: ~ - - JuliaCI/julia-coverage#v1: - codecov: true + commands: + - julia --project=ext/TrackingCUDAExt/test -e 'using Pkg; Pkg.instantiate()' + - julia --project=ext/TrackingCUDAExt/test ext/TrackingCUDAExt/test/runtests.jl agents: queue: "juliagpu" cuda: "*" if: build.message !~ /\[skip tests\]/ timeout_in_minutes: 60 - - label: "Julia v1.11" + - label: "Julia v1.11 - GPU Tests" plugins: - JuliaCI/julia#v1: version: "1.11" - - JuliaCI/julia-test#v1: ~ - - JuliaCI/julia-coverage#v1: - codecov: true + commands: + - julia --project=ext/TrackingCUDAExt/test -e 'using Pkg; Pkg.instantiate()' + - julia --project=ext/TrackingCUDAExt/test ext/TrackingCUDAExt/test/runtests.jl agents: queue: "juliagpu" cuda: "*" From 9ea4f657bbcfa7c92e19ed823a1f571d3bb58026 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 12:24:58 +0100 Subject: [PATCH 14/19] fix: add Pkg.develop in CI to properly resolve Tracking dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CI was failing because Pkg.instantiate() alone doesn't resolve the local Tracking package's dependencies (like Statistics). Adding Pkg.develop(PackageSpec(path=pwd())) before instantiate ensures all transitive dependencies are properly resolved. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .buildkite/pipeline.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 8402d9bc..78d4f3e7 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -7,7 +7,7 @@ steps: - JuliaCI/julia#v1: version: "1.10" commands: - - julia --project=ext/TrackingCUDAExt/test -e 'using Pkg; Pkg.instantiate()' + - julia --project=ext/TrackingCUDAExt/test -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' - julia --project=ext/TrackingCUDAExt/test ext/TrackingCUDAExt/test/runtests.jl agents: queue: "juliagpu" @@ -19,7 +19,7 @@ steps: - JuliaCI/julia#v1: version: "1.11" commands: - - julia --project=ext/TrackingCUDAExt/test -e 'using Pkg; Pkg.instantiate()' + - julia --project=ext/TrackingCUDAExt/test -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' - julia --project=ext/TrackingCUDAExt/test ext/TrackingCUDAExt/test/runtests.jl agents: queue: "juliagpu" From db294df10e38f5cfd7ec75402c9cba282c4285a7 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 12:26:57 +0100 Subject: [PATCH 15/19] chore: remove extension test Manifest.toml from git tracking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extension test Manifest.toml files are environment-specific and should not be tracked in git. Added pattern to .gitignore to exclude all extension test Manifests. These files are regenerated by CI via Pkg.instantiate(). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .gitignore | 1 + ext/TrackingCUDAExt/test/Manifest.toml | 1013 ------------------------ 2 files changed, 1 insertion(+), 1013 deletions(-) delete mode 100644 ext/TrackingCUDAExt/test/Manifest.toml diff --git a/.gitignore b/.gitignore index 43001948..2f01efcb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.jl.mem /Manifest.toml test/Manifest.toml +ext/**/test/Manifest.toml docs/build/ docs/pdf/build/ diff --git a/ext/TrackingCUDAExt/test/Manifest.toml b/ext/TrackingCUDAExt/test/Manifest.toml deleted file mode 100644 index 7d4eff62..00000000 --- a/ext/TrackingCUDAExt/test/Manifest.toml +++ /dev/null @@ -1,1013 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.12.0" -manifest_format = "2.0" -project_hash = "d25b289dbcf88dd738126dd88597e4f8204d5b68" - -[[deps.AbstractFFTs]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.5.0" - - [deps.AbstractFFTs.extensions] - AbstractFFTsChainRulesCoreExt = "ChainRulesCore" - AbstractFFTsTestExt = "Test" - - [deps.AbstractFFTs.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] -git-tree-sha1 = "3b86719127f50670efe356bc11073d84b4ed7a5d" -uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.42" - - [deps.Accessors.extensions] - AxisKeysExt = "AxisKeys" - IntervalSetsExt = "IntervalSets" - LinearAlgebraExt = "LinearAlgebra" - StaticArraysExt = "StaticArrays" - StructArraysExt = "StructArrays" - TestExt = "Test" - UnitfulExt = "Unitful" - - [deps.Accessors.weakdeps] - AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - -[[deps.Acquisition]] -deps = ["DocStringExtensions", "FFTW", "GNSSSignals", "LinearAlgebra", "LoopVectorization", "RecipesBase", "Statistics", "Unitful"] -git-tree-sha1 = "3cc336e026cf3b088508e37c3a27642abb528983" -uuid = "d4bbf60b-102b-5ffb-8f97-a7ea5817e69f" -version = "0.1.1" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.4.0" -weakdeps = ["SparseArrays", "StaticArrays"] - - [deps.Adapt.extensions] - AdaptSparseArraysExt = "SparseArrays" - AdaptStaticArraysExt = "StaticArrays" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.2" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "d81ae5489e13bc03567d4fbbb06c546a5e53c857" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.22.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] - ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" - ArrayInterfaceChainRulesExt = "ChainRules" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceMetalExt = "Metal" - ArrayInterfaceReverseDiffExt = "ReverseDiff" - ArrayInterfaceSparseArraysExt = "SparseArrays" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - Metal = "dde4c033-4e86-420c-a63e-0dd931031962" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" -version = "1.11.0" - -[[deps.Atomix]] -deps = ["UnsafeAtomics"] -git-tree-sha1 = "29bb0eb6f578a587a49da16564705968667f5fa8" -uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" -version = "1.1.2" - - [deps.Atomix.extensions] - AtomixCUDAExt = "CUDA" - AtomixMetalExt = "Metal" - AtomixOpenCLExt = "OpenCL" - AtomixoneAPIExt = "oneAPI" - - [deps.Atomix.weakdeps] - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - Metal = "dde4c033-4e86-420c-a63e-0dd931031962" - OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2" - oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" - -[[deps.BFloat16s]] -deps = ["LinearAlgebra", "Printf", "Random"] -git-tree-sha1 = "0a6d6d072cb5f2baeba7667023075801f6ea4a7d" -uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" -version = "0.6.0" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" -version = "1.11.0" - -[[deps.BitTwiddlingConvenienceFunctions]] -deps = ["Static"] -git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" -uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.6" - -[[deps.Bumper]] -deps = ["UnsafeArrays"] -git-tree-sha1 = "e3cd36a329dc00c8ced78cc0e89edada02763f40" -uuid = "8ce10254-0962-460f-a3d8-1f77fea1446e" -version = "0.7.1" - -[[deps.CEnum]] -git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.5.0" - -[[deps.CPUSummary]] -deps = ["CpuId", "IfElse", "PrecompileTools", "Preferences", "Static"] -git-tree-sha1 = "f3a21d7fc84ba618a779d1ed2fcca2e682865bab" -uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.7" - -[[deps.CUDA]] -deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Compiler_jll", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "DataFrames", "ExprTools", "GPUArrays", "GPUCompiler", "GPUToolbox", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "StaticArrays", "Statistics", "demumble_jll"] -git-tree-sha1 = "38b6a1fe14fba13cdc0a44ecd2485eb5f7e16ca0" -uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" -version = "5.9.4" - - [deps.CUDA.extensions] - ChainRulesCoreExt = "ChainRulesCore" - EnzymeCoreExt = "EnzymeCore" - SparseMatricesCSRExt = "SparseMatricesCSR" - SpecialFunctionsExt = "SpecialFunctions" - - [deps.CUDA.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" - SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" - -[[deps.CUDA_Compiler_jll]] -deps = ["Artifacts", "CUDA_Driver_jll", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "b63428872a0f60d87832f5899369837cd930b76d" -uuid = "d1e2174e-dfdc-576e-b43e-73b79eb1aca8" -version = "0.3.0+0" - -[[deps.CUDA_Driver_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "2023be0b10c56d259ea84a94dbfc021aa452f2c6" -uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" -version = "13.0.2+0" - -[[deps.CUDA_Runtime_Discovery]] -deps = ["Libdl"] -git-tree-sha1 = "f9a521f52d236fe49f1028d69e549e7f2644bb72" -uuid = "1af6417a-86b4-443c-805f-a4643ffb695f" -version = "1.0.0" - -[[deps.CUDA_Runtime_jll]] -deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "92cd84e2b760e471d647153ea5efc5789fc5e8b2" -uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" -version = "0.19.2+0" - -[[deps.CloseOpenIntervals]] -deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" -uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.13" - -[[deps.ColorTypes]] -deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" -uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.12.1" -weakdeps = ["StyledStrings"] - - [deps.ColorTypes.extensions] - StyledStringsExt = "StyledStrings" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.13.1" - -[[deps.CommonWorldInvalidations]] -git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" -uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" -version = "1.0.0" - -[[deps.Compat]] -deps = ["TOML", "UUIDs"] -git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.18.1" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.3.0+1" - -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" -weakdeps = ["InverseFunctions"] - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - -[[deps.ConstructionBase]] -git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.6.0" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseLinearAlgebraExt = "LinearAlgebra" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.CpuId]] -deps = ["Markdown"] -git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" -uuid = "adafc99b-e345-5852-983c-f28acb93d879" -version = "0.3.1" - -[[deps.Crayons]] -git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" -uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" -version = "4.1.1" - -[[deps.DataAPI]] -git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.16.0" - -[[deps.DataFrames]] -deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" -uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.8.1" - -[[deps.DataStructures]] -deps = ["OrderedCollections"] -git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.19.3" - -[[deps.DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -version = "1.11.0" - -[[deps.Dictionaries]] -deps = ["Indexing", "Random", "Serialization"] -git-tree-sha1 = "a86af9c4c4f33e16a2b2ff43c2113b2f390081fa" -uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" -version = "0.4.5" - -[[deps.DocStringExtensions]] -git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.5" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.ExprTools]] -git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" -uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.10" - -[[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969" -uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.10.0" - -[[deps.FFTW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6d6219a004b8cf1e0b4dbe27a2860b8e04eba0be" -uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.11+0" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" -version = "1.11.0" - -[[deps.FixedPointNumbers]] -deps = ["Statistics"] -git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.5" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" -version = "1.11.0" - -[[deps.GNSSSignals]] -deps = ["DocStringExtensions", "FixedPointNumbers", "Statistics", "Unitful"] -git-tree-sha1 = "a648025284d2f826c93defa5b0021a6991a08d68" -uuid = "52c80523-2a4e-5c38-8979-05588f836870" -version = "0.17.3" - -[[deps.GPUArrays]] -deps = ["Adapt", "GPUArraysCore", "KernelAbstractions", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "ScopedValues", "Serialization", "Statistics"] -git-tree-sha1 = "8ddb438e956891a63a5367d7fab61550fc720026" -uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "11.2.6" - - [deps.GPUArrays.extensions] - JLD2Ext = "JLD2" - - [deps.GPUArrays.weakdeps] - JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" - -[[deps.GPUArraysCore]] -deps = ["Adapt"] -git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" -uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.2.0" - -[[deps.GPUCompiler]] -deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "Tracy", "UUIDs"] -git-tree-sha1 = "90554fe518adab1b4c8f7a04d26c414482a240ca" -uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "1.7.4" - -[[deps.GPUToolbox]] -deps = ["LLVM"] -git-tree-sha1 = "9e9186b09a13b7f094f87d1a9bb266d8780e1b1c" -uuid = "096a3bc2-3ced-46d0-87f4-dd12716f4bfc" -version = "1.0.0" - -[[deps.HashArrayMappedTries]] -git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" -uuid = "076d061b-32b6-4027-95e0-9a2c6f6d7e74" -version = "0.2.0" - -[[deps.HostCPUFeatures]] -deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] -git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" -uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" -version = "0.1.17" - -[[deps.IfElse]] -git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" -uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" -version = "0.1.1" - -[[deps.Indexing]] -git-tree-sha1 = "ce1566720fd6b19ff3411404d4b977acd4814f9f" -uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" -version = "1.1.1" - -[[deps.InlineStrings]] -git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" -uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" -version = "1.4.5" - - [deps.InlineStrings.extensions] - ArrowTypesExt = "ArrowTypes" - ParsersExt = "Parsers" - - [deps.InlineStrings.weakdeps] - ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" - Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2025.2.0+0" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -version = "1.11.0" - -[[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.InvertedIndices]] -git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" -uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" -version = "1.3.1" - -[[deps.IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.7.1" - -[[deps.JuliaNVTXCallbacks_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "af433a10f3942e882d3c671aacb203e006a5808f" -uuid = "9c1d0b0a-7046-5b2e-a33f-ea22f176ac7e" -version = "0.2.1+0" - -[[deps.JuliaSyntaxHighlighting]] -deps = ["StyledStrings"] -uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" -version = "1.12.0" - -[[deps.KernelAbstractions]] -deps = ["Adapt", "Atomix", "InteractiveUtils", "MacroTools", "PrecompileTools", "Requires", "StaticArrays", "UUIDs"] -git-tree-sha1 = "b5a371fcd1d989d844a4354127365611ae1e305f" -uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" -version = "0.9.39" - - [deps.KernelAbstractions.extensions] - EnzymeExt = "EnzymeCore" - LinearAlgebraExt = "LinearAlgebra" - SparseArraysExt = "SparseArrays" - - [deps.KernelAbstractions.weakdeps] - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.LLVM]] -deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Unicode"] -git-tree-sha1 = "ce8614210409eaa54ed5968f4b50aa96da7ae543" -uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "9.4.4" -weakdeps = ["BFloat16s"] - - [deps.LLVM.extensions] - BFloat16sExt = "BFloat16s" - -[[deps.LLVMExtra_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "8e76807afb59ebb833e9b131ebf1a8c006510f33" -uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.38+0" - -[[deps.LLVMLoopInfo]] -git-tree-sha1 = "2e5c102cfc41f48ae4740c7eca7743cc7e7b75ea" -uuid = "8b046642-f1f6-4319-8d3c-209ddc03c586" -version = "1.0.0" - -[[deps.LaTeXStrings]] -git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.4.0" - -[[deps.LayoutPointers]] -deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" -uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.17" - -[[deps.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -version = "1.11.0" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.4" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.11.1+1" - -[[deps.LibGit2]] -deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" -version = "1.11.0" - -[[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] -uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.9.0+0" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "OpenSSL_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.3+1" - -[[deps.LibTracyClient_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d2bc4e1034b2d43076b50f0e34ea094c2cb0a717" -uuid = "ad6e5548-8b26-5c9f-8ef3-ef0ad883f3a5" -version = "0.9.1+6" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -version = "1.11.0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.12.0" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" -version = "1.11.0" - -[[deps.LoopVectorization]] -deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] -git-tree-sha1 = "a9fc7883eb9b5f04f46efb9a540833d1fad974b3" -uuid = "bdcacae8-1622-11e9-2a5c-532679323890" -version = "0.12.173" - - [deps.LoopVectorization.extensions] - ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] - ForwardDiffNNlibExt = ["ForwardDiff", "NNlib"] - SpecialFunctionsExt = "SpecialFunctions" - - [deps.LoopVectorization.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" - SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" - -[[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] -git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2025.2.0+0" - -[[deps.MacroTools]] -git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.16" - -[[deps.ManualMemory]] -git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" -uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" -version = "0.1.8" - -[[deps.Markdown]] -deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -version = "1.11.0" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.2.0" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2025.5.20" - -[[deps.NVTX]] -deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] -git-tree-sha1 = "6b573a3e66decc7fc747afd1edbf083ff78c813a" -uuid = "5da4648a-3479-48b8-97b9-01cb529c0a1f" -version = "1.0.1" - -[[deps.NVTX_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "af2232f69447494514c25742ba1503ec7e9877fe" -uuid = "e98f9f5b-d649-5603-91fd-7774390e6439" -version = "3.2.2+0" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.3.0" - -[[deps.OffsetArrays]] -git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" -uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.17.0" -weakdeps = ["Adapt"] - - [deps.OffsetArrays.extensions] - OffsetArraysAdaptExt = "Adapt" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.29+0" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.1+0" - -[[deps.OrderedCollections]] -git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.8.1" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.12.0" -weakdeps = ["REPL"] - - [deps.Pkg.extensions] - REPLExt = "REPL" - -[[deps.PolyesterWeave]] -deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" -uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.2" - -[[deps.PooledArrays]] -deps = ["DataAPI", "Future"] -git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" -uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" -version = "1.4.3" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.3.3" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.5.0" - -[[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "2542fd0b9476562d80b65d00968c9c5286d5917b" -uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "3.1.1" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -version = "1.11.0" - -[[deps.REPL]] -deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" -version = "1.11.0" - -[[deps.Random]] -deps = ["SHA"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -version = "1.11.0" - -[[deps.Random123]] -deps = ["Random", "RandomNumbers"] -git-tree-sha1 = "dbe5fd0b334694e905cb9fda73cd8554333c46e2" -uuid = "74087812-796a-5b5d-8853-05524746bad3" -version = "1.7.1" - -[[deps.RandomNumbers]] -deps = ["Random"] -git-tree-sha1 = "c6ec94d2aaba1ab2ff983052cf6a606ca5985902" -uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" -version = "1.6.0" - -[[deps.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.1" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - -[[deps.SLEEFPirates]] -deps = ["IfElse", "Static", "VectorizationBase"] -git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" -uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" -version = "0.6.43" - -[[deps.SciMLPublic]] -git-tree-sha1 = "ed647f161e8b3f2973f24979ec074e8d084f1bee" -uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" -version = "1.0.0" - -[[deps.ScopedValues]] -deps = ["HashArrayMappedTries", "Logging"] -git-tree-sha1 = "c3b2323466378a2ba15bea4b2f73b081e022f473" -uuid = "7e506255-f358-4e82-b7e4-beb19740aa63" -version = "1.5.0" - -[[deps.Scratch]] -deps = ["Dates"] -git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" -uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.3.0" - -[[deps.SentinelArrays]] -deps = ["Dates", "Random"] -git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0" -uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.8" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -version = "1.11.0" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" -version = "1.11.0" - -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.2.2" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.12.0" - -[[deps.Static]] -deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] -git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" -uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.3.1" - -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] -git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.8.0" -weakdeps = ["OffsetArrays", "StaticArrays"] - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "b8693004b385c842357406e3af647701fe783f98" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.15" - - [deps.StaticArrays.extensions] - StaticArraysChainRulesCoreExt = "ChainRulesCore" - StaticArraysStatisticsExt = "Statistics" - - [deps.StaticArrays.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.StaticArraysCore]] -git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" -uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.4" - -[[deps.Statistics]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.11.1" -weakdeps = ["SparseArrays"] - - [deps.Statistics.extensions] - SparseArraysExt = ["SparseArrays"] - -[[deps.StringManipulation]] -deps = ["PrecompileTools"] -git-tree-sha1 = "725421ae8e530ec29bcbdddbe91ff8053421d023" -uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.4.1" - -[[deps.StructArrays]] -deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" -uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.7.2" -weakdeps = ["Adapt", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "SparseArrays", "StaticArrays"] - - [deps.StructArrays.extensions] - StructArraysAdaptExt = "Adapt" - StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] - StructArraysLinearAlgebraExt = "LinearAlgebra" - StructArraysSparseArraysExt = "SparseArrays" - StructArraysStaticArraysExt = "StaticArrays" - -[[deps.StyledStrings]] -uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" -version = "1.11.0" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.8.3+2" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.TableTraits]] -deps = ["IteratorInterfaceExtensions"] -git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" -uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" -version = "1.0.1" - -[[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] -git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.12.1" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -version = "1.11.0" - -[[deps.ThreadingUtilities]] -deps = ["ManualMemory"] -git-tree-sha1 = "d969183d3d244b6c33796b5ed01ab97328f2db85" -uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" -version = "0.5.5" - -[[deps.Tracking]] -deps = ["Accessors", "Acquisition", "Adapt", "Bumper", "ConstructionBase", "Dictionaries", "DocStringExtensions", "GNSSSignals", "LinearAlgebra", "LoopVectorization", "StaticArrays", "StructArrays", "TrackingLoopFilters", "Unitful"] -path = "../../.." -uuid = "10b2438b-ffd4-5096-aa58-44041d5c8f3b" -version = "0.15.8" -weakdeps = ["CUDA"] - - [deps.Tracking.extensions] - TrackingCUDAExt = "CUDA" - -[[deps.TrackingLoopFilters]] -deps = ["DocStringExtensions", "LinearAlgebra", "Test", "Unitful"] -git-tree-sha1 = "dc5a48bc1188de3ac05b3cd021a26190bff79084" -uuid = "0814aff9-93cb-554c-9fff-9bf1cfdb5efa" -version = "0.1.2" - -[[deps.Tracy]] -deps = ["ExprTools", "LibTracyClient_jll", "Libdl"] -git-tree-sha1 = "73e3ff50fd3990874c59fef0f35d10644a1487bc" -uuid = "e689c965-62c8-4b79-b2c5-8359227902fd" -version = "0.1.6" - - [deps.Tracy.extensions] - TracyProfilerExt = "TracyProfiler_jll" - - [deps.Tracy.weakdeps] - TracyProfiler_jll = "0c351ed6-8a68-550e-8b79-de6f926da83c" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" -version = "1.11.0" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -version = "1.11.0" - -[[deps.Unitful]] -deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "83360bda12f61c250835830cc40b64f487cc2230" -uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.25.1" - - [deps.Unitful.extensions] - ConstructionBaseUnitfulExt = "ConstructionBase" - ForwardDiffExt = "ForwardDiff" - InverseFunctionsUnitfulExt = "InverseFunctions" - LatexifyExt = ["Latexify", "LaTeXStrings"] - PrintfExt = "Printf" - - [deps.Unitful.weakdeps] - ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" - Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" - Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.UnsafeArrays]] -git-tree-sha1 = "efcbb6828697ffffc245a9de7300552535abe005" -uuid = "c4a57d5a-5b31-53a6-b365-19f8c011fbd6" -version = "1.0.8" - -[[deps.UnsafeAtomics]] -git-tree-sha1 = "b13c4edda90890e5b04ba24e20a310fbe6f249ff" -uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" -version = "0.3.0" -weakdeps = ["LLVM"] - - [deps.UnsafeAtomics.extensions] - UnsafeAtomicsLLVM = ["LLVM"] - -[[deps.VectorizationBase]] -deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "d1d9a935a26c475ebffd54e9c7ad11627c43ea85" -uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" -version = "0.21.72" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.3.1+2" - -[[deps.demumble_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6498e3581023f8e530f34760d18f75a69e3a4ea8" -uuid = "1e29f10c-031c-5a83-9565-69cddfc27673" -version = "1.3.0+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.13.1+1" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.64.0+1" - -[[deps.oneTBB_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "1350188a69a6e46f799d3945beef36435ed7262f" -uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2022.0.0+1" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.5.0+2" From 92aff0124bbb9985a197d8fb22de2b4cf3dfac03 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 12:32:30 +0100 Subject: [PATCH 16/19] chore: remove accidentally added documentation files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed .github/workflows/documenter.yml and docs/Project.toml which were accidentally included in commit e119311. These files are not related to the CUDA weak dependency implementation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/documenter.yml | 50 -------------------------------- docs/Project.toml | 3 -- 2 files changed, 53 deletions(-) delete mode 100644 .github/workflows/documenter.yml delete mode 100644 docs/Project.toml diff --git a/.github/workflows/documenter.yml b/.github/workflows/documenter.yml deleted file mode 100644 index 06f1572b..00000000 --- a/.github/workflows/documenter.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Documentation -# This is a standard Julia setup for GitHub CI -on: - push: - branches: - - main # update to match your main branch - tags: '*' - pull_request: - -jobs: - build: - permissions: - contents: write - pull-requests: read - statuses: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: '1' - - uses: julia-actions/cache@v1 - -# Now this is where things focus on the documentation -# build and deployment. - -# IMPORTANT! If your documentation is for a Julia package, -# with formal Julia package structure (`src` folder and top level Project.toml) -# then you need to include this extra step (simply uncomment it): - - - name: Develop local package - run: julia -e 'using Pkg; Pkg.develop(path="."); Pkg.instantiate()' - -# The next steps continue with the `doc` folder build. - - # This is really all you care about; 2-steps process - # step 1, assumming the documentation Project.toml file is in `docs` folder - - name: Install docs dependencies - run: julia --project=docs/ -e 'using Pkg; Pkg.instantiate()' - # step 2 (note project path remains the same!) - - name: Build and deploy - env: - # An access token must be provided to "push" the documentation build. - # GitHub automates this via your account with this line: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # See the discussion around "TagBot" in the Documenter.jl website: - # https://documenter.juliadocs.org/stable/man/hosting/#GitHub-Actions - # for automating creating tagged documentation builds after - # registering your package in the Julia General Registry - run: julia --project=docs/ docs/make.jl \ No newline at end of file diff --git a/docs/Project.toml b/docs/Project.toml deleted file mode 100644 index e95e4101..00000000 --- a/docs/Project.toml +++ /dev/null @@ -1,3 +0,0 @@ -[deps] -Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -GNSSSignals = "52c80523-2a4e-5c38-8979-05588f836870" From 6f57ad252a2b3abfb451a7de0ed937dfe75ac9f2 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 12:52:15 +0100 Subject: [PATCH 17/19] docs: update GPU type access pattern to use Base.get_extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update README to show the standard Julia pattern for accessing extension types via Base.get_extension(). This is the idiomatic approach that avoids incremental compilation issues. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 5 +++-- ext/TrackingCUDAExt/TrackingCUDAExt.jl | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ade45fe9..e61124b7 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ To use GPU acceleration features, you need to explicitly load CUDA: using Tracking using CUDA # Activates GPU functionality -# GPU types are available via the extension module -correlator = Tracking.TrackingCUDAExt.GPUDownconvertAndCorrelator(...) +# Access GPU types via the extension +ext = Base.get_extension(Tracking, :TrackingCUDAExt) +gpu_correlator = ext.GPUDownconvertAndCorrelator(...) ``` \ No newline at end of file diff --git a/ext/TrackingCUDAExt/TrackingCUDAExt.jl b/ext/TrackingCUDAExt/TrackingCUDAExt.jl index 0b61576b..26ecd034 100644 --- a/ext/TrackingCUDAExt/TrackingCUDAExt.jl +++ b/ext/TrackingCUDAExt/TrackingCUDAExt.jl @@ -15,7 +15,8 @@ import Adapt # Include the GPU implementation include("downconvert_and_correlate_gpu.jl") -# Export GPU types - accessible as Tracking.TrackingCUDAExt.GPUDownconvertAndCorrelator +# Export GPU types from the extension +# Users access these via: Base.get_extension(Tracking, :TrackingCUDAExt).GPUDownconvertAndCorrelator export GPUSatDownconvertAndCorrelator, GPUSystemDownconvertAndCorrelator, GPUDownconvertAndCorrelator, From 8f98a9ae0547db9b7fee7d4078109327223532f6 Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 13:36:06 +0100 Subject: [PATCH 18/19] fix: import functions from Tracking to properly extend in GPU extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The extension needs to explicitly import downconvert_and_correlate and downconvert_and_correlate! from the parent Tracking module in order to add GPU-specific method implementations. Without this import, the GPU methods are defined in the extension's namespace only and don't extend the generic functions from Tracking, causing MethodError when calling with GPU types. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ext/TrackingCUDAExt/TrackingCUDAExt.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ext/TrackingCUDAExt/TrackingCUDAExt.jl b/ext/TrackingCUDAExt/TrackingCUDAExt.jl index 26ecd034..3ef20141 100644 --- a/ext/TrackingCUDAExt/TrackingCUDAExt.jl +++ b/ext/TrackingCUDAExt/TrackingCUDAExt.jl @@ -12,6 +12,9 @@ using DocStringExtensions using Unitful: Hz import Adapt +# Import functions from Tracking that we need to extend +import Tracking: downconvert_and_correlate, downconvert_and_correlate! + # Include the GPU implementation include("downconvert_and_correlate_gpu.jl") From eade583c5dca4aded2f94ef309cb8d859c9e00cc Mon Sep 17 00:00:00 2001 From: Soeren Schoenbrod Date: Wed, 19 Nov 2025 13:56:50 +0100 Subject: [PATCH 19/19] fix: import get_num_samples and update from Tracking in GPU extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add missing imports for get_num_samples (not exported) and update (exported by both CUDA and Tracking) to resolve UndefVarError and name conflict warning in the GPU extension. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ext/TrackingCUDAExt/TrackingCUDAExt.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/TrackingCUDAExt/TrackingCUDAExt.jl b/ext/TrackingCUDAExt/TrackingCUDAExt.jl index 3ef20141..c55b1d27 100644 --- a/ext/TrackingCUDAExt/TrackingCUDAExt.jl +++ b/ext/TrackingCUDAExt/TrackingCUDAExt.jl @@ -12,8 +12,8 @@ using DocStringExtensions using Unitful: Hz import Adapt -# Import functions from Tracking that we need to extend -import Tracking: downconvert_and_correlate, downconvert_and_correlate! +# Import functions from Tracking that we need to extend or use +import Tracking: downconvert_and_correlate, downconvert_and_correlate!, get_num_samples, update # Include the GPU implementation include("downconvert_and_correlate_gpu.jl")