From bd4cc7aae70d14268534b2a51efc910811d0f7b8 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Thu, 27 Feb 2025 16:25:58 -0500 Subject: [PATCH 1/3] Fix combining interfaces --- Project.toml | 2 +- src/abstractinterface.jl | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Project.toml b/Project.toml index 55cf1b9..ec972e7 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "DerivableInterfaces" uuid = "6c5e35bf-e59e-4898-b73c-732dcc4ba65f" authors = ["ITensor developers and contributors"] -version = "0.3.15" +version = "0.3.16" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" diff --git a/src/abstractinterface.jl b/src/abstractinterface.jl index 1cee893..3fc6d5e 100644 --- a/src/abstractinterface.jl +++ b/src/abstractinterface.jl @@ -2,24 +2,24 @@ interface(x) = interface(typeof(x)) # TODO: Define as `DefaultInterface()`. interface(::Type) = error("Interface unknown.") -interface(x1, x_rest...) = combine_interfaces(x1, x_rest...) +interface(x1, x_rest...) = combine_interfaces(interface(x1), interface.(x_rest)...) # Adapted from `Base.Broadcast.combine_styles`. # Get the combined interfaces of the input objects. -function combine_interfaces(x1, x2, x_rest...) - return combine_interfaces(combine_interfaces(x1, x2), x_rest...) +function combine_interfaces(inter1, inter2, inter_rest...) + return combine_interfaces(combine_interfaces(inter1, inter2), inter_rest...) end -combine_interfaces(x1, x2) = combine_interface_rule(interface(x1), interface(x2)) -combine_interfaces(x) = interface(x) +combine_interfaces(inter1, inter2) = combine_interface_rule(inter1, inter2) +combine_interfaces(inter) = interface(inter) # Rules for combining interfaces. function combine_interface_rule( - interface1::Interface, interface2::Interface + inter1::Interface, inter2::Interface ) where {Interface} - return interface1 + return inter1 end # TODO: Define as `UnknownInterface()`. -combine_interface_rule(interface1, interface2) = error("No rule for combining interfaces.") +combine_interface_rule(inter1, inter2) = error("No rule for combining interfaces.") abstract type AbstractInterface end From 42f9e6ad2e45ee1fb0e82e8eb055bdbd9ee23d71 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Thu, 27 Feb 2025 21:13:03 -0500 Subject: [PATCH 2/3] Fix tests --- src/abstractinterface.jl | 18 ++++++++++++------ src/derive_macro.jl | 4 +--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/abstractinterface.jl b/src/abstractinterface.jl index 3fc6d5e..69ccef5 100644 --- a/src/abstractinterface.jl +++ b/src/abstractinterface.jl @@ -6,20 +6,26 @@ interface(x1, x_rest...) = combine_interfaces(interface(x1), interface.(x_rest). # Adapted from `Base.Broadcast.combine_styles`. # Get the combined interfaces of the input objects. -function combine_interfaces(inter1, inter2, inter_rest...) - return combine_interfaces(combine_interfaces(inter1, inter2), inter_rest...) +function combine_interfaces( + inter1::AbstractInterface, inter2::AbstractInterface, inter_rest::AbstractInterface... +) + return combine_interfaces(combine_interface_rule(inter1, inter2), inter_rest...) end -combine_interfaces(inter1, inter2) = combine_interface_rule(inter1, inter2) -combine_interfaces(inter) = interface(inter) +function combine_interfaces(inter1::AbstractInterface, inter2::AbstractInterface) + return combine_interface_rule(inter1, inter2) +end +combine_interfaces(inter::AbstractInterface) = inter # Rules for combining interfaces. function combine_interface_rule( inter1::Interface, inter2::Interface -) where {Interface} +) where {Interface<:AbstractInterface} return inter1 end # TODO: Define as `UnknownInterface()`. -combine_interface_rule(inter1, inter2) = error("No rule for combining interfaces.") +function combine_interface_rule(inter1::AbstractInterface, inter2::AbstractInterface) + return error("No rule for combining interfaces.") +end abstract type AbstractInterface end diff --git a/src/derive_macro.jl b/src/derive_macro.jl index 0d17527..7f73d41 100644 --- a/src/derive_macro.jl +++ b/src/derive_macro.jl @@ -165,9 +165,7 @@ function derive_func_from_types(types::Expr, func::Expr) end return argname(i) end - interface = globalref_derive( - :(DerivableInterfaces.combine_interfaces($(active_argnames...))) - ) + interface = globalref_derive(:(DerivableInterfaces.interface($(active_argnames...)))) return derive_interface_func(interface, new_func) end From 3ce69a48503f566628725028a257bbd8d9efc925 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Thu, 27 Feb 2025 21:15:07 -0500 Subject: [PATCH 3/3] Fix tests --- src/abstractinterface.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/abstractinterface.jl b/src/abstractinterface.jl index 69ccef5..8223c6d 100644 --- a/src/abstractinterface.jl +++ b/src/abstractinterface.jl @@ -4,6 +4,10 @@ interface(x) = interface(typeof(x)) interface(::Type) = error("Interface unknown.") interface(x1, x_rest...) = combine_interfaces(interface(x1), interface.(x_rest)...) +abstract type AbstractInterface end + +(interface::AbstractInterface)(f) = InterfaceFunction(interface, f) + # Adapted from `Base.Broadcast.combine_styles`. # Get the combined interfaces of the input objects. function combine_interfaces( @@ -26,7 +30,3 @@ end function combine_interface_rule(inter1::AbstractInterface, inter2::AbstractInterface) return error("No rule for combining interfaces.") end - -abstract type AbstractInterface end - -(interface::AbstractInterface)(f) = InterfaceFunction(interface, f)