Metadata-Version: 2.1
Name: sparx-lib
Version: 1.0.0
Summary: Sparx Implementation
Home-page: https://github.com/SpArX-Group-10/SpArX
Author: Sparx Group
Author-email: 
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.10
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: absl-py (==1.2.0)
Requires-Dist: astroid (==2.12.11)
Requires-Dist: astunparse (==1.6.3)
Requires-Dist: bokeh (==2.4.3)
Requires-Dist: build (==0.9.0)
Requires-Dist: cachetools (==5.2.0)
Requires-Dist: certifi (==2022.9.24)
Requires-Dist: charset-normalizer (==2.1.1)
Requires-Dist: colorama (==0.4.5)
Requires-Dist: contourpy (==1.0.5)
Requires-Dist: cycler (==0.11.0)
Requires-Dist: dill (==0.3.5.1)
Requires-Dist: flatbuffers (==22.9.24)
Requires-Dist: fonttools (==4.37.4)
Requires-Dist: gast (==0.4.0)
Requires-Dist: google-auth (==2.12.0)
Requires-Dist: google-auth-oauthlib (==0.4.6)
Requires-Dist: google-pasta (==0.2.0)
Requires-Dist: graphviz (==0.20.1)
Requires-Dist: grpcio (==1.49.1)
Requires-Dist: h5py (==3.7.0)
Requires-Dist: html2image (==2.0.1)
Requires-Dist: idna (==3.4)
Requires-Dist: imageio (==2.22.1)
Requires-Dist: isort (==5.10.1)
Requires-Dist: joblib (==1.2.0)
Requires-Dist: keras (==2.10.0)
Requires-Dist: Keras-Preprocessing (==1.1.2)
Requires-Dist: kiwisolver (==1.4.4)
Requires-Dist: lazy-object-proxy (==1.7.1)
Requires-Dist: libclang (==14.0.6)
Requires-Dist: lime (==0.2.0.1)
Requires-Dist: Markdown (==3.4.1)
Requires-Dist: MarkupSafe (==2.1.1)
Requires-Dist: matplotlib (==3.6.1)
Requires-Dist: mccabe (==0.7.0)
Requires-Dist: networkx (==2.8.7)
Requires-Dist: numpy (==1.23.3)
Requires-Dist: oauthlib (==3.2.1)
Requires-Dist: opt-einsum (==3.3.0)
Requires-Dist: packaging (==21.3)
Requires-Dist: pandas (==1.5.0)
Requires-Dist: pep8 (==1.7.1)
Requires-Dist: Pillow (==9.2.0)
Requires-Dist: platformdirs (==2.5.2)
Requires-Dist: protobuf (==3.19.6)
Requires-Dist: pyasn1 (==0.4.8)
Requires-Dist: pyasn1-modules (==0.2.8)
Requires-Dist: pycodestyle (==2.9.1)
Requires-Dist: pydot (==1.4.2)
Requires-Dist: pyflakes (==2.5.0)
Requires-Dist: pylint (==2.15.4)
Requires-Dist: pyparsing (==3.0.9)
Requires-Dist: pytest (==7.1.3)
Requires-Dist: python-dateutil (==2.8.2)
Requires-Dist: pytz (==2022.4)
Requires-Dist: PyWavelets (==1.4.1)
Requires-Dist: requests (==2.28.1)
Requires-Dist: requests-oauthlib (==1.3.1)
Requires-Dist: rsa (==4.9)
Requires-Dist: scikit-image (==0.19.3)
Requires-Dist: scikit-learn (==1.1.2)
Requires-Dist: scipy (==1.9.2)
Requires-Dist: seaborn (==0.12.0)
Requires-Dist: setuptools (==57.4.0)
Requires-Dist: six (==1.16.0)
Requires-Dist: sklearn (==0.0)
Requires-Dist: tensorboard (==2.10.1)
Requires-Dist: tensorboard-data-server (==0.6.1)
Requires-Dist: tensorboard-plugin-wit (==1.8.1)
Requires-Dist: tensorflow (==2.10.0)
Requires-Dist: tensorflow-estimator (==2.10.0)
Requires-Dist: tensorflow-io-gcs-filesystem (==0.27.0)
Requires-Dist: termcolor (==2.0.1)
Requires-Dist: threadpoolctl (==3.1.0)
Requires-Dist: tifffile (==2022.8.12)
Requires-Dist: tomli (==2.0.1)
Requires-Dist: tomlkit (==0.11.5)
Requires-Dist: tqdm (==4.64.1)
Requires-Dist: twine (==4.0.2)
Requires-Dist: typing-extensions (==4.4.0)
Requires-Dist: urllib3 (==1.26.12)
Requires-Dist: Werkzeug (==2.2.2)
Requires-Dist: wrapt (==1.14.1)

# SpArX: Sparse Argumentative eXplanations for Neural Networks

![CI](https://github.com/SpArX-Group-10/SpArX/actions/workflows/pylint.yml/badge.svg)

## Packages:

The python version is 3.10.0.

# Getting started

1.  Clone repo from: [https://github.com/SpArX-Group-10/SpArX](https://github.com/SpArX-Group-10/SpArX)

    ```bash
    git clone https://github.com/SpArX-Group-10/SpArX
    ```

2.  Install requirements:

    ```bash
    pip install -r requirements.txt
    ```

# Example

```python
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

from sparx import FFNN, KMeansClusterer, LocalMerger, BokehVisualizer


# shrink to a decimal percentage
SHRINK_TO_PERCENTAGE = 0.5

shape = (4, 6, 6, 3)

model = Sequential([
    Dense(shape[1], activation='relu', input_shape=(shape[0],)),
    Dense(shape[2], activation='relu'),
    Dense(shape[3], activation='relu'),
])


weights = [layer.get_weights()[0] for layer in model.layers]
bias = [layer.get_weights()[1] for layer in model.layers]


model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])


activations = ["relu"] * 3
restored_model = FFNN(shape, weights, bias, activations)


# forward pass a [10 x 4] matrix, two data points with 4 features
np.random.seed(42)
dataset = np.random.rand(10, 4)
restored_model.forward_pass(dataset)


# cluster into 2 clusters
cluster_labels = KMeansClusterer.cluster(restored_model, SHRINK_TO_PERCENTAGE)

# merge clusters
merged_model = LocalMerger.merge(restored_model, cluster_labels)
restored_model.model.summary()
merged_model.model.summary()

# Bokeh Visualizer - to visualise neural networks locally
BokehVisualizer.visualise(merged_model)
```


