tritium demo conv2d
transcript ·
python ·
c ·
rust
# TRITIUM-PROVENANCE sha256=fa150e08b678777a032d553feb0ff5a804a6e70b0b4702daf495d667b6bba189 lang=python
# TRITIUM-HEIGHT high=0.00 mid=0.28 low=0.72 fns=5
# TRITIUM-PSEUDO fn=im2col_f
#| fn im2col_f(x, h, w, kh, kw, out):
#| return p
# TRITIUM-HEIGHT fn=im2col_f high=0.00 mid=0.36 low=0.64 role=algo_mid
def im2col_f(x: list[float], h: int, w: int, kh: int, kw: int, out: list[float]) -> int:
oh = h - kh + 1
ow = w - kw + 1
p = 0
i = 0
while i < oh:
j = 0
while j < ow:
u = 0
while u < kh:
v = 0
while v < kw:
out[p] = x[(i + u) * w + (j + v)]
p = p + 1
v = v + 1
u = u + 1
j = j + 1
i = i + 1
return p
# TRITIUM-PSEUDO fn=conv2d_f
#| fn conv2d_f(x, h, w, k, kh, kw, out):
#| return oh * ow
# TRITIUM-HEIGHT fn=conv2d_f high=0.00 mid=0.33 low=0.68 role=algo_mid
def conv2d_f(x: list[float], h: int, w: int, k: list[float], kh: int, kw: int, out: list[float]) -> int:
oh = h - kh + 1
ow = w - kw + 1
i = 0
while i < oh:
j = 0
while j < ow:
s = 0.0
u = 0
while u < kh:
v = 0
while v < kw:
s = s + x[(i + u) * w + (j + v)] * k[u * kw + v]
v = v + 1
u = u + 1
out[i * ow + j] = s
j = j + 1
i = i + 1
return oh * ow
# TRITIUM-PSEUDO fn=list_get
#| fn list_get(vals, i):
#| return vals[i]
# TRITIUM-HEIGHT fn=list_get high=0.00 mid=0.00 low=1.00 role=algo_mid
def list_get(vals: list[int], i: int) -> int:
return vals[i]
# TRITIUM-PSEUDO fn=list_set
#| fn list_set(vals, i, v):
#| vals[i] = v
#| return v
# TRITIUM-HEIGHT fn=list_set high=0.00 mid=0.20 low=0.80 role=algo_mid
def list_set(vals: list[int], i: int, v: int) -> int:
vals[i] = v
return v
# TRITIUM-PSEUDO fn=relu
#| fn relu(vals, n):
#| return n
# TRITIUM-HEIGHT fn=relu high=0.00 mid=0.51 low=0.49
def relu(vals: list[int], n: int) -> int:
i = 0
while i < n:
if list_get(vals, i) < 0:
list_set(vals, i, 0)
i = i + 1
return n