Skip to content

Changes

Ongoing

    • rename find, find2, maxEntries, and minEntries to multima_find, multimap_find2, multimap_maxEntries, and multimap_minEntries.
    • update preference_holds and preference_variableValue to take an optional condition before the label.
    • remove the warning for multiple preference scores for the same expression.
    • update variable_assign and variable_choice to take a condition argument.
    • update multimap_assign to take an optional condition argument. multimap_assign(VAR,KEY,VALUE,COND,LBL) adds the pair only when COND evaluates to true. The former labelled four-argument form now requires val(bool,true) before the label.
  • introduce declaration warning_raise(KIND,MSG,COND,LBL) to let the user specify warnings to be emitted conditionally.

v0.0.10

  • add warning_raised, warning_raised(Type), and warning_raised(Type,Labels) output markers for non-ignored warnings.
    • drop static warning for multiple declarations
    • update variable_declare to take a condition argument.
    • update set_baseDomain to take a condition argument.
  • introduce a staged python interface

v0.0.9

    • update variable_domain to take an optional condition argument. variable_domain(VAR,E,COND,LBL) includes E in VAR's domain only when COND evaluates to true. The former labelled variable_domain(VAR,E,LBL) form is now variable_domain(VAR,E,val(bool,true),LBL).
    • update optimize_maximizeSum to take an optional condition argument.
    • replace CH's execution_run with an optional boolean condition in execution_declare(NAME,STMT,INPUT,OUTPUT,COND,LBL).
    • introduce the declaration check(COND) that rejects candidate where COND evaluates to false.
    • update the semantics of ensure to reject condition with bad evaluation.
    • disable and remove multipleDefinitions warning.
    • update variable_define to take an optional condition argument. variable_define(VAR,E,COND,LBL) defines VAR only when COND evaluates to true. The former labelled variable_define(VAR,E,LBL) form is now variable_define(VAR,E,val(bool,true),LBL).

v0.0.8

    • update set_assign to take a condition argument. set_assign(VAR,E,C,LBL) will add E to VAR only when COND evaluates to true.
  • add support for preferences in the propagator engine
    • swap argument order of engine_request/2 to engine_request(ENG,LBL)
    • rename input predicate engine_default(ENG) to engine_request(ENG)
    • replace the api argument of add_to_control with engine; select Flat CH with engine=constraint_handler.engine.fch instead of api="fch".
  • add Engine configurations and an engine argument to add_to_control; the default engine is compile.

v0.0.7

  • add the flat constraint handler (FCH) to constraint_handler and expose it through the new api="fch" argument of add_to_control, while keeping the existing CH API as the default.
  • add find_values and add_declarations to API
    • update variable_declare(LBL,X,D) to be variable_declare(X,D,LBL) and do the same for other input predicates,
    • introduce experimental alternative syntax.

v0.0.6

    • update evaluate(LBL,OP,ARGS) to be evaluate(LBL,operation(OP,ARGS)), same for evaluate/2 and evaluated/3
    • rename variable_domain to variable_choice for open variables.

v0.0.5

  • update .expected test format to be one atom per line
    • rename conditional operator default to getOrElse

v0.0.4

    • introduce variable_declare(X,open), variable_assign(X,E), and variable_default(X,E,C,P)
    • rename set operator length to cardinality
    • allow control over statement wellformedness checks with phase_request(statement_wellformedCheck,BOOL)
    • drop support for set_declare(X), the replacement being variable_declare(X,set), same for multimap.
    • drop support for variable_declare(X,fromList(L)), the replacement being variable_domain(X,E) for element of L E
    • drop support for variable_declareOptional(X), the replacement being variable_domain(X,val(none,none))
    • rename defaultEngine to engine_default and requestEngine to engine_request
    • update interface predicates warning_forbid/2 and warning_ignore/2 so that the second argument refers to the warning being forbidden or ignored
    • update the second argument of most warnings to be the label of a relevant declaration
  • introduce optimize_modelValue(LABEL,PRIORITY,VALUE) as distinct from the optimize_value/3 used in computations.
  • introduce basic support for defaults, using the variable_default(LABEL,X,DEFAULT_EXPR,COND) declarations.
    • type equality and inequality between values of incompatible types to return bool
  • introduce warning correction/1
    • introduce corrections from the type_check phase
    • implement rudimentary type inferrence support for statement_python and pythonExtract/2
    • rework type warnings to use type(inconsistent), type(risky), and type(untyped)

v0.0.3

    • introduce compile2 engine
  • rename myClorm.HashableList into myClorm.ImmutableList
  • introduce multimap.Multimap[K,V] as an immutable mappng from keys K to sets of values V
  • add custom converter hooks for generic aliases in myClorm
  • clean-up post processor and unify handling of optimization directives
  • support preferences in the ground engine
  • skip internal values in the models
  • introduce warnings type(notImplemented) and type(notSupported)
  • fix a tuple evaluation bug
  • introduce set and multimap as possible variable declarations
  • support optimization in the ground engine
  • implement float equality operators extensionally
  • normalize float constant representation
  • avoid generating badValue warnings for internal variables
  • avoid displaying detailed pytest-benchmarks statistics
  • unify testing of reasoning modes with testing of base solving
  • replace .expected.models with .expected.stats contains key-value pairs
  • use pytests's xfail and skip

v0.0.2.dev13

  • introduce caching for Clorm type resolution within myClorm.py.
  • fix typo in commented-out alternative variable guessing implementation inside finiteDomain.lp.

v0.0.2.dev12

  • introduce caching for Python functions and dynamic Python executions and evaluations.
  • split pythonIsTuple and pythonReify in rule bodies to prevent pythonReify from being called for non-tuples.
  • drop support for predicates conditional_hasValue and conditional_hasNoValue
  • fix typo in different-arity tuple equality and add a corresponding unit test
  • introduce variable(reservedName) warning
  • update the correction format.

v0.0.2.dev11

v0.0.2.dev10

  • introduce the phase_request/2 predicate.
  • avoid badValue warnings for ssa internal variables
  • introduce a correction mechanism to adjust the solving
  • reorganize preprocessing into phases
  • introduce variable_declare(X,definition), variable_declare(X,set), and variable_declare(X,multimap)
  • restrict engine interpreation to compile, ground, propagator, none
  • drop support for assign/2 declarations
  • drop support for while statements
  • rewrite the handling of executions to be entirely SSA-based
  • add optimization result atoms optimize_value/3

v0.0.2.dev9

v0.0.2.dev8

  • no changes, rerelease due to missing ci

v0.0.2.dev7

  • add supoort for tuple-expressions
  • deprecate assign/3
  • allow python expression as expression and not only as operators
  • ensure that execution_declare defines its output variables regardless of execution_run. If there is no corresponding execution_run the variables take the value none.
  • raise warning atom(syntaxError) when a set, variable, or multimap atom is malformed
  • introduce bool_evaluate
  • fix optimize_maximizeSum and declare_variable regressions introduced in v0.0.2.dev6
  • add engine-specific performance benchmark sessions and pytest-benchmark compare workflow for saved benchmark runs

v0.0.2.dev6

  • remove define from the supported declarations
  • add ceil and floor operator to int in compile engine, they behave like identity
  • raise warning atom(syntaxError) when an execution, optimize, or preference atom is malformed
  • rename forbid_warning and ignore_warning to warning_forbid and warning_ignore; allow an optional label argument for warning_ignore
  • raise warning statement(syntaxError) when a statement is malformed
  • Use bad instead of none for set operator python evaluation
  • Update CI to run fewer smoke tests and to test only one configuration on routine commits. Enable caching for routine commit tests.
  • Support ceil operator in compile engine and add corresponding test.
  • Support non-fact variable_domain declarations in the propagator engine.
  • Rename the string type from str to string and update examples, tests, and documentation accordingly.

v0.0.2.dev5

  • improve performance for integer addition
  • turn variable_declare's non-determinism to be between values rather than expressions
  • introduce optional label argument to variable_domain and variable_declareOptional, if unspecified, it defaults to the label of the corresponding variable_declare atom.
  • introduce optional label argument to evaluate
  • raise warning expression(syntaxError) when an expression is malformed
  • evaluate declarations now also generate expression-related warnings
  • Introduce warning variable(badValue) that is emitted when the value of some variable is bad
  • Introduce set_baseDomain/2 to allow non-deterministic set definitions.
  • remove recoverable
  • introduce _operator_recoverable/1 and use it for every currently recoverable operator
  • isin for sets is now set_isin
  • notin for sets is now set_notin
  • isin for multimaps is now multimap_isin

v0.0.2.dev4

  • Use an aggregate to compute sum in the compute engine
  • Remove negated hypothesis in the compile implementation of multiplication
  • Add handling of bad values in the propagator
  • make the following operators recoverable: conj, disj, pow, limp, ite, if, default
  • declaration Identifiers are now optional Labels
  • convenience case optimize_maximizeSum/3 has the label removed and is now optimize_maximizeSum/2
  • convenience case preference_variableValue/3 has the label removed and is now preference_variableValue/2
  • convenience case preference_holds/2 has the label removed and is now preference_holds/1

v0.0.2.dev3

  • use computeIdx instead of compute
  • avoid patterns of the form "p(A) :- q(A), r(A), not s(A), A=some(term)." in favor of "p(some(term)) :- q(some(term)), r(some(term)), not s(some(term))." to work around gringo's heuristic getting it wrong.

v0.0.2.dev1

  • updated python version in CI
  • updated docs

2026-03-10

  • Drop blanket declaration of eq and neq for any type T.
  • Fix type declaration of some operators that do not return floats (int_div,leq,etc.)
  • Fix #167 and fix multimap_fold only working for some operators in compile engine

2026-02-24

  • max operator now available for int (previously only float supported max)
  • min operator now available for int
  • min operator now available for float

2026-02-23

Functionality

  • int_div (previously div) now always returns an int value on success.

Renames

Old Name New Name
External
makeSet set_make
div int_div
fdiv float_div
Internal
compute _compute
computeIdx _computeIdx
computed _computed
computedIdx _computedIdx
stageCompute _stageCompute

v0.1.0

  • create project