Code Monkey home page Code Monkey logo

paddle_upgrade_tool's Introduction

Upgrade your python model from paddle-1.x to paddle-2.

Build Status Coverage Status Version License

Attention

paddle_upgrade_tool aims 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"
import paddle.fluid as fluid
pass

# filename "b.py"
from a import *
class MyLayer(fluid.layers.Layer):
    pass

fluid.layers.Layer in "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 running paddle_upgrade_tool.

Install

paddle_upgrade_tool support Linux, Mac OS, Windows(Git Bash is 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.

  1. install with pip
pip install -U paddle_upgrade_tool
paddle_upgrade_tool --help # show help
paddle_upgrade_tool --inpath /path/to/model.py # upgrade your model from paddle-1.x to paddle-2.0

ATTENTION: If your device contains multiple versions of python, you may need to run the following commands instead:

python3 -m pip install -U paddle_upgrade_tool
python3 -m paddle_upgrade_tool -h
python3 -m paddle_upgrade_tool --inpath /path/to/model.py
  1. install from source
git clone https://github.com/T8T9/paddle_upgrade_tool.git
cd paddle_upgrade_tool
python setup.py sdist bdist_wheel
pip install -U ./dist/paddle_upgrade_tool-*.whl
paddle_upgrade_tool --help # show help
paddle_upgrade_tool --inpath /path/to/model.py # upgrade your model from paddle-1.x to paddle-2.0

Develop

If you are a develop, and you want to test your code quickly, you can run the following command in project directory:

python -m paddle_upgrade_tool --inpath /path/to/model.py

#or 

python paddle_upgrade_tool/main.py --inpath /path/to/model.py

Moreover, if you want to run a specific refactor, you can use the following command:

python -m paddle_upgrade_tool --inpath /path/to/model.py --refactor <refactor_name>

use python -m paddle_upgrade_tool -h to see full list of all refactors.

if you want to run all unittest, use command:

python -m unittest discover paddle_upgrade_tool/tests/
# or
python setup.py test

or use command:

python -m unittest paddle_upgrade_tool/tests/test_refactor.py

to run specific test file.

Change Spec

change_spec is 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 alias path.to.old_api, all alias will be replaced with main alias.
  • update_to: path.to.old_api will be replaced with this new api if specified.
  • warning: print specified warning message when path.to.old_api is found. This field will be ignored if update_to is specified.
  • args_list: is argument list of path.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 apply args_change.
  • args_transformer: execute customized transformer on an AST node, it will be called after applying args_change to do further refactor.

Other Tools

  1. find pattern of specific code snippet, usage:
find_pattern 'import paddle'

find_pattern command will traverse all nodes in AST, if you see code snippet you want, type in 'y' to get pattern.

  1. 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.

Acknowledgements

  • Bowler: 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.

paddle_upgrade_tool's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.