{ "info": { "author": "NAITOH Jun", "author_email": "naitoh@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development" ], "description": "py2rb.py\n========\n\nA code translator using AST from Python to Ruby.\nThis is basically a NodeVisitor with ruby output.\nSee ast documentation (https://docs.python.org/3/library/ast.html) for more information.\n\nInstallation\n------------\n\nExecute the following::\n\n pip install py2rb\n\n or\n\n git clone git://github.com/naitoh/py2rb.git\n\nDependencies\n------------\n\n- Python 3.5, 3.6\n- Ruby 2.4 or later\n\n\nUsage\n--------\n\nSample 1::\n\n $ cat tests/basic/oo_inherit_simple.py\n class bar(object):\n\n def __init__(self,name):\n self.name = name\n\n def setname(self,name):\n self.name = name\n\n class foo(bar):\n\n registered = []\n\n def __init__(self,val,name):\n self.fval = val\n self.register(self)\n self.name = name\n\n def inc(self):\n self.fval += 1\n\n def msg(self, a=None, b=None, c=None):\n txt = ''\n varargs = a, b, c\n for arg in varargs:\n if arg is None:\n continue\n txt += str(arg)\n txt += \",\"\n return txt + self.name + \" says:\"+str(self.fval)\n\n @staticmethod\n def register(f):\n foo.registered.append(f)\n\n @staticmethod\n def printregistered():\n for r in foo.registered:\n print(r.msg())\n\n a = foo(10,'a')\n a.setname('aaa')\n b = foo(20,'b')\n c = foo(30,'c')\n\n a.inc()\n a.inc()\n c.inc()\n\n print(a.msg())\n print(b.msg())\n print(c.msg(2,3,4))\n\n print(\"---\")\n\n foo.printregistered()\n\nThe above will result in ::\n\n $ py2rb tests/basic/oo_inherit_simple.py\n class Bar\n def initialize(name)\n @name = name\n end\n def setname(name)\n @name = name\n end\n end\n class Foo < Bar\n def method_missing(method, *args)\n self.class.__send__ method, *args\n end\n @@registered = []\n def initialize(val, name)\n @fval = val\n Foo.register(self)\n @name = name\n end\n def inc()\n @fval += 1\n end\n def msg(a: nil, b: nil, c: nil)\n txt = \"\"\n varargs = [a, b, c]\n for arg in varargs\n if arg === nil\n next\n end\n txt += arg.to_s\n txt += \",\"\n end\n return ((txt + @name) + \" says:\") + @fval.to_s\n end\n def self.register(f)\n @@registered.push(f)\n end\n def self.printregistered()\n for r in @@registered\n print(r.msg())\n end\n end\n def self.registered; @@registered; end\n def self.registered=(val); @@registered=val; end\n def registered; @registered = @@registered if @registered.nil?; @registered; end\n def registered=(val); @registered=val; end\n end\n a = Foo.new(10, \"a\")\n a.setname(\"aaa\")\n b = Foo.new(20, \"b\")\n c = Foo.new(30, \"c\")\n a.inc()\n a.inc()\n c.inc()\n print(a.msg())\n print(b.msg())\n print(c.msg(a: 2, b: 3, c: 4))\n print(\"---\")\n Foo.printregistered()\n\nSample 2::\n\n $ cat tests/deep-learning-from-scratch/and_gate.py\n # coding: utf-8\n import numpy as np\n\n def AND(x1, x2):\n x = np.array([x1, x2])\n w = np.array([0.5, 0.5])\n b = -0.7\n tmp = np.sum(w*x) + b\n if tmp <= 0:\n return 0\n else:\n return 1\n\n if __name__ == '__main__':\n for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:\n y = AND(xs[0], xs[1])\n print(str(xs) + \" -> \" + str(y))\n\nThe above will result in ::\n\n $ py2rb tests/deep-learning-from-scratch/and_gate.py\n require 'numo/narray'\n def AND(x1, x2)\n x = Numo::NArray.cast([x1, x2])\n w = Numo::NArray.cast([0.5, 0.5])\n b = -0.7\n tmp = ((w * x).sum()) + b\n if tmp <= 0\n return 0\n else\n return 1\n end\n end\n\n if __FILE__ == $0\n for xs in [[0, 0], [1, 0], [0, 1], [1, 1]]\n y = AND(xs[0], xs[1])\n print((xs.to_s + (\" -> \")) + y.to_s)\n end\n end\n\nSample 3 (Convert all local dependent module files of specified Python file)::\n\n $ git clone git://github.com/chainer/chainer.git\n $ py2rb chainer/chainer/__init__.py -m -p chainer -r -w -f\n Try : chainer/chainer/__init__.py -> chainer/chainer/__init__.rb : [OK]\n Warning : yield is not supported :\n Warning : yield is not supported :\n Try : chainer/chainer/configuration.py -> chainer/chainer/configuration.rb : [Warning]\n Try : chainer/chainer/cuda.py -> chainer/chainer/cuda.rb : [OK]\n :\n :\n Try : chainer/chainer/utils/array.py -> chainer/chainer/utils/array.rb : [OK]\n\nTests\n-----\n\n$ ./run_tests.py\n\nWill run all tests, that are supposed to work. If any test fails, it's a bug.\n\n$ ./run_tests.py -a\n\nWill run all tests including those that are known to fail (currently). It\nshould be understandable from the output.\n\n$ ./run_tests.py -x\nor\n$ ./run_tests.py --no-error\n\nWill run tests but ignore if an error is raised by the test. This is not\naffecting the error generated by the test files in the tests directory.\n\nFor more flags then described here\n\n./run_tests.py -h\n\n\nLicense\n-------\n\nMIT, see the LICENSE file for exact details.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/naitoh/py2rb", "keywords": "python ruby", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "py2rb", "package_url": "https://pypi.org/project/py2rb/", "platform": "", "project_url": "https://pypi.org/project/py2rb/", "project_urls": { "Homepage": "https://github.com/naitoh/py2rb" }, "release_url": "https://pypi.org/project/py2rb/0.1.2/", "requires_dist": null, "requires_python": "", "summary": "A code translator using AST from Python to Ruby", "version": "0.1.2" }, "last_serial": 3658191, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "314b7a763bb21bd1bbba9e2067ef5062", "sha256": "677e1071d0b5ccc71f2134eb6078c8f46ec87550226a3c57159f83414879aed0" }, "downloads": -1, "filename": "py2rb-0.1.0.tar.gz", "has_sig": false, "md5_digest": "314b7a763bb21bd1bbba9e2067ef5062", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30766, "upload_time": "2018-01-26T14:53:00", "url": "https://files.pythonhosted.org/packages/0c/19/f8d13b7550d9538c622662aac31d03f2bc11d7c86c79ad800bb0bd3bb1a5/py2rb-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "6b91e22e9aef8ffc39f63a571ffa558d", "sha256": "f076aaadbcf5039d72aa5018d15a4a29bd37fcf746b27fd71548d6ca7a33fb7b" }, "downloads": -1, "filename": "py2rb-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6b91e22e9aef8ffc39f63a571ffa558d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30791, "upload_time": "2018-02-01T14:05:16", "url": "https://files.pythonhosted.org/packages/a9/9a/7d47bea0dfceceeb656184994ff03eb4a75db01db5587fc102fb708a4ca6/py2rb-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9d583f8eb6ee79308bad1bfdc21a5300", "sha256": "d3d946195b80ab3c3ac4f6a30e7f4cb1e4de6e302b255d0af0ad1b8ea93279dc" }, "downloads": -1, "filename": "py2rb-0.1.2.tar.gz", "has_sig": false, "md5_digest": "9d583f8eb6ee79308bad1bfdc21a5300", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33100, "upload_time": "2018-03-11T02:47:03", "url": "https://files.pythonhosted.org/packages/29/a3/b6769cffb3714870519ca9d78f624d12cf0a2d3ca5b10b7fffda8b8f4e57/py2rb-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9d583f8eb6ee79308bad1bfdc21a5300", "sha256": "d3d946195b80ab3c3ac4f6a30e7f4cb1e4de6e302b255d0af0ad1b8ea93279dc" }, "downloads": -1, "filename": "py2rb-0.1.2.tar.gz", "has_sig": false, "md5_digest": "9d583f8eb6ee79308bad1bfdc21a5300", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33100, "upload_time": "2018-03-11T02:47:03", "url": "https://files.pythonhosted.org/packages/29/a3/b6769cffb3714870519ca9d78f624d12cf0a2d3ca5b10b7fffda8b8f4e57/py2rb-0.1.2.tar.gz" } ] }