\subsection{Python Module} \label{sec:python-module} The core functionality of the \textbf{VEIN} system is implemented via the \texttt{vein.Solver}, an extension of the \texttt{z3.Solver} class offered in the Z3 Python package\footnote{\href{https://pypi.org/project/z3-solver}{\textbf{PyPi package}}}. This design choice ensures flexibility and ease of use for researchers already familiar with using the Z3 Python API. The methods offered by \texttt{vein.Solver} are: \begin{itemize} \item \texttt{load\_onnx}: loads a neural network in ONNX file format. \item \texttt{load\_smtlib}: loads a file containing the specification. \item \texttt{check}: orchestrates the translation and reduction pipeline before invoking the solver to check the specification against one or many neural networks. \end{itemize} The framework uses a \textit{lazy evaluation} strategy: when loading a neural network, it is placed into a pending queue, and it is reduced to normal form only after the \texttt{check} method is called. The specification follows the SMT-LIB\footnote{\href{https://smt-lib.org}{\textbf{SMT-LIB Website}}} format. It should contain the input and output symbolic variables declarations, optional range constraints on the input variables, and the properties to be verified. For Multi-Network (relational) verification, the system ensures that multiple networks share the same input symbolic variables. This approach allows Z3 to compare the outputs directly, given the same inputs. The execution pipeline is implemented within the \texttt{check} method: \begin{itemize} \item \texttt{inpla\_export}: invokes the translation layer to generate an IN. \item \texttt{inpla\_run}: executes INPLA as a subprocess. \item \texttt{z3\_evaluate}: parses the normal form, represented by an AST, and constructs the Z3 expression. \end{itemize} This method utilizes a memoization technique to increase performance: if a specific pair of (neural network, range constraints) has been previously reduced to a normal form, the system retrieves the cached Z3 expression, instead of running the pipeline redundantly.