Skip to content

Commit f47b136

Browse files
committed
Fix gradients for delta larger than one
1 parent f65408b commit f47b136

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/MathOperations.jl

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ function x_grad(expr, vars, width, height; Δx = 1)
141141
if Δx == 0
142142
return 0
143143
else
144-
if idx_x > 1 && idx_x < width
144+
if idx_x > 1 && idx_x <= width - Δx
145145
vars_plus_Δx = merge(Dict(k => (isa(v, Matrix) ? v[idx_x + Δx, idx_y] : v) for (k, v) in vars), Dict(:x => idx_x + Δx))
146146
x_plus = custom_eval(expr, vars_plus_Δx, width, height)
147147
return (x_plus - center) / Δx
@@ -166,7 +166,7 @@ function y_grad(expr, vars, width, height; Δy = 1)
166166
if Δy == 0
167167
return 0
168168
else
169-
if idx_y > 1 && idx_y < height
169+
if idx_y > 1 && idx_y <= height - Δy
170170
vars_plus_Δy = merge(Dict(k => (isa(v, Matrix) ? v[idx_x, idx_y + Δy] : v) for (k, v) in vars), Dict(:y => idx_y + Δy))
171171
y_plus = custom_eval(expr, vars_plus_Δy, width, height)
172172
return (y_plus - center) / Δy
@@ -231,8 +231,15 @@ function neighbor_max(expr, vars, width, height; Δx = 1, Δy = 1)
231231
for j in filter(y -> y > 0 && y != idx_y && y <= height, idx_y-Δy:idx_y+Δy)
232232
new_vars = merge(Dict(k => (isa(v, Matrix) ? v[i, j] : v) for (k, v) in vars), Dict(:x => i, :y => j))
233233
val = custom_eval(expr, new_vars, width, height)
234-
if val > max_val
235-
max_val = val
234+
235+
if isreal(val) && isreal(max_val)
236+
if val > max_val
237+
max_val = val
238+
end
239+
else
240+
if abs(val) > abs(max_val)
241+
max_val = val
242+
end
236243
end
237244
end
238245
end

0 commit comments

Comments
 (0)