-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_all.sh
More file actions
37 lines (37 loc) · 2.87 KB
/
Copy pathrun_all.sh
File metadata and controls
37 lines (37 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env bash
set -u
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INPUT=""; CONFIG=""; OUTPUT="results"; LANGUAGES="python,r,matlab,fortran"; PYTHON_ENV="distribution-inference"; R_ENV="distribution-inference"; BOOTSTRAP=1000; SEED=12345; KS_ALPHA=.05; CI_LEVELS=.90,.95,.99
while [[ $# -gt 0 ]]; do
case "$1" in
--input) INPUT="$2"; shift 2;; --dataset-config) CONFIG="$2"; shift 2;; --output) OUTPUT="$2"; shift 2;;
--languages) LANGUAGES="$2"; shift 2;; --python-env) PYTHON_ENV="$2"; shift 2;; --r-env) R_ENV="$2"; shift 2;; --bootstrap) BOOTSTRAP="$2"; shift 2;; --seed) SEED="$2"; shift 2;;
--ks-alpha) KS_ALPHA="$2"; shift 2;; --ci-levels) CI_LEVELS="$2"; shift 2;; *) echo "unknown argument: $1" >&2; exit 2;;
esac
done
[[ -n "$INPUT" ]] || { echo "--input is required" >&2; exit 2; }
cd "$ROOT_DIR"
mkdir -p "$OUTPUT"; export PYTHONPATH="$ROOT_DIR/src/python${PYTHONPATH:+:$PYTHONPATH}"
COMMON=(--input "$INPUT"); TAIL=(--bootstrap "$BOOTSTRAP" --seed "$SEED" --ks-alpha "$KS_ALPHA" --ci-levels "$CI_LEVELS")
[[ -z "$CONFIG" ]] || TAIL=(--dataset-config "$CONFIG" "${TAIL[@]}")
FAILURES=()
has_language(){ [[ ",$LANGUAGES," == *",$1,"* ]]; }
run_checked(){ local label="$1"; shift; "$@" || { FAILURES+=("$label"); echo "warning: $label failed or is unavailable" >&2; return 0; }; }
if has_language python; then run_checked python conda run --no-capture-output -n "$PYTHON_ENV" python -m distribution_inference.cli "${COMMON[@]}" --output "$OUTPUT/python" "${TAIL[@]}"; fi
if has_language r; then run_checked r conda run --no-capture-output -n "$R_ENV" Rscript src/r/distribution_inference.R "${COMMON[@]}" --output "$OUTPUT/r" "${TAIL[@]}"; fi
if has_language matlab; then
if command -v matlab >/dev/null 2>&1; then
MATLAB_ARGS="'--input','${INPUT//\'/\'\'}','--output','${OUTPUT//\'/\'\'}/matlab'"
[[ -z "$CONFIG" ]] || MATLAB_ARGS+=",'--dataset-config','${CONFIG//\'/\'\'}'"
MATLAB_ARGS+=",'--bootstrap','$BOOTSTRAP','--seed','$SEED','--ks-alpha','$KS_ALPHA','--ci-levels','$CI_LEVELS'"
run_checked matlab matlab -batch "addpath('src/matlab'); distribution_inference($MATLAB_ARGS);"
else FAILURES+=(matlab); echo "warning: matlab was not found" >&2; fi
fi
if has_language fortran; then
[[ -x build/distribution_inference_fortran ]] || run_checked fortran-build scripts/build_fortran.sh
[[ ! -x build/distribution_inference_fortran ]] || run_checked fortran build/distribution_inference_fortran "${COMMON[@]}" --output "$OUTPUT/fortran" "${TAIL[@]}"
fi
REPORT_ARGS=(--input "$INPUT" --results-root "$OUTPUT"); [[ -z "$CONFIG" ]] || REPORT_ARGS+=(--dataset-config "$CONFIG")
run_checked report conda run --no-capture-output -n "$PYTHON_ENV" python -m distribution_inference.report "${REPORT_ARGS[@]}"
if ((${#FAILURES[@]})); then printf 'Completed with failures: %s\n' "${FAILURES[*]}" >&2; exit 1; fi
printf 'All selected implementations completed. Results: %s\n' "$OUTPUT"