From 77907e30d2b10e53e66a57ab8c533fbb3d223ab6 Mon Sep 17 00:00:00 2001 From: John Lapeyre Date: Thu, 14 Aug 2025 00:02:31 -0400 Subject: [PATCH 1/2] Allow both cli script and "python -m pygridsynth" This commit allows both of the following to produce desired results without printing warnings: python -m pygridsynth args pygridsynth args --- pygridsynth/__main__.py | 66 ++--------------------------------------- pygridsynth/cli.py | 61 +++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- setup.py | 2 +- 4 files changed, 65 insertions(+), 66 deletions(-) create mode 100644 pygridsynth/cli.py diff --git a/pygridsynth/__main__.py b/pygridsynth/__main__.py index bd66027..8ac78a9 100644 --- a/pygridsynth/__main__.py +++ b/pygridsynth/__main__.py @@ -1,66 +1,4 @@ -import argparse - -import mpmath - -from .diophantine import set_random_seed -from .gridsynth import gridsynth_gates -from .loop_controller import LoopController - -helps = { - "dt": "Diophantine algorithm timeout in milliseconds", - "ft": "Factoring algorithm timeout in milliseconds", - "dl": "Diophantine algorithm max loop count", - "fl": "Factoring algorithm max loop count", - "seed": "Random seed for deterministic results", -} - - -def main(): - parser = argparse.ArgumentParser() - - parser.add_argument("theta", type=str) - parser.add_argument("epsilon", type=str) - parser.add_argument("--dps", type=int, default=None) - parser.add_argument("--dtimeout", "-dt", type=float, default=None, help=helps["dt"]) - parser.add_argument("--ftimeout", "-ft", type=float, default=None, help=helps["ft"]) - parser.add_argument("--dloop", "-dl", type=int, default=2000, help=helps["dl"]) - parser.add_argument("--floop", "-fl", type=int, default=500, help=helps["fl"]) - parser.add_argument("--seed", type=int, default=0, help=helps["seed"]) - parser.add_argument("--verbose", "-v", action="store_true") - parser.add_argument("--time", "-t", action="store_true") - parser.add_argument("--showgraph", "-g", action="store_true") - args = parser.parse_args() - - # Set random seed for deterministic results - set_random_seed(args.seed) - - # Use the same heuristic as Haskell gridsynth for setting dps - if args.dps is None: - epsilon1 = mpmath.mpmathify(args.epsilon) - dps_of_result = -mpmath.log10(epsilon1) - args.dps = 15 + 2.5 * dps_of_result - mpmath.mp.dps = args.dps - epsilon = mpmath.mpmathify(args.epsilon) - mpmath.mp.pretty = True - theta = mpmath.mpmathify(args.theta) - - loop_controller = LoopController( - dloop=args.dloop, - floop=args.floop, - dtimeout=args.dtimeout, - ftimeout=args.ftimeout, - ) - gates = gridsynth_gates( - theta=theta, - epsilon=epsilon, - loop_controller=loop_controller, - verbose=args.verbose, - measure_time=args.time, - show_graph=args.showgraph, - ) - print(gates) - return gates - +from .cli import main if __name__ == "__main__": - main() + print(main()) diff --git a/pygridsynth/cli.py b/pygridsynth/cli.py new file mode 100644 index 0000000..b585283 --- /dev/null +++ b/pygridsynth/cli.py @@ -0,0 +1,61 @@ +import argparse + +import mpmath + +from .diophantine import set_random_seed +from .gridsynth import gridsynth_gates +from .loop_controller import LoopController + +helps = { + "dt": "Diophantine algorithm timeout in milliseconds", + "ft": "Factoring algorithm timeout in milliseconds", + "dl": "Diophantine algorithm max loop count", + "fl": "Factoring algorithm max loop count", + "seed": "Random seed for deterministic results", +} + + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument("theta", type=str) + parser.add_argument("epsilon", type=str) + parser.add_argument("--dps", type=int, default=None) + parser.add_argument("--dtimeout", "-dt", type=float, default=None, help=helps["dt"]) + parser.add_argument("--ftimeout", "-ft", type=float, default=None, help=helps["ft"]) + parser.add_argument("--dloop", "-dl", type=int, default=2000, help=helps["dl"]) + parser.add_argument("--floop", "-fl", type=int, default=500, help=helps["fl"]) + parser.add_argument("--seed", type=int, default=0, help=helps["seed"]) + parser.add_argument("--verbose", "-v", action="store_true") + parser.add_argument("--time", "-t", action="store_true") + parser.add_argument("--showgraph", "-g", action="store_true") + args = parser.parse_args() + + # Set random seed for deterministic results + set_random_seed(args.seed) + + # Use the same heuristic as Haskell gridsynth for setting dps + if args.dps is None: + epsilon1 = mpmath.mpmathify(args.epsilon) + dps_of_result = -mpmath.log10(epsilon1) + args.dps = 15 + 2.5 * dps_of_result + mpmath.mp.dps = args.dps + epsilon = mpmath.mpmathify(args.epsilon) + mpmath.mp.pretty = True + theta = mpmath.mpmathify(args.theta) + + loop_controller = LoopController( + dloop=args.dloop, + floop=args.floop, + dtimeout=args.dtimeout, + ftimeout=args.ftimeout, + ) + gates = gridsynth_gates( + theta=theta, + epsilon=epsilon, + loop_controller=loop_controller, + verbose=args.verbose, + measure_time=args.time, + show_graph=args.showgraph, + ) + return gates diff --git a/pyproject.toml b/pyproject.toml index 2c882fa..ea04e27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ dev = [ packages = ["pygridsynth"] [project.scripts] -pygridsynth = "pygridsynth:main" +pygridsynth = "pygridsynth.cli:main" [project.urls] "Homepage" = "https://github.com/quantum-programming/pygridsynth" diff --git a/setup.py b/setup.py index 99aa4a7..3ccf5e0 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( entry_points={ "console_scripts": [ - "pygridsynth = pygridsynth.__main__:main", + 'pygridsynth = pygridsynth.cli:main', ], } ) From 0bbc848a85a0ca807609fba08e2c20b2fdb77e3d Mon Sep 17 00:00:00 2001 From: Hiroki Hamaguchi Date: Thu, 14 Aug 2025 21:12:28 +0900 Subject: [PATCH 2/2] format with black --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3ccf5e0..bebe999 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( entry_points={ "console_scripts": [ - 'pygridsynth = pygridsynth.cli:main', + "pygridsynth = pygridsynth.cli:main", ], } )