# QuTiP settings

QuTiP has multiple settings that control it’s behaviour:

- `qutip.settings` contains installation and runtime information. Most of these parameters are readonly. But systems paths used by QuTiP are also included here and could need updating in none standard environment.

- `qutip.settings.core` contains options for operations with `Qobj` and other qutip’s class. All options are writable.

- `qutip.settings.compile` has options that control compilation of string coefficients to cython modules. All options are writable.

# Environment settings

`qutip.settings` has information about the run time environment:

Setting | Read Only | Description
--- | --- | ---
has_mkl | True | Whether qutip can find mkl libraries. mkl sparse linear equation solver can be used when True.
mkl_lib_location | False | Path of the mkl library.
mkl_lib | True | Mkl libraries loaded with ctypes.
ipython | True | Whether running in IPython.
eigh_unsafe | True | When true, SciPy’s eigh and eigvalsh are replaced with custom implementations that call eig and eigvals instead. This setting exists because in some environments SciPy’s eigh segfaults or gives invalid results.
coeffroot | False | Directory in which QuTiP creates cython modules for string coefficient.
coeff_write_ok | True | Whether QuTiP has write permission for coeffroot.
idxint_size | True | Whether QuTiP’s sparse matrix indices use 32 or 64 bits. Sparse matrices’ size are limited to 2**(idxint_size-1) rows and columns.
num_cpus | True | Detected number of cpus.
colorblind_safe | False | Control the default cmap in visualization functions.

It may be needed to update `coeffroot` if the default HOME is not writable. It can be done with:

    >>> qutip.settings.coeffroot = "path/to/string/coeff/directory"

In QuTiP version 5 and later, strings compiled in a session are kept for future sessions. As long as the same `coeffroot` is used, each string will only be compiled once.

# Modifying Internal QuTiP Settings

## User Accessible Parameters

In this section we show how to modify a few of the internal parameters used by `Qobj`. The settings that can be modified are given in the following table:

Options | Description | type [default]
--- | --- | ---
auto_tidyup | Automatically tidyup sparse quantum objects. | bool [True]
auto_tidyup_atol | Tolerance used by tidyup. (sparse only) | float [1e-14]
auto_tidyup_dims | Whether the scalar dimension are contracted | bool [False]
atol | General absolute tolerance. | float [1e-12]
rtol | General relative tolerance. | float [1e-12]
function_coefficient_style | Signature expected by function coefficients. | {[“auto”], “pythonic”, “dict”}
default_dtype | Data format used when creating Qobj from QuTiP functions, such as `qeye`. | {[None], “CSR”, “Dense”, “Dia”} + other from plugins

See also `CoreOptions`.

## Example: Changing Settings

The two most important settings are `auto_tidyup` and `auto_tidyup_atol` as they control whether the small elements of a quantum object should be removed, and what number should be considered as the cut-off tolerance. Modifying these, or any other parameters, is quite simple:

    >>> qutip.settings.core["auto_tidyup"] = False

The settings can also be changed for a code block:

    >>> with qutip.CoreOptions(atol=1e-5):
    >>>     assert qutip.qeye(2) * 1e-9 == qutip.qzero(2)

## String Coefficient Parameters

String based coefficient used for time dependent system are compiled using Cython when available. Speeding the simulations, it tries to set c types to passed variables. `qutip.settings.compile` has multiple options for compilation.

There are options are about to whether to compile.

Options | Description
--- | ---
use_cython | Whether to compile string using cython or using `eval`.
recompile | Whether to force recompilation or use a previously constructed coefficient if available.

Some options passed to cython and the compiler (for advanced user).

Options | Description
--- | ---
compiler_flags | C++ compiler flags.
link_flags | C++ linker flags.
build_dir | cythonize’s build_dir.
extra_import | import or cimport line of code to add to the cython file.
clean_on_error | Whether to erase the created file if compilation failed.

Lastly some options control how qutip tries to detect C types (for advanced user).

Options | Description
--- | ---
try_parse | Whether QuTiP parses the string to detect common patterns. When True, “cos(w * t)” and “cos(a * t)” will use the same compiled coefficient.
static_types | If False, every variable will be typed as `object`, (except `t` which is double). If True, scalar (int, float, complex), string and Data types are detected.
accept_int | Whether to type `args` values which are Python ints as int or float/complex. Per default it is True when subscription (`a[i]`) is used.
accept_float | Whether to type `args` values which are Python floats as int or float/complex. Per default it is True when comparison (`a > b`) is used.

These options can be set at a global level in `qutip.settings.compile` or by passing a `CompilationOptions` instance to the `coefficient` functions.

    >>> qutip.coefficient("cos(t)", compile_opt=CompilationOptions(recompile=True))