From e13598a74d690a545d61ec797b0cd1d2d6f5feb9 Mon Sep 17 00:00:00 2001 From: Avik Pal Date: Sun, 17 Nov 2024 11:36:58 -0500 Subject: [PATCH] chore: use sources in Projects --- .buildkite/testing.yml | 26 ++++--------- .buildkite/testing_luxlib.yml | 10 ----- .buildkite/testing_luxtestutils.yml | 5 --- .github/workflows/CI.yml | 32 +++++---------- .github/workflows/CIPreRelease.yml | 2 +- .github/workflows/CI_LuxCUDA.yml | 18 +++++---- .github/workflows/CI_LuxCore.yml | 4 +- .github/workflows/CI_LuxLib.yml | 43 ++++++++------------- .github/workflows/CI_LuxTestUtils.yml | 28 +++++--------- .github/workflows/CI_MLDataDevices.yml | 18 +++++---- .github/workflows/CI_WeightInitializers.yml | 18 +++++---- .github/workflows/Downstream.yml | 2 +- Project.toml | 6 +++ lib/LuxLib/Project.toml | 4 ++ lib/LuxTestUtils/Project.toml | 3 ++ 15 files changed, 91 insertions(+), 128 deletions(-) diff --git a/.buildkite/testing.yml b/.buildkite/testing.yml index 91ff59e599..59c335f3d9 100644 --- a/.buildkite/testing.yml +++ b/.buildkite/testing.yml @@ -25,11 +25,6 @@ steps: command: | julia --color=yes --code-coverage=user --depwarn=yes --project=. -e ' import Pkg; - dev_pkgs = Pkg.PackageSpec[]; - for pkg in ("lib/LuxCore", "lib/MLDataDevices", "lib/WeightInitializers", "lib/LuxLib",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)); - end - Pkg.develop(dev_pkgs); Pkg.Registry.update(); Pkg.instantiate(); Pkg.activate("test"); @@ -39,10 +34,10 @@ steps: end Pkg.develop(dev_pkgs); Pkg.instantiate();' - julia --color=yes --code-coverage=user --depwarn=yes --project=test -e ' - import Pkg, Lux; - dir = dirname(pathof(Lux)); - include(joinpath(dir, "../test/runtests.jl"))' + julia --color=yes --code-coverage=user --depwarn=yes --project=test -e ' + import Pkg, Lux; + dir = dirname(pathof(Lux)); + include(joinpath(dir, "../test/runtests.jl"))' env: BACKEND_GROUP: "CUDA" LUX_TEST_GROUP: "{{matrix.group}}" @@ -79,11 +74,6 @@ steps: command: | julia --color=yes --code-coverage=user --depwarn=yes --project=. -e ' import Pkg; - dev_pkgs = Pkg.PackageSpec[]; - for pkg in ("lib/LuxCore", "lib/MLDataDevices", "lib/WeightInitializers", "lib/LuxLib",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)); - end - Pkg.develop(dev_pkgs); Pkg.Registry.update(); Pkg.instantiate(); Pkg.activate("test"); @@ -93,10 +83,10 @@ steps: end Pkg.develop(dev_pkgs); Pkg.instantiate();' - julia --color=yes --code-coverage=user --depwarn=yes --project=test -e ' - import Pkg, Lux; - dir = dirname(pathof(Lux)); - include(joinpath(dir, "../test/runtests.jl"))' + julia --color=yes --code-coverage=user --depwarn=yes --project=test -e ' + import Pkg, Lux; + dir = dirname(pathof(Lux)); + include(joinpath(dir, "../test/runtests.jl"))' env: BACKEND_GROUP: "AMDGPU" agents: diff --git a/.buildkite/testing_luxlib.yml b/.buildkite/testing_luxlib.yml index c6abeaba54..b3f5ee68e7 100644 --- a/.buildkite/testing_luxlib.yml +++ b/.buildkite/testing_luxlib.yml @@ -19,11 +19,6 @@ steps: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxLib -e ' import Pkg; Pkg.Registry.update(); - dev_pkgs = Pkg.PackageSpec[]; - for pkg in ("lib/LuxCore", "lib/MLDataDevices") - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)); - end; - Pkg.develop(dev_pkgs); Pkg.instantiate(); Pkg.activate("lib/LuxLib/test"); dev_pkgs = Pkg.PackageSpec[]; @@ -67,11 +62,6 @@ steps: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxLib -e ' import Pkg; Pkg.Registry.update(); - dev_pkgs = Pkg.PackageSpec[]; - for pkg in ("lib/LuxCore", "lib/MLDataDevices") - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)); - end; - Pkg.develop(dev_pkgs); Pkg.instantiate(); Pkg.activate("lib/LuxLib/test"); dev_pkgs = Pkg.PackageSpec[]; diff --git a/.buildkite/testing_luxtestutils.yml b/.buildkite/testing_luxtestutils.yml index 49a2895b14..5e117e062e 100644 --- a/.buildkite/testing_luxtestutils.yml +++ b/.buildkite/testing_luxtestutils.yml @@ -15,11 +15,6 @@ steps: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxTestUtils -e ' import Pkg; Pkg.Registry.update(); - dev_pkgs = Pkg.PackageSpec[]; - for pkg in ("lib/MLDataDevices",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)); - end; - Pkg.develop(dev_pkgs); Pkg.instantiate(); Pkg.test(; coverage="user")' agents: diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f047260d3b..b59f6641ff 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -44,10 +44,10 @@ jobs: - "misc" - "reactant" include: - - version: "1.10" + - version: "1" os: "macos-latest" test_group: "all" - - version: "1.10" + - version: "1" os: "windows-latest" test_group: "all" steps: @@ -65,24 +65,18 @@ jobs: ${{ runner.os }}-test-${{ env.cache-name }}- ${{ runner.os }}-test- ${{ runner.os }}- - - name: "Install Dependencies" + - uses: julia-actions/julia-buildpkg@v1 + - name: "Dev Test Dependencies" run: | import Pkg - dev_pkgs = Pkg.PackageSpec[] - for pkg in ("lib/LuxCore", "lib/MLDataDevices", "lib/WeightInitializers", "lib/LuxLib",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) - end - Pkg.develop(dev_pkgs) Pkg.Registry.update() - Pkg.instantiate() - Pkg.activate("test") dev_pkgs = Pkg.PackageSpec[] for pkg in ("lib/LuxTestUtils", "lib/LuxLib", "lib/MLDataDevices", "lib/LuxCore", ".") push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) end Pkg.develop(dev_pkgs) Pkg.instantiate() - shell: julia --color=yes --code-coverage=user --depwarn=yes --project=. {0} + shell: julia --color=yes --code-coverage=user --depwarn=yes --project=test {0} - name: "Run Tests" run: | import Pkg, Lux @@ -99,7 +93,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -112,24 +106,18 @@ jobs: - uses: julia-actions/julia-downgrade-compat@v1 with: skip: "LuxCore,MLDataDevices,WeightInitializers,LuxLib" - - name: "Install Dependencies" + - uses: julia-actions/julia-buildpkg@v1 + - name: "Dev Test Dependencies" run: | import Pkg - dev_pkgs = Pkg.PackageSpec[] - for pkg in ("lib/LuxCore", "lib/MLDataDevices", "lib/WeightInitializers", "lib/LuxLib",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) - end - Pkg.develop(dev_pkgs) Pkg.Registry.update() - Pkg.instantiate() - Pkg.activate("test") dev_pkgs = Pkg.PackageSpec[] for pkg in ("lib/LuxTestUtils", "lib/LuxLib", "lib/MLDataDevices", "lib/LuxCore", ".") push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) end Pkg.develop(dev_pkgs) Pkg.instantiate() - shell: julia --color=yes --code-coverage=user --depwarn=yes --project=. {0} + shell: julia --color=yes --code-coverage=user --depwarn=yes --project=test {0} - name: "Run Tests" run: | import Pkg, Lux @@ -144,7 +132,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/CIPreRelease.yml b/.github/workflows/CIPreRelease.yml index 8938a999b0..4489398201 100644 --- a/.github/workflows/CIPreRelease.yml +++ b/.github/workflows/CIPreRelease.yml @@ -92,4 +92,4 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false diff --git a/.github/workflows/CI_LuxCUDA.yml b/.github/workflows/CI_LuxCUDA.yml index 3d96643fe8..1d3f1fb539 100644 --- a/.github/workflows/CI_LuxCUDA.yml +++ b/.github/workflows/CI_LuxCUDA.yml @@ -39,11 +39,12 @@ jobs: ${{ runner.os }}-test-${{ env.cache-name }}- ${{ runner.os }}-test- ${{ runner.os }}- - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/LuxCUDA" + - name: "Run Tests" run: | import Pkg - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxCUDA {0} - uses: julia-actions/julia-processcoverage@v1 @@ -54,7 +55,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -65,11 +66,12 @@ jobs: with: version: "1.10" - uses: julia-actions/julia-downgrade-compat@v1 - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/LuxCUDA" + - name: "Run Tests" run: | import Pkg - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxCUDA {0} - uses: julia-actions/julia-processcoverage@v1 @@ -80,7 +82,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/CI_LuxCore.yml b/.github/workflows/CI_LuxCore.yml index 8ce349ec80..13d275b582 100644 --- a/.github/workflows/CI_LuxCore.yml +++ b/.github/workflows/CI_LuxCore.yml @@ -69,7 +69,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -110,7 +110,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/CI_LuxLib.yml b/.github/workflows/CI_LuxLib.yml index 42a32cbe5b..4ea7a09aed 100644 --- a/.github/workflows/CI_LuxLib.yml +++ b/.github/workflows/CI_LuxLib.yml @@ -27,7 +27,6 @@ jobs: fail-fast: false matrix: version: - - "1.10" - "1" os: - ubuntu-latest @@ -41,22 +40,22 @@ jobs: loopvec: - "true" include: - - version: "1.10" + - version: "1" os: ubuntu-latest test_group: "dense" blas_backend: "default" loopvec: "false" - - version: "1.10" + - version: "1" os: ubuntu-latest test_group: "misc" blas_backend: "default" loopvec: "false" - - version: "1.10" + - version: "1" os: macos-latest test_group: "all" blas_backend: "default" loopvec: "true" - - version: "1.10" + - version: "1" os: windows-latest test_group: "all" blas_backend: "default" @@ -76,23 +75,18 @@ jobs: ${{ runner.os }}-test-${{ env.cache-name }}- ${{ runner.os }}-test- ${{ runner.os }}- - - name: "Install Dependencies" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/LuxLib" + - name: "Dev Test Dependencies" run: | import Pkg dev_pkgs = Pkg.PackageSpec[] - for pkg in ("lib/LuxCore", "lib/MLDataDevices") - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) - end - Pkg.develop(dev_pkgs) - Pkg.Registry.update() - Pkg.instantiate() - Pkg.activate("lib/LuxLib/test") - dev_pkgs = Pkg.PackageSpec[] for pkg in ("lib/LuxTestUtils", "lib/LuxLib", "lib/MLDataDevices") push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) end Pkg.develop(dev_pkgs) - shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxLib {0} + shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxLib/test {0} - name: "Run Tests" run: | import Pkg, LuxLib @@ -111,7 +105,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -126,23 +120,18 @@ jobs: - uses: julia-actions/julia-downgrade-compat@v1 with: skip: "LuxCore,MLDataDevices" - - name: "Install Dependencies" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/LuxLib" + - name: "Dev Test Dependencies" run: | import Pkg dev_pkgs = Pkg.PackageSpec[] - for pkg in ("lib/LuxCore", "lib/MLDataDevices") - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) - end - Pkg.develop(dev_pkgs) - Pkg.Registry.update() - Pkg.instantiate() - Pkg.activate("lib/LuxLib/test") - dev_pkgs = Pkg.PackageSpec[] for pkg in ("lib/LuxTestUtils", "lib/LuxLib", "lib/MLDataDevices") push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) end Pkg.develop(dev_pkgs) - shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxLib {0} + shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxLib/test {0} - name: "Run Tests" run: | import Pkg, LuxLib @@ -161,7 +150,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/CI_LuxTestUtils.yml b/.github/workflows/CI_LuxTestUtils.yml index ccd9c5db56..93e2b7d30b 100644 --- a/.github/workflows/CI_LuxTestUtils.yml +++ b/.github/workflows/CI_LuxTestUtils.yml @@ -42,16 +42,12 @@ jobs: ${{ runner.os }}-test-${{ env.cache-name }}- ${{ runner.os }}-test- ${{ runner.os }}- - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/LuxTestUtils" + - name: "Run Tests" run: | import Pkg - dev_pkgs = Pkg.PackageSpec[] - for pkg in ("lib/MLDataDevices",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) - end - Pkg.develop(dev_pkgs) - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxTestUtils {0} - uses: julia-actions/julia-processcoverage@v1 @@ -62,7 +58,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -77,16 +73,12 @@ jobs: with: version: ${{ matrix.version }} - uses: julia-actions/julia-downgrade-compat@v1 - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/LuxTestUtils" + - name: "Run Tests" run: | import Pkg - dev_pkgs = Pkg.PackageSpec[] - for pkg in ("lib/MLDataDevices",) - push!(dev_pkgs, Pkg.PackageSpec(path=pkg)) - end - Pkg.develop(dev_pkgs) - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/LuxTestUtils {0} - uses: julia-actions/julia-processcoverage@v1 @@ -97,7 +89,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/CI_MLDataDevices.yml b/.github/workflows/CI_MLDataDevices.yml index f4079b590d..451bb6fded 100644 --- a/.github/workflows/CI_MLDataDevices.yml +++ b/.github/workflows/CI_MLDataDevices.yml @@ -50,11 +50,12 @@ jobs: ${{ runner.os }}-test-${{ env.cache-name }}- ${{ runner.os }}-test- ${{ runner.os }}- - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/MLDataDevices" + - name: "Run Tests" run: | import Pkg - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/MLDataDevices {0} env: @@ -67,7 +68,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -83,11 +84,12 @@ jobs: with: version: ${{ matrix.version }} - uses: julia-actions/julia-downgrade-compat@v1 - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/MLDataDevices" + - name: "Run Tests" run: | import Pkg - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/MLDataDevices {0} - uses: julia-actions/julia-processcoverage@v1 @@ -98,7 +100,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/CI_WeightInitializers.yml b/.github/workflows/CI_WeightInitializers.yml index cef7d5084e..dd62fc0a03 100644 --- a/.github/workflows/CI_WeightInitializers.yml +++ b/.github/workflows/CI_WeightInitializers.yml @@ -42,11 +42,12 @@ jobs: ${{ runner.os }}-test-${{ env.cache-name }}- ${{ runner.os }}-test- ${{ runner.os }}- - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/WeightInitializers" + - name: "Run Tests" run: | import Pkg - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/WeightInitializers {0} - uses: julia-actions/julia-processcoverage@v1 @@ -57,7 +58,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false downgrade: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') && github.base_ref == github.event.repository.default_branch }} @@ -72,11 +73,12 @@ jobs: with: version: ${{ matrix.version }} - uses: julia-actions/julia-downgrade-compat@v1 - - name: "Install Dependencies and Run Tests" + - uses: julia-actions/julia-buildpkg@v1 + with: + project: "lib/WeightInitializers" + - name: "Run Tests" run: | import Pkg - Pkg.Registry.update() - Pkg.instantiate() Pkg.test(; coverage="user") shell: julia --color=yes --code-coverage=user --depwarn=yes --project=lib/WeightInitializers {0} - uses: julia-actions/julia-processcoverage@v1 @@ -87,7 +89,7 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false env: BACKEND_GROUP: "CPU" diff --git a/.github/workflows/Downstream.yml b/.github/workflows/Downstream.yml index c53f0cc710..02eb4f5bac 100644 --- a/.github/workflows/Downstream.yml +++ b/.github/workflows/Downstream.yml @@ -81,4 +81,4 @@ jobs: files: lcov.info token: ${{ secrets.CODECOV_TOKEN }} verbose: true - fail_ci_if_error: true + fail_ci_if_error: false diff --git a/Project.toml b/Project.toml index 2a44093301..f50c957b4c 100644 --- a/Project.toml +++ b/Project.toml @@ -111,3 +111,9 @@ Tracker = "0.2.36" WeightInitializers = "1" Zygote = "0.6.70" julia = "1.10" + +[sources] +LuxCore = { path = "lib/LuxCore" } +LuxLib = { path = "lib/LuxLib" } +MLDataDevices = { path = "lib/MLDataDevices" } +WeightInitializers = { path = "lib/WeightInitializers" } diff --git a/lib/LuxLib/Project.toml b/lib/LuxLib/Project.toml index 481872491d..73a062477f 100644 --- a/lib/LuxLib/Project.toml +++ b/lib/LuxLib/Project.toml @@ -91,3 +91,7 @@ Statistics = "1.10" Tracker = "0.2.36" cuDNN = "1.3" julia = "1.10" + +[sources] +LuxCore = { path = "../LuxCore" } +MLDataDevices = { path = "../MLDataDevices" } diff --git a/lib/LuxTestUtils/Project.toml b/lib/LuxTestUtils/Project.toml index 3097c450c6..e7545645d7 100644 --- a/lib/LuxTestUtils/Project.toml +++ b/lib/LuxTestUtils/Project.toml @@ -37,3 +37,6 @@ Test = "1.10" Tracker = "0.2.36" Zygote = "0.6.70" julia = "1.10" + +[sources] +MLDataDevices = { path = "../MLDataDevices" }