# Neural Networks with CasADi
**csnn** is a package for creating symbolic neural networks in [CasADi](https://web.casadi.org) in a [PyTorch](https://pytorch.org/)-like API style.
[](https://badge.fury.io/py/csnn)
[](https://github.com/FilippoAiraldi/casadi-nlp/blob/release/LICENSE)

[](https://github.com/FilippoAiraldi/casadi-neural-nets/actions/workflows/ci.yml)
[](https://pepy.tech/project/csnn)
[](https://codeclimate.com/github/FilippoAiraldi/casadi-neural-nets/maintainability)
[](https://codeclimate.com/github/FilippoAiraldi/casadi-neural-nets/test_coverage)
[](https://github.com/psf/black)
---
## Introduction
The package allows the creation of neural networks with the symbolic language offered by [CasADi](https://web.casadi.org). This is done in a similar way to [PyTorch](https://pytorch.org/). For example, the following code allows us to create an MLP with a hidden layer:
```python
import casadi as cs
from csnn import set_sym_type, Linear, Sequential, ReLU
set_sym_type("SX") # can set either MX or SX
net = Sequential[cs.SX]((
Linear(4, 32),
ReLU(),
Linear(32, 1),
ReLU()
))
batch = 2
input = cs.SX.sym("in", batch, 4)
output = net(input)
assert output.shape == (batch, 1)
```
---
## Installation
To install the package, run
```bash
pip install csnn
```
**csnn** has the following dependencies
- [NumPy](https://numpy.org/)
- [CasADi](https://web.casadi.org)
For playing around with the source code instead, run
```bash
git clone https://github.com/FilippoAiraldi/casadi-neural-nets.git
```
---
## License
The repository is provided under the MIT License. See the LICENSE file included with this repository.
---
## Author
[Filippo Airaldi](https://www.tudelft.nl/staff/f.airaldi/), PhD Candidate [f.airaldi@tudelft.nl | filippoairaldi@gmail.com]
> [Delft Center for Systems and Control](https://www.tudelft.nl/en/3me/about/departments/delft-center-for-systems-and-control/) in [Delft University of Technology](https://www.tudelft.nl/en/)