@@ -5,9 +5,11 @@ export TropicalTypes, AbstractSemiring
55
66export TropicalAndOr
77export Tropical, TropicalF64, TropicalF32, TropicalF16, TropicalI64, TropicalI32, TropicalI16
8- export TropicalMaxMul, TropicalMaxMulF64, TropicalMaxMulF32, TropicalMaxMulF16, TropicalMaxMulI64, TropicalMaxMulI32, TropicalMaxMulI16
98export TropicalMaxPlus, TropicalMaxPlusF64, TropicalMaxPlusF32, TropicalMaxPlusF16, TropicalMaxPlusI64, TropicalMaxPlusI32, TropicalMaxPlusI16
109export TropicalMinPlus, TropicalMinPlusF64, TropicalMinPlusF32, TropicalMinPlusF16, TropicalMinPlusI64, TropicalMinPlusI32, TropicalMinPlusI16
10+ export TropicalMaxMul, TropicalMaxMulF64, TropicalMaxMulF32, TropicalMaxMulF16, TropicalMaxMulI64, TropicalMaxMulI32, TropicalMaxMulI16
11+ export TropicalMaxMin, TropicalMaxMinF64, TropicalMaxMinF32, TropicalMaxMinF16, TropicalMaxMinI64, TropicalMaxMinI32, TropicalMaxMinI16
12+ export TropicalBitwise, TropicalBitwiseI64, TropicalBitwiseI32, TropicalBitwiseI16
1113export CountingTropical, CountingTropicalF16, CountingTropicalF32, CountingTropicalF64, CountingTropicalI16, CountingTropicalI32, CountingTropicalI64
1214
1315
@@ -41,6 +43,8 @@ include("tropical_maxplus.jl")
4143include (" tropical_andor.jl" )
4244include (" tropical_minplus.jl" )
4345include (" tropical_maxmul.jl" )
46+ include (" tropical_maxmin.jl" )
47+ include (" tropical_bitwise.jl" )
4448include (" counting_tropical.jl" )
4549
4650const TropicalTypes{T} = Union{CountingTropical{T}, Tropical{T}}
@@ -53,17 +57,20 @@ for NBIT in [16, 32, 64]
5357 @eval const $ (Symbol (:TropicalMaxPlus , :F , NBIT)) = TropicalMaxPlus{$ (Symbol (:Float , NBIT))}
5458 @eval const $ (Symbol (:TropicalMinPlus , :F , NBIT)) = TropicalMinPlus{$ (Symbol (:Float , NBIT))}
5559 @eval const $ (Symbol (:TropicalMaxMul , :F , NBIT)) = TropicalMaxMul{$ (Symbol (:Float , NBIT))}
60+ @eval const $ (Symbol (:TropicalMaxMin , :F , NBIT)) = TropicalMaxMin{$ (Symbol (:Float , NBIT))}
5661 @eval const $ (Symbol (:CountingTropical , :F , NBIT)) = CountingTropical{$ (Symbol (:Float , NBIT)),$ (Symbol (:Float , NBIT))}
5762
5863 @eval const $ (Symbol (:Tropical , :I , NBIT)) = Tropical{$ (Symbol (:Int , NBIT))}
5964 @eval const $ (Symbol (:TropicalMaxPlus , :I , NBIT)) = TropicalMaxPlus{$ (Symbol (:Int , NBIT))}
6065 @eval const $ (Symbol (:TropicalMinPlus , :I , NBIT)) = TropicalMinPlus{$ (Symbol (:Int , NBIT))}
6166 @eval const $ (Symbol (:TropicalMaxMul , :I , NBIT)) = TropicalMaxMul{$ (Symbol (:Int , NBIT))}
67+ @eval const $ (Symbol (:TropicalMaxMin , :I , NBIT)) = TropicalMaxMin{$ (Symbol (:Int , NBIT))}
68+ @eval const $ (Symbol (:TropicalBitwise , :I , NBIT)) = TropicalBitwise{$ (Symbol (:Int , NBIT))}
6269 @eval const $ (Symbol (:CountingTropical , :I , NBIT)) = CountingTropical{$ (Symbol (:Int , NBIT)),$ (Symbol (:Float , NBIT))}
6370end
6471
6572# alias
66- for T in [:Tropical , :TropicalMaxMul , :TropicalMinPlus , :CountingTropical ]
73+ for T in [:Tropical , :TropicalMaxMul , :TropicalMaxMin , :CountingTropical ]
6774 for OP in [:> , :< , :(== ), :>= , :<= , :isless ]
6875 @eval Base.$ OP (a:: $T , b:: $T ) = $ OP (a. n, b. n)
6976 end
@@ -76,6 +83,16 @@ for T in [:Tropical, :TropicalMaxMul, :TropicalMinPlus, :CountingTropical]
7683 end
7784end
7885
86+ for T in [:TropicalMinPlus , :TropicalBitwise ]
87+ @eval begin
88+ content (x:: $T ) = x. n
89+ content (x:: Type{$T{X}} ) where X = X
90+ Base. isapprox (x:: AbstractArray{<:$T} , y:: AbstractArray{<:$T} ; kwargs... ) = all (isapprox .(x, y; kwargs... ))
91+ Base. show (io:: IO , :: MIME"text/plain" , t:: $T ) = Base. show (io, t)
92+ Base. isnan (x:: $T ) = isnan (content (x))
93+ end
94+ end
95+
7996for T in [:TropicalAndOr ]
8097 for OP in [:> , :< , :(== ), :>= , :<= , :isless ]
8198 @eval Base.$ OP (a:: $T , b:: $T ) = $ OP (a. n, b. n)
@@ -88,7 +105,7 @@ for T in [:TropicalAndOr]
88105 end
89106end
90107
91- for T in [:Tropical , :TropicalMaxMul , :TropicalMinPlus , :CountingTropical ]
108+ for T in [:Tropical , :TropicalMinPlus , :TropicalMaxMul , :CountingTropical ]
92109 @eval begin
93110 # this is for CUDA matmul
94111 Base.:(* )(a:: $T , b:: Bool ) = b ? a : zero (a)
@@ -100,4 +117,11 @@ for T in [:Tropical, :TropicalMaxMul, :TropicalMinPlus, :CountingTropical]
100117 end
101118end
102119
120+ for T in [:TropicalMaxMin , :TropicalBitwise ]
121+ @eval begin
122+ Base.:(* )(a:: $T , b:: Bool ) = b ? a : zero (a)
123+ Base.:(* )(b:: Bool , a:: $T ) = b ? a : zero (a)
124+ end
125+ end
126+
103127end # module
0 commit comments