Package: paddle1to2
Upgrade your python model from paddle-1.x to paddle-2.Attentionpaddle1to2aims 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 runningpaddle1to2.Installpaddle1to2 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-Upaddle1to2
paddle1to2--help# show helppaddle1to2--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-Upaddle1to2
python3-mpaddle1to2-h
python3-mpaddle1to2--inpath/path/to/model.pyinstall from sourcegitclonehttps://github.com/T8T9/paddle1to2.gitcdpaddle1to2
pythonsetup.pysdistbdist_wheel
pipinstall-U./dist/paddle1to2-*.whl
paddle1to2--help# show helppaddle1to2--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-mpaddle1to2--inpath/path/to/model.py#orpythonpaddle1to2/main.py--inpath/path/to/model.pyMoreover, if you want to run a specific refactor, you can use the following command:python-mpaddle1to2--inpath/path/to/model.py--refactor<refactor_name>usepython -m paddle1to2 -hto see full list of all refactors.if you want to run all unittest, use command:python-munittestdiscoverpaddle1to2/tests/# orpythonsetup.pytestor use command:python-munittestpaddle1to2/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.