Skip to content

Commit d5ebf7a

Browse files
authored
Test package with Julia 1.0 and fix bugs (#65)
1 parent 6acc912 commit d5ebf7a

File tree

4 files changed

+10
-37
lines changed

4 files changed

+10
-37
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ jobs:
1414
strategy:
1515
matrix:
1616
version:
17+
- '1.0'
1718
- '1'
1819
- 'nightly'
1920
os:

Project.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "OptimalTransport"
22
uuid = "7e02d93a-ae51-4f58-b602-d97af76e3b33"
33
authors = ["zsteve <[email protected]>"]
4-
version = "0.2.3"
4+
version = "0.2.4"
55

66
[deps]
77
Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
@@ -19,11 +19,10 @@ Requires = "1.1"
1919
julia = "1"
2020

2121
[extras]
22-
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
2322
PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
2423
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
2524
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2625
Tulip = "6dd1b50a-3aae-11e9-10b5-ef983d2400fa"
2726

2827
[targets]
29-
test = ["Tulip", "CUDA", "PyCall", "Random", "Test"]
28+
test = ["Tulip", "PyCall", "Random", "Test"]

src/OptimalTransport.jl

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,17 @@ function emd(μ, ν, C, model::MOI.ModelLike)
6666
end
6767

6868
# add constraints for source
69-
for (xs, μi) in zip(eachrow(xmat), μ)
69+
for (i, μi) in zip(axes(xmat, 1), μ) # eachrow(xmat) is not available on Julia 1.0
7070
f = MOI.ScalarAffineFunction(
71-
[MOI.ScalarAffineTerm(one(μi), xi) for xi in xs], zero(μi)
71+
[MOI.ScalarAffineTerm(one(μi), xi) for xi in view(xmat, i, :)], zero(μi)
7272
)
7373
MOI.add_constraint(model, f, MOI.EqualTo(μi))
7474
end
7575

7676
# add constraints for target
77-
for (xs, νi) in zip(eachcol(xmat), ν)
77+
for (i, νi) in zip(axes(xmat, 2), ν) # eachcol(xmat) is not available on Julia 1.0
7878
f = MOI.ScalarAffineFunction(
79-
[MOI.ScalarAffineTerm(one(νi), xi) for xi in xs], zero(νi)
79+
[MOI.ScalarAffineTerm(one(νi), xi) for xi in view(xmat, :, i)], zero(νi)
8080
)
8181
MOI.add_constraint(model, f, MOI.EqualTo(νi))
8282
end
@@ -415,16 +415,11 @@ function sinkhorn_stabilized(
415415
absorb_tol=1e3,
416416
max_iter=1000,
417417
tol=1e-9,
418-
alpha=nothing,
419-
beta=nothing,
418+
alpha=zeros(size(mu)),
419+
beta=zeros(size(nu)),
420420
return_duals=false,
421421
verbose=false,
422422
)
423-
if isnothing(alpha) || isnothing(beta)
424-
alpha = zeros(size(mu))
425-
beta = zeros(size(nu))
426-
end
427-
428423
u = ones(size(mu))
429424
v = ones(size(nu))
430425
K = getK(C, alpha, beta, eps, mu, nu)

test/runtests.jl

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using OptimalTransport
22

3-
using CUDA
43
using Distances
54
using PyCall
65
using Tulip
@@ -108,27 +107,6 @@ end
108107
@test c_pot isa Float64 # POT does not respect input types
109108
@test c c_pot atol = Base.eps(Float32)
110109
end
111-
112-
# computation on the GPU
113-
if CUDA.functional()
114-
@testset "CUDA" begin
115-
# create two uniform histograms
116-
μ = CUDA.fill(Float32(1 / M), M)
117-
ν = CUDA.fill(Float32(1 / N), N)
118-
119-
# create random cost matrix
120-
C = abs2.(CUDA.rand(M) .- CUDA.rand(1, N))
121-
122-
# compute optimal transport map
123-
eps = 0.01f0
124-
γ = sinkhorn(μ, ν, C, eps)
125-
@test γ isa CuArray{Float32}
126-
127-
# compute optimal transport cost
128-
c = sinkhorn2(μ, ν, C, eps)
129-
@test c isa Float32
130-
end
131-
end
132110
end
133111

134112
@testset "unbalanced transport" begin
@@ -207,7 +185,7 @@ end
207185
@testset "sinkhorn barycenter" begin
208186
@testset "example" begin
209187
# set up support
210-
support = range(-1, 1; length=250)
188+
support = range(-1; stop=1, length=250)
211189
μ1 = exp.(-(support .+ 0.5) .^ 2 ./ 0.1^2)
212190
μ1 ./= sum(μ1)
213191
μ2 = exp.(-(support .- 0.5) .^ 2 ./ 0.1^2)

0 commit comments

Comments
 (0)