10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-10-19 22:41:48 +02:00

Improved qp completion

This commit is contained in:
Anthony Scemama 2019-01-14 22:37:24 +01:00
parent cd7d0280d7
commit 1ed1733332
11 changed files with 259 additions and 82 deletions

2
configure vendored
View File

@ -70,7 +70,7 @@ while true : ; do
exit 0;; exit 0;;
--) shift ; break ;; --) shift ; break ;;
*) *)
error "unknown option $1, try --help" error $(basename $0)": unknown option $1, try --help"
exit 2;; exit 2;;
esac esac
done done

View File

@ -5,8 +5,8 @@ export QP_EZFIO=${QP_ROOT}/external/ezfio
function source_if_exists() { function source_if_exists() {
if [[ -f $1 ]]; then if [[ -f $1 ]]; then
source $1 cd $(dirname $1) ; source $(basename $1) ; cd -
fi fi &> /dev/null
} }
source ${QP_ROOT}/etc/autocomplete.rc source ${QP_ROOT}/etc/autocomplete.rc

View File

@ -8,10 +8,11 @@ export IRPF90=${IRPF90_PATH}/bin/irpf90
function source_if_exists() { function source_if_exists() {
if [[ -f $1 ]]; then if [[ -f $1 ]]; then
source $1 cd $(dirname $1) ; source $(basename $1) ; cd -
fi fi &> /dev/null
} }
source ${QP_ROOT}/etc/autocomplete.rc source ${QP_ROOT}/etc/autocomplete.rc
source_if_exists "${IRPF90_PATH}/irpman-completions.bash" source_if_exists "${IRPF90_PATH}/irpman-completions.bash"

169
etc/qp.rc
View File

@ -20,23 +20,20 @@ Usage:
qp set DIRECTORY ITEM : Array values read from stdin qp set DIRECTORY ITEM : Array values read from stdin
qp run PROGRAM qp run PROGRAM
qp man PROGRAM
qp srun PROGRAM qp srun PROGRAM
qp mpirun PROGRAM qp mpirun PROGRAM
qp set_frozen_core qp set_frozen_core
qp create_ezfio_from_xyz --help
qp convert_output_to_ezfio --help qp create_ezfio_from_xyz
qp set_mo_class --help qp convert_output_to_ezfio
qp update
qp set_mo_class
qp plugins
" "
} }
#function test_ezfio()
#{
# if [[ ! -d ${EZFIO_FILE} ]] ; then
# echo "qp: cannot access ${EZFIO_FILE}: No such file or directory"
# return 1
# fi
#}
function qp() function qp()
{ {
@ -52,13 +49,22 @@ function qp()
"create_ezfio_from_xyz") "create_ezfio_from_xyz")
shift shift
NAME=$(qp_create_ezfio_from_xyz "$@") # Replace ':' by spaces
for arg in $@ ; do
if [[ $arg =~ -* ]] ; then
_ARGS+=("\"${arg//:/ }\"")
else
_ARGS+=("${arg}")
fi
done
NAME=$(eval "qp_create_ezfio_from_xyz ${_ARGS}")
if [[ -d $NAME ]] ; then if [[ -d $NAME ]] ; then
[[ -d $EZFIO_FILE ]] && ezfio unset_file [[ -d $EZFIO_FILE ]] && ezfio unset_file
ezfio set_file $NAME ezfio set_file $NAME
else else
echo $NAME | more echo $NAME | more
fi fi
unset _ARGS
;; ;;
"convert_output_to_ezfio") "convert_output_to_ezfio")
@ -105,10 +111,19 @@ function qp()
printf "\e[0;31m|${EZFIO_FILE}>\e[m" printf "\e[0;31m|${EZFIO_FILE}>\e[m"
fi fi
} }
# PS1="${PS1%\\\$ } \$(_check_ezfio) $ "
PS1="\$(_check_ezfio)\n$PS1" PS1="\$(_check_ezfio)\n$PS1"
;; ;;
"plugins")
shift
qp_plugins $@
;;
"update")
shift
qp_update $@
;;
*) *)
_qp_usage _qp_usage
;; ;;
@ -117,60 +132,144 @@ function qp()
} }
function _get_basis_sets () {
( qp_create_ezfio_from_xyz -b show \
| tr ' ' ':' \
| while IFS= read -r LINE ; do
printf '%s\n' ${LINE}
done
(cd ~/quantum_package/data/basis/ ; \ls)
) | sort | uniq
}
_Complete() _Complete()
{ {
local cur local cur
COMPREPLY=() COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}" cur="${COMP_WORDS[COMP_CWORD]}"
first="${COMP_WORDS[1]}"
prev="${COMP_WORDS[COMP_CWORD-1]}" prev="${COMP_WORDS[COMP_CWORD-1]}"
prev2="${COMP_WORDS[COMP_CWORD-2]}" prev2="${COMP_WORDS[COMP_CWORD-2]}"
case "${first}" in
update)
COMPREPLY=( $(compgen -W "-h" -- $cur ) )
return 0
;;
man)
COMPREPLY=( $(compgen -W "$(cd ${QP_ROOT}/man ; \ls | sed 's/\.1//')" -- $cur ) )
return 0
;;
convert_output_to_ezfio)
COMPREPLY=( $(compgen -W "-o $(\ls)" -- ${cur} ) )
return 0
;;
create_ezfio_from_xyz)
case "${prev}" in
create_ezfio_from_xyz)
COMPREPLY=( $(compgen -W "-b -a -c -d -h -m -o -p -x" -- $cur ) )
return 0
;;
-m|-d|-c)
COMPREPLY=( $(compgen -W "" -- $cur ) )
return 0;;
-b)
for iter in $(_get_basis_sets); do
if [[ $iter =~ ^$cur ]]; then
COMPREPLY+=( "${iter}" )
fi
done;
return 0
;;
-p)
COMPREPLY=( $(compgen -W "$(cd ~/quantum_package/data/pseudo ; \ls)" -- $cur ) )
return 0
;;
*)
COMPREPLY=( $(compgen -W "-b -a -c -d -h -m -o -p -x $(\ls)" -- $cur ) )
return 0
;;
esac;;
plugins)
case "${prev}" in
plugins)
COMPREPLY=( $(compgen -W "list download install uninstall create" -- $cur ) )
return 0
;;
list)
COMPREPLY=( $(compgen -W "-i -u -q" -- $cur ) )
return 0;;
download)
COMPREPLY=( $(compgen -W "http:// git@github.com: git@gitlab.com: " -- $cur ) )
return 0;;
install)
COMPREPLY=( $(compgen -W "$(qp_plugins list -u)" -- $cur ) )
return 0;;
uninstall)
COMPREPLY=( $(compgen -W "$(qp_plugins list -i)" -- $cur ) )
return 0;;
create)
COMPREPLY=( $(compgen -W "-n " -- $cur ) )
return 0;;
*)
COMPREPLY=( $(compgen -W "$( \ls ; cd ~/quantum_package/src ; \ls )" -- $cur ) )
return 0
;;
esac;;
*)
COMPREPLY=( $(compgen -W 'plugins \
man \
create_ezfio_from_xyz \
convert_output_to_ezfio \
-h update' -- $cur ) )
esac
if [[ -n ${EZFIO_FILE} && -d ${EZFIO_FILE} ]] if [[ -n ${EZFIO_FILE} && -d ${EZFIO_FILE} ]]
then then
case "${prev2}" in case "${prev2}" in
"set"|has|get) "set"|has|get)
if [[ ${prev} == "qp" ]] ; then if [[ ${prev} == "qp" ]] ; then
COMPREPLY=( $(compgen -W "set set_frozen_core set_mo_class" -- $cur ) ) COMPREPLY=( $(compgen -W "plugins set set_frozen_core set_mo_class" -- $cur ) )
elif [[ ! -d ${EZFIO_FILE}/${prev} ]] ; then elif [[ ! -d ${EZFIO_FILE}/${prev} ]] ; then
COMPREPLY=( $(compgen -W "" -- $cur ) ) COMPREPLY=( $(compgen -W "" -- $cur ) )
else else
COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE}/${prev} ; ls | sed 's/\.gz//' )" -- $cur ) ) COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE}/${prev} ; \ls | sed 's/\.gz//' )" -- $cur ) )
fi fi
return 0 return 0
;; ;;
*)
COMPREPLY=( $(compgen -W "$(\ls)" -- $cur ) )
esac esac
case "${prev}" in case "${first}" in
run|srun|mpirun) run|srun|mpirun)
COMPREPLY=( $(compgen -W "$(cat ${QP_ROOT}/data/executables | cut -d ' ' -f 1)" -- $cur ) ) COMPREPLY=( $(compgen -W "-h $(cat ${QP_ROOT}/data/executables | cut -d ' ' -f 1)" -- $cur ) )
return 0 return 0
;; ;;
unset_file|edit|set_frozen_core) unset_file|set_frozen_core)
COMPREPLY=() COMPREPLY=()
return 0 return 0
;; ;;
set_mo_class) set_mo_class)
COMPREPLY=( $(compgen -W "-h -core -inact -act -virt -del" -- $cur ) ) COMPREPLY=( $(compgen -W "-h -c -i -a -v -d -q" -- $cur ) )
return 0
;;
man)
COMPREPLY=( $(compgen -W "$(cd ${QP_ROOT}/man ; \ls | sed '/\.[1-9] / /')" -- $cur ) )
return 0 return 0
;; ;;
set|has|get) set|has|get)
COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE} ; \ls -d */ | sed 's|/||g')" -- $cur ) ) COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE} ; \ls -d */ | sed 's|/||g')" -- $cur ) )
return 0 return 0
;; ;;
edit)
COMPREPLY=( $(compgen -W "-h -c -n -s" -- $cur ) )
return 0
;;
*) *)
COMPREPLY=( $(compgen -W 'has get set unset_file edit \ COMPREPLY+=( $(compgen -W 'has get set unset_file edit \
run srun mpirun set_frozen_core \ run srun mpirun set_frozen_core \
set_mo_class create_ezfio_from_xyz \ set_mo_class ' \
convert_output_to_ezfio \ -- $cur ) )
-h' -- $cur ) )
return 0 return 0
;; ;;
esac esac
@ -178,24 +277,12 @@ _Complete()
else else
case "${prev}" in case "${prev}" in
man)
COMPREPLY=( $(compgen -W "$(cd ${QP_ROOT}/man ; echo * | sed 's|\.[1-9] | |g')" -- $cur ) )
return 0
;;
set_file) set_file)
COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) ) COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) )
return 0 return 0
;; ;;
convert_output_to_ezfio|create_ezfio_from_xyz)
COMPREPLY=( $(compgen -W "$(\ls)" -- ${cur} ) )
return 0
;;
*) *)
COMPREPLY=( $(compgen -W 'set_file \ COMPREPLY+=( $(compgen -W "set_file" -- $cur ) )
man \
create_ezfio_from_xyz \
convert_output_to_ezfio \
-h' -- $cur ) )
return 0 return 0
;; ;;
esac esac

View File

@ -8,6 +8,8 @@ let () =
let open Command_line in let open Command_line in
begin begin
set_header_doc (Sys.argv.(0) ^ " - quantum_package command"); set_header_doc (Sys.argv.(0) ^ " - quantum_package command");
set_description_doc
"Opens a text editor to edit the parameters of an EZFIO directory.";
[ { short='c'; long="check"; opt=Optional; [ { short='c'; long="check"; opt=Optional;
doc="Checks the input data"; doc="Checks the input data";
@ -25,8 +27,6 @@ let () =
] ]
|> set_specs ; |> set_specs ;
set_description_doc
"Opens a text editor to edit the parameters of a EZFIO directory.";
end; end;

View File

@ -82,6 +82,8 @@ git:
${QP_EZFIO}/Ocaml/ezfio.ml: ${QP_EZFIO}/Ocaml/ezfio.ml:
$(NINJA) -C ${QP_EZFIO} $(NINJA) -C ${QP_EZFIO}
qp_edit.ml: ../scripts/ezfio_interface/qp_edit_template
Input_auto_generated.ml qp_edit.ml: $(filter-out Input_auto_generated.ml, $(wildcard Input_*.ml)) Input_auto_generated.ml qp_edit.ml: $(filter-out Input_auto_generated.ml, $(wildcard Input_*.ml))
ei_handler.py ocaml_global ei_handler.py ocaml_global

View File

@ -9,7 +9,7 @@ open Core
(** Interactive editing of the input. (** Interactive editing of the input.
WARNING WARNING
This file is autogenerad by This file is automatically generated by
`${{QP_ROOT}}/scripts/ezfio_interface/ei_handler.py` `${{QP_ROOT}}/scripts/ezfio_interface/ei_handler.py`
*) *)
@ -265,24 +265,33 @@ let restore_backup ezfio_filename =
let () = let () =
(* Command-line specs *) let open Command_line in
Command_line.set_header_doc "Opens a text editor to edit the parameters of a EZFIO directory."; begin
set_header_doc (Sys.argv.(0) ^ " - quantum_package command");
set_description_doc
"Opens a text editor to edit the parameters of an EZFIO directory.";
[ ( 'c', "check", "Checks the input data", Command_line.Without_arg); [ {{ short='c'; long="check"; opt=Optional;
( 'n', "ndet", "<int> Truncate the wavefunction to the target number of determinants", doc="Checks the input data";
Command_line.With_arg); arg=Without_arg; }};
( 's', "state", "<range> Extract selected states, for example \"[1,3-5]\"", Command_line.With_arg);
Command_line.anonymous "<EZFIO_FILE>" "EZFIO directory";
]
|> Command_line.set_specs ;
{{ short='n'; long="ndet"; opt=Optional;
doc="Truncates the wavefunction to the target number of determinants";
arg=With_arg "<int>"; }};
{{
short='s'; long="state"; opt=Optional;
doc="Extracts selected states, for example \"[1,3-5]\"";
arg=With_arg "<range>"; }};
anonymous "EZFIO_DIR" Mandatory "EZFIO directory";
]
|> set_specs ;
end;
(* Handle options *) (* Handle options *)
if Command_line.show_help () then
exit 0;
let ndet = let ndet =
match Command_line.get "ndet" with match Command_line.get "ndet" with
| None -> None | None -> None
@ -296,16 +305,12 @@ let () =
with _ -> failwith "[-s|--state] expects a range") with _ -> failwith "[-s|--state] expects a range")
in in
let c = let c = Command_line.get_bool "check" in
match Command_line.get "check" with
| None -> false
| _ -> true
in
let ezfio_filename = let ezfio_filename =
match Command_line.anon_args () with match Command_line.anon_args () with
| [x] -> x | [x] -> x
| _ -> (Command_line.help () ; failwith "EZFIO_FILE is missing") | _ -> (Command_line.help () ; failwith "EZFIO_DIR is missing")
in in
at_exit (fun () -> remove_backup ezfio_filename); at_exit (fun () -> remove_backup ezfio_filename);

View File

@ -7,6 +7,15 @@ function error() {
set -e set -e
PROG=$1
INPUT=$2
case ${PROG} in
-h|--help)
exec qp_run --help
;;
esac
NODES=($(mpirun hostname)) NODES=($(mpirun hostname))
# Test that there is one MPI process per node # Test that there is one MPI process per node
@ -28,8 +37,7 @@ In your SLURM script file, use:
exit -1 exit -1
fi fi
PROG=$1
INPUT=$2
# Check if quantum_package.rc is sourced # Check if quantum_package.rc is sourced

View File

@ -94,8 +94,8 @@ def main(arguments):
arguments["<name>"] = [os.path.normpath(name) for name in arguments["<name>"]] arguments["<name>"] = [os.path.normpath(name) for name in arguments["<name>"]]
if arguments["list"]: if arguments["list"]:
if arguments["-q"]: if arguments["--repositories"]:
l_result = [f for f in os.path.listdir(QP_PLUGINS) if f not in [".gitignore", "local"]] l_result = [f for f in os.listdir(QP_PLUGINS) if f not in [".gitignore", "local"]]
else: else:
# Search in src all directories with a NEED file # Search in src all directories with a NEED file
@ -113,20 +113,20 @@ def main(arguments):
l_plugins = [module for module in m_instance.l_module] l_plugins = [module for module in m_instance.l_module]
l_result = l_plugins l_result = l_plugins
if arguments["-i"] or arguments["-u"]: if arguments["--installed"] or arguments["--uninstalled"]:
# Search in src all symbolic links that are modules # Search in src all symbolic links that are modules
l_installed = [f for f in os.path.listdir(QP_SRC) \ l_installed = [f for f in os.listdir(QP_SRC) \
if (os.path.islink(os.path.join(QP_SRC, f)) \ if (os.path.islink(os.path.join(QP_SRC, f)) \
and f != ".gitignore")] and f != ".gitignore")]
if arguments["-i"]: if arguments["--installed"]:
l_result = [f for f in l_plugins if f in l_installed] l_result = [f for f in l_plugins if f in l_installed]
elif arguments["-u"]: elif arguments["--uninstalled"]:
l_result = [f for f in l_plugins if f not in l_installed] l_result = [f for f in l_plugins if f not in l_installed]
for module in sorted(l_result): for module in sorted(l_result):
print "* {0}".format(module) print module
if arguments["create"]: if arguments["create"]:
m_instance = ModuleHandler([QP_SRC]) m_instance = ModuleHandler([QP_SRC])
@ -135,8 +135,8 @@ def main(arguments):
name = arguments["<name>"][0] name = arguments["<name>"][0]
if arguments["-r"]: if arguments["--repository"]:
repository = arguments["-r"] repository = arguments["--repository"]
else: else:
repository = "local" repository = "local"
@ -266,7 +266,7 @@ def main(arguments):
if l_failed: if l_failed:
print "Plugins not installed:" print "Plugins not installed:"
for name in sorted(l_failed): for name in sorted(l_failed):
print "* %s" % name print "%s" % name
sys.exit(1) sys.exit(1)
l_name_to_remove = l_name + \ l_name_to_remove = l_name + \

View File

@ -7,6 +7,15 @@ function error() {
set -e set -e
PROG=$1
INPUT=$2
case ${PROG} in
-h|--help)
exec qp_run --help
;;
esac
NODES=($(srun hostname)) NODES=($(srun hostname))
# Test that there is one MPI process per node # Test that there is one MPI process per node
@ -28,8 +37,6 @@ In your SLURM script file, use:
exit -1 exit -1
fi fi
PROG=$1
INPUT=$2
# Check if quantum_package.rc is sourced # Check if quantum_package.rc is sourced

67
scripts/qp_update Executable file
View File

@ -0,0 +1,67 @@
#!/bin/bash
#
# Updates the current version of QP
#
# Mon Jan 14 21:51:08 CET 2019
#
function help() {
cat << EOF
Updates the current version of QP.
Usage:
$(basename $0) [-h|--help]
Options:
-h --help Prints the help message
EOF
exit 0
}
function error() {
>&2 echo "$(basename $0): $@"
exit 2
}
TEMP=`getopt -o h -l help -n $0 -- "$@"` || exit 1
while true ; do
case "$1" in
""|--) shift ; break ;;
-h|-help|--help)
help
shift
exit 0;;
*)
echo $(basename $0)": unknown option $1, try --help"
exit 2;;
esac
done
# Check the QP_ROOT directory
if [[ -z ${QP_ROOT} ]] ; then
echo "The QP_ROOT environment variable is not set."
echo "Please reload the quantum_package.rc file."
exit 1
fi
read -r -p "Are you sure you want to update QP? [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
:
;;
*)
exit 0
;;
esac
cd ${QP_ROOT}
ninja clean
git pull origin master
ninja