Start Here

Troubleshooting

Start with the symptom you see. Each entry gives the likely cause, the shortest check, and the next action.

Installation and Import

pip says no matching distribution was found

Version 0.9.0 is published as wheels for 64-bit Linux, macOS, and Windows. Upgrade pip first, then confirm Python is at least 3.8. pip index versions graph-evolution-tool lists the available release. An unsupported platform must use a source checkout because PyPI currently has no source archive.

PowerShell refuses to run Activate.ps1

.venv\Scripts\Activate.ps1 : File ...\.venv\Scripts\Activate.ps1 cannot be loaded
because running scripts is disabled on this system.

Nothing is wrong with the environment. A stock Windows install sets the PowerShell execution policy to Restricted in every scope, which blocks every .ps1 file including the one venv just generated. It is the default, not something you changed, so it affects essentially every Windows user on their first run.

The shortest way past it is not to activate at all. Call the environment's interpreter directly and every command behaves the same:

py -m venv .venv
.venv\Scripts\python.exe -m pip install graph-evolution-tool
.venv\Scripts\python.exe -c "import get; print('GET imported')"

If you want an activated shell (a shorter prompt line, python without the path), allow local scripts once. CurrentUser scope needs no administrator, and RemoteSigned still requires a signature on anything downloaded, so it is the conventional developer setting rather than turning the check off:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
.venv\Scripts\Activate.ps1
activate.bat is not a way around this. It is true that .bat files are not governed by the execution policy, but PowerShell runs a batch file in a separate cmd.exe process, which exits and takes the environment changes with it, leaving the venv unactivated and no error to say so. It activates correctly from cmd, and only from cmd.

ModuleNotFoundError: No module named 'get'

  1. Activate the same virtual environment in which you ran pip install graph-evolution-tool.
  2. Check the interpreter with python -c "import sys; print(sys.executable)".
  3. Run python -m pip install graph-evolution-tool again with that interpreter.

The install/project name is graph-evolution-tool; the import name is get.

A source build says maturin develop cannot find a virtual environment

python3 -m venv .venv
source .venv/bin/activate
python -m pip install maturin
maturin develop --release

This is the one step the un-activated Windows route cannot do. maturin looks for the VIRTUAL_ENV variable, not for the interpreter you invoked it with, so calling .venv\Scripts\maturin.exe directly still reports that it cannot find an environment. Set the variable yourself and no execution-policy change is needed:

py -m venv .venv
.venv\Scripts\python.exe -m pip install --upgrade pip maturin
$env:VIRTUAL_ENV = "$PWD\.venv"
.venv\Scripts\maturin.exe develop --release

It lasts for that PowerShell session only. Activating properly works too. See PowerShell refuses to run Activate.ps1. On any platform, note that a bare system interpreter is not a virtual environment: maturin will not install into one however the PATH is arranged, which is the same reason this fails in CI without an explicit venv.

The Rust build fails before compiling GET

Confirm that rustc --version and cargo --version work. If Rust came from an operating-system package and is old, install or update the stable toolchain with rustup.

Configuration

A top-level key is reported missing even though it is in the file

TOML keys after a section header belong to that section. Put keys such as population_size and network_size before the first [evolution]-style header.

A misspelled fitness key did not raise an error

Unknown-key checking is not uniformly strict. Only [genome] and [genome.operation_weights] reject every unknown key; typos in other sections can be ignored and leave defaults in use. Compare the whole document against the Configuration Reference by eye.

The error names a config path when I used Python objects

Both interfaces use the same schema. Python objects serialize to TOML before the Rust parser validates them. The path points to the equivalent config field; the Configuration Reference covers both spellings.

Runs and Results

The run makes no visible progress

The scores do not improve

First check that your objective produces meaningful differences between candidates. For epidemic objectives, parameters can make almost every outbreak die immediately; every graph then receives a similar score and selection has no useful gradient. Also check the declared maximize/minimize direction and plot best_fitness and mean_fitness from the history.

A Python objective stops with PanicException

Check that it returns exactly one numeric value per graph and never returns NaN. NaN is treated as a bug and stops the run. Guard zero denominators explicitly.

Saving a result raises OSError

save_logs, save_results, and save_config do not create their parent directories. Create the directory first:

from pathlib import Path

Path("output/run_0").mkdir(parents=True, exist_ok=True)
result.save_logs("output/run_0/run_log.csv")

A TOML base_graph cannot be opened

A relative [genome] base_graph path is resolved beside the TOML file, not from the directory where you started Python. The file is read as 0-indexed and its # nodes = N header must exactly match network_size. Use the Python loader with min_node_index=1 when the source data is 1-indexed.

The same seed did not reproduce a replicate

Preserve the exact GET commit, run code, full configuration, master seed, replicate index, input graphs/reference data, custom objective code, and relevant environment. Repeat a replicate's random stream with the same master seed and index, not by passing the derived seed back to GET.

Rust CLI

get-run builds but fails to start with a libpython error

The CLI feature links Python support even though the command itself does not run Python code. Make the same interpreter's library visible to the dynamic loader. On Linux, add its library directory to LD_LIBRARY_PATH; on macOS use DYLD_LIBRARY_PATH. The CLI guide shows a command that derives the directory.

Before Reporting a Problem

Include:

Then open an issue in the GitHub issue tracker.