Metadata-Version: 2.4
Name: qukan
Version: 0.1.2
Summary: Official implementation for 'Quantum Kolmogorov Arnold Network' (QuKAN) implementated using PennyLane and PyTorch. Paper: Werner, Y., Malemath, A., Liu, M., Fortes Rey, V., Palaiodimopoulos, N., Lukowicz, P., & Kiefer-Emmanouilidis, M. (2025). QuKAN: A Quantum Circuit Born Machine Approach to Quantum Kolmogorov Arnold Networks. Scientific Reports, 15(1), 35239.
License-Expression: LGPL-3.0-only
License-File: LICENSE
Author: Yannick Werner
Author-email: yannick.werner@dfki.de
Requires-Python: >=3.10,<3.13
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: icecream (>=2.1.0)
Requires-Dist: matplotlib (>=3.9.0)
Requires-Dist: numpy (>=1.26.0)
Requires-Dist: pennylane (>=0.40.0)
Requires-Dist: torch (>=2.4.0)
Requires-Dist: tqdm (>=4.66.0)
Project-URL: Homepage, https://github.com/QuanTUK/QuKAN
Description-Content-Type: text/markdown

# QuKAN: Quantum Kolmogorov Arnold Network

QuKAN is a Python package for Quantum Kolmogorov Arnold Networks, built on top of [PennyLane](https://pennylane.ai/) and [PyTorch](https://pytorch.org/). It inlcudes hybrid and fully quantum neuron architecture implementations.

## Features
- Quantum Spline implementation
- Quantum KAN Neurons
- Scalable QuKAN architecture
- Support for QCBM-based spline pretraining

## Installation

```bash
# Using poetry
poetry install
```

## Usage

```python
import torch
import torch.nn as nn
from qukan import QuKAN

# 1. Initialize model
model = QuKAN(feature_dim=2, num_hlayers=1,strat='QCBM')

# 2. Setup training components
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
criterion = nn.MSELoss()

# 3. Dummy data
x = torch.rand(10, 2)
y = torch.rand(10, 1).to(torch.float64)

# 4. Training loop
for epoch in range(5):
    optimizer.zero_grad()
    output = model(x)
    loss = criterion(output, y)
    loss.backward()
    optimizer.step()
    print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")
```

## License
LGPL-3.0-only

