add NAME:
	julia -e 'using Pkg; Pkg.add("{{NAME}}")'

rm NAME:
	julia -e 'using Pkg; Pkg.rm("{{NAME}}")'

up-main:
	julia --project=. -e 'using Pkg; Pkg.update()'

up-dev:
	julia --project=dev -e 'using Pkg; Pkg.update()'

up-docs:
	julia --project=docs -e 'using Pkg; Pkg.update()'

up:
	just up-main
	just up-dev
	just up-docs

inst-main:
	julia --project=. -e 'using Pkg; Pkg.instantiate()'

inst-dev:
	julia --project=dev -e 'using Pkg; Pkg.instantiate()'

inst-docs:
	julia --project=docs -e 'using Pkg; Pkg.instantiate()'

inst:
	just inst-main
	just inst-dev
	just inst-docs

resolve-main:
	julia --project=. -e 'using Pkg; Pkg.resolve()'

resolve-dev:
	julia --project=dev -e 'using Pkg; Pkg.resolve()'

resolve-docs:
	julia --project=docs -e 'using Pkg; Pkg.resolve()'

resolve:
	just resolve-main
	just resolve-dev
	just resolve-docs

test:
	julia -e 'using Pkg; Pkg.test()'

fmt:
	julia --project=dev -e 'using Pkg; Pkg.instantiate(); using JuliaFormatter; format(".")'

docs:
	julia --project=docs -e 'using Pkg; Pkg.develop(path="."); Pkg.instantiate(); include("docs/make.jl")'

bench:
	julia --project=dev -e 'using Pkg; Pkg.develop(path="."); Pkg.instantiate(); using PkgBenchmark; PkgBenchmark.benchmarkpkg(".")'

qa-aqua:
	julia --project=dev -e 'using Pkg; Pkg.instantiate(); using Aqua; using Pkg; Pkg.activate("."); using SpringRank; Aqua.test_all(SpringRank)'

qa-jet:
	julia --project=dev -e 'using Pkg; Pkg.instantiate(); using JET; using Pkg; Pkg.activate("."); JET.test_package("SpringRank")'

ci:
	julia -e 'using Pkg; Pkg.activate("."); Pkg.instantiate(); Pkg.test()'
	just data-run
	just data-compare

dev:
	just init && just fmt && just test

data-run file="data/US_CS_adjacency.dat" out="artifacts/us_cs_julia.txt" lambda="1e-8" method="krylov" krylov="cg":
	mkdir -p artifacts
	julia --project bin/export_ranks.jl {{file}} {{out}} {{lambda}} {{method}} {{krylov}}

data-compare j_out="artifacts/us_cs_julia.txt" ref="data/US_CS_SpringRank_a0.0_l0_1.0_l1_1.0.dat":
	julia --project bin/compare_with_reference.jl {{j_out}} {{ref}}
