Metadata-Version: 2.4
Name: sonion
Version: 0.2.1
Summary: A massive Python library to creatively check every mathematical property of numbers, son... 😭💔
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown

# 😭💔 sonion

Welcome to **sonion**, the most over-engineered, mathematically profound, and utterly depressing number-checking library ever conceived in Python. 

Have you ever looked at a number and thought: *"Sure, it's even, but does it have any aura? Is it a Spy Number? Is it over 9000? Is it spooky?"* 

Well, my friend, **sonion** is exactly what you didn't know you needed. 

It is designed to demonstrate the power of Python's **execution contexts, "magic" dunder methods, and operator overloading**, all while throwing TikTok brainrot-level sarcastic errors at you if you do something stupid.

## 📦 Installation

```bash
pip install sonion
```

Once installed, you can type `sonion` directly into your terminal to see the interactive quick-start guide!

```bash
$ sonion
```

## 🚀 Usage

The module is imported simply as `son`:

```python
import son
```

### 🧠 The "Magic" Behavior
The functions in this library **never** actually return a primitive boolean (`True` or `False`). Instead, they return a custom object (`SonResult`) that reads your mind depending on where you use it.

It acts like a boolean for the cold logic of the computer, but screams sentences for the delicate eyes of the user!

#### 1. Logic Contexts (`__bool__`)
If you use it in an `if` statement, it acts like a ninja. It evaluates strictly as `True` or `False` silently.
```python
if son.isEven(4):          
    print("The computer knows it's even, but the module kept its mouth shut!")
```

#### 2. Display Contexts (`__repr__`)
If you type it into an interactive REPL or `print()` it, it suddenly becomes chatty:
```python
>>> son.isEven(2)
yes 2 is an even number, son... 😭💔
```

#### 3. Doing Math with Sentences (`__add__`, `__sub__`, etc)
Because `True` acts as `1` and `False` acts as `0` in Python, we overloaded the math operators. You can literally add sentences together!
```python
>>> son.isEven(2) + son.isEven(4)
2

>>> son.isEven(2) + 10
11
```

#### 4. The Sarcastic Error Handler (`__getattr__`)
If you try to call a function that doesn't exist, it intercepts your typo and insults you:
```python
>>> son.isFloatingPoint(3.14)
AttributeError: SonMathError: Whoa there Einstein. 'isFloatingPoint' is way above my paygrade. I just do basic integer properties, son... 😭💔

>>> son.isCap(1)
AttributeError: SonBrainrotError: You're watching too many movies. 'isCap' isn't a real function, son... 😭💔
```

#### 5. Parameter Validation (Ghosting and Greed)
The functions strictly demand exactly **one number**.
```python
>>> son.isHappy()
TypeError: SonGhostError: Bro passed absolutely nothing to isHappy(). Who are you talking to, son... 😭💔

>>> son.isEven(2, 4)
TypeError: SonGreedyError: isEven() only takes ONE number! Why are you doing so much, son... 😭💔

>>> son.isHappy("yes")
TypeError: SonNegativeAuraError: You passed a str ('yes') to isHappy(). I only evaluate numbers, son... 😭💔
```

#### 6. Global Brainrot Infection (`sys.excepthook`)
The absolute most devastating feature: just by `import son`, the library infects your global Python error handler! 
If you make *any* standard Python error anywhere in your script, it will add a tragic brainrot message to the crash:

```python
>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
SonZeroDivisionError: Bro tried to divide by zero... reality is collapsing, son... 😭💔

>>> eval("if True print('syntax')")
Traceback (most recent call last):
  ...
SyntaxError: invalid syntax
SonSyntaxError: You can't even type Python properly... negative aura, son... 😭💔

>>> print(unknown_variable)
Traceback (most recent call last):
  ...
NameError: name 'unknown_variable' is not defined
SonNameError: Bro forgot to define 'unknown_variable'... memory loss, son... 😭💔
```

---

## 🧮 The Arsenal of Checks

We support everything from basic middle-school math to college-level number theory, trigonometry, and pure internet brainrot. 

### Basic Math
```python
>>> son.isEven(2)
yes 2 is an even number, son... 😭💔

>>> son.isPrime(7)
yes 7 is a prime number, son... 😭💔

>>> son.isPositive(-5)
no -5 is not a positive number, son... 😭💔
```

### Advanced Nerd Math
```python
>>> son.isFibonacci(8)
yes 8 is a Fibonacci number, son... 😭💔

>>> son.isArmstrong(153)
yes 153 is an Armstrong number, son... 😭💔

>>> son.isHappy(19)
yes 19 is a happy number, son... 😭💔

>>> son.isPronic(12)
yes 12 is a pronic number, son... 😭💔

>>> son.isFascinating(192)
yes 192 is a fascinating number, son... 😭💔
```
*(Also supports: `isSquare`, `isCube`, `isPerfect`, `isPowerOfTwo`, `isHarshad`, `isAbundant`, `isDeficient`, `isPalindrome`, `isTriangular`, `isAutomorphic`, `isNeon`, `isSpy`)*

### Constants & Trigonometry
```python
>>> son.isPi(3.14159)
yes 3.14159 is Pi (π), son... 😭💔

>>> son.isGoldenRatio(1.61803)
yes 1.61803 is the Golden Ratio (φ), son... 😭💔

>>> son.isRightAngle(90)
yes 90 is a right angle in degrees, son... 😭💔
```

### Internet Brainrot
```python
>>> son.isBeast(666)
yes 666 is the number of the beast, son... 😭💔 🤘

>>> son.isLeet(1337)
yes 1337 is absolutely l33t, son... 😭💔

>>> son.isOver9000(9001)
IT'S OVER 9000, SON... 😭💔 (yes, 9001 is > 9000)

>>> son.isWeed(420)
420 blaze it, son... 😭💔 🌿💨

>>> son.isSpooky(13)
woah 13 is super spooky, son... 😭💔 👻

>>> son.isError404(404)
Error 404: Number not found, son... 😭💔

>>> son.isMeaningOfLife(42)
yes 42 is the meaning of life, the universe, and everything, son... 😭💔

>>> son.isSkibidi(69)
skibidi toilet rizz! 69 is pure sigma, son... 😭💔
```
