Metadata-Version: 2.4
Name: fenn
Version: 0.1.5
Summary: Friendly Environment for Neural Networks – a simple framework that automates the boring side of ML.
Author-email: Alessio Russo <alessio.russo.ar98@gmail.com>
Project-URL: Homepage, https://pyfenn.org
Project-URL: Documentation, https://pyfenn.org
Project-URL: Source Code, https://github.com/blkdmr/fenn
Project-URL: Bug Tracker, https://github.com/blkdmr/fenn/issues
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML>=6.0.3
Requires-Dist: wandb>=0.23.0
Requires-Dist: numpy<2.3.0,>=2
Requires-Dist: pandas>=2.3.3
Requires-Dist: matplotlib>=3.10.7
Requires-Dist: scikit-learn>=1.7.2
Requires-Dist: colorama>=0.4.6
Requires-Dist: requests>=2.32.5
Requires-Dist: python-dotenv>=1.2.1
Requires-Dist: resend>=2.0.0
Requires-Dist: rich~=13.0.0
Provides-Extra: torch
Requires-Dist: torch>=2.9.1; extra == "torch"
Requires-Dist: torchvision>=0.24.1; extra == "torch"
Provides-Extra: vision
Requires-Dist: Pillow>=10.0.0; extra == "vision"
Requires-Dist: torch>=2.9.1; extra == "vision"
Requires-Dist: torchvision>=0.24.1; extra == "vision"
Provides-Extra: transformers
Requires-Dist: peft~=0.18.0; extra == "transformers"
Requires-Dist: transformers~=4.57.3; extra == "transformers"
Provides-Extra: test
Requires-Dist: pytest>=8.0.0; extra == "test"
Requires-Dist: pytest-cov>=7.0.0; extra == "test"
Requires-Dist: requests-mock>=1.11.0; extra == "test"
Requires-Dist: Faker>=25.0.0; extra == "test"
Provides-Extra: extra
Requires-Dist: loguru~=0.7.3; extra == "extra"
Provides-Extra: dev
Requires-Dist: ruff>=0.15.5; extra == "dev"
Dynamic: license-file

# Fenn: Friendly Environment for Neural Networks

<p align="center"><img src="banner.png" alt="fenn logo" width="1000"></p>

<div align="center">

![GitHub stars](https://img.shields.io/github/stars/blkdmr/fenn?style=social) ![GitHub forks](https://img.shields.io/github/forks/blkdmr/fenn?style=social) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/261c40f69583462baa200aee959bcc8f)](https://app.codacy.com/gh/blkdmr/fenn/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/pyfenn/fenn/graph/badge.svg?token=7RTTZ1SFMM)](https://codecov.io/gh/pyfenn/fenn)
![PyPI version](https://img.shields.io/pypi/v/fenn) ![License](https://img.shields.io/github/license/blkdmr/fenn) [![PyPI Downloads](https://img.shields.io/pypi/dm/fenn.svg?label=downloads&logo=pypi&color=blue)](https://pypi.org/project/fenn/) [![Discord Server](https://img.shields.io/badge/Discord-PyFenn-5865F2?logo=discord&logoColor=white)](https://discord.gg/WxDkvktBAa)

</div>

**Stop writing boilerplate. Start training.**

Friendly Environment for Neural Networks (fenn) is a simple framework that automates ML/DL workflows by providing prebuilt trainers, templates, logging, configuration management, and much more. With fenn, you can focus on your model and data while it takes care of the rest.

<p align="center"><img src="fenn.gif" alt="fenn preview" width="1000"></p>


## Why fenn?

- **Auto-Configuration**: YAML files are automatically parsed and injected into your entrypoint with CLI override support. No more hardcoded hyperparameters or scattered config logic.

- **Unified Logging**: All logs, print statements, and experiment metadata are automatically captured to local files and remote tracking backends simultaneously with no manual setup required.

- **Backend Monitoring**: Native integration with industry-standard trackers like [Weights & Biases](https://wandb.ai/) (W&B) for centralized experiment tracking and [TensorBoard](https://www.tensorflow.org/tensorboard) for real-time metric visualization

- **Instant Notifications**: Get real-time alerts on **Discord** and **Telegram** when experiments start, complete, or fail—no polling or manual checks.

- **Trainers**: Built-in support for training loops, validation, and testing with minimal boilerplate. Just define your model and data, and let fenn handle the rest.

- **Template Ready**: Built-in support for reproducible, shareable experiment templates.

## Installation

```bash
pip install fenn
````

## Quickstart

### Initialize a Project

Run the CLI tool to see which repositories are available and to download a template together with its configuration file. First, list the available repositories:

```bash
fenn list
````

Then, download one of the available templates (here `empty` is just an example):

```bash
fenn pull empty
```

This command downloads the selected template into the current directory and generates the corresponding configuration file, which can be customized before running or extending the project.

### Configuration

fenn relies on a simple YAML structure to define hyperparameters, paths, logging options, and integrations. You can configure the ``fenn.yaml`` file with the hyperparameters and options for your project.

The structure of the ``fenn.yaml`` file is:

```yaml
# ---------------------------------------
# Fenn Configuration (Modify Carefully)
# ---------------------------------------

project: empty

# ---------------------------
# Logging & Tracking
# ---------------------------

logger:
  dir: logger

# ---------------------------------------
# Example of User Section
# ---------------------------------------

train:
    lr: 0.001
```

### Write Your Code

Use the `@app.entrypoint` decorator. Your configuration variables are automatically passed via `args`.

```python
from fenn import Fenn

app = Fenn()

@app.entrypoint
def main(args):
    # 'args' contains your fenn.yaml configurations
    print(f"Training with learning rate: {args['train']['lr']}")

    # Your logic here...

if __name__ == "__main__":
    app.run()
```

By default, fenn will look for a configuration file named `fenn.yaml` in the current directory. If you would like to use a different name, a different location, or have multiple configuration files for different configurations, you can call `set_config_file()` and update the path or the name of your configuration file. You must assign the filename before calling `run()`.

```python
app = Fenn()
app.set_config_file("my_file.yaml")
...
app.run()
```

### Run It

```bash
python main.py
```

## Contributing

Contributions are welcome!

If you’re interested in helping, please feel free to join our [discord server](https://discord.gg/WxDkvktBAa) or the dedicated
[discussion page](https://github.com/blkdmr/fenn/discussions/11) and ping there your availability.

We can then discuss a possible contribution together, answer any questions, and help you get started!

**Please, before opening a pull request, consult our CONTRIBUTING.md**

Thank you for your support!
