src/Util.jl

changeset 33
a60d2f12ef93
parent 29
69242e8598eb
--- a/src/Util.jl	Wed Dec 15 10:35:57 2021 +0200
+++ b/src/Util.jl	Mon Dec 06 11:52:10 2021 +0200
@@ -12,57 +12,7 @@
 
 export map_first_slice!,
        reduce_first_slice,
-       norm₁,
-       norm₂,
-       γnorm₂,
-       norm₂w,
-       norm₂²,
-       norm₂w²,
-       norm₂₁,
-       γnorm₂₁,
-       dot,
-       mean,
-       proj_norm₂₁ball!,
-       proj_nonneg!,
-       curry,
-       ⬿,
-       @threadsif,
-       @background,
-       @backgroundif
-
-
-##########
-# Threads
-##########
-
-macro threadsif(threads, loop)
-    return esc(:(if $threads
-                    Threads.@threads $loop
-                else
-                    $loop
-                end))
-end
-
-macro background(bgtask, fgtask)
-    return :(t = Threads.@spawn $(esc(bgtask));
-             $(esc(fgtask));
-             wait(t))
-end
-
-macro backgroundif(threads, bgtask, fgtask)
-    return :(if $(esc(threads))
-                @background $(esc(bgtask)) $(esc(fgtask))
-            else
-                $(esc(bgtask))
-                $(esc(fgtask))
-            end)
-end
-
-########################
-# Functional programming
-#########################
-
-curry = (f::Function,y...)->(z...)->f(y...,z...)
+       ⬿
 
 ###############################
 # For working with NamedTuples
@@ -94,121 +44,5 @@
     return accum
 end
 
-###########################
-# Norms and inner products
-###########################
-
-@inline function dot(x, y)
-    @assert(length(x)==length(y))
-
-    accum=0
-    for i=1:length(y)
-        @inbounds accum += x[i]*y[i]
-    end
-    return accum
-end
-
-@inline function norm₂w²(y, w)
-    #Insane memory allocs
-    #return @inbounds sum(i -> y[i]*y[i]*w[i], 1:length(y))
-    accum=0
-    for i=1:length(y)
-        @inbounds accum=accum+y[i]*y[i]*w[i]
-    end
-    return accum
-end
-
-@inline function norm₂w(y, w)
-    return √(norm₂w²(y, w))
-end
-
-@inline function norm₂²(y)
-    #Insane memory allocs
-    #return @inbounds sum(i -> y[i]*y[i], 1:length(y))
-    accum=0
-    for i=1:length(y)
-        @inbounds accum=accum+y[i]*y[i]
-    end
-    return accum
-end
-
-@inline function norm₂(y)
-    return √(norm₂²(y))
-end
-
-@inline function norm₁(y)
-    accum=0
-    for i=1:length(y)
-        @inbounds accum=accum+abs(y[i])
-    end
-    return accum
-end
-
-@inline function γnorm₂(y, γ)
-    hubersq = xsq -> begin
-        x=√xsq
-        return if x > γ
-            x-γ/2
-        elseif x<-γ
-            -x-γ/2
-        else
-            xsq/(2γ)
-        end
-    end
-
-    if γ==0
-        return norm₂(y)
-    else
-        return hubersq(norm₂²(y))
-    end
-end
-
-function norm₂₁(y)
-    return reduce_first_slice((s, x) -> s+norm₂(x), y)
-end
-
-function γnorm₂₁(y,γ)
-    return reduce_first_slice((s, x) -> s+γnorm₂(x, γ), y)
-end
-
-function mean(v)
-    return sum(v)/prod(size(v))
-end
-
-@inline function proj_norm₂₁ball!(y, α)
-    α²=α*α
-
-    if ndims(y)==3 && size(y, 1)==2
-        @inbounds for i=1:size(y, 2)
-            @simd for j=1:size(y, 3)
-                n² = y[1,i,j]*y[1,i,j]+y[2,i,j]*y[2,i,j]
-                if n²>α²
-                    v = α/√n²
-                    y[1, i, j] *= v
-                    y[2, i, j] *= v
-                end
-            end
-        end
-    else
-        y′=reshape(y, (size(y, 1), prod(size(y)[2:end])))
-
-        @inbounds @simd for i=1:size(y′, 2)# in CartesianIndices(size(y)[2:end])
-            n² = norm₂²(@view(y′[:, i]))
-            if n²>α²
-                @views y′[:, i] .*= (α/√n²)
-            end
-        end
-    end
-end
-
-@inline function proj_nonneg!(y)
-    @inbounds @simd for i=1:length(y)
-        if y[i] < 0
-            y[i] = 0
-        end
-    end
-    return y
-end
-
 end # Module
 

mercurial