Skip to content

Commit 1ba8722

Browse files
committed
Name Change
1 parent efe7a4d commit 1ba8722

File tree

5 files changed

+24
-24
lines changed

5 files changed

+24
-24
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
# FunKit 🧮
1+
# MathFlow 🧮
22
**A Pythonic Interface for Symbolic and Numerical Mathematics**
33

4-
FunKit bridges the gap between symbolic mathematics (SymPy) and numerical computations (NumPy/SciPy), offering a unified interface that maintains mathematical rigor while providing practical tools for real-world problems.
4+
MathFlow bridges the gap between symbolic mathematics (SymPy) and numerical computations (NumPy/SciPy), offering a unified interface that maintains mathematical rigor while providing practical tools for real-world problems.
55

66
![Static Badge](https://img.shields.io/badge/Python-3.11%2B-blue?logo=python)
77
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
88

99
**Ready to revolutionize your mathematical computing workflow?**
1010
```bash
11-
pip install funkit
11+
pip install mathflow
1212
```
1313

1414
**Have Questions? Take a look at the Q&A:**
@@ -23,14 +23,14 @@ pip install funkit
2323
- **📡 Signal System**: Qt-like signals for tracking expression mutations and clones, enabling reactive programming
2424
- **🔄 Automatic Type Conversions**: Seamlessly and automatically converts between internal Poly and Expr representations based on context
2525
- **📦 Lightweight**: ~0.5 MB itself, ~100 MB including dependencies
26-
- **🧩 Fully backward compatible**: Seamlessly integrate SymPy and FunKit in the same script. All methods that work on SymPy Expr or Poly objects work on FunKit objects
26+
- **🧩 Fully backward compatible**: Seamlessly integrate SymPy and MathFlow in the same script. All methods that work on SymPy Expr or Poly objects work on MathFlow objects
2727
- **🔍 Exploratory**: Full IDE support, enabling easy tool finding and minimizing the learning curve.
2828

2929

3030
## 🚀 Quick Start
3131

3232
```python
33-
from funkit import Expression, Polynomial, Rational
33+
from mathflow import Expression, Polynomial, Rational
3434

3535
# Create expressions naturally
3636
f = Expression("2x^2 + 3x + \frac{1}{2}") # latex is automatically parsed
@@ -60,7 +60,7 @@ print(f.print.ccode()) # c code output
6060

6161
## 🎯 Numerical Computing
6262

63-
FunKit excels at bridging symbolic and numerical mathematics:
63+
MathFlow excels at bridging symbolic and numerical mathematics:
6464
```python
6565
f = Expression("x^3 - 2x^2 + x - 1")
6666

@@ -269,7 +269,7 @@ Step 9. `h` may be substituted for the original (x-c), and then expanded. `c` is
269269

270270
## 🏗️ Design Philosophy
271271

272-
FunKit follows several key principles:
272+
MathFlow follows several key principles:
273273

274274
1. **Intuitive API**: Mathematical operations should feel natural in Python, providing an "exploratory" experience
275275
2. **Performance**: Automatic optimizations (Horner's method, efficient algorithms, automatic numerical computing when needed)

docs/QA.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# FunKit Q&A: Addressing Potential Concerns
1+
# MathFlow Q&A: Addressing Potential Concerns
22

33
### Performance & Overhead
44

55
**Q: Doesn't adding an abstraction layer introduce significant performance overhead compared to using SymPy/NumPy directly?**
66
**A:** The overhead is minimal - just one or two `getattr()` calls, which are negligible compared to the actual mathematical computations. Python's attribute lookup is highly optimized, and mathematical operations like integration, differentiation, or root-finding completely dominate any method dispatch overhead.
7-
In fact, FunKit often provides performance _improvements_ through cached lambdified expressions (eliminating repeated compilation) and automatic algorithm selection (like Horner's method for polynomial evaluation).
7+
In fact, MathFlow often provides performance _improvements_ through cached lambdified expressions (eliminating repeated compilation) and automatic algorithm selection (like Horner's method for polynomial evaluation).
88

9-
**Q: How does FunKit's performance compare to direct SymPy usage in practice?**
9+
**Q: How does MathFlow's performance compare to direct SymPy usage in practice?**
1010
**A:** For typical mathematical workflows, performance is equivalent or better. The `.n` attribute provides direct access to optimized numerical routines without manual lambdification overhead. Any microsecond differences in method dispatch are irrelevant when you're computing integrals or solving equations.
1111

1212
**Q: How does automatic type conversion between Poly and Expr work? Could this cause unexpected behavior?**
@@ -15,21 +15,21 @@ In fact, FunKit often provides performance _improvements_ through cached lambdif
1515
### Practical Usage
1616

1717
**Q: How stable is the API?**
18-
**A:** The core API is designed for stability, following established patterns from libraries like `requests`. The mathematical operations and core classes are unlikely to change significantly. Also, because FunKit has been designed using metaprogramming techniques, any changes to SymPy will naturally present themselves in FunKit.
18+
**A:** The core API is designed for stability, following established patterns from libraries like `requests`. The mathematical operations and core classes are unlikely to change significantly. Also, because MathFlow has been designed using metaprogramming techniques, any changes to SymPy will naturally present themselves in MathFlow.
1919

2020
**Q: What about debugging and error messages?**
21-
**A:** Since FunKit is built on SymPy, you get the same detailed error messages and debugging capabilities. The abstraction layer preserves the underlying mathematical error handling.
21+
**A:** Since MathFlow is built on SymPy, you get the same detailed error messages and debugging capabilities. The abstraction layer preserves the underlying mathematical error handling.
2222

2323
### Ecosystem & Adoption
2424

2525
**Q: Why not just use SymPy directly? What's the compelling advantage?**
26-
**A:** FunKit eliminates the friction of switching between symbolic and numerical computing. With SymPy, you constantly write boilerplate code for lambdification, handle type conversions, and manage separate workflows. FunKit provides a unified interface where every symbolic expression has numerical methods available via the `.n` attribute. It also adds additional convenience utilities such as the `.n.all_roots()`, `.n.all_poly_roots()`, `.nsolve_all()`, and more.
26+
**A:** MathFlow eliminates the friction of switching between symbolic and numerical computing. With SymPy, you constantly write boilerplate code for lambdification, handle type conversions, and manage separate workflows. MathFlow provides a unified interface where every symbolic expression has numerical methods available via the `.n` attribute. It also adds additional convenience utilities such as the `.n.all_roots()`, `.n.all_poly_roots()`, `.nsolve_all()`, and more.
2727

2828
**Q: Is this just another "wrapper library" that adds complexity?**
29-
**A:** No - FunKit is fully backward compatible with SymPy. You can seamlessly mix FunKit and SymPy objects in the same script. It's purpose is to add a better and more pythonic interface to existing functionality rather than replacing it. **It is intended to be used alongside SymPy**.
29+
**A:** No - MathFlow is fully backward compatible with SymPy. You can seamlessly mix MathFlow and SymPy objects in the same script. It's purpose is to add a better and more pythonic interface to existing functionality rather than replacing it. **It is intended to be used alongside SymPy**.
3030

3131
**Q: How does this compare to existing solutions like SymEngine or SageMath?**
32-
**A:** SymEngine focuses on computational speed for symbolic operations. FunKit focuses on workflow ergonomics and the symbolic-numerical interface. They solve different problems and could even be used together. FunKit has also been developed to be minimal and lightweight (~0.5 MB itself, and ~100 MB including dependencies) with a focus toward the analysis of functions and expressions, unlike SageMath (2 GB) or similar libraries which provide comprehensive mathematical tools.
32+
**A:** SymEngine focuses on computational speed for symbolic operations. MathFlow focuses on workflow ergonomics and the symbolic-numerical interface. They solve different problems and could even be used together. MathFlow has also been developed to be minimal and lightweight (~0.5 MB itself, and ~100 MB including dependencies) with a focus toward the analysis of functions and expressions, unlike SageMath (2 GB) or similar libraries which provide comprehensive mathematical tools.
3333

3434
### Design Philosophy
3535

@@ -43,7 +43,7 @@ In fact, FunKit often provides performance _improvements_ through cached lambdif
4343
These aren't random features - they're solving real workflow problems.
4444

4545
**Q: Is there a learning curve for existing SymPy users?**
46-
**A:** Minimal. All existing SymPy knowledge transfers directly. FunKit adds convenience features without changing fundamental concepts. Most methods are directly inherited from SymPy's Expr and Poly classes. You can gradually adopt FunKit features while keeping existing SymPy workflows.
46+
**A:** Minimal. All existing SymPy knowledge transfers directly. MathFlow adds convenience features without changing fundamental concepts. Most methods are directly inherited from SymPy's Expr and Poly classes. You can gradually adopt MathFlow features while keeping existing SymPy workflows.
4747

4848

4949

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ requires = ["setuptools"]
33
build-backend = "setuptools.build_meta"
44

55
[project]
6-
name = "funkit"
6+
name = "mathflow"
77
version = "0.1.0"
88
description = "A Pythonic Interface for Symbolic and Numerical Mathematics"
9-
license = {text = "MIT"}
9+
license = 'MIT'
1010
authors = [{name = "Isaac Wolford", email = "[email protected]"}]
1111
requires-python = ">=3.11"
1212
dependencies = [

src/funkit/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
"""
2-
FunKit - A Pythonic Interface for Symbolic and Numerical Mathematics
2+
MathFlow - A Pythonic Interface for Symbolic and Numerical Mathematics
33
=====================================================================
44
5-
FunKit provides an object-oriented wrapper around SymPy with seamless integration of numerical
5+
MathFlow provides an object-oriented wrapper around SymPy with seamless integration of numerical
66
computations, making symbolic mathematics more intuitive and powerful for Python developers.
77
88
Overview
99
--------
10-
FunKit bridges the gap between symbolic mathematics (SymPy) and numerical computations (NumPy/SciPy),
10+
MathFlow bridges the gap between symbolic mathematics (SymPy) and numerical computations (NumPy/SciPy),
1111
offering a unified interface that maintains mathematical rigor while providing practical tools for
1212
real-world problems. It extends SymPy's capabilities with features like operative closure, mutability
1313
control, and automatic type conversions between different mathematical representations.
@@ -55,7 +55,7 @@
5555
5656
Design Philosophy
5757
-----------------
58-
FunKit follows several key principles:
58+
MathFlow follows several key principles:
5959
6060
1. **Intuitive API**: Mathematical operations should feel natural in Python while maintaining
6161
mathematical correctness.

src/funkit/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def __repr__(self) -> str:
239239
return self.expr.__repr__()
240240

241241

242-
def _handle_args_with_funkit_objects(args, kwargs) -> tuple[list, dict]:
242+
def _handle_args_with_mathflow_objects(args, kwargs) -> tuple[list, dict]:
243243
out_args = [arg.expr if isinstance(arg, BaseExpression) else arg for arg in args]
244244
for k, v in kwargs.items():
245245
if isinstance(v, BaseExpression):
@@ -250,7 +250,7 @@ def _handle_args_with_funkit_objects(args, kwargs) -> tuple[list, dict]:
250250
def _delegate_dunder_method(name: str) -> Callable:
251251
"""This is a function that helps delegate dunder methods to BaseExpression.expr object."""
252252
def dunder_method(self: BaseExpression, *args, **kwargs) -> Any:
253-
args, kwargs = _handle_args_with_funkit_objects(args, kwargs) # this enables operation between types BaseExpression and BaseExpression.
253+
args, kwargs = _handle_args_with_mathflow_objects(args, kwargs) # this enables operation between types BaseExpression and BaseExpression.
254254
result: Any = getattr(self.expr, name)(*args, **kwargs)
255255
if self.operative_closure and isinstance(result, SympyExpr):
256256
return self._clone_self(new_expr=result)

0 commit comments

Comments
 (0)