Skip to content
Open
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
25 changes: 25 additions & 0 deletions src/constraint_handler/data/pythonHelper.lp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import itertools
import operator
import typing
import functools

import clingo

Expand All @@ -15,13 +16,28 @@ import constraint_handler.schemas.warning as warning
import constraint_handler.solver_environment as solver_environment


def cltopy_context(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except myClorm.FailedInstantiationExn as exn:
raise myClorm.FailedInstantiationExn(
f"{exn} (in {func.__name__}; args={args!r}; kwargs={kwargs!r})"
) from exn

return wrapper


@cltopy_context
def pythonExpressionVariable(clExpr):
# print("pythonExpressionVariable",clExpr)
pExpr = myClorm.cltopy(clExpr,expression.Expr)
pVars = list(evaluator.collectVars(pExpr))
clVars = [myClorm.pytocl(var) for var in pVars]
return clVars

@cltopy_context
def pythonEnumerateVariables(clExpr):
pExpr = myClorm.cltopy(clExpr,expression.Expr)
pVars = list(evaluator.collectVars(pExpr))
Expand All @@ -30,6 +46,7 @@ def pythonEnumerateVariables(clExpr):
return result

# TODO: dead?
@cltopy_context
def pythonBetaReduction(clExpr,clVars,clArgs):
pVars = myClorm.cltopy(clVars)
pArgs = myClorm.cltopy(clArgs,list[expression.Val])
Expand Down Expand Up @@ -111,20 +128,24 @@ def pythonExec(clStmt,clEnv,clId):
return myClorm.pytocl(warning.Error(exec_error,repr(exn)))


@cltopy_context
def pythonReversed(clExpr):
pL = myClorm.cltopy(clExpr,list)
pRL = list(reversed(pL))
return myClorm.pytocl(pRL)

@cltopy_context
def pythonListElements(clExpr):
pL = myClorm.cltopy(clExpr,list)
return [myClorm.pytocl(e) for e in pL]


@cltopy_context
def pythonEnumerateElements(clExpr):
pL = myClorm.cltopy(clExpr,list)
return [myClorm.pytocl(e) for e in enumerate(pL)]

@cltopy_context
def pythonListLength(clExpr):
pL = myClorm.cltopy(clExpr,list)
return myClorm.pytocl(len(pL))
Expand All @@ -134,6 +155,7 @@ class Local(typing.NamedTuple):
name: typing.Any
var: expression.Variable

@cltopy_context
def pythonTupleElements(clExpr):
pT = myClorm.cltopy(clExpr)

Expand All @@ -146,13 +168,15 @@ def pythonDebug(clExpr):
#print("debug: ",clExpr)
return clExpr

@cltopy_context
def pythonStop(clExpr):
#print("stop: ",clExpr)
pExpr = myClorm.cltopy(clExpr)
if pExpr < -5:
assert False
return clExpr

@cltopy_context
def pythonTagVars(clExpr,clName):
# print("pythonTagVars",clName,clExpr)
pName = myClorm.cltopy(clName)
Expand All @@ -163,6 +187,7 @@ def pythonTagVars(clExpr,clName):
return myClorm.pytocl(pExp2)


@cltopy_context
def pythonInit(clX):
pX = myClorm.cltopy(clX)
print("init",pX)
Expand Down