diff --git a/Project.toml b/Project.toml index 07569e16..f99b24c6 100644 --- a/Project.toml +++ b/Project.toml @@ -23,7 +23,7 @@ AliasTables = "1" DataAPI = "1" DataStructures = "0.10, 0.11, 0.12, 0.13, 0.14, 0.17, 0.18, 0.19" IrrationalConstants = "0.2.6" -JET = "0.9.18, 0.10" +JET = "0.9.18, 0.10, 0.11" LinearAlgebra = "<0.0.1, 1" LogExpFunctions = "0.3, 1" Missings = "0.3, 0.4, 1.0" diff --git a/src/pairwise.jl b/src/pairwise.jl index c8023c6a..876dd4c1 100644 --- a/src/pairwise.jl +++ b/src/pairwise.jl @@ -40,7 +40,7 @@ function check_vectors(x, y, skipmissing::Symbol) end end if m > 1 && n > 1 - indsx == indsy || + keys(first(x)) == keys(first(y)) || throw(ArgumentError("All input vectors must have the same indices")) end end diff --git a/src/scalarstats.jl b/src/scalarstats.jl index bff0cec2..21e8b322 100644 --- a/src/scalarstats.jl +++ b/src/scalarstats.jl @@ -524,7 +524,11 @@ function sem(x::AbstractArray, weights::ProbabilityWeights; mean=nothing) end # Median absolute deviation -IrrationalConstants.@irrational mad_constant 1.4826022185056018 BigFloat("1.482602218505601860547076529360423431326703202590312896536266275245674447622701") +# `@static`-guard so the definition is idempotent: JET re-expands top-level code via +# Revise, and IrrationalConstants >= 0.2.6 throws if the type is already defined. +@static if !isdefined(@__MODULE__, :Mad_constant) + IrrationalConstants.@irrational mad_constant 1.4826022185056018 BigFloat("1.482602218505601860547076529360423431326703202590312896536266275245674447622701") +end """ mad(x; center=median(x), normalize=true) diff --git a/test/jet.jl b/test/jet.jl index 78d06ebc..6a8f0156 100644 --- a/test/jet.jl +++ b/test/jet.jl @@ -1,22 +1,23 @@ using StatsBase, Test import JET -# JET has only experimental support for Julia 1.12 currently -# It throws an internal `AssertionError` in the tests below -if VERSION < v"1.12-" - @testset "JET" begin - # Check that there are no undefined global references and undefined field accesses - JET.test_package("StatsBase"; target_defined_modules = true, mode = :typo) +@testset "JET" begin + # Check that there are no undefined global references and undefined field accesses + JET.test_package(StatsBase; target_modules = (StatsBase,), mode = :typo) - # Default error analysis for common problem fails since JET errors on interface definitions - # The (deprecated) `model_response(::StatisticalModel)` calls the interface - # function `response(::StatisticalModel)` for which no method exists yet - # Note: This analysis is not enough strict to guarantee that there are no runtime errors! - # Ref https://github.com/aviatesk/JET.jl/issues/495 - res = JET.report_package("StatsBase"; target_defined_modules = true, mode = :basic, toplevel_logger = nothing) - println(res) - reports = JET.get_reports(res) - @test_broken isempty(reports) - @test length(reports) <= 1 + # Default error analysis + # Note: This analysis is not enough strict to guarantee that there are no runtime errors! + kwargs = if isdefined(JET, :LastFrameModuleExact) # JET@0.11 + (; target_modules = (StatsBase,)) + else + (; target_defined_modules = true) end + # The (deprecated) `model_response(::StatisticalModel)` calls the interface + # function `response(::StatisticalModel)` for which no method exists yet + # Ref https://github.com/aviatesk/JET.jl/issues/495 + res = JET.report_package(StatsBase; kwargs..., mode = :basic, toplevel_logger = nothing) + println(res) + reports = JET.get_reports(res) + @test_broken isempty(reports) + @test length(reports) <= 1 end