Skip to content

Experiment · Graphs

FlyWire Codex: propagation in connectome graphs, mapped

This experiment is part of my study of how activity propagates in neural networks and in graphs, with a view to an embedded AI. FlyWire Codex provides real cases: three computation challenges on the fruit fly connectome graphs published by the FlyWire consortium. Every score is recomputed by a deterministic calculation, identical from one run to the next, and the graph data allowed a map to be built: a propagation visualisation for each problem, diagrams and tables. The three results came after the close of their challenge and start from solutions published by other participants; the provenance is given with each one.

950.3271484375Max Quasi-Cliques: at the top of the leaderboard after the challenge closeddisplayed on 31 Aug 2026, page read on 7 Oct 2026
35,474,664Minimum Feedback Arc Set: at the top of the leaderboard after the challenge closedsubmitted on 5 Oct 2026, page read on 7 Oct 2026
1,396,295synapses within columns (Visual Columns), at the top of the leaderboard after the challenge closed23,247 cells mapped, submitted on 24 Sep 2026, page read on 7 Oct 2026
3 / 3scores recomputed in exact arithmeticrecomputed on 11 Oct 2026 from the solution files and the challenge graphs

core hop 1 hop 2 hop 3 hop 4 hop 5 hops 6+ never reached

Propagation of Max Quasi-Cliques from the 40-neuron core (level 0) in the connectome, in slow rotation. Each dot is a neuron, placed at its position in the coordinates file of version 783; it lights up at the pace of its hop from the core, from violet (hop 0) to cyan (hops 6 and above). One neuron in 120 is drawn, for legibility; the 40-neuron core is drawn in full. The rotation is a display, not a computation. A diffusion calculation on the graph, with no vision model.

1. The question: how does activity propagate in a graph?

In a network, activity starts at a node and reaches its neighbours hop after hop. Where does it go, which zones does it reach, along which paths does it come back? That is the question I study for an embedded AI, and the connectome offers a real-scale testbed: graphs of more than 130,000 neurons and millions of connections. FlyWire Codex poses numerically scored computation problems on them, judged by an outside referee. The diagram below fixes the vocabulary: a hop is one connection crossed.

hop 0hop 1hop 2hop 3dashed line: a step back
Principle diagram: propagation over three hops from a starting node. Solid lines go forward; the dashed line goes back. Illustration, not drawn from the data.

Three Codex challenges are covered here. Each raises the question of propagation from a different angle.

Challenge Graph What is sought Score
Max Quasi-Cliques 134,181 neurons, 2,511,789 connections 12 sets of neurons, the set of level i having to contain at least a share 1/2i of all possible connections between its members sum of the sizes ki of the largest sets, weighted by 1/2i
Minimum Feedback Arc Set 136,648 neurons, 5,657,719 weighted connections (total weight 41,912,141) an ordering of the neurons in which as much weight as possible goes forward weight of the connections going from a lower rank to a higher rank
Visual Columns 23,452 cells of 31 types, 270,856 links, 796 columns assign cells to columns, at most one cell per type and per column synapses between cells of the same column, then number of cells assigned

2. FlyWire and its role

FlyWire is a scientific consortium that collectively reconstructed and proofread the connectome of the adult fruit fly (S. Dorkenwald et al., Nature 634, 2024), then annotated the cell types (P. Schlegel et al., Nature 634, 2024). Codex is the platform that makes these data available and hosts computation challenges; the organisers keep each challenge’s leaderboard and award the “Winner” title at its official deadline.

Data and citation. The data belong to the FlyWire consortium (version 783). S. Dorkenwald et al., “Neuronal wiring diagram of an adult brain”, Nature 634, 2024; P. Schlegel et al., “Whole-brain annotation and multi-connectome cell typing of Drosophila”, Nature 634, 2024. This page does not redistribute any raw connectome data (no list of neurons, no list of connections): the figures and the JSON files are derived quantities (counts, sums, shares) computed from the challenge graphs, with the names of the 31 cell types annotated by the consortium.

3. Max Quasi-Cliques: dense zones, hop after hop

ProblemMax Quasi-Cliques: 12 sets of neurons of decreasing density (1, 1/2, 1/4, … 1/211)
RefereeFlyWire Codex, max_clique_challenge
Result950.3271484375, at the top of the leaderboard after the challenge closed (31 August 2026), ahead of 950.326171875 (Pieter Hoogervorst, the challenge “Winner”, 2 August 2025), a gap of about 0.001 point (2−10); official deadline of the challenge: 31 August 2025
Provenancethis score starts from solutions published by other participants (Pieter Hoogervorst; Yehuda Lester and Dean Geckt); it was submitted after the challenge closed. Each line of the file overlaps the corresponding line of P. Hoogervorst’s published solution by at least 92.5%%.
Sourcemax_clique_challenge on codex.flywire.ai, read on 7 October 2026; score recomputed on 11 October 2026 (file fingerprint: 4d5f509e21a281cf…)

The rule is published on the challenge page: a line of k neurons carrying m connections satisfies level i if m ≥ k(k−1)/2 × 1/2i. The score adds ki/2i, where ki is the size of the largest set satisfying level i. The result is exactly 973135/1024. It differs from the previous top score by a single neuron at level 10: 60,431 neurons against 60,430.

The 12 lines of the solution file, recomputed in the challenge graph (11 Oct 2026).
Level Density required Neurons k Connections m Density reached
0 1 40 780 1.000000
1 1/2 175 7,646 0.502200
2 1/4 369 16,992 0.250265
3 1/8 723 32,626 0.125002
4 1/16 1,541 74,161 0.062500
5 1/32 3,109 150,986 0.031251
6 1/64 6,207 300,961 0.015626
7 1/128 11,757 539,916 0.007813
8 1/256 20,841 848,345 0.003906
9 1/512 35,828 1,253,544 0.001953
10 1/1024 60,431 1,783,137 0.000977
11 1/2048 97,272 2,310,009 0.000488
101001,00010,000100,0004001751369272331,54143,10956,207611,757720,841835,828960,4311097,27211level i (required density 1/2^i)
Size k of the set at each level (logarithmic scale): from 40 mutually connected neurons at level 0 to 97,272 neurons at level 11.

Propagation visualisation

Level 0 is a set of 40 neurons, all connected to each other. Starting from them, propagation reaches 2,271 neurons at hop 1, 11,546 at hop 2, 55,755 at hop 3, 53,083 at hop 4, 9,180 at hop 5, then 608 at hops 6 to 11; 1,698 neurons of the graph are never reached (shortest distance in the undirected graph). The level 11 set, the largest, covers 74 % of the hop 1 neurons, 85 % of hop 3 and stops at hop 5. The figure shows these counts: each ring is a hop.

0123456+
Propagation from the 40-neuron core (level 0). Each ring is a hop; thickness follows the number of neurons reached; colour, from violet to cyan, the share of these neurons that belong to the level 11 set.
Neurons reached at each hop from the 40-neuron core, and the share belonging to the level 11 set (97,272 neurons). The 1,698 unreached neurons are left out of the table.
Hop Neurons reached of which in the level 11 set Share
0 40 40 100.0 %
1 2,271 1,683 74.1 %
2 11,546 9,496 82.2 %
3 55,755 47,305 84.8 %
4 53,083 38,392 72.3 %
5 9,180 356 3.9 %
6–11 608 0 0.0 %

JSON

4. Minimum Feedback Arc Set: an ordering, and what goes back

ProblemMinimum Feedback Arc Set: order the neurons so that the weight of connections going forward is as large as possible (a problem known to be hard, NP-hard)
RefereeFlyWire Codex, mfas_challenge
Result35,474,664, at the top of the leaderboard after the challenge closed (submitted on 5 October 2026), ahead of 35,470,806 (Gonzalo G. de Polavieja, 26 September 2026); challenge “Winner”: the team of Justin Ellis-Joyce, Gert-Jan Both and Srinivas Turaga, 35,435,948; official deadline of the challenge: 8 October 2024; margin over the next entry: 3,858, i.e. 0.01%
Provenancethis result starts from solutions already published by other participants; it was submitted after the challenge closed.
Sourcemfas_challenge on codex.flywire.ai, read on 7 October 2026; score recomputed on 11 October 2026 (file fingerprint: c0f925a689d450f3…)

The score is the total weight of the connections going from a neuron of lower rank to a neuron of higher rank: 35,474,664 out of a total weight of 41,912,141 (84.6 %). The remaining weight, 6,437,477 (15.4 %), goes back: these are the feedback arcs.

start of the arc (higher rank) arrival (lower rank) feedback arc

The 100 heaviest feedback arcs of the submitted ordering (Minimum Feedback Arc Set), drawn between their two neurons in the connectome, in slow rotation. A feedback arc goes from a neuron of higher rank (violet) to a neuron of lower rank (cyan): it is weight that does not follow the order. Neurons sit at their position in the coordinates file of version 783. Arcs light up one by one by decreasing weight, from 1,297 to 253. These 100 arcs carry 0.57% of the 6,437,477 of backward weight: they are the heaviest, not a representative sample. The rotation is a display, not a computation. A calculation on the graph, with no vision model.
target block (increasing rank)source block1112122424golden diagonal: a block to itself
Flow map along the submitted ordering. The 136,648 neurons are ranked then cut into 24 blocks of consecutive ranks; each cell gives the weight of connections from the source block (row) to the target block (column), on a logarithmic scale. Above the golden diagonal, propagation follows the order; below it, it goes back.
0 %50 %100 %16121824source block (increasing rank)forwardsame blockbackward
For each block, split of the outgoing weight: towards later blocks (cyan), towards the same block (grey), towards earlier blocks (violet).
Weight of connections by gap between the ranks of their two ends. At every scale, most of the weight goes forward.
Span (rank gap) Forward weight Backward weight Forward share
1 – 99 1,903,714 391,736 82.9 %
100 – 999 3,804,671 762,511 83.3 %
1,000 – 9,999 13,099,506 2,433,544 84.3 %
10,000 – 99,999 15,341,676 2,669,820 85.2 %
≥ 100,000 1,325,097 179,866 88.0 %

JSON

5. Visual Columns: propagation within a column

ProblemVisual Columns: assign optic lobe cells to 796 columns, at most one cell per type and per column; the number of synapses between cells of the same column takes precedence, then the number of cells assigned
RefereeFlyWire Codex, visual_columns_challenge
Result1,396,295 synapses within columns and 23,247 cells mapped, at the top of the leaderboard after the challenge closed (submitted on 24 September 2026), ahead of 1,396,267 synapses and 23,025 cells (David García-Soriano, challenge “Winner”, 30 April 2024); official deadline of the challenge: 30 April 2024; margin: 28 synapses
Provenancethis result starts from solutions published by other participants, including that of David García-Soriano; it was submitted after the challenge closed.
Sourcevisual_columns_challenge on codex.flywire.ai, read on 7 October 2026; score recomputed on 11 October 2026 (file fingerprint: e2d98d1f53e3705d…)
The three values are published on the challenge page (read on 7 October 2026); the reference and the result presented were recomputed on 11 October 2026 from the files.
Reference point Synapses within columns Cells assigned
Official reference of the challenge 1,381,915 22,578
David García-Soriano, challenge “Winner” 1,396,267 23,025
Result presented 1,396,295 23,247

A column holds at most one cell of each of the 31 types. With the submitted assignment, 101,587 links between cells fall inside a column: between types, 572 of the 930 possible links (31 × 30) are present. A column holds between 150 and 2,820 synapses (median 1,870).

Propagation is read on these links: at each hop, the activity of a type is shared among its neighbouring types in proportion to its outgoing synapses within columns. Starting from type L1: hop 1 : Mi1 34 %, L5 31 %, C3 17 % ; hop 2 : L1 12 %, Mi1 10 %, L2 10 %. Starting from type R7: hop 1 : R8 53 %, L3 24 %, Tm20 9 % ; hop 2 : Mi9 20 %, Tm20 19 %, Mi1 15 %. After four hops, the activity is already spread over most types.

start: L101234L1Mi1L5C3Mi9C2L2Mi4Tm3T2Tm1T3T1T4aTm21T4bTm2T4dT4cTm20T2aT5dT5cT5bT5aTm9Tm4L3L4R8R7start: R701234R7R8L3Mi9Tm20Mi1Mi4Tm9Tm1T2L1C3Tm2T5cT5dTm21T5bL2T3T5aTm3L5T2aT4cT4aT4bT4dT1Tm4C2L4
Diffusion of activity from a starting type (hop 0) over the 31 types of the column, from 0 to 4 hops. The brighter the cell, the larger the type’s share of activity. A diffusion calculation on the type graph, with no vision model.

JSON

6. What is verified, and by whom

Result Check By whom Date
Max Quasi-Cliques score recomputed in exact rational arithmetic (973135/1024); the two published top scores are reproduced (950.326171875) two programs written from the published rule, one reproducing the reference code of the challenge page; recomputed for this page 23 Aug 2026 and 11 Oct 2026
Minimum Feedback Arc Set score recomputed (35,474,664); 4 published scores out of 4 reproduced; 7 deliberately invalid files out of 7 rejected checker independent of the research, written from the published rule alone; recomputed for this page 7 Oct 2026 and 11 Oct 2026
Visual Columns score recomputed (1,396,295 / 23,247, 0 violation); 5 published scores out of 5 reproduced; 9 deliberately invalid files out of 9 rejected checker independent of the research, written from the published rule alone; recomputed for this page 7 Oct 2026 and 11 Oct 2026

The leaderboard of each challenge is kept by FlyWire Codex, which states that it checks submissions. The official judge sits on the organisers’ side: the programs above follow the rule as published on each challenge page.

Recheck it yourself

The graphs are those of the challenges, to be downloaded from Codex. This program, standard library only, recomputes the three scores from a graph and a solution file; it reads the numbers as exact integers or rationals, with no rounding.

import csv
from fractions import Fraction as F

def lire(chemin, entete=True):
    with open(chemin, newline="") as f:
        r = csv.reader(f)
        if entete:
            next(r)
        return list(r)

# Max Quasi-Cliques : graphe du défi (2 colonnes, sans en-tête) et fichier de 12 lignes de neurones
def score_quasi_cliques(aretes, lignes):
    stats = []
    for l in lignes:
        s = set(l)
        k = len(s)
        m = sum(1 for a, b in aretes if a in s and b in s)
        stats.append((k, m))
    return sum(F(max([k for k, m in stats if m >= F(k * (k - 1), 2) / 2 ** i], default=0), 2 ** i)
               for i in range(12))

# MFAS : graphe pondéré (Source, Cible, Poids) et ordre (Neurone, Rang)
def score_mfas(aretes, rang):
    return sum(int(w) for a, b, w in aretes if int(rang[a]) < int(rang[b]))

# Visual Columns : liaisons (de, vers, synapses) et affectation (cellule, type, colonne)
def score_colonnes(liaisons, colonne):
    return sum(int(w) for a, b, w in liaisons if colonne.get(a) is not None and colonne.get(a) == colonne.get(b))

aretes = lire("graphe_quasi_cliques.csv", entete=False)
print(score_quasi_cliques(aretes, lire("solution_quasi_cliques.csv", entete=False)))
rang = {n: r for n, r in lire("ordre_mfas.csv")}
print(score_mfas(lire("graphe_mfas.csv"), rang))
colonne = {c: (int(k) if k.isdigit() else None) for c, t, k in lire("colonnes.csv")}
print(score_colonnes(lire("liaisons_colonnes.csv"), colonne))

Expected outputs with the files presented: 973135/1024, 35474664 and 1396295. The JSON files of this page carry the sha256 fingerprint of each file read.

7. The map

The graph data allowed me to build maps: for each problem, an overview computed once, with its date and the fingerprint of the files it comes from, and which recomputes identically from the challenge data. It is the same principle as the map of my research, where every certified result and every dead end is recorded (see The atlas).

Graphof the challengeProblemone scoreSolutionsubmittedCheckexactMapresult, date
From graph to map: each step yields a piece that can be rechecked.

The map of the wiring within a column shows, cell type by cell type, where the synapses retained within columns concentrate.

target typeL2L2L1L1Mi1Mi1C3C3Tm1Tm1L5L5Tm2Tm2L3L3C2C2Mi4Mi4Mi9Mi9Tm3Tm3Tm9Tm9Tm4Tm4L4L4R8R8Tm20Tm20T3T3T1T1T4aT4aT2aT2aR7R7T2T2T4bT4bT4cT4cT5bT5bT5aT5aT5cT5cTm21Tm21T5dT5dT4dT4dthe diagonal is empty: one cell per type and per column
Synapses within columns, from type to type (row: source, column: target), logarithmic scale; types are ranked by decreasing outgoing strength. Total: 1,396,295 synapses.
Map What it shows File
Hop rings where the dense sets lie relative to the 40-neuron core flywire_quasi_cliques.json
Flow between blocks the share of weight that advances along the order and the share that comes back flywire_mfas.json
Wiring of a column the cell types linked within columns, and how activity diffuses flywire_visual_columns.json

8. What this type of question models

The three problems formalise three ways of questioning a network in which activity circulates: which groups of neurons form a dense zone, in what order activity advances and what comes back, which units repeat identically. They are graph questions, posed at the real scale of a published connectome; they are also those of the study of propagation for an embedded AI, where the same requirement applies: a result that recomputes identically and can be rechecked.

My AI project in the service of my research

This challenge is not an end in itself: it is a test bench for my research on a certifiable embedded AI. My AI project, whose inner workings remain confidential, lets me reach the top of the rankings of the three Codex challenges after they closed, with scores recomputed in exact arithmetic. The certificate and the referee vouch for it: it is not my explanation you need to believe, it is the result, which can be checked again. This is the best known result at the date given, not a proven optimum.

All the results, with their sources and dates

→ See the challenges on FlyWire Codex