Directed graph neural networks with partial directed coherence for seizure prediction and epileptogenic network characterization.
The 13 matches
- [1] § STAR★Methods › Method details › DiGCN architecture › Personalised PageRank and stationary distribution ↔ models/digcn.py, lines 6–148 · score 0.96 · approximate stationary distribution, unique left eigenvector, Perron vector, construction guarantees, teleport probability, channel node
- [2] § STAR★Methods › Method details › DiGCN architecture › Personalised PageRank and stationary distribution ↔ models/digcn.py, lines 6–148 · score 0.91 · auxiliary teleport node, channel nodes transitions, stationary distribution, teleport probability, transition matrix, augmented
- [3] § STAR★Methods › Method details › GNNExplainer and HITS analysis › Hub–authority analysis on the explanation subgraph ↔ explainer/gnn_explainer.py, lines 162–200 · score 0.90 · Hyperlink Induced Topic, L2 normalised, authority score, hub score, explanation adjacency matrix, iteratively
- [4] § STAR★Methods › Method details › DiGCN architecture › Multi-scale inception block and network architecture ↔ models/digcn.py, lines 287–325 · score 0.84 · Inception block, node embedding, linear classifier, concatenation, node features, stacked
- [5] § STAR★Methods › Method details › GNNExplainer and HITS analysis › Edge mask optimisation ↔ explainer/gnn_explainer.py, lines 38–123 · score 0.78 · sigmoid mask, edge mask, node feature matrix, original weighted, PDC weights, adjacency matrix
- [6] § STAR★Methods › Method details › DiGCN architecture › Model training configuration ↔ experiments/run_experiment.py, lines 117–221 · score 0.78 · cross entropy loss, weight decay, DiGCN, Adam, batch, dropout
- [7] § STAR★Methods › Method details › DiGCN architecture › Model training configuration ↔ training/train.py, lines 146–229 · score 0.76 · cross entropy loss, weight decay, Adam, batch, training, dropout
- [8] § STAR★Methods › Method details › GNNExplainer and HITS analysis › Edge importance extraction ↔ explainer/gnn_explainer.py, lines 125–160 · score 0.70 · zero entries, explanation adjacency matrix, original PDC graph, threshold, mask, scores
- [9] § STAR★Methods › Method details › DiGCN architecture ↔ models/digcn.py, lines 196–247 · score 0.68 · multi scale Inception, weighted matrix, fuses, Digraph, block, Convolutional
- [10] § STAR★Methods › Method details › GNNExplainer and HITS analysis › Objective function ↔ explainer/gnn_explainer.py, lines 38–123 · score 0.68 · gradient descent, entropy regularisation, Adam, loss, mask, edge
- [11] § STAR★Methods › Method details › DiGCN architecture › Graph representation and transition matrix ↔ models/digcn.py, lines 151–193 · score 0.62 · row normalised, transition matrix, weighted PDC, identity
- [12] § Results › Component and configuration ablation analyses ↔ models/digcn.py, lines 196–247 · score 0.60 · Inception block, symmetric normalized, digraph, module, convolution, proximity
- [13] § STAR★Methods › Method details › GNNExplainer and HITS analysis ↔ explainer/run_explainer.py, lines 90–135 · score 0.51 · GNNExplainer, DiGCN, architecture, HITS, window, electrode
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 325 lines · 11 KB · no license · 6 matches
- import torch
- import torch.nn as nn
- import torch.nn.functional as F
- class DiGraphConv(nn.Module):
- """
- First-order directed graph convolution layer based on Personalized PageRank.
- Accepts raw weighted PDC adjacency matrices directly.
- Internally builds a row-stochastic transition matrix from the weighted adj,
- then symmetrizes forward and backward propagation operators scaled by the
- stationary distribution (paper Section 3.2).
- Input adj: raw PDC weight matrix [n_nodes, n_nodes], values in [0, 1].
- No binarization or external normalization required.
- """
- def __init__(self, in_features, out_features, alpha=0.15):
- super(DiGraphConv, self).__init__()
- self.in_features = in_features
- self.out_features = out_features
- self.alpha = alpha # PageRank teleport probability
- self.weight = nn.Parameter(torch.FloatTensor(in_features, out_features))
- nn.init.xavier_uniform_(self.weight)
- def _build_transition_matrix(self, adj):
- """
- Build row-stochastic transition matrix P from raw weighted PDC adj.
- Self-loops are added to ensure irreducibility.
- """
- n = adj.size(0)
- device = adj.device
- adj_sl = adj + torch.eye(n, device=device) # add self-loops
- deg = adj_sl.sum(dim=1)
- deg_inv = torch.where(deg > 0, 1.0 / deg, torch.zeros_like(deg))
- P = torch.diag(deg_inv) @ adj_sl # row-stochastic
- return P
- def _build_augmented_transition_matrix(self, P):
- """
- Construct the (n+1) x (n+1) augmented transition matrix P_ppr
- per paper Eq. 6, introducing auxiliary teleport node xi.
- Each of the n channel nodes transitions to xi with probability alpha,
- and xi returns uniformly to all channel nodes with probability 1/n.
- P_ppr = | (1-alpha)*P alpha*1_{n x 1} |
- | (1/n)*1_{1 x n} 0 |
- This construction guarantees P_ppr is irreducible and aperiodic,
- ensuring a unique left Perron eigenvector (stationary distribution).
- Args:
- P: row-stochastic transition matrix [n, n]
- Returns:
- P_ppr: augmented transition matrix [n+1, n+1]
- """
- n = P.size(0)
- device = P.device
- # top-left block: (1 - alpha) * P [n, n]
- top_left = (1.0 - self.alpha) * P
- # top-right block: alpha * ones column [n, 1]
- top_right = torch.full((n, 1), self.alpha, device=device)
- # bottom-left block: (1/n) * ones row [1, n]
- bottom_left = torch.full((1, n), 1.0 / n, device=device)
- # bottom-right block: 0 (teleport node has no self-loop)
- bottom_right = torch.zeros(1, 1, device=device)
- # assemble P_ppr [n+1, n+1]
- top_row = torch.cat([top_left, top_right], dim=1) # [n, n+1]
- bottom_row = torch.cat([bottom_left, bottom_right], dim=1) # [1, n+1]
- P_ppr = torch.cat([top_row, bottom_row], dim=0) # [n+1, n+1]
- return P_ppr
- def _pagerank_power_iteration(self, P, max_iter=500, tol=1e-9):
- """
- Compute the Personalized PageRank stationary distribution via power
- iteration on the explicit (n+1) x (n+1) augmented matrix P_ppr
- (paper Eq. 6).
- Iteration: pi^(t+1) = pi^(t) @ P_ppr
- The first n components of the converged left eigenvector (Perron vector)
- are extracted and L1-normalised to yield pi_appr (paper Eq. 6).
- Args:
- P: row-stochastic transition matrix [n, n]
- max_iter: maximum iterations
- tol: L1 convergence tolerance
- Returns:
- pi: stationary distribution over the n channel nodes [n], sums to 1
- """
- n = P.size(0)
- device = P.device
- # construct (n+1) x (n+1) augmented transition matrix (paper Eq. 6)
- P_ppr = self._build_augmented_transition_matrix(P)
- # initialize uniform distribution over all n+1 nodes (including xi)
- pi = torch.full((n + 1,), 1.0 / (n + 1), device=device)
- for _ in range(max_iter):
- pi_new = pi @ P_ppr
- if torch.abs(pi_new - pi).sum() < tol:
- pi = pi_new
- break
- pi = pi_new
- # extract first n components (channel nodes only, excluding xi)
- pi_channel = pi[:n]
- # L1-normalisation per paper: "first n components of this eigenvector,
- # after l1-normalisation, yield the approximate stationary distribution"
- pi_channel = pi_channel / (pi_channel.sum() + 1e-10)
- return pi_channel
- def forward(self, x, adj):
- """
- Args:
- x: node feature matrix [n_nodes, in_features]
- adj: raw weighted PDC adjacency matrix [n_nodes, n_nodes]
- Returns:
- support: transformed node features [n_nodes, out_features]
- """
- P = self._build_transition_matrix(adj)
- pi = self._pagerank_power_iteration(P)
- pi_sqrt = torch.sqrt(pi + 1e-10)
- pi_inv_sqrt = 1.0 / pi_sqrt
- # symmetrized forward + backward propagation (paper Eq. 5-6)
- propagate_forward = torch.diag(pi_sqrt) @ P @ torch.diag(pi_inv_sqrt)
- propagate_backward = torch.diag(pi_inv_sqrt) @ P.t() @ torch.diag(pi_sqrt)
- support = 0.5 * (propagate_forward + propagate_backward) @ x @ self.weight
- return support
- class KthOrderProximity(nn.Module):
- """
- Compute k-th order proximity matrices from raw weighted PDC adj.
- k=0: identity
- k=1: row-normalized transition matrix P
- k>=2: intersection of meeting-path and diffusion-path matrices (paper Eq. 8)
- Input adj: raw PDC weight matrix, no preprocessing needed.
- """
- def __init__(self, k_max):
- super(KthOrderProximity, self).__init__()
- self.k_max = k_max
- def forward(self, adj):
- device = adj.device
- n = adj.size(0)
- # build row-stochastic P from raw weighted adj
- adj_sl = adj + torch.eye(n, device=device)
- deg = adj_sl.sum(dim=1)
- deg_inv = torch.where(deg > 0, 1.0 / deg, torch.zeros_like(deg))
- P = torch.diag(deg_inv) @ adj_sl
- proximity = {0: torch.eye(n, device=device), 1: P}
- for k in range(2, self.k_max + 1):
- P_km1 = torch.linalg.matrix_power(P, k - 1)
- PT_km1 = torch.linalg.matrix_power(P.t(), k - 1)
- meeting = P_km1 @ PT_km1 # paths that meet at node i from j
- diffusion = PT_km1 @ P_km1 # diffusion paths
- # intersection: only retain positions where both paths are active
- intersection = torch.where(
- (meeting > 0) & (diffusion > 0),
- (meeting + diffusion) / 2.0,
- torch.zeros_like(meeting)
- )
- proximity[k] = intersection
- return proximity
- class InceptionBlock(nn.Module):
- """
- Multi-scale Inception block aggregating 0th, 1st, and k-th order proximities.
- Fuses zero-order (skip), first-order (DiGraphConv), and higher-order
- (k=2..k_max) proximity signals via summation (paper Eq. 9).
- Input adj: raw PDC weight matrix, passed through to DiGraphConv and
- KthOrderProximity without any external normalization.
- """
- def __init__(self, in_features, out_features, k_max, alpha=0.15):
- super(InceptionBlock, self).__init__()
- self.k_max = k_max
- # k=0: skip connection (identity path)
- self.skip_connection = nn.Linear(in_features, out_features)
- # k=1: first-order directed convolution
- self.digraph_conv = DiGraphConv(in_features, out_features, alpha=alpha)
- # k=2..k_max: higher-order proximity projections
- self.kth_convs = nn.ModuleList(
- [nn.Linear(in_features, out_features) for _ in range(2, k_max + 1)]
- )
- self.proximity_builder = KthOrderProximity(k_max)
- def forward(self, x, adj):
- Z_0 = self.skip_connection(x) # zero-order
- Z_1 = self.digraph_conv(x, adj) # first-order
- proximity = self.proximity_builder(adj)
- Z_list = [Z_0, Z_1]
- for k in range(2, self.k_max + 1):
- P_k = proximity[k]
- # symmetric normalization of k-th proximity matrix
- deg_k = P_k.sum(dim=1)
- deg_k_inv_sqrt = torch.where(
- deg_k > 0,
- 1.0 / torch.sqrt(deg_k + 1e-10),
- torch.zeros_like(deg_k)
- )
- P_k_norm = torch.diag(deg_k_inv_sqrt) @ P_k @ torch.diag(deg_k_inv_sqrt)
- theta_k = self.kth_convs[k - 2]
- Z_k = P_k_norm @ x @ theta_k.weight.t() + theta_k.bias
- Z_list.append(Z_k)
- return sum(Z_list)
- class DiGCN(nn.Module):
- """
- Stacked DiGCN with n_layers Inception blocks.
- Accepts raw weighted PDC adjacency matrices. All normalization and
- transition matrix construction happens internally per forward pass.
- """
- def __init__(self, n_feat, n_hid, n_out, n_layers=3, k_max=2, alpha=0.15, dropout=0.5):
- super(DiGCN, self).__init__()
- self.n_layers = n_layers
- self.dropout = dropout
- dims = [n_feat] + [n_hid] * (n_layers - 1) + [n_out]
- self.inception_blocks = nn.ModuleList([
- InceptionBlock(dims[i], dims[i + 1], k_max, alpha)
- for i in range(n_layers)
- ])
- def forward(self, x, adj):
- """
- Args:
- x: node feature matrix [n_nodes, n_feat]
- adj: raw weighted PDC adjacency matrix [n_nodes, n_nodes]
- values in [0, 1], no binarization applied
- Returns:
- node embeddings [n_nodes, n_out]
- """
- for i, block in enumerate(self.inception_blocks):
- x = block(x, adj)
- if i < self.n_layers - 1:
- x = F.relu(x)
- x = F.dropout(x, self.dropout, training=self.training)
- return x
- class DiGCNClassifier(nn.Module):
- """
- Graph-level classifier built on DiGCN backbone.
- Pools node embeddings via mean + max concatenation, then applies a
- linear classification head.
- Args:
- n_feat: input node feature dimension (10 for EEG PDC dataset)
- n_hid: hidden embedding dimension
- n_class: number of output classes (2: interictal / preictal)
- n_layers: number of stacked Inception blocks
- k_max: maximum proximity order (paper: k=1,2)
- alpha: PageRank teleport probability (paper: α=0.15)
- dropout: dropout rate applied between blocks
- """
- def __init__(self, n_feat, n_hid, n_class, n_layers=3, k_max=2, alpha=0.15, dropout=0.5):
- super(DiGCNClassifier, self).__init__()
- self.digcn = DiGCN(n_feat, n_hid, n_hid, n_layers, k_max, alpha, dropout)
- self.classifier = nn.Linear(n_hid * 2, n_class)
- def forward(self, x, adj):
- """
- Args:
- x: node feature matrix [n_nodes, n_feat]
- adj: raw weighted PDC adjacency matrix [n_nodes, n_nodes]
- Returns:
- logits [n_class]
- """
- node_emb = self.digcn(x, adj)
- # graph-level pooling: mean + max concatenation
- mean_pool = torch.mean(node_emb, dim=0)
- max_pool, _ = torch.max(node_emb, dim=0)
- graph_emb = torch.cat([mean_pool, max_pool], dim=0)
- return self.classifier(graph_emb)
digcn.py at commit f9af255, no license · at the source
Overview
- Department of Neurosurgery, The First Affiliated Hospital of Nanchang University, Nanchang, China
- Huankui College, Nanchang University, Nanchang, China
- Department of Neurosurgery, The Second Affiliated Hospital of Nanchang University, Nanchang, China
Abstract
While electroencephalography (EEG) analyses using undirected connectivity are well-established for seizure prediction and epileptogenic zone (EZ) network characterization, the complementary value of directed connectivity in graph neural networks (GNNs) remains unclear. We integrated partial directed coherence (PDC) graphs into a Digraph Inception Convolutional Network (DiGCN) to preserve directional edge information for seizure prediction, achieving accuracies of 96.11 ± 0.76%, 96.32 ± 0.70%, and 97.69 ± 0.67% on CHB-MIT, Siena, and the institutional cohort, respectively. In the institutional cohort, preictal modularity and small-world index were both significantly elevated (p < 0.001), reflecting increased modular segregation and topological reorganization. PDC in-degree was significantly elevated at EZ-concordant electrodes across five epilepsy subtypes (p < 0.05), whereas out-degree changes were not statistically significant. GNNExplainer identified compact, prediction-relevant subgraphs preserving these directed connectivity patterns. PDC-DiGCN provides an interpretable sensor-level framework for seizure prediction and EZ-concordant network characterization, though requiring larger prospective validation.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 13 matches between paragraphs and lines of code.
chenshuozhao/PDC-DiGCN-Seizure-Prediction
f9af2554c7bc02db9f6457f2ab40ac61c591fb42, 25 February 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
14 files
- experiments/
run_experiment.py , Python, 225 lines, 1 match - explainer/
__init__.py , Python, 7 lines - explainer/
gnn_explainer.py , Python, 237 lines, 4 matches - explainer/
metrics.py , Python, 136 lines - explainer/
run_explainer.py , Python, 280 lines, 1 match - main.py, Python, 83 lines
- models/
digcn.py , Python, 325 lines, 6 matches - run_explainability_analy
sis.py , Python, 31 lines - training/
evaluate.py , Python, 119 lines - training/
train.py , Python, 251 lines, 1 match - utils/
config.py , Python, 35 lines - utils/
dataset.py , Python, 67 lines - utils/
logger.py , Python, 55 lines - utils/
metrics.py , Python, 50 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 14 scripts, each with its path and the digest of its content;
- 13 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- doi:10.13026/
5d4a-j060 , at the source; found in the text, “Siena Scalp EEG database” - doi:10.13026/
c2k01r , at the source; found in the text, “CHB-MIT scalp EEG database” - physionet.org/
content/ , at PhysioNet; found in “Data and code availability”chbmit - physionet.org/
content/ , at PhysioNet; found in “Data and code availability”siena-scalp-eeg
Data and code availability
• This paper analyzes existing, publicly available datasets. The CHB-MIT Scalp EEG Database is available at PhysioNet (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 5 keywords, 3 funders, 80 references, 2 RRIDs.
Cite
This paper
Zhao, C., Huang, H., Fang, C., Zhang, H., & Zheng, S. (2026). Directed graph neural networks with partial directed coherence for seizure prediction and epileptogenic network characterization. iScience, 29(8), 117068. https://
BibTeX
@article{zhao2026directe
author = {Zhao, Chenshuo and Huang, Hui and Fang, Chao and Zhang, Hong and Zheng, Suyue},
title = {{Directed graph neural networks with partial directed coherence for seizure prediction and epileptogenic network characterization}},
journal = {iScience},
year = {2026},
month = aug,
volume = {29},
number = {8},
pages = {117068},
publisher = {Elsevier},
issn = {2589-0042},
doi = {10.1016/
url = {https://
pmid = {42621081},
pmcid = {PMC13486768}
}
RIS
TY - JOUR
AU - Zhao, Chenshuo
AU - Huang, Hui
AU - Fang, Chao
AU - Zhang, Hong
AU - Zheng, Suyue
TI - Directed graph neural networks with partial directed coherence for seizure prediction and epileptogenic network characterization
T2 - iScience
J2 - iScience
PY - 2026
DA - 2026/
VL - 29
IS - 8
SP - 117068
SN - 2589-0042
PB - Elsevier
DO - 10.1016/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1016/
"type": "article-journal",
"title": "Directed graph neural networks with partial directed coherence for seizure prediction and epileptogenic network characterization",
"container-title": "iScience",
"author": [
{
"family": "Zhao",
"given": "Chenshuo"
},
{
"family": "Huang",
"given": "Hui"
},
{
"family": "Fang",
"given": "Chao"
},
{
"family": "Zhang",
"given": "Hong"
},
{
"family": "Zheng",
"given": "Suyue"
}
],
"container-title-short":
"volume": "29",
"issue": "8",
"page": "117068",
"DOI": "10.1016/
"PMID": "42621081",
"PMCID": "PMC13486768",
"ISSN": "2589-0042",
"publisher": "Elsevier",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
8,
10
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.3389/fnins.2026.1856135
- Enhancing seizure prediction using a DC-SA-EBiLSTM framework with self-attention mechanism.Journal: Frontiers in neuroscienceIn common: DOI 10.13026/c2k01r, physionet.org/content/chbmit, epilepsy, 3 references
- [2] doi:10.1007/s40120-026-00924-0
- Artificial Intelligence and Machine Learning in Pediatric Epilepsy: A Systematic Review.Journal: Neurology and therapyIn common: DOI 10.13026/c2k01r, physionet.org/content/chbmit, epilepsy, 3 references
- [3] doi:10.1371/journal.pone.0345470
- Physics-informed graph neural networks for robust cross-patient epileptic seizure prediction via chimera state detection.Journal: PloS oneIn common: physionet.org/content/siena-scalp-eeg, physionet.org/content/chbmit, epilepsy, 2 references
- [4] doi:10.1371/journal.pone.0352191 [code]
- Bayesian Uncertainty-aware Deep Learning with noisy labels: Tackling annotation ambiguity in EEG seizure detection.Journal: PloS oneIn common: PyTorch, scikit-learn, NumPy, physionet.org/content/siena-scalp-eeg, physionet.org/content/chbmit, epilepsy
- [5] doi:10.3390/e28060599
- Large-Scale Synchronization Dynamics During Epileptic Seizures: A Patient-Independent EEG Network Analysis.Journal: Entropy (Basel, Switzerland)In common: DOI 10.13026/c2k01r, physionet.org/content/chbmit, epilepsy, 1 reference
- [6] doi:10.3390/s26175623
- MF-TopoNet: A Multi-Frequency Topological Neural Network for Epileptic Seizure Prediction.Journal: Sensors (Basel, Switzerland)In common: physionet.org/content/siena-scalp-eeg, physionet.org/content/chbmit, epilepsy
- [7] doi:10.1016/j.mex.2026.103929 [code]
- MCLF: Montage consistent CNN-Liquid fusion for long-term scalp EEG seizure detection.Journal: MethodsXIn common: PyTorch, scikit-learn, NumPy, physionet.org/content/chbmit, epilepsy
- [8] doi:10.1186/s40708-026-00300-6 [code]
- Anatomical-connectivity-
guided functional connectivity reveals task-relevant pathways during proactive task-switching via recurrent graph neural networks. Journal: Brain informaticsIn common: NumPy, 4 references - [9] doi:10.1088/1741-2552/ae5fd7 [code]
- Metric validation for detection of delayed and directed coupling.Journal: Journal of neural engineeringIn common: h5py, scikit-learn, NumPy, 3 references
- [10] doi:10.1038/s41598-026-47627-y [code]
- QuantumNeuroXAI: a quantum-inspired deep learning framework with explainability for brain signal analysis and neurological disorder detection.Journal: Scientific reportsIn common: PyTorch, scikit-learn, NumPy, physionet.org/content/chbmit
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 14 scripts, and 13 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:774d2f7311435e95…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
