|
|
@@ -0,0 +1,121 @@ |
|
|
|
#! /usr/bin/env python3 |
|
|
|
# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") |
|
|
|
# |
|
|
|
# Copyright (c) 2014-2021 Megvii Inc. All rights reserved. |
|
|
|
# |
|
|
|
# Unless required by applicable law or agreed to in writing, |
|
|
|
# software distributed under the License is distributed on an |
|
|
|
# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
|
import argparse |
|
|
|
import ntpath |
|
|
|
import os |
|
|
|
import pathlib |
|
|
|
import platform |
|
|
|
import sys |
|
|
|
from glob import glob |
|
|
|
|
|
|
|
import megengine |
|
|
|
|
|
|
|
|
|
|
|
def add_completion(tools_path, write_path) : |
|
|
|
script_files = [os.path.basename(p) for p in tools_path.glob("*.py")] |
|
|
|
param_script = [] |
|
|
|
for script_name in script_files: |
|
|
|
temp = ntpath.splitext(script_name)[0] |
|
|
|
if temp=="__init__" or temp=="mge": |
|
|
|
continue |
|
|
|
param_script.append(temp) |
|
|
|
|
|
|
|
completion_template_head = ''' |
|
|
|
_mge(){ |
|
|
|
local cur prev script_name |
|
|
|
COMPREPLY=() |
|
|
|
cur="${COMP_WORDS[COMP_CWORD]}" |
|
|
|
prev="${COMP_WORDS[COMP_CWORD-1]}" |
|
|
|
case "${prev}" in |
|
|
|
mge) |
|
|
|
words="compare_binary_iodump draw_graph load_network_and_run network_visualize profile_analyze" |
|
|
|
COMPREPLY=( $(compgen -W "${words}" -- ${cur} ) ) |
|
|
|
return |
|
|
|
;; |
|
|
|
''' |
|
|
|
completion_template_body = "" |
|
|
|
completion_template_tail2="" |
|
|
|
for param in param_script: |
|
|
|
words_command = 'grep -Eso \'"-[[:alnum:]-]*[_[:alnum:]]*"\' {}/{}.py | xargs'.format(str(tools_path),param) |
|
|
|
words = os.popen(words_command).read().strip() |
|
|
|
|
|
|
|
completion_template_body+= ''' |
|
|
|
{}) |
|
|
|
words="{}" |
|
|
|
COMPREPLY=($(compgen -W "$words" -- $cur)) |
|
|
|
return |
|
|
|
;; |
|
|
|
'''.format(param ,words) |
|
|
|
completion_template_tail2+= ''' |
|
|
|
{}) |
|
|
|
words="{}" |
|
|
|
COMPREPLY=($(compgen -W "$words" -- $cur)) |
|
|
|
return |
|
|
|
;; |
|
|
|
'''.format(param ,words) |
|
|
|
completion_template_tail1=''' |
|
|
|
esac |
|
|
|
case $cur in |
|
|
|
-*) |
|
|
|
script_name="${COMP_WORDS[1]}" |
|
|
|
case $script_name in |
|
|
|
''' |
|
|
|
|
|
|
|
completion_template_tail3=''' |
|
|
|
esac |
|
|
|
;; |
|
|
|
esac |
|
|
|
return |
|
|
|
} |
|
|
|
complete -o bashdefault -F _mge mge |
|
|
|
''' |
|
|
|
completion_template = completion_template_head + completion_template_body + completion_template_tail1 + completion_template_tail2 + completion_template_tail3 |
|
|
|
|
|
|
|
wp = pathlib.Path(write_path) |
|
|
|
wp.parent.mkdir(parents=True, exist_ok = True) |
|
|
|
|
|
|
|
with open(write_path, 'w+') as f: |
|
|
|
f.write(completion_template) |
|
|
|
|
|
|
|
def init(path) : |
|
|
|
engine_path = pathlib.Path(megengine.__path__[0]) |
|
|
|
add_completion(engine_path/'tools',path) |
|
|
|
|
|
|
|
def main(argv) : |
|
|
|
if len(argv) == 0: |
|
|
|
return |
|
|
|
script_file = argv[0] |
|
|
|
args = " ".join(argv[1:]) |
|
|
|
call_command = "python3 -m megengine.tools.{} {}".format(script_file,args) |
|
|
|
os.system(call_command) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
usage = 'usage: mge [-h|--help|--h] [--init] [script_name --script_param xxx]' |
|
|
|
|
|
|
|
if len(sys.argv) <= 1 or sys.argv[1] == '-h' or sys.argv[1] =='--help' or sys.argv[1] =='--h': |
|
|
|
print(usage) |
|
|
|
sys.exit(0) |
|
|
|
if sys.argv[1] == '--init': |
|
|
|
sysstr = platform.system() |
|
|
|
if(sysstr == "Windows"): |
|
|
|
print("WARNING: windows doesn't support hinting") |
|
|
|
else: |
|
|
|
path = "{}/.local/share/bash-completion/completions/mge".format(os.environ.get("HOME")) |
|
|
|
init(path) |
|
|
|
shell = os.environ.get("SHELL") |
|
|
|
if shell.find('zsh') != -1: |
|
|
|
print("if you don't have zsh completion init, please excute command: 'autoload -Uz compinit && compinit'") |
|
|
|
print("Guess you are using zsh, please add 'source %s' to your ~/.zshrc" % path) |
|
|
|
elif shell.find('bash') != -1: |
|
|
|
print("Guess you are using bash, please relogin or do 'source %s'" % path) |
|
|
|
else: |
|
|
|
print("Current {} doesn't support hinting shell completion".format(shell)) |
|
|
|
sys.exit(0) |
|
|
|
else: |
|
|
|
main(sys.argv[1:]) |