Package: nagini
Nagini is an automatic verifier for statically typed Python programs, based on theViperverification infrastructure. Nagini is being developed at theChair of Programming Methodologyat ETH Zurich as part of theVerifiedSCIONproject.Our CAV 2018 tool paper describing Nagini can be foundhere. Seethe Wikifor the documentation of Nagini’s specification language.You can try a (rather slow) online version of Naginion this website.For use with the PyCharm IDE, try theNagini PyCharm plugin.Dependencies (Ubuntu Linux)Install Java 11 or newer (64 bit) and Python 3.7 or newer (64 bit) and the required libraries:sudo apt-get install python3-devFor usage with Viper’s verification condition generation backend Carbon, you will also need to install Boogie.Dependencies (Windows)Install Java 11 or newer (64 bit) and Python 3.7 or newer (64 bit).Install either Visual C++ Build Tools 2015 (http://go.microsoft.com/fwlink/?LinkId=691126) or Visual Studio 2015. For the latter, make sure to choose the option “Common Tools for Visual C++ 2015” in the setup (seehttps://blogs.msdn.microsoft.com/vcblog/2015/07/24/setup-changes-in-visual-studio-2015-affecting-c-developers/for an explanation).Getting StartedCreate a virtual environment:virtualenv --python=python3 <env>Activate it:source env/bin/activateInstall Nagini:pip install naginiAlternatively, to get the most up-to-date version, install from source; this will require manually getting and compiling Viper (most likely the most recent development version):git clone https://github.com/marcoeilers/nagini.git
cd nagini
pip install .Command Line UsageTo verify a specific file from the nagini directory, run:nagini [OPTIONS] path-to-file.pyThe following command line options are available:--verifier
                Selects the Viper backend to use for verification.
                Possible options are 'silicon' (for Symbolic Execution) and 'carbon'
                (for Verification Condition Generation based on Boogie).
                Default: 'silicon'.

--select
                Select which functions/methods/classes to verify. Expects a comma-
                separated list of names.

--counterexample
                Enable outputting counterexamples for verification errors (experimental).

--z3
                Sets the path of the Z3 executable. Alternatively, the
                'Z3_EXE' environment variable can be set.

--boogie
                Sets the path of the Boogie executable. Required if the Carbon backend
                is selected. Alternatively, the 'BOOGIE_EXE' environment variable can be
                set.

--viper-jar-path
                Sets the path to the required Viper binaries ('silicon.jar' or
                'carbon.jar'). Only the binary for the selected backend is
                required. You can either use the provided binary packages installed
                by default or compile your own from source (see below).
                Expects either a single path or a colon- (Unix) or semicolon-
                (Windows) separated list of paths. Alternatively, the environment
                variables 'SILICONJAR', 'CARBONJAR' or 'VIPERJAR' can be set.To see all possible command line options, invokenaginiwithout arguments.Alternative Viper VersionsTo use a more recent or custom version of the Viper infrastructure, follow theinstructions here. Look forsbt assemblyto find instructions for packaging the required JAR files. Use the
parameters mentioned above to instruct Nagini to use your custom Viper version.TroubleshootingOn Windows: During the setup, you get an error likeMicrosoft Visual C++ 14.0 is required.orUnable to fnd vcvarsall.bat:Python cannot find the required Visual Studio 2015 C++ installation, make sure you have either installed the Build Tools or checked the “Common Tools” option in your regular VS 2015 installation (see above).While verifying a file, you get a stack trace ending with something likeNo matching overloads found:The version of Viper you’re using does not match your version of Nagini. Try updating both to the newest version.Build Status