Skip to content

fix: consider metadata type in hashconsing#863

Merged
AayushSabharwal merged 1 commit intomasterfrom
as/fix-metadata-equal
Feb 20, 2026
Merged

fix: consider metadata type in hashconsing#863
AayushSabharwal merged 1 commit intomasterfrom
as/fix-metadata-equal

Conversation

@AayushSabharwal
Copy link
Member

@AayushSabharwal AayushSabharwal commented Feb 20, 2026

Prior to this change, symbolic variables with isequal metadata of different types would hashcons to the same value. This fixes that behavior.

@github-actions
Copy link
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
master 9e20600... master / 9e20600...
arithmetic/2-arg mul 12.5 ± 0.18 μs 12.7 ± 0.21 μs 0.983 ± 0.021
arithmetic/addition 0.0755 ± 0.00089 ms 0.0792 ± 0.00088 ms 0.953 ± 0.015
arithmetic/division 24.1 ± 0.36 μs 24.4 ± 0.36 μs 0.986 ± 0.021
arithmetic/multiplication 0.0575 ± 0.0011 ms 0.0587 ± 0.0012 ms 0.98 ± 0.027
overhead/acrule/a+2 2.36 ± 0.076 μs 2.29 ± 0.064 μs 1.03 ± 0.044
overhead/acrule/a+2+b 0.062 ± 0.001 μs 0.063 ± 0.001 μs 0.984 ± 0.022
overhead/acrule/a+b 4 ± 0.15 μs 3.82 ± 0.13 μs 1.05 ± 0.053
overhead/acrule/noop:Int 0.04 ± 0.001 μs 0.041 ± 0.002 μs 0.976 ± 0.053
overhead/acrule/noop:Sym 0.047 ± 0.001 μs 0.048 ± 0.002 μs 0.979 ± 0.046
overhead/get_degrees/large_poly 0.082 ± 0.003 μs 0.084 ± 0.018 μs 0.976 ± 0.21
overhead/rule/noop:Int 0.059 ± 0.002 μs 0.06 ± 0.002 μs 0.983 ± 0.047
overhead/rule/noop:Sym 0.059 ± 0.002 μs 0.06 ± 0.002 μs 0.983 ± 0.047
overhead/rule/noop:Term 0.059 ± 0.002 μs 0.06 ± 0.003 μs 0.983 ± 0.059
overhead/ruleset/noop:Int 18 ± 1 ns 19 ± 1 ns 0.947 ± 0.073
overhead/ruleset/noop:Sym 0.269 ± 0.01 μs 0.313 ± 0.007 μs 0.859 ± 0.037
overhead/ruleset/noop:Term 1.27 ± 0.026 μs 1.3 ± 0.025 μs 0.981 ± 0.028
overhead/simplify/noop:Int 19 ± 1 ns 0.037 ± 0.017 μs 0.514 ± 0.24
overhead/simplify/noop:Sym 26 ± 1 ns 27 ± 1 ns 0.963 ± 0.051
overhead/simplify/noop:Term 26.4 ± 0.73 μs 25.4 ± 0.76 μs 1.04 ± 0.042
overhead/simplify/randterm (+, *):serial 0.223 ± 0.003 s 0.215 ± 0.0021 s 1.04 ± 0.017
overhead/simplify/randterm (+, *):thread 0.251 ± 0.013 s 0.242 ± 0.0099 s 1.04 ± 0.067
overhead/simplify/randterm (/, *):serial 0.0775 ± 0.0021 ms 0.0763 ± 0.002 ms 1.02 ± 0.038
overhead/simplify/randterm (/, *):thread 0.0809 ± 0.0018 ms 0.0809 ± 0.002 ms 1 ± 0.033
overhead/substitute/a 0.0383 ± 0.00046 ms 0.0375 ± 0.00042 ms 1.02 ± 0.017
overhead/substitute/a,b 0.0459 ± 0.00055 ms 0.045 ± 0.00047 ms 1.02 ± 0.016
overhead/substitute/a,b,c 0.0413 ± 0.00045 ms 0.0401 ± 0.00051 ms 1.03 ± 0.017
polyform/easy_iszero 21.5 ± 0.28 μs 22 ± 0.27 μs 0.977 ± 0.018
polyform/isone 0.938 ± 0.02 ms 0.934 ± 0.017 ms 1 ± 0.028
polyform/isone:noop 0.09 ± 0.003 μs 0.089 ± 0.004 μs 1.01 ± 0.057
polyform/iszero 0.789 ± 0.017 ms 0.788 ± 0.014 ms 1 ± 0.028
polyform/iszero:noop 0.087 ± 0.003 μs 0.086 ± 0.003 μs 1.01 ± 0.05
polyform/simplify_fractions 1.02 ± 0.02 ms 1.02 ± 0.017 ms 1 ± 0.025
printing/large_poly 0.206 ± 0.0018 s 0.209 ± 0.001 s 0.987 ± 0.0099
time_to_load 1.19 ± 0.0026 s 1.18 ± 0.0029 s 1 ± 0.0033
Memory benchmarks
master 9e20600... master / 9e20600...
arithmetic/2-arg mul 0.078 k allocs: 2.72 kB 0.077 k allocs: 2.69 kB 1.01
arithmetic/addition 0.438 k allocs: 16 kB 0.438 k allocs: 16 kB 1
arithmetic/division 0.142 k allocs: 5.47 kB 0.14 k allocs: 5.41 kB 1.01
arithmetic/multiplication 0.356 k allocs: 11.7 kB 0.356 k allocs: 11.7 kB 1
overhead/acrule/a+2 0.034 k allocs: 1.25 kB 0.033 k allocs: 1.23 kB 1.01
overhead/acrule/a+2+b 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/a+b 0.047 k allocs: 1.8 kB 0.045 k allocs: 1.77 kB 1.02
overhead/acrule/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/get_degrees/large_poly 2 allocs: 32 B 2 allocs: 32 B 1
overhead/rule/noop:Int 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Sym 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Term 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/ruleset/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/ruleset/noop:Sym 3 allocs: 0.109 kB 3 allocs: 0.109 kB 1
overhead/ruleset/noop:Term 12 allocs: 0.391 kB 12 allocs: 0.391 kB 1
overhead/simplify/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Term 0.298 k allocs: 11.6 kB 0.282 k allocs: 11.4 kB 1.02
overhead/simplify/randterm (+, *):serial 2.3 M allocs: 0.0883 GB 2.21 M allocs: 0.0868 GB 1.02
overhead/simplify/randterm (+, *):thread 2.35 M allocs: 0.246 GB 2.26 M allocs: 0.244 GB 1.01
overhead/simplify/randterm (/, *):serial 0.844 k allocs: 30.4 kB 0.781 k allocs: 29.4 kB 1.03
overhead/simplify/randterm (/, *):thread 0.879 k allocs: 31.5 kB 0.816 k allocs: 30.5 kB 1.03
overhead/substitute/a 0.22 k allocs: 8.42 kB 0.22 k allocs: 8.42 kB 1
overhead/substitute/a,b 0.267 k allocs: 10.1 kB 0.267 k allocs: 10.1 kB 1
overhead/substitute/a,b,c 0.238 k allocs: 8.62 kB 0.238 k allocs: 8.62 kB 1
polyform/easy_iszero 0.133 k allocs: 4.58 kB 0.127 k allocs: 4.48 kB 1.02
polyform/isone 8.34 k allocs: 0.567 MB 8 k allocs: 0.561 MB 1.01
polyform/isone:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/iszero 6.87 k allocs: 0.467 MB 6.71 k allocs: 0.464 MB 1.01
polyform/iszero:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/simplify_fractions 8.82 k allocs: 0.59 MB 8.65 k allocs: 0.586 MB 1.01
printing/large_poly 1.86 M allocs: 0.082 GB 1.86 M allocs: 0.082 GB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

@github-actions
Copy link
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master 9e20600... master / 9e20600...
arithmetic/2-arg mul 10.6 ± 0.31 μs 10.6 ± 0.27 μs 0.999 ± 0.039
arithmetic/addition 0.068 ± 0.00083 ms 0.068 ± 0.00077 ms 1 ± 0.017
arithmetic/division 24.4 ± 0.56 μs 24.5 ± 0.57 μs 0.999 ± 0.033
arithmetic/multiplication 0.0523 ± 0.0016 ms 0.0541 ± 0.0018 ms 0.967 ± 0.044
overhead/acrule/a+2 2.14 ± 0.05 μs 2.16 ± 0.05 μs 0.991 ± 0.033
overhead/acrule/a+2+b 0.08 ± 0 μs 0.08 ± 0.001 μs 1 ± 0.013
overhead/acrule/a+b 3.7 ± 0.07 μs 3.82 ± 0.071 μs 0.969 ± 0.026
overhead/acrule/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/acrule/noop:Sym 0.07 ± 0.01 μs 0.07 ± 0.01 μs 1 ± 0.2
overhead/get_degrees/large_poly 0.08 ± 0.001 μs 0.08 ± 0.01 μs 1 ± 0.13
overhead/rule/noop:Int 0.07 ± 0.01 μs 0.06 ± 0.01 μs 1.17 ± 0.26
overhead/rule/noop:Sym 0.07 ± 0 μs 0.07 ± 0.001 μs 1 ± 0.014
overhead/rule/noop:Term 0.07 ± 0 μs 0.07 ± 0 μs 1 ± 0
overhead/ruleset/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/ruleset/noop:Sym 0.311 ± 0.001 μs 0.32 ± 0.01 μs 0.972 ± 0.031
overhead/ruleset/noop:Term 1.21 ± 0.031 μs 1.2 ± 0.03 μs 1.01 ± 0.036
overhead/simplify/noop:Int 30 ± 0 ns 30 ± 0 ns 1 ± 0
overhead/simplify/noop:Sym 30 ± 10 ns 30 ± 10 ns 1 ± 0.47
overhead/simplify/noop:Term 26.3 ± 0.53 μs 27.4 ± 0.61 μs 0.958 ± 0.029
overhead/simplify/randterm (+, *):serial 0.197 ± 0.024 s 0.185 ± 0.023 s 1.07 ± 0.19
overhead/simplify/randterm (+, *):thread 0.241 ± 0.045 s 0.239 ± 0.038 s 1.01 ± 0.25
overhead/simplify/randterm (/, *):serial 0.0858 ± 0.003 ms 0.0858 ± 0.0032 ms 1 ± 0.052
overhead/simplify/randterm (/, *):thread 0.0962 ± 0.0082 ms 0.0958 ± 0.0085 ms 1 ± 0.12
overhead/substitute/a 0.0331 ± 0.00069 ms 0.0336 ± 0.00071 ms 0.985 ± 0.029
overhead/substitute/a,b 0.0413 ± 0.00095 ms 0.0413 ± 0.00095 ms 1 ± 0.033
overhead/substitute/a,b,c 0.0394 ± 0.00095 ms 0.0399 ± 0.00092 ms 0.989 ± 0.033
polyform/easy_iszero 18.9 ± 0.42 μs 18.8 ± 0.38 μs 1.01 ± 0.03
polyform/isone 0.9 ± 0.019 ms 0.909 ± 0.017 ms 0.99 ± 0.028
polyform/isone:noop 0.08 ± 0.001 μs 0.08 ± 0.001 μs 1 ± 0.018
polyform/iszero 0.788 ± 0.016 ms 0.784 ± 0.017 ms 1.01 ± 0.03
polyform/iszero:noop 0.08 ± 0.001 μs 0.08 ± 0.01 μs 1 ± 0.13
polyform/simplify_fractions 0.976 ± 0.019 ms 0.976 ± 0.017 ms 1 ± 0.026
printing/large_poly 0.192 ± 0.015 s 0.191 ± 0.013 s 1.01 ± 0.1
time_to_load 1.38 ± 0.0097 s 1.37 ± 0.012 s 1.01 ± 0.011
Memory benchmarks
master 9e20600... master / 9e20600...
arithmetic/2-arg mul 0.055 k allocs: 1.77 kB 0.056 k allocs: 1.78 kB 0.991
arithmetic/addition 0.3 k allocs: 10.3 kB 0.3 k allocs: 10.3 kB 1
arithmetic/division 0.131 k allocs: 4.75 kB 0.132 k allocs: 4.77 kB 0.997
arithmetic/multiplication 0.252 k allocs: 6.5 kB 0.252 k allocs: 6.5 kB 1
overhead/acrule/a+2 0.033 k allocs: 1.11 kB 0.034 k allocs: 1.12 kB 0.986
overhead/acrule/a+2+b 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/a+b 0.044 k allocs: 1.52 kB 0.046 k allocs: 1.55 kB 0.98
overhead/acrule/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/acrule/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/get_degrees/large_poly 2 allocs: 32 B 2 allocs: 32 B 1
overhead/rule/noop:Int 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Sym 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/rule/noop:Term 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
overhead/ruleset/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/ruleset/noop:Sym 3 allocs: 0.109 kB 3 allocs: 0.109 kB 1
overhead/ruleset/noop:Term 12 allocs: 0.391 kB 12 allocs: 0.391 kB 1
overhead/simplify/noop:Int 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Sym 0 allocs: 0 B 0 allocs: 0 B
overhead/simplify/noop:Term 0.276 k allocs: 9.89 kB 0.284 k allocs: 10 kB 0.988
overhead/simplify/randterm (+, *):serial 2.09 M allocs: 0.0743 GB 2.16 M allocs: 0.0754 GB 0.986
overhead/simplify/randterm (+, *):thread 2.25 M allocs: 0.236 GB 2.32 M allocs: 0.237 GB 0.996
overhead/simplify/randterm (/, *):serial 0.776 k allocs: 28.1 kB 0.783 k allocs: 28.2 kB 0.996
overhead/simplify/randterm (/, *):thread 0.911 k allocs: 0.0324 MB 0.918 k allocs: 0.0325 MB 0.997
overhead/substitute/a 0.168 k allocs: 5.98 kB 0.172 k allocs: 6.05 kB 0.99
overhead/substitute/a,b 0.217 k allocs: 7.59 kB 0.223 k allocs: 7.69 kB 0.988
overhead/substitute/a,b,c 0.223 k allocs: 7.72 kB 0.229 k allocs: 7.81 kB 0.988
polyform/easy_iszero 0.091 k allocs: 2.92 kB 0.092 k allocs: 2.94 kB 0.995
polyform/isone 10.9 k allocs: 0.578 MB 10.9 k allocs: 0.579 MB 0.999
polyform/isone:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/iszero 8.95 k allocs: 0.48 MB 8.97 k allocs: 0.48 MB 0.999
polyform/iszero:noop 1 allocs: 16 B 1 allocs: 16 B 1
polyform/simplify_fractions 11.4 k allocs: 0.595 MB 11.4 k allocs: 0.596 MB 0.999
printing/large_poly 2.15 M allocs: 0.079 GB 2.15 M allocs: 0.079 GB 1
time_to_load 0.145 k allocs: 11 kB 0.145 k allocs: 11 kB 1

@AayushSabharwal AayushSabharwal merged commit 8d80bbf into master Feb 20, 2026
15 of 23 checks passed
@AayushSabharwal AayushSabharwal deleted the as/fix-metadata-equal branch February 20, 2026 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant