diff --git a/src/api/dotnet/Context.cs b/src/api/dotnet/Context.cs
index df45378a4..70fcbacb7 100644
--- a/src/api/dotnet/Context.cs
+++ b/src/api/dotnet/Context.cs
@@ -3395,7 +3395,12 @@ namespace Microsoft.Z3
///
public Z3_ast_print_mode PrintMode
{
- set { Native.Z3_set_ast_print_mode(nCtx, (uint)value); }
+ get { return m_print_mode; }
+ set
+ {
+ Native.Z3_set_ast_print_mode(nCtx, (uint)value);
+ m_print_mode = value;
+ }
}
#endregion
@@ -4943,6 +4948,7 @@ namespace Microsoft.Z3
internal Native.Z3_error_handler m_n_err_handler = null;
internal static Object creation_lock = new Object();
internal IntPtr nCtx { get { return m_ctx; } }
+ private Z3_ast_print_mode m_print_mode = Z3_ast_print_mode.Z3_PRINT_SMTLIB2_COMPLIANT;
internal void NativeErrorHandler(IntPtr ctx, Z3_error_code errorCode)
{
diff --git a/src/api/js/src/high-level/high-level.ts b/src/api/js/src/high-level/high-level.ts
index 6998592e0..f1dd85261 100644
--- a/src/api/js/src/high-level/high-level.ts
+++ b/src/api/js/src/high-level/high-level.ts
@@ -382,6 +382,10 @@ export function createApi(Z3: Z3Core): Z3HighLevel {
check(Z3.interrupt(contextPtr));
}
+ function setPrintMode(mode: Z3_ast_print_mode): void {
+ Z3.set_ast_print_mode(contextPtr, mode);
+ }
+
function isModel(obj: unknown): obj is Model {
const r = obj instanceof ModelImpl;
r && _assertContext(obj);
@@ -4487,6 +4491,7 @@ export function createApi(Z3: Z3Core): Z3HighLevel {
// Functions //
///////////////
interrupt,
+ setPrintMode,
isModel,
isAst,
isSort,
diff --git a/src/api/js/src/high-level/types.ts b/src/api/js/src/high-level/types.ts
index 54ed4ee1f..32d08b6ae 100644
--- a/src/api/js/src/high-level/types.ts
+++ b/src/api/js/src/high-level/types.ts
@@ -1,6 +1,7 @@
import {
Z3_ast,
Z3_ast_map,
+ Z3_ast_print_mode,
Z3_ast_vector,
Z3_context,
Z3_constructor,
@@ -181,6 +182,18 @@ export interface Context {
/** @category Functions */
interrupt(): void;
+ /**
+ * Set the pretty printing mode for ASTs.
+ *
+ * @param mode - The print mode to use:
+ * - Z3_PRINT_SMTLIB_FULL (0): Print AST nodes in SMTLIB verbose format.
+ * - Z3_PRINT_LOW_LEVEL (1): Print AST nodes using a low-level format.
+ * - Z3_PRINT_SMTLIB2_COMPLIANT (2): Print AST nodes in SMTLIB 2.x compliant format.
+ *
+ * @category Functions
+ */
+ setPrintMode(mode: Z3_ast_print_mode): void;
+
/** @category Functions */
isModel(obj: unknown): obj is Model;
diff --git a/src/api/python/z3/z3.py b/src/api/python/z3/z3.py
index 3994f8131..5ad45cedb 100644
--- a/src/api/python/z3/z3.py
+++ b/src/api/python/z3/z3.py
@@ -240,6 +240,26 @@ class Context:
def param_descrs(self):
"""Return the global parameter description set."""
return ParamDescrsRef(Z3_get_global_param_descrs(self.ref()), self)
+
+ def set_ast_print_mode(self, mode):
+ """Set the pretty printing mode for ASTs.
+
+ The following modes are available:
+ - Z3_PRINT_SMTLIB_FULL (0): Print AST nodes in SMTLIB verbose format.
+ - Z3_PRINT_LOW_LEVEL (1): Print AST nodes using a low-level format.
+ - Z3_PRINT_SMTLIB2_COMPLIANT (2): Print AST nodes in SMTLIB 2.x compliant format.
+
+ Example:
+ >>> c = Context()
+ >>> c.set_ast_print_mode(Z3_PRINT_LOW_LEVEL)
+ >>> x = Int('x', c)
+ >>> print(x)
+ (Int 0)
+ >>> c.set_ast_print_mode(Z3_PRINT_SMTLIB2_COMPLIANT)
+ >>> print(x)
+ x
+ """
+ Z3_set_ast_print_mode(self.ref(), mode)
# Global Z3 context