Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Documentation Structure Proposal #172

Merged
merged 13 commits into from
Feb 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ pip-wheel-metadata
.pytest_cache/
catboost_info/
sysidentpy.code-workspace
examples/data/
raw.githubusercontent.com/
File renamed without changes.
2 changes: 1 addition & 1 deletion docs/book/0.1 - Contents.md → docs/book/0.1-Contents.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contents

[Preface](0%20-%20Preface.md)
[Preface](0-Preface.md)

1. Introduction
1. Models
Expand Down
File renamed without changes.
10 changes: 8 additions & 2 deletions docs/book/10 - Case Studies.md → docs/book/10-Case-Studies.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ from pandas.errors import SettingWithCopyWarning
import matplotlib.pyplot as plt

from sysidentpy.model_structure_selection import FROLS, AOLS
from sysidentpy.basis_function._basis_function import Polynomial
from sysidentpy.basis_function import Polynomial
from sysidentpy.parameter_estimation import LeastSquares
from sysidentpy.metrics import root_relative_squared_error, symmetric_mean_absolute_percentage_error
from sysidentpy.utils.plotting import plot_results
Expand Down Expand Up @@ -370,7 +370,7 @@ import nonlinear_benchmarks

train_val, test = nonlinear_benchmarks.CED(atleast_2d=True)
data_train_1, data_train_2 = train_val
data_test_1, data_test_2   = test
data_test_1, data_test_2 = test
```

We used the `nonlinear_benchmarks` package to load the data. The user is referred to the package documentation [GerbenBeintema - nonlinear_benchmarks: The official dataload for nonlinear benchmark datasets](https://github.com/GerbenBeintema/nonlinear_benchmarks/tree/master) to check the details of how to use it.
Expand Down Expand Up @@ -1716,6 +1716,12 @@ from sysidentpy.utils.plotting import plot_results
import nonlinear_benchmarks

train_val, test = nonlinear_benchmarks.Silverbox(atleast_2d=True)

x_train, y_train = train_val.u, train_val.y
test_multisine, test_arrow_full, test_arrow_no_extrapolation = test
x_test, y_test = test_multisine.u, test_multisine.y

n = test_multisine.state_initialization_window_length
```

We used the `nonlinear_benchmarks` package to load the data. The user is referred to the [package documentation - GerbenBeintema/nonlinear_benchmarks: The official dataload for http://www.nonlinearbenchmark.org/ (github.com)](https://github.com/GerbenBeintema/nonlinear_benchmarks/tree/master) to check the details of how to use it.
Expand Down
File renamed without changes.
19 changes: 19 additions & 0 deletions docs/community-support/community-overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
template: overrides/main.html
title: Contribute
---

<div class="feature-grid">
<div class="feature-card">
<a href="https://sysidentpy.org/community-support/get-help/" class="feature-link">
<h3>💬 Get Help</h3>
</a>
<p>Need assistance? Explore various options for getting help, including discussion forums, GitHub issues, and community support channels.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/community-support/meetups/ai-networks-meetup/" class="feature-link">
<h3>🤝 Meetups</h3>
</a>
<p>Connect with other SysIdentPy users through meetups, online events, and community discussions. Stay updated on upcoming gatherings and share your experience.</p>
</div>
</div>
File renamed without changes.
File renamed without changes.
124 changes: 124 additions & 0 deletions docs/developer-guide/documentation-overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# SysIdentPy Documentation Restructuring Proposal

This document outlines a reorganization of SysIdentPy’s documentation to improve discoverability, reduce friction for beginners, and align with modern documentation standards. The structure will follow four key categories: **Tutorials**, **How-Tos**, **Explanations**, and **Reference Guide**, with additional sections for contributors and real-world examples.

> Acknowledgments: This documentation restructuring draws inspiration from [NumPy’s NEP 44](https://numpy.org/neps/nep-0044-restructuring-numpy-docs.html#nep44), adapting its principles of clarity and logical organization to SysIdentPy’s domain-specific needs in system identification and time series forecasting, while emphasizing tutorials and reproducibility.

## Motivation and Scope

SysIdentPy’s current documentation (like many scientific Python packages) mixes conceptual explanations, code examples, and API references, which can overwhelm new users. By adopting a user-centric structure inspired by [Diátaxis](https://diataxis.fr/), we aim to:

- Separate learning paths for **beginners** (Tutorials) and **practitioners** (How-Tos).
- Improve material for conceptual understanding (Explanations).
- Maintain a clean, searchable **Reference Guide**.
- Highlight SysIdentPy’s features.

A well-organized documentation structure can significantly improve the experience of our community by providing specific resources for different user groups:

- For Beginners: A clear, guided pathway with tutorials and step-by-step instructions helps new users overcome the learning curve.

- For Researchers: Features such as custom basis functions and model configurations can be easily discovered and understood. With clearly defined sections, researchers can quickly locate the information they need to experiment with new methods.

- For Industry/Corporate Users: Benchmarking guides and model comparison examples are readily accessible, making it easier for industry and corporate professionals to evaluate and choose the right tools for their specific needs.

The goal is to structure the documentation to meet the specific needs of these diverse user groups, making the learning process faster and more efficient for everyone in the community.

## Proposed Structure

Here’s an overview of the main sections in the documentation, outlining the purpose and proposed content for each:

- Getting Started
- User Guide
- Developer Guide
- Community & Support
- About

### User Guide

The User Guide section is designed to provide a comprehensive understanding of SysIdentPy, covering essential concepts, practical examples, and advanced features. The proposed structure includes:


#### Tutorials

Audience: New users with minimal system identification experience.

Suggested Content:

<div class="grid cards" markdown>
- :material-book-open-variant: __Absolute Beginner’s Guide__
Start from scratch with easy-to-follow guides designed for those new to SysIdentPy and NARMAX models.
- :material-application-cog: __Domain-Specific Tutorials__
Examples and use cases for fields like engineering, healthcare, finance and so on.
</div>

Format: Jupyter Notebooks with narrative explanations and code.


#### How-Tos

Audience: Practitioners solving specific problems.

Suggested Content:

<div class="grid cards" markdown>
- :material-tune: __Model Optimization__
- :material-rocket-launch: __Advanced Customizations__
- :material-chart-box: __Error Analysis__
- :material-repeat: __Reproducibility__
</div>

Format: Short, task-focused markdown files with code snippets.

#### Explanations

Audience: Users seeking rigorous mathematical foundations.

<div class="grid cards" markdown>
- :material-book-open-page-variant: __Companion Book__
[Nonlinear System Identification and Forecasting: Theory and Practice with SysIdentPy](https://sysidentpy.org/book/0%20-%20Preface/). Offer theoretical context for SysIdentPy’s algorithms through a companion book.
</div>

#### Reference Guide

Audience: Advanced users needing API details.

<div class="grid cards" markdown>
- :material-code-tags: __API Reference__
Access the complete **SysIdentPy** source code with well-documented modules and methods.
</div>

Format: Auto-generated API docs with cross-linked "See Also" sections.

### Developer Guide

The Developer Guide section aims to provide clear information on the internal structure of SysIdentPy, focusing on implementation details, code examples, and options for customization. The proposed structure includes:

#### How To Contribute

Audience: Maintainers and open-source contributors.

<div class="grid cards" markdown>
- :material-account-plus: __Contributor Guide__
</div>

#### Documentation Guide

Audience: Maintainers and open-source contributors.


<div class="grid cards" markdown>
- :material-book-edit: __Writing a tutorial__
- :material-book-edit: __Creating a how-to guide__
- :material-book-edit: __Creating content for the book__
</div>

### Community & Support

Audience: Individuals of all experience levels, from beginners to experts, with an interest in Python and SysIdentPy.

<div class="grid cards" markdown>
- :material-lifebuoy: __Get Help__
- :material-video: __Workshops__
- :material-book-open-page-variant: __Reading Suggestions__
- :material-forum: __Community Discussions__
</div>
1 change: 1 addition & 0 deletions docs/developer-guide/how-to-write-a-how-to-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Coming soon
1 change: 1 addition & 0 deletions docs/developer-guide/how-to-write-a-tutorial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Coming soon
8 changes: 0 additions & 8 deletions docs/events/events.md

This file was deleted.

190 changes: 190 additions & 0 deletions docs/getting-started/getting-started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
---
template: overrides/main.html
title: Getting Started
---

# Getting Started

Welcome to SysIdentPy's documentation! Learn how to get started with SysIdentPy in your project. Then, explore SysIdentPy's main concepts and discover additional resources to help you model dynamic systems and time series.

<div class="custom-collapsible-card">
<input type="checkbox" id="toggle-info">
<label for="toggle-info">
📚 <strong>Looking for more details on NARMAX models?</strong>
<span class="arrow">▼</span>
</label>
<div class="collapsible-content">
<p>
For comprehensive information on models, methods, and a wide range of examples and benchmarks implemented in <strong>SysIdentPy</strong>, check out our book:
</p>
<a href="https://sysidentpy.org/book/0-Preface/" target="_blank">
<em><strong>Nonlinear System Identification and Forecasting: Theory and Practice With SysIdentPy</strong></em>
</a>
<p>
This book provides in-depth guidance to support your work with <strong>SysIdentPy</strong>.
</p>
<p>
🛠️ You can also explore the <a href="https://sysidentpy.org/user-guide/overview/" target="_blank"><strong>tutorials in the documentation</strong></a> for practical, hands-on examples.
</p>
</div>
</div>

## What is SysIdentPy

SysIdentPy is an open-source Python module for System Identification using **NARMAX** models built on top of **numpy** and is distributed under the 3-Clause BSD license. SysIdentPy provides an easy-to-use and flexible framework for building Dynamical Nonlinear Models for time series and dynamic systems.

With **SysIdentPy**, you can:

- Build and customize nonlinear forecasting models.
- Utilize state-of-the-art techniques for model structure selection and parameter estimation.
- Experiment with neural NARX models and other advanced algorithms.

## Installation

SysIdentPy is published as a [Python package] and can be installed with
`pip`, ideally by using a [virtual environment]. If not, scroll down and expand
the help box. Install with:

<div class="custom-card">
<div class="tab-container">
<!-- Latest Tab -->
<input type="radio" id="tab-latest" name="tab-group" checked>
<label for="tab-latest">Latest</label>
<div class="tab-content">
<pre><code>pip install sysidentpy</code></pre>
</div>

<!-- Neural NARX Support Tab -->
<input type="radio" id="tab-neural" name="tab-group">
<label for="tab-neural">Neural NARX Support</label>
<div class="tab-content">
<pre><code>pip install sysidentpy["all"]</code></pre>
</div>

<!-- Version x.y.z Tab -->
<input type="radio" id="tab-version" name="tab-group">
<label for="tab-version">Specific Version</label>
<div class="tab-content">
<pre><code>pip install sysidentpy=="0.5.3"</code></pre>
</div>

<!-- Nightly Builds -->
<input type="radio" id="tab-git" name="tab-group">
<label for="tab-git">From Git</label>
<div class="tab-content">
<pre><code>pip install git+https://github.com/wilsonrljr/sysidentpy.git</code></pre>
</div>
</div>
</div>

<div class="custom-collapsible-card">
<input type="checkbox" id="toggle-dependencies">
<label for="toggle-dependencies">
❓ <strong>How to manage my projects dependencies?</strong>
<span class="arrow">▼</span>
</label>
<div class="collapsible-content">
<p>
If you don't have prior experience with Python, we recommend reading
<a href="https://pip.pypa.io/en/stable/user_guide/" target="_blank">
Using Python's pip to Manage Your Projects' Dependencies
</a>, which is a really good introduction on the mechanics of Python package management and helps you troubleshoot if you run into errors.
</p>
</div>
</div>


[Python package]: https://pypi.org/project/sysidentpy/
[virtual environment]: https://realpython.com/what-is-pip/#using-pip-in-a-python-virtual-environment
[Using Python's pip to Manage Your Projects' Dependencies]: https://realpython.com/what-is-pip/


## What are the main features of SysIdentPy?

<div class="feature-grid">
<div class="feature-card">
<a href="https://sysidentpy.org/getting-started/quickstart-guide/#model-classes" class="feature-link">
<h3>🧩 NARMAX Philosophy</h3>
</a>
<p>Build variations like <strong>NARX</strong>, <strong>NAR</strong>, <strong>ARMA</strong>, <strong>NFIR</strong>, and more.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/getting-started/quickstart-guide/#model-structure-selection-algorithms" class="feature-link">
<h3>📝 Model Structure Selection</h3>
</a>
<p>Use methods like <strong>FROLS</strong>, <strong>MetaMSS</strong>, and combinations with parameter estimation techniques.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/user-guide/tutorials/basis-function-overview/" class="feature-link">
<h3>🔗 Basis Function</h3>
</a>
<p>Choose from <strong>8+ basis functions</strong>, combining linear and nonlinear types for custom NARMAX models.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/user-guide/tutorials/parameter-estimation-overview/" class="feature-link">
<h3>🎯 Parameter Estimation</h3>
</a>
<p>Over <strong>15 parameter estimation methods</strong> for exploring various structure selection scenarios.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/user-guide/tutorials/multiobjective-parameter-estimation-overview/" class="feature-link">
<h3>⚖️ Multiobjective Estimation</h3>
</a>
<p>Minimize different objective functions using <strong>affine information</strong> for parameter estimation.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/user-guide/how_to/simulating-existing-models/" class="feature-link">
<h3>🔄 Model Simulation</h3>
</a>
<p>Reproduce paper results easily with <strong>SimulateNARMAX</strong>. Test and compare published models effortlessly.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/user-guide/how_to/create-a-narx-neural-network/" class="feature-link">
<h3>🤖 Neural NARX (PyTorch)</h3>
</a>
<p>Integrate with <strong>PyTorch</strong> for custom neural NARX architectures using all PyTorch optimizers and loss functions.</p>
</div>
<div class="feature-card">
<a href="https://sysidentpy.org/user-guide/tutorials/general-NARX-models/" class="feature-link">
<h3>🛠️ General Estimators</h3>
</a>
<p>Compatible with <strong>scikit-learn</strong>, <strong>Catboost</strong>, and more for creating NARMAX models.</p>
</div>
</div>



## Additional resources

<ul class="custom-link-list">
<li>
<a href="https://sysidentpy.org/developer-guide/contribute/" target="_blank">🤝 Contribute to SysIdentPy</a>
</li>
<li>
<a href="https://sysidentpy.org/getting-started/license/" target="_blank">📜 License Information</a>
</li>
<li>
<a href="https://sysidentpy.org/community-support/get-help/" target="_blank">🆘 Get Help & Support</a>
</li>
<li>
<a href="https://sysidentpy.org/community-support/meetups/ai-networks-meetup/" target="_blank">📅 Meetups</a>
</li>
<li>
<a href="https://sysidentpy.org/landing-page/sponsor/" target="_blank">💖 Become a Sponsor</a>
</li>
<li>
<a href="https://sysidentpy.org/user-guide/API/narmax-base/" target="_blank">🧩 Explore NARMAX Base Code</a>
</li>
</ul>


## Do you like **SysIdentPy**?

Would you like to help SysIdentPy, other users, and the author? You can "star" SysIdentPy in GitHub by clicking in the star button at the top right of the page: <a href="https://github.com/wilsonrljr/sysidentpy" class="external-link" target="_blank">https://github.com/wilsonrljr/sysidentpy</a>. ⭐️

Starring a repository makes it easy to find it later and help you to find similar projects on GitHub based on Github recommendation contents. Besides, by starring a repository also shows appreciation to the SysIdentPy maintainer for their work.

[:octicons-star-fill-24:{ .mdx-heart } &nbsp; Join our <span class="mdx-sponsorship-count" data-mdx-component="sponsorship-count"></span> "Star" in github][wilsonrljr's sponsor profile]{ .md-button .md-button--primary .mdx-sponsorship-button }

[wilsonrljr's sponsor profile]: https://github.com/sponsors/wilsonrljr

File renamed without changes.
Loading