Contributing#
We welcome contributions to Ex-Fuzzy! This guide will help you get started with contributing code, documentation, or examples.
Ways to Contribute#
There are many ways to contribute to Ex-Fuzzy:
Found a bug? Help us fix it by reporting detailed information.
Have an idea for a new feature? We’d love to hear about it!
Help make our documentation clearer and more comprehensive.
Fix bugs, implement features, or optimize performance.
Getting Started#
Development Setup#
Fork the repository on GitHub
Clone your fork locally:
git clone https://github.com/fuminides/ex-fuzzy.git cd ex-fuzzy
Create a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
Install in development mode:
pip install -e ".[dev,test,docs]"
Install pre-commit hooks:
pre-commit install
Code Style and Standards#
We follow established Python coding standards:
PEP 8 for code style
Type hints for all public functions
Comprehensive docstrings in NumPy format
Unit tests for all new functionality
Code Formatting#
We use automated tools to maintain code quality:
# Format code with black
black ex_fuzzy/
# Sort imports with isort
isort ex_fuzzy/
# Lint with flake8
flake8 ex_fuzzy/
# Type checking with mypy
mypy ex_fuzzy/
Testing#
Run the test suite before submitting changes:
# Run all tests
pytest
# Run with coverage
pytest --cov=ex_fuzzy --cov-report=html
# Run specific test file
pytest tests/test_fuzzy_sets.py
Contribution Workflow#
Create a new branch for your feature:
git checkout -b feature/your-feature-name
Make your changes following our coding standards
Add tests for any new functionality
Update documentation if needed
Run the test suite to ensure everything works
Commit your changes with a clear message:
git commit -m "Add feature: brief description of what you added"
Push to your fork:
git push origin feature/your-feature-name
Create a Pull Request on GitHub
Pull Request Guidelines#
When submitting a pull request:
- Title and Description
Use a clear, descriptive title
Explain what your changes do and why
Reference any related issues
- Code Quality
Ensure all tests pass
Follow our coding standards
Include appropriate documentation
- Review Process
Be responsive to feedback
Make requested changes promptly
Update your branch if needed
Reporting Bugs#
Before reporting a bug:
Check existing issues to avoid duplicates
Update to the latest version to see if it’s already fixed
Create a minimal example that reproduces the bug
When reporting, include:
Ex-Fuzzy version
Python version and operating system
Complete error traceback
Minimal code example
Expected vs actual behavior
Use our bug report template:
**Bug Description**
A clear description of what the bug is.
**To Reproduce**
```python
# Minimal code example
```
**Expected Behavior**
What you expected to happen.
**Environment**
- Ex-Fuzzy version:
- Python version:
- Operating System:
**Additional Context**
Any other context about the problem.
Suggesting Features#
We welcome feature suggestions! Before suggesting:
Check existing issues and discussions
Consider the scope - does it fit Ex-Fuzzy’s goals?
Think about implementation - is it feasible?
When suggesting a feature:
Describe the use case clearly
Explain why it would be valuable
Provide examples if possible
Consider backward compatibility
Documentation Contributions#
Documentation is crucial for user adoption. You can help by:
- Improving Existing Docs
Fix typos and grammar
Clarify confusing sections
Add missing information
Update outdated content
- Adding New Content
Write tutorials and guides
Create examples and case studies
Document best practices
Add API documentation
Building Documentation
To build the documentation locally:
cd docs/
make html
# Open docs/_build/html/index.html
Code Contributions#
Areas where we especially welcome contributions:
- Bug Fixes
Fix reported issues
Improve error handling
Address edge cases
- Performance Improvements
Optimize algorithms
Reduce memory usage
Parallelize computations
- New Features
Additional fuzzy set types
New optimization algorithms
Enhanced visualizations
Integration with other libraries
- Testing
Increase test coverage
Add integration tests
Improve test performance
Code Review Process#
All submissions go through code review:
Automated checks run first (tests, linting, type checking)
Manual review by maintainers
Discussion and feedback
Approval and merge
What reviewers look for:
Code correctness and efficiency
Test coverage and quality
Documentation completeness
Backward compatibility
Code style compliance
Release Process#
Ex-Fuzzy follows semantic versioning:
Major (X.0.0): Breaking changes
Minor (X.Y.0): New features, backward compatible
Patch (X.Y.Z): Bug fixes, backward compatible
Release schedule:
Minor releases: Every 3-4 months
Patch releases: As needed for critical bugs
Major releases: Annually or when significant changes accumulate
Recognition#
Contributors are recognized in several ways:
CONTRIBUTORS.md file listing all contributors
Release notes mentioning significant contributions
GitHub releases crediting contributors
Social media acknowledgments for major contributions
Community Guidelines#
We are committed to providing a welcoming environment:
- Be Respectful
Treat everyone with respect
Welcome newcomers
Be patient with questions
- Be Constructive
Provide helpful feedback
Focus on the code, not the person
Suggest improvements
- Be Collaborative
Work together toward common goals
Share knowledge and resources
Help others learn and grow
Getting Help#
If you need help contributing:
GitHub Discussions: Ask questions and get help
Discord/Slack: Real-time chat with contributors
Documentation: Read our detailed guides
Mentorship: We can pair new contributors with experienced ones
Thank You!#
Thank you for considering contributing to Ex-Fuzzy! Every contribution, no matter how small, helps make the library better for everyone.
Ready to contribute? Check out our good first issues to get started!