From 2fd0725da9a635fed1bb8135b681e414a12936cb Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 5 Jul 2026 02:18:45 -0400 Subject: [PATCH] Remove IfElse.jl dependency; use Base.ifelse IfElse.jl's `ifelse` is `const ifelse = Base.ifelse` on modern Julia (0.1.1), so the dependency is redundant: Symbolics registers a symbolic method on `Base.ifelse`, so `ifelse(sym_cond, a, b)` traces to a symbolic expression without IfElse. Removing IfElse also unblocks the strict Downgrade lane, which previously could resolve IfElse 0.1.0 (whose greedy `ifelse(args...) = Core.ifelse(args...)` broke symbolic conditions). - Replace `IfElse.ifelse(...)` call sites with bare `ifelse(...)`. - Drop every `using IfElse` / `import IfElse` line. - Remove IfElse from [deps] and [compat]. - In Blocks, the removed `import IfElse: ifelse` had brought `ifelse` into scope so the `Parameter` overloads in sources.jl extended it. Replace with `import Base: ifelse` so those overloads extend `Base.ifelse` instead of creating a new `Blocks.ifelse` binding that would shadow the symbolic method. - Drop the now-stale Downgrade.yml comment referencing the fntype regression. Co-Authored-By: Chris Rackauckas --- .github/workflows/Downgrade.yml | 2 +- Project.toml | 2 -- src/Blocks/Blocks.jl | 2 +- src/Electrical/Digital/sources.jl | 2 +- src/Electrical/Electrical.jl | 1 - src/Electrical/utils.jl | 4 ++-- .../IsothermalCompressible/IsothermalCompressible.jl | 2 -- src/Mechanical/MultiBody2D/MultiBody2D.jl | 1 - src/Mechanical/Rotational/Rotational.jl | 1 - src/Mechanical/TranslationalModelica/TranslationalModelica.jl | 1 - src/Mechanical/TranslationalPosition/TranslationalPosition.jl | 1 - src/Thermal/Thermal.jl | 1 - 12 files changed, 5 insertions(+), 15 deletions(-) diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index ae90d8cb..68c43357 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -12,7 +12,7 @@ on: - 'docs/**' jobs: test: - # Runs strict (allow_reresolve=false); expected RED until fntype regression (#458/#452) is resolved. + # Runs strict (allow_reresolve=false). uses: "SciML/.github/.github/workflows/downgrade.yml@v1" with: julia-version: "lts" diff --git a/Project.toml b/Project.toml index f5a71495..c4d4eeaa 100644 --- a/Project.toml +++ b/Project.toml @@ -6,7 +6,6 @@ authors = ["Chris Rackauckas and Julia Computing"] [deps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" -IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" ModelingToolkitBase = "7771a370-6774-4173-bd38-47e70ca0b839" PreallocationTools = "d236fae5-4411-538c-8e31-a6e3d9e00b46" @@ -20,7 +19,6 @@ DataFrames = "1.7" DataInterpolations = "8" DiffEqBase = "6.190, 7" ForwardDiff = "0.10, 1" -IfElse = "0.1" LinearAlgebra = "1.10" ModelingToolkit = "11" ModelingToolkitBase = "1" diff --git a/src/Blocks/Blocks.jl b/src/Blocks/Blocks.jl index cbe6fe6c..2670de16 100644 --- a/src/Blocks/Blocks.jl +++ b/src/Blocks/Blocks.jl @@ -6,7 +6,7 @@ using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named, @parameters, @unpack, System, compose, connect, extend, getdefault, t_nounits as t, D_nounits as D using Symbolics: Symbolics, @register_symbolic, @variables, Differential, Equation -import IfElse: ifelse +import Base: ifelse import ..@symcheck export RealInput, RealInputArray, RealOutput, RealOutputArray, SISO diff --git a/src/Electrical/Digital/sources.jl b/src/Electrical/Digital/sources.jl index 8d83a752..b89d5730 100644 --- a/src/Electrical/Digital/sources.jl +++ b/src/Electrical/Digital/sources.jl @@ -84,7 +84,7 @@ function Pulse(; name, duty_cycle = 0.5, T = 1.0) @named d = DigitalPin() eqs = [ - d.val ~ IfElse.ifelse(t % T > duty_cycle * T, 1, 0), + d.val ~ ifelse(t % T > duty_cycle * T, 1, 0), ] return System(eqs, t, [], [], systems = [d], name = name) end diff --git a/src/Electrical/Electrical.jl b/src/Electrical/Electrical.jl index a4d62a3d..47051aec 100644 --- a/src/Electrical/Electrical.jl +++ b/src/Electrical/Electrical.jl @@ -4,7 +4,6 @@ This library contains electrical components to build up analog circuits. """ module Electrical -using IfElse: IfElse using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @constants, @named, @parameters, @unpack, Flow, System, connect, extend, t_nounits as t, D_nounits as D diff --git a/src/Electrical/utils.jl b/src/Electrical/utils.jl index df6d434f..34b7ef42 100644 --- a/src/Electrical/utils.jl +++ b/src/Electrical/utils.jl @@ -105,9 +105,9 @@ end @connector function DigitalPin(; name) @variables val(t) v(t) i(t) eqs = [ - val ~ IfElse.ifelse( + val ~ ifelse( (0.0 <= v) & (v <= 0.8) | (2.0 <= v) & (v <= 5.0), - IfElse.ifelse(v > 2.0, 1, 0), X + ifelse(v > 2.0, 1, 0), X ), ] System( diff --git a/src/Hydraulic/IsothermalCompressible/IsothermalCompressible.jl b/src/Hydraulic/IsothermalCompressible/IsothermalCompressible.jl index c10a7a91..3bde4a59 100644 --- a/src/Hydraulic/IsothermalCompressible/IsothermalCompressible.jl +++ b/src/Hydraulic/IsothermalCompressible/IsothermalCompressible.jl @@ -11,8 +11,6 @@ using Symbolics: Symbolics, @register_derivative, @register_symbolic, @variables using ...Blocks: RealInput using ...Mechanical.Translational: MechanicalPort, Mass -using IfElse: ifelse - export HydraulicPort, HydraulicFluid include("utils.jl") diff --git a/src/Mechanical/MultiBody2D/MultiBody2D.jl b/src/Mechanical/MultiBody2D/MultiBody2D.jl index 25f3ad0e..7e153c85 100644 --- a/src/Mechanical/MultiBody2D/MultiBody2D.jl +++ b/src/Mechanical/MultiBody2D/MultiBody2D.jl @@ -1,6 +1,5 @@ module MultiBody2D -using IfElse: IfElse using ModelingToolkitBase: ModelingToolkitBase, @component, @named, @parameters, System, t_nounits as t, D_nounits as D using Symbolics: Symbolics, @variables, Equation diff --git a/src/Mechanical/Rotational/Rotational.jl b/src/Mechanical/Rotational/Rotational.jl index 24ac1b4c..07462337 100644 --- a/src/Mechanical/Rotational/Rotational.jl +++ b/src/Mechanical/Rotational/Rotational.jl @@ -3,7 +3,6 @@ Library to model 1-dimensional, rotational mechanical systems """ module Rotational -using IfElse: IfElse using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named, @parameters, @unpack, Flow, System, compose, extend, t_nounits as t, D_nounits as D using Symbolics: Symbolics, @variables, Equation diff --git a/src/Mechanical/TranslationalModelica/TranslationalModelica.jl b/src/Mechanical/TranslationalModelica/TranslationalModelica.jl index 3eb96a1c..31f1de00 100644 --- a/src/Mechanical/TranslationalModelica/TranslationalModelica.jl +++ b/src/Mechanical/TranslationalModelica/TranslationalModelica.jl @@ -3,7 +3,6 @@ Library to model 1-dimensional, translational mechanical components. """ module TranslationalModelica -using IfElse: IfElse using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named, @parameters, @unpack, Flow, System, compose, extend, t_nounits as t, D_nounits as D using Symbolics: Symbolics, @variables, Equation diff --git a/src/Mechanical/TranslationalPosition/TranslationalPosition.jl b/src/Mechanical/TranslationalPosition/TranslationalPosition.jl index c531fd6d..8bf76461 100644 --- a/src/Mechanical/TranslationalPosition/TranslationalPosition.jl +++ b/src/Mechanical/TranslationalPosition/TranslationalPosition.jl @@ -3,7 +3,6 @@ Library to model 1-dimensional, translational mechanical components. """ module TranslationalPosition -using IfElse: IfElse using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named, @parameters, @unpack, Flow, System, compose, extend, t_nounits as t, D_nounits as D using Symbolics: Symbolics, @variables, Equation diff --git a/src/Thermal/Thermal.jl b/src/Thermal/Thermal.jl index d6414905..811f573a 100644 --- a/src/Thermal/Thermal.jl +++ b/src/Thermal/Thermal.jl @@ -2,7 +2,6 @@ Library of thermal system components to model heat transfer. """ module Thermal -using IfElse: IfElse using ModelingToolkitBase: ModelingToolkitBase, @component, @connector, @named, @parameters, @unpack, Flow, System, extend, t_nounits as t, D_nounits as D using Symbolics: Symbolics, @variables, Equation