# Code and Software

## AZ-whiteness test

The following example shows how to perform the test in python

```
from graph_sign_test import az_whiteness_test
# Compute residuals
y_true, edge_index = dataset(...)
model.load(...)
y_pred = model.predict(...)
residuals = y_true - y_pred
# N, T, F, E = 30, 100, 1, 70
# residuals = np.random.randn(T, N, F)
# edge_index = np.random.randint(N, size=(2, E))
# Perform the AZ-whiteness test
az_test = az_whiteness_test(x=residuals, edge_index=edge_index)
x = signal_gen_fun()
aztest = az_whiteness_test(
x=residuals,
edge_index_spatial=edge_index,
edge_weight_temporal="auto",
multivariate=True
) # -> AZWhitenessTestResult(statistic=0.251, pvalue=0.801)
```

## Graph Random Neural Features

A graph-level embedding method based on a family of graph neural networks. GRNF can be used within traditional processing methods or as a training-free input layer of a graph neural network. The repository provides a Spektral (TensorFlow) implementation:

```
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
from grnf.tf import GraphRandomNeuralFeatures
X_in = Input(shape=(N, F))
A_in = Input(shape=(N, N))
psi = GraphRandomNeuralFeatures(64, activation="relu")([X_in, A_in])
output = Dense(1)(psi)
model = Model(inputs=[X_in, A_in], outputs=output)
```

as well as a PyTorch Geometric one:

```
from grnf.torch import GraphRandomNeuralFeatures
grnf = GraphRandomNeuralFeatures(64)
z = grnf(data)
```

## CDG: Change Detection in a sequence of Graphs.

A collection of tools for performing change detection developed during my PhD.

In the package you will find following folders:

interface for datasets of graphs, distances and kernels.`cdg/graph`

several types of vector and manifold representations of graphs, such as, dissimilarity representation and manifold embeddings, like [zambon2018anomaly].`cdg/embedding`

tests for change detection, like [zambon2018concept, zambon2019change].`cdg/changedetection`

utilities for the module.`cdg/utils`

utilities for running repeated experiments.`cdg/simulation`

I have set up a tutorial notebook on the GitHub repository;
here a snippet of code to perform a change-detection test on a sequence `x`

:

```
from cdg.changedetection import GaussianCusum
cdt = GaussianCusum()
cdt.fit(x[:N_train])
y = cdt.predict(x[N_train:])
```