Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 2 additions & 64 deletions pygridsynth/__main__.py
Original file line number Diff line number Diff line change
@@ -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())
61 changes: 61 additions & 0 deletions pygridsynth/cli.py
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
setup(
entry_points={
"console_scripts": [
"pygridsynth = pygridsynth.__main__:main",
"pygridsynth = pygridsynth.cli:main",
],
}
)