Package: paddle-upgrade-tool
Upgrade your python model from paddle-1.x to paddle-2.Attentionpaddle_upgrade_toolaims to convert python files from paddle-1.x to paddle-2 one by one, it won't handle indirect imports. e.g.# filename "a.py"importpaddle.fluidasfluidpass# filename "b.py"fromaimport*classMyLayer(fluid.layers.Layer):passfluid.layers.Layerin "b.py" won't get converted.So you have to make sure you have import all used paddle modules, classes, objects directly for every python file before runningpaddle_upgrade_tool.Installpaddle_upgrade_tool support Linux, Mac OS, Windows(Git Bashis recommended),but it requires Python 3.5.4 or higher to run. Multi-Process is supported for Linux and Mac OS, Single-Process is support for Windows, this will lead to performance difference.install with pippipinstall-Upaddle_upgrade_tool
paddle_upgrade_tool--help# show helppaddle_upgrade_tool--inpath/path/to/model.py# upgrade your model from paddle-1.x to paddle-2.0ATTENTION: If your device contains multiple versions of python, you may need to run the following commands instead:python3-mpipinstall-Upaddle_upgrade_tool
python3-mpaddle_upgrade_tool-h
python3-mpaddle_upgrade_tool--inpath/path/to/model.pyinstall from sourcegitclonehttps://github.com/T8T9/paddle_upgrade_tool.gitcdpaddle_upgrade_tool
pythonsetup.pysdistbdist_wheel
pipinstall-U./dist/paddle_upgrade_tool-*.whl
paddle_upgrade_tool--help# show helppaddle_upgrade_tool--inpath/path/to/model.py# upgrade your model from paddle-1.x to paddle-2.0DevelopIf you are a develop, and you want to test your code quickly, you can run the following command in project directory:python-mpaddle_upgrade_tool--inpath/path/to/model.py#orpythonpaddle_upgrade_tool/main.py--inpath/path/to/model.pyMoreover, if you want to run a specific refactor, you can use the following command:python-mpaddle_upgrade_tool--inpath/path/to/model.py--refactor<refactor_name>usepython -m paddle_upgrade_tool -hto see full list of all refactors.if you want to run all unittest, use command:python-munittestdiscoverpaddle_upgrade_tool/tests/# orpythonsetup.pytestor use command:python-munittestpaddle_upgrade_tool/tests/test_refactor.pyto run specific test file.Change Specchange_specis a python dict defined in spec.py, it defines the rules to refactor your code.change_spec={"path.to.old_api":{"alias":["path.to.old_api_alias1","path.to1.to2.old_api_alias2",],"update_to":"path.to.new_api","warning":"this api is deprecated.","args_list":["arg1","arg2"],"args_change":[["arg2","arg2_rename"],["arg3",""],["","new_arg","default_value"],],"args_warning":{"arg1":"warning message"},"args_transformer":"_default_transformer",},}alias: a list of alias of main aliaspath.to.old_api, all alias will be replaced with main alias.update_to:path.to.old_apiwill be replaced with this new api if specified.warning: print specified warning message whenpath.to.old_apiis found. This field will be ignored ifupdate_tois specified.args_list: is argument list ofpath.to.old_api.args_change: a list of list. It contains following format:["arg", "new_arg"]: rename a argument, e.g.func(arg=value)->func(new_arg=value)["arg", ""]: remove a argument, e.g.func(arg=value)->func()["", "new_arg", "default_value"]: add a new argument, e.g.func(arg=value)->func(arg=value, new_arg=default_value)args_warning: print specified warning message for specified argument after applyargs_change.args_transformer: execute customized transformer on anAST node, it will be called after applyingargs_changeto do further refactor.Other Toolsfind pattern of specific code snippet, usage:find_pattern'import paddle'find_patterncommand will traverse all nodes in AST, if you see code snippet you want, type in 'y' to get pattern.find match node in specific code for specific pattern, usage:find_match_node-ss'import paddle'-ps'any'you can also specify "--print-results" option to got representation of matched node, specify "--print-lineno" to got line number of matched code.AcknowledgementsBowler: Safe code refactoring for modern Python projects.lib2to3: A built-in python library to refactor python code.fissix: A backport of latest lib2to3, with enhancements.