Releases: rindPHI/isla
ISLa 1.9.3
[1.9.3] - 2022-11-10
Changed
- Further improvements in input repair: Better ordering of abstracted trees. Now, all
abstractions are generated at once (not lazily in a generator), which might impact
performance; however, the results are ordered by tree size, i.e., less abstract trees
come first, which is the expected behavior. Code is simplified.
[1.9.2] - 2022-11-10
Changed
- Improved input repair:
- Results are more local now, performance improvement for more complicated repairs
- Fixed tree abstraction for the top (empty) path
ISLa 1.9.1
[1.9.1] - 2022-11-08
Changed
- Bug fix: Python extension files could not use local definitions before (e.g., helper
functions); this is fixed now. - Buf fix: Epsilon productions are correctly processed in
unparse_grammar
.
[1.9.0] - 2022-11-08
Added
-
It is now possible to extend ISLa with custom structural or semantic predicates when
using the CLI (this concernsisla solve
,isla parse
,isla check
,isla fuzz
,
isla mutate
,isla find
, andisla mutate
) by passing a Python file as input
that contains a functionpredicates() -> typing.Set[isla.language.StructuralPredicate | isla.language.SemanticPredicate]
Additionally or alternatively, that file may define a variable
grammar
or a function
grammar()
specifying the grammar of the language under test. This behavior, already
implemented in previous ISLa versions (for the variable declaration, see "Changed"),
is unaffected by the predicate extension feature.
Changed
- In Python extension files, grammars may alternatively be defined as the return
value of a functiondef grammar() -> Dict[str, List[str]]
instead of an assignment
to a variablegrammar
. This is the preferred style; the variable assignment may get
deprecated in the future.
ISLa 1.8.0
[1.8.0] - 2022-10-21
Added
- Added
isla find
command to filter files passing syntactic & semantic constraints
Changed
isla create
now prints out the created files.
[1.7.3] - 2022-10-13
Changed
- Performance fix with most impact in instantiating large structures with the grammar
fuzzer: More caching & propagation of the "is open" status of derivation trees.
[1.7.2] - 2022-10-13
Changed
- Creation of zero-length trees for
str.len(var)
expressions, ifvar
only occurs
insidestr.len
applications and optimized Z3 queries are enabled, now works; before,
such a tree was not found.
[1.7.1] - 2022-10-13
Changed
- Asserting that creation of fixed-length trees (see comment to version 1.5.0) did work
as expected; error message suggests disabling optimized queries or refining
constraints. - The CLI captures all exceptions for
isla solve
and reports them to the command line
rather than crashing ungracefully.
[1.7.0] - 2022-10-13
Added
- CLI argument
--tree
forisla solve
to produce JSON output (derivation trees)
rather than "unparsed" strings. - The CLI commands
check
,repair
, andmutate
now also accept derivation trees
in JSON format as inputs, circumventing the need for parsing if, e.g., piping an
input produced by a grammar fuzzer to the checker.
[1.6.0] - 2022-10-12
Added
- Command line argument
-O
which runs ISLa in optimized mode with deactivated
assertions. Recommended if speed is an issue.
[1.5.0] - 2022-10-12
Added
- Added special handling for
str.len
applications: For variables exclusively
occurring insidestr.len
, we only ask Z3 for a solution to the numeric length,
and then randomly create a string of that length. TheISLaSolver
has a new option
enable_optimized_z3_queries
to disable this behavior. Future releases will also
have a CLI option for that purpose.
Changed
- Bug fix: Wrong precedence of multiplication/division and addition/subtraction in
ISLa parser;x * y + z
was parsedx * (y + z)
. This is now corrected. - Bug fix: Null bytes at the level of SMT expressions (
\u{}
) were not handled
correctly inz3_helpers.evalute_z3_expression
; instead of\x00
, they were
treated as the 4-character string\u{}
.
ISLa 1.4.1
[1.4.1] - 2022-10-06
Changed
- Bug fix: Added forgotten requirement. The "toml" package needs to be installed to use
ISLa 1.4.0.
[1.4.0] - 2022-10-06
Added
- Configuration of default ISLa CLI options via
.islarc
files. The ISLa CLI searches
for an.islarc
files first in the current working directory, then in the user's
home directory, and uses a bundled resource file as a fallback. All found
configurations are merged; in case of conflicts, earlier found ones take precedence
(i.e., the options specified in./.islarc
override all others). The file format
for.islarc
files is TOML. - Added
isla config
command to write the default configuration either to a specified
output file or to the standard output. This comes handy when one is unsure about the
available options and to start a complete custom configuration.
ISLa 1.3.3
[1.3.3] - 2022-10-04
Changed
- Solved packaging bug: Resource files for the
isla create
command were not
packaged in installation packages; this is now fixed.
ISLa 1.3.2
[1.3.2] - 2022-09-30
Changed
- Bugfix in
unparse_grammar
related to escaping. - Changed standard cost weight vector in CLI (now defaults to
isla.solver.STD_COST_SETTINGS.weight_vector
). - Describing individual cost vector components in CLI help text.
ISLa 1.3.1
[1.3.1] - 2022-09-30
Changed
- Fixed bug in
unparse_grammar
: Backslashes are correctly escaped now. - Fixed bug in parsing of match expressions: Escaped symbols are not handled correctly.
- Made order of terminals in REST_GRAMMAR deterministic.
[1.3.0] - 2022-09-27
Added
- Added the CLI command
isla mutate
and solver methodISLaSolver.mutate
for
mutating inputs in a semantics-preserving way.
v1.2.0
[1.2.0] - 2022-09-27
Changed
- Added the option to pass multiple constraints via multiple
--constraint
command
line parameters in the CLI.
[1.1.0] - 2022-09-27
Added
- Added the CLI command
isla repair
and solver methodISLaSolver.repair
for
repairing inputs violating semantic constraints.
ISLa 1.0.1
[1.0.1] - 2022-09-23
Changed
- The evaluation function
evaluate_legacy
now better accounts for open derivation
trees, issuing "unknown" in more cases. For example, if a universal quantifier
matches possible expansions of an open derivation tree, we return "unknown;"
similarly if an existential quantifier is not satisfied by any concrete match, but
there are potential matches (of instantiations of open subtrees) left - Fix in
can_extend_leaf_to_make_quantifier_match_parent
, which sometimes did not
satisfy its intended semantics of only returning True for potential matches, and
not for current ones - Bug fix: Epsilon expansions in match expressions caused problems before (see test case
"test_solve_config_grammar_leaddigit_equality" in "test_solver.py")
ISLa 1.0.0
[1.0.0] - 2022-09-22
This first major ISLa release comes with a command line interface and a new solver API.
Please note that the new API is incompatible with the 0.*
versions, such that things
can break if you upgrade to 1.0.0
from a previous version. Read the change list
below to learn how you can adapt your code to work with 1.0.0
.
Changed
- The previous solver function
ISLaSolver.solve()
was removed - The function
ISLaSolver.fuzz()
was renamed toISLaSolver.solve()
- The signatures of the old
ISLaSolver.fuzz()
and the newISLaSolver.solve()
functions are different: The new function- only ever returns
DerivationTree
objects - raises a
StopIteration
if no (more) solutions could be found - raises a
SolverTimeout
exception if the solver timed out
- only ever returns
- The previous solver function
ISLaSolver.evaluate()
was renamed to
ISLaSolver.check()
- The new
ISLaSolver.check()
function returns a "normal" Boolean value (instead of
aThreeValuedTruth
) and returns anUnknownResultError
if truth cannot be
determined (which should only occur in rare edge cases). - The function
ISLaSolver.parse()
now also checks for semantic validity. It- raises a
SyntaxError
if the input cannot be parsed with the grammar, - raises a
SemanticError
if the input can be parsed, but does not satisfy the
constraint, and - returns a
DerivationTree
object otherwise.
- raises a