Source code for pyadi.cmdline

# (c) 2023 AI & IT UG
# Author: Johannes Willkomm jwillkomm@ai-and-it.de

import sys, os, argparse

from . import *
from astunparse import unparse, unparse2j, unparse2x, loadastpy

[docs] def pycanon(): run(lambda x, y, **kw: unparse(canonicalize(normalize(loadastpy(x, **kw)), **kw)), prog="pycanon", description="Canonicalize Python source code")
[docs] def pydiff(): run(lambda x, y, **kw: unparse(differentiate(loadastpy(x, **kw), filter=True, **kw)), prog="pydiff", description="Differentiate Python source code")
[docs] def run(parsefun, prog, description='What the program does'): parser = argparse.ArgumentParser( prog=prog, description=description) parser.add_argument('filename', nargs='?') parser.add_argument('-F', '--function', type=str, dest='activef') parser.add_argument('-r', '--replaceops', action='store_true') parser.add_argument('-p', '--prefix', type=str, nargs='*') parser.add_argument('-I', '--independents', type=str, dest='active', nargs='*') parser.add_argument('-i', '--indent', type=int, default=0, const=1, nargs='?') parser.add_argument('-o', '--output', type=str, help='Write output to file') parser.add_argument('-g', '--debug', type=str, nargs='?', const='x', help='Keep line number information') parser.add_argument('-v', '--verbose', type=int, default=0, const=1, nargs='?') args = parser.parse_args() input = '' if not args.filename: input = sys.stdin.read() fname = 'stdin' else: fname = args.filename input = open(args.filename).read() out = sys.stdout if args.output: out = open(args.output, 'w') debug = True if args.debug else False indent = args.indent if isinstance(parsefun, list): res = '' for i, pfun in enumerate(parsefun): res = pfun(input, fname, indent=indent, debug=debug) if debug: if isinstance(res, str): with open(fname + '.' + f'{i}', 'w') as f: f.write(res) input = res print(res, file=out) else: print(parsefun(input, fname, **vars(args)), file=out)