mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-23 02:59:52 +00:00
142 lines
3.9 KiB
Julia
142 lines
3.9 KiB
Julia
# Automatically run notebooks and generate rst table for results
|
|
|
|
function run_notebooks()
|
|
k = 0
|
|
results = Dict[]
|
|
cd(dirname(@__FILE__)) do
|
|
for ipynb in readdir("tutorials")
|
|
tic()
|
|
if !endswith(ipynb, "ipynb")
|
|
continue
|
|
end
|
|
runtime = 0
|
|
status = 1
|
|
println("Running notebook tutorials/$ipynb")
|
|
port = 34211+k # we're having some weird port issue with zmq
|
|
k += 1
|
|
try
|
|
run(`runipy -o tutorials/$ipynb --kernel=julia-0.4 --port=$port`)
|
|
status = 0
|
|
catch
|
|
println("did not work")
|
|
end
|
|
runtime = toc()
|
|
run(`ipython nbconvert tutorials/$ipynb --to rst --output=tutorials/$(ipynb[1:end-6])`)
|
|
#println("took $runtime seconds")
|
|
data = Dict("author" => "unknown", "status" => status, "runtime" => runtime,
|
|
"filename" => ipynb, "last_run" => time(), "description"=>"")
|
|
push!(results, data)
|
|
end
|
|
end
|
|
return results
|
|
end
|
|
|
|
"""
|
|
Make rows from results ready to tabular form
|
|
"""
|
|
function makerows(results)
|
|
rows = ["id" "author" "description" "last run" "runtime (s)" "status" "html" "pdf"]
|
|
for (i, data) in enumerate(results)
|
|
row = ["na" "unknown" "unknown" "unknown" "unknown" "unknown" "na" "na"]
|
|
println(i)
|
|
row[1] = string(i)
|
|
desc = data["description"]
|
|
if desc == ""
|
|
desc = data["filename"]
|
|
end
|
|
row[3] = desc
|
|
row[4] = Libc.strftime("%Y-%m-%d %H:%M:%S", data["last_run"])
|
|
row[5] = string(round(data["runtime"], 2))
|
|
if data["status"] == 0
|
|
row[6] = "PASS"
|
|
else
|
|
row[6] = "FAIL"
|
|
end
|
|
fn = data["filename"][1:end-6]*".rst"
|
|
row[7] = ":doc:`html <$fn>`"
|
|
fn = data["filename"][1:end-6]*".pdf"
|
|
row[8] = ":download:`html <$fn>`"
|
|
rows = vcat(rows, row)
|
|
end
|
|
return rows
|
|
end
|
|
|
|
|
|
"""
|
|
write rst table. rows is array of arrays.
|
|
|
|
Expected output
|
|
|
|
+----+-----------+------------------------------+------------+---------+--------+------+-----+
|
|
| id | author | description | last run | runtime | status | html | pdf |
|
|
+====+===========+==============================+============+=========+========+======+=====+
|
|
| 1 | Jukka Aho | This is placeholder notebook | 2015-07-05 | 123.45 | |pass| | html | pdf |
|
|
+----+-----------+------------------------------+------------+---------+--------+------+-----+
|
|
|
|
|
|
"""
|
|
function write_rst_table(rows)
|
|
# determine cell lenghts
|
|
lenghts = zeros(Int, size(rows))
|
|
for i=1:size(rows, 1)
|
|
for j=1:size(rows, 2)
|
|
lenghts[i,j] = length(rows[i,j])+3
|
|
end
|
|
end
|
|
#println(lenghts)
|
|
cl = maximum(lenghts, 1) # maximum column lenghts
|
|
tl = sum(cl)+1 # total table width
|
|
mp = [1 cumsum(cl, 2)+1] # marker points "+"
|
|
println(mp)
|
|
#println(cl)
|
|
#println(tl)
|
|
|
|
function sep(l, m; s="+", d="-")
|
|
p = ""
|
|
for j=1:l
|
|
if j in m
|
|
p *= s
|
|
else
|
|
p *= d
|
|
end
|
|
end
|
|
p *= "\n"
|
|
return p
|
|
end
|
|
|
|
s = ""
|
|
# write rows
|
|
s *= sep(tl, mp)
|
|
for i = 1:size(rows, 1)
|
|
s *= "|"
|
|
for j=1:size(rows, 2)
|
|
s *= " " * rows[i, j] * " "
|
|
s *= repeat(" ", cl[j]-lenghts[i,j])
|
|
s *= "|"
|
|
end
|
|
s *= "\n"
|
|
if i == 1
|
|
s *= sep(tl, mp; d="=")
|
|
else
|
|
s *= sep(tl, mp)
|
|
end
|
|
end
|
|
return s
|
|
end
|
|
|
|
|
|
function main(;filename="tutorials/notebooks.rst")
|
|
results = run_notebooks()
|
|
rows = makerows(results)
|
|
table = write_rst_table(rows)
|
|
println(table)
|
|
cd(dirname(@__FILE__)) do
|
|
open(filename, "w") do fid
|
|
write(fid, table)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
main()
|