Skip to content

Update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.12 in the all-julia-packages group across 1 directory - #495

Open
dependabot[bot] wants to merge 5 commits into
mainfrom
dependabot/julia/all-julia-packages-67490606aa
Open

Update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.12 in the all-julia-packages group across 1 directory#495
dependabot[bot] wants to merge 5 commits into
mainfrom
dependabot/julia/all-julia-packages-67490606aa

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 28, 2026

Copy link
Copy Markdown
Contributor

⚠️ Dependabot is rebasing this PR ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


⚠️ Dependabot is rebasing this PR ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


⚠️ Dependabot is rebasing this PR ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


Updates the requirements on JET to permit the latest version.
Updates JET to 0.12.0

Release notes

Sourced from JET's releases.

v0.12.0

JET v0.12.0

Diff since v0.11.6

Added

Changed

  • Breaking: JET no longer accepts Julia compiler parameter keywords such as max_methods and inlining as user-facing configuration options for analysis entry points; such keywords now throw JETConfigError.
  • Module matchers for the target_modules/ignored_modules configurations now follow lexical module nesting that stops at namespace roots: Base is no longer considered a submodule of Main. target_modules = (Main,) therefore matches only code defined interactively in the REPL or in an analyzed script, instead of also matching every report from Base.
  • JET now loads empty stubs on unsupported future Julia versions while remaining installable as a test dependency.
  • Overhauled JET's documentation across the project.
  • Improved the implementation of optimization analysis to make it more robust.

Removed

  • Breaking: Removed support for .JET.toml configuration files, including the parent-directory file lookup that report_file performed. A single configuration file could not be shared between analyzers that accept different configuration sets, and some configurations could not even be specified through the file at all. All analysis configurations are now specified via keyword arguments of each entry point.
  • Breaking: Removed the experimental watch_file entry point. Use JETLS.jl for interactive diagnostics.
  • Breaking: Removed the report_package(::AbstractString) and report_package() entry points (and the corresponding test_package forms), which had been deprecated since v0.11. Load the target package first and pass its module directly, e.g. report_package(PkgModule).
  • Breaking: Removed the target_defined_modules configuration, which had been deprecated since v0.11. Use the more flexible target_modules configuration instead, e.g. target_modules=(PkgModule,).
  • Breaking: Removed the fullpath printing configuration, which had been deprecated since v0.11. Use sourceinfo=:full instead.

Fixed

  • aviatesk/JET.jl#840 thanks @​PatrickHaecker).
  • Fixed report_package to analyze definitions from source files included into multiple modules.

... (truncated)

Changelog

Sourced from JET's changelog.

[0.12.0]

Added

Changed

  • Breaking: JET no longer accepts Julia compiler parameter keywords such as max_methods and inlining as user-facing configuration options for analysis entry points; such keywords now throw JETConfigError.
  • Module matchers for the target_modules/ignored_modules configurations now follow lexical module nesting that stops at namespace roots: Base is no longer considered a submodule of Main. target_modules = (Main,) therefore matches only code defined interactively in the REPL or in an analyzed script, instead of also matching every report from Base.
  • JET now loads empty stubs on unsupported future Julia versions while remaining installable as a test dependency.
  • Overhauled JET's documentation across the project.
  • Improved the implementation of optimization analysis to make it more robust.

Removed

  • Breaking: Removed support for .JET.toml configuration files, including the parent-directory file lookup that report_file performed. A single configuration file could not be shared between analyzers that accept different configuration sets, and some configurations could not even be specified through the file at all. All analysis configurations are now specified via keyword arguments of each entry point.
  • Breaking: Removed the experimental watch_file entry point. Use JETLS.jl for interactive diagnostics.
  • Breaking: Removed the report_package(::AbstractString) and report_package() entry points (and the corresponding test_package forms), which had been deprecated since v0.11. Load the target package first and pass its module directly, e.g. report_package(PkgModule).
  • Breaking: Removed the target_defined_modules configuration, which had been deprecated since v0.11. Use the more flexible target_modules configuration instead, e.g. target_modules=(PkgModule,).
  • Breaking: Removed the fullpath printing configuration, which had been deprecated since v0.11. Use sourceinfo=:full instead.

Fixed

  • aviatesk/JET.jl#840 thanks @​PatrickHaecker).
  • Fixed report_package to analyze definitions from source files included into multiple modules.
  • Fixed races between report_package and concurrent Revise package tracking or revision.

... (truncated)

Commits

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file julia Pull requests that update julia code labels Jul 28, 2026
@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 64.00000% with 9 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/tensors/abstracttensor.jl 0.00% 4 Missing ⚠️
src/auxiliary/caches.jl 90.00% 1 Missing ⚠️
src/planar/macros.jl 0.00% 1 Missing ⚠️
src/planar/preprocessors.jl 66.66% 1 Missing ⚠️
src/tensors/adjoint.jl 0.00% 1 Missing ⚠️
src/tensors/tensor.jl 0.00% 1 Missing ⚠️
Files with missing lines Coverage Δ
src/auxiliary/iterators.jl 100.00% <100.00%> (ø)
src/fusiontrees/duality_manipulations.jl 96.12% <100.00%> (+0.25%) ⬆️
src/fusiontrees/fusiontrees.jl 96.64% <ø> (ø)
src/pullbacks/tensoroperations.jl 100.00% <ø> (ø)
src/spaces/productspace.jl 87.89% <100.00%> (ø)
src/tensors/linalg.jl 82.88% <ø> (ø)
src/tensors/tensoroperations.jl 97.37% <100.00%> (ø)
src/auxiliary/caches.jl 89.28% <90.00%> (-0.25%) ⬇️
src/planar/macros.jl 84.26% <0.00%> (ø)
src/planar/preprocessors.jl 88.11% <66.66%> (-0.11%) ⬇️
... and 3 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@lkdvos

lkdvos commented Jul 29, 2026

Copy link
Copy Markdown
Member

Can't do this just yet, since Mooncake is blocking the update for now.

@dependabot dependabot Bot changed the title Update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.10, 0.11, 0.12 in the all-julia-packages group Update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.10, 0.11, 0.12 in the all-julia-packages group across 1 directory Jul 29, 2026
@dependabot
dependabot Bot force-pushed the dependabot/julia/all-julia-packages-67490606aa branch from 3b9a08a to 3779d7d Compare July 29, 2026 20:43
@lkdvos

lkdvos commented Jul 31, 2026

Copy link
Copy Markdown
Member

Linking this here so we're updated when it happens:
chalk-lab/Mooncake.jl#1261

@dependabot
dependabot Bot force-pushed the dependabot/julia/all-julia-packages-67490606aa branch from 3779d7d to 6297e56 Compare August 4, 2026 23:47
dependabot Bot and others added 5 commits August 26, 2026 05:16
Updates the requirements on [JET](https://github.com/aviatesk/JET.jl) to permit the latest version.

Updates `JET` to 0.12.0
- [Release notes](https://github.com/aviatesk/JET.jl/releases)
- [Changelog](https://github.com/aviatesk/JET.jl/blob/master/CHANGELOG.md)
- [Commits](https://github.com/aviatesk/JET.jl/commits/v0.12.0)

---
updated-dependencies:
- dependency-name: JET
  dependency-version: 0.12.0
  dependency-type: direct:production
  dependency-group: all-julia-packages
...

Signed-off-by: dependabot[bot] <support@github.com>
@lkdvos
lkdvos force-pushed the dependabot/julia/all-julia-packages-67490606aa branch from 6297e56 to e40d1da Compare August 26, 2026 16:02
@lkdvos lkdvos changed the title Update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.10, 0.11, 0.12 in the all-julia-packages group across 1 directory Update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.12 in the all-julia-packages group across 1 directory Aug 26, 2026
@lkdvos

lkdvos commented Aug 26, 2026

Copy link
Copy Markdown
Member

Enabling the JET 0.12 whole-package analysis (other/jet) turned up more than the compat bump. Splitting what changed here into real fixes and analyser-only adjustments.

Resolving JET went from 30 reports → 0.

Real bugs, surfaced and fixed

These were all latent — untested code paths that would have thrown UndefVarError or produced a wrong result.

Fix Bug
src/tensors/tensor.jl randn(rng, T, V) for a single TensorSpace built codomain ← one(domain), referring to the function domain rather than a variable. Every rand/randn/randexp/randisometry with an explicit rng and eltype on a single space threw. Now one(codomain).
src/planar/macros.jl @planar … order=(…) called a bare normalizeindex, which does not exist in TensorKit — the kwarg was an outright UndefVarError. Now TO.normalizeindex. Nothing in the test suite exercises order=, which is why it went unnoticed.
src/tensors/linalg.jl absorb! threw DimensionError on an index-count mismatch. No such type exists anywhere in TensorKit; the error path itself errored. Now IndexError, matching the neighbouring planaroperations.jl messages.
src/planar/preprocessors.jl The fallback in _extract_contraction_pairs interpolated $ex into its ArgumentError, but the argument is named rhs. Now $rhs.
src/tensors/abstracttensor.jl Signature-only docstrings for getindex/setindex! needed argument names to survive the analysis.
src/tensors/abstracttensor.jl numin(T::Type)/numout(T::Type) threw MethodError(numin, T) — but MethodError's second field is the argument tuple, not a type, so the resulting error could not be printed: numin(Int) on main throws an exception whose showerror itself fails. Now (T,). Pre-existing and independent of JET; found while writing the bottom-type methods below.
src/tensors/abstracttensor.jl, src/tensors/adjoint.jl numin/numout are genuinely ambiguous at Type{Union{}} (three parametric Type{<:…} methods all match with undetermined static parameters), so numind(Union{}) raised an ambiguity error rather than the intended MethodError. Explicit bottom-type methods resolve it. Worth noting Aqua.test_ambiguities does not catch this — it does not probe the bottom type.

Two more real defects were found that are not ours to fix, so test/other/jet.jl filters them with a comment naming the upstream issue:

Changes purely to satisfy the analyser

No behaviour change in any of these; every one is a false positive where the code was already correct.

local variable … may be undefined — correct code JET cannot prove. The pattern is a value assigned in one branch and guarded by a separate boolean flag, or by a throw below the loop.

  • src/auxiliary/caches.jl (8 reports) — @cached tracked hasparams/typed flags alongside params/typeex. Replaced with nothing sentinels and isnothing checks, so there is one source of truth instead of two correlated variables.
  • src/fusiontrees/duality_manipulations.jl (5) — planar_trace's local i, j are set in a loop that breaks, with the no-break path caught by the k > length(q₁) && throw guard. Now initialised to 0; the throw guarantees the sentinel is never read.
  • src/planar/preprocessors.jl (4) — _construct_braidingtensors! used foundV1/foundV2 flags; same sentinel treatment.

Over-wide signatures. report_package analyses every declared signature, so untyped arguments get analysed at Any and produce unreachable union arms.

  • src/tensors/tensoroperations.jl (1) — _trace_permute! had untyped tdst/tsrc, so JET widened tsrc to Union{AbstractTensorMap, HomSpace} and the HomSpace arm has no getindex(::HomSpace, ::FusionTree, ::FusionTree). The only caller already passes tensor maps; annotated to match.
  • src/pullbacks/tensoroperations.jl (1) — same for trace_permute_pullback_ΔA!: with A::Any, tensoralloc_add could return a plain array and twist! has only an AbstractTensorMap method. Annotated the primal arguments only across all three pullbacks — the Δ arguments must stay untyped, since Mooncake passes a tangent from arrayify and Enzyme passes A.dval.

Inference imprecision at abstract signatures.

  • src/fusiontrees/fusiontrees.jl (2) — fusiontensor(::FusionTreePair) infers concretely at every real call; only the declared abstract signature widens size(F₁) to Any, after which TupleTools.front splits over Base.front's Tuple/NamedTuple methods and the NamedTuple arm has no prod. Sidestepped by letting reshape compute the leading dimension with : instead of TupleTools.prod(front(size(…))) — shorter, and the product no longer appears at all. Verified equivalent to the previous form over 29 fusion-tree pairs across Trivial, Z2, Z3, U1, SU2 and FermionParity ⊠ U1.
  • src/auxiliary/iterators.jl (1) — OneOrNoneIterator's state && it.cond is a TypeError for a non-Bool state, and blocksectors(::CompositeSpace) infers as Union{OneOrNoneIterator{Trivial}, Vector}, so the loop state widens to Union{Bool, Int64}. isone(state) is Bool for any state and keeps the existing Bool default. Note this one is defensive rather than cosmetic: nothing constrains what a caller passes as state.

src/spaces/productspace.jl is unrelated to JET — I == TrivialI === Trivial for consistency with the other 18 sites.

Considered and rejected

  • Making blocksectors(::ProductSpace) dispatch on sectortype instead of the runtime if I === Trivial: measured as pure churn. Julia already constant-folds that branch — every concrete space infers a single concrete type — and a dispatch-based version produces the identical union at the abstract signature, so it fixes nothing.
  • size(F₁)::Tuple in fusiontensor: works, but it is a type assertion added solely for the analyser. The reshape(…, :, …) form above is a genuine simplification instead.
  • parenttype(::Type{Union{}}) = Union{}: silences the report, but feeds Union{} back into default_algorithm, which re-enters the same method — an infinite loop if ever reached. Throwing matches the intent of the neighbouring # avoid infinite recursion fallbacks.

Verification

  • JET.report_package(TensorKit; target_modules = (TensorKit,)) with the two filters: No errors detected
  • symmetries, tensors, other: 73903 pass, 0 fail
  • mooncake/tangent (which reaches JET through Mooncake's extension): 6912 pass

One thing worth a second opinion: Mooncake = "0.5.45" in test/Project.toml is load-bearing rather than cosmetic. Mooncake ≤ 0.5.44 caps JET = "0.9 - 0.11", so without that floor the resolver is free to settle on JET 0.11, and the jet_new_generation gate in runtests.jl then silently drops other/jet — the analysis would simply never run in CI rather than failing visibly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file julia Pull requests that update julia code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant