diff --git a/mindspore/ops/bprop_mindir/generate_mindir.py b/mindspore/ops/bprop_mindir/generate_mindir.py index af8466b5f78..1a2b8431721 100644 --- a/mindspore/ops/bprop_mindir/generate_mindir.py +++ b/mindspore/ops/bprop_mindir/generate_mindir.py @@ -14,6 +14,8 @@ # ============================================================================ """Generate the mindir for bprop""" import os +import shutil +import argparse import numpy as np import mindspore.context as context @@ -72,10 +74,63 @@ def test_identity(): grad(x) -test_relu() -test_identity() -# mindspore/ops/_grad/__init__.py -bprop_path = g.__file__ -bprop_mindir_path = bprop_path[: bprop_path.rindex('/')] + "/../bprop_mindir/" -print("The new bprop mindir files has been generated in the path \"" + bprop_mindir_path + - "\", copy the *.mindir to your PYTHONPATH if necessary.") +def run_generate(): + test_relu() + test_identity() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Bprop generator") + parser.add_argument('--mindspore_path', type=str, default=None, + help="The absolute path of the mindspore root directory where the bprop source files has been \ + modified. If not specified, it will find the bprop source files in your mindspore installed \ + path. Default: None.") + + args_opt = parser.parse_args() + # mindspore/ops/_grad/__init__.py + bprop_path = g.__file__ + bprop_installed_dir = bprop_path[: bprop_path.rindex('/')] + bprop_mindir_export_dir = bprop_installed_dir + "/../bprop_mindir" + + mindspore_path = args_opt.mindspore_path + bprop_src_dir = None + bprop_mindir_src_dir = None + if not mindspore_path is None: + mindspore_path = mindspore_path.rstrip('/') + bprop_src_dir = mindspore_path + "/mindspore/ops/_grad" + bprop_mindir_src_dir = mindspore_path + "/mindspore/ops/bprop_mindir" + + copy_flag = not bprop_src_dir is None and bprop_src_dir != bprop_installed_dir + # If the specified bprop source directory is not on the mindspore installed path, + # copy the bprop source files to the installed path. + backup_suffix = "_generate_bak" + if copy_flag is True: + shutil.rmtree(bprop_installed_dir + backup_suffix) + os.rename(bprop_installed_dir, bprop_installed_dir + backup_suffix) + os.mkdir(bprop_installed_dir) + ls = os.listdir(bprop_src_dir) + for line in ls: + file_path = os.path.join(bprop_src_dir, line) + if os.path.isfile(file_path): + print("copy: " + file_path) + shutil.copy(file_path, bprop_installed_dir) + + run_generate() + + # If the specified bprop source directory is not on the mindspore installed path, + # copy the generated mindir files to the mindir directory relative to the specified path. + if copy_flag is True: + shutil.rmtree(bprop_installed_dir) + os.rename(bprop_installed_dir + backup_suffix, bprop_installed_dir) + ls = os.listdir(bprop_mindir_export_dir) + for line in ls: + file_path = os.path.join(bprop_mindir_export_dir, line) + if file_path.endswith(".mindir") and os.path.isfile(file_path): + print("copy: " + file_path) + shutil.copy(file_path, bprop_mindir_src_dir) + + print("The new bprop mindir files has been generated in the path \"" + bprop_mindir_src_dir + + "\".") + else: + print("The new bprop mindir files has been generated in the path \"" + bprop_mindir_export_dir + + "\", copy the *.mindir to your PYTHONPATH if necessary.")