examples/module-loading/03_host_module_example.py
"""
Example host module demonstrating Catnip module loading.

Usage:
    catnip -f ./docs/examples/module-loading/host_module_example.py:host docs/examples/module-loading/01_demo.cat
"""


def add(a, b):
    """Add two numbers."""
    return a + b


def multiply(a, b):
    """Multiply two numbers."""
    return a * b


def power(base, exponent):
    """Calculate base raised to exponent."""
    return base**exponent


def greet(name, formal=False):
    """Greet someone."""
    if formal:
        return f"Good day, {name}."
    return f"Hey {name}!"


class Counter:
    """A simple counter class."""

    def __init__(self, start=0):
        self.value = start

    def increment(self):
        self.value += 1
        return self.value

    def decrement(self):
        self.value -= 1
        return self.value

    def reset(self):
        self.value = 0
        return self.value


def fibonacci_list(n):
    """Generate list of first n Fibonacci numbers."""
    if n <= 0:
        return []
    if n == 1:
        return [0]

    fib = [0, 1]
    for i in range(2, n):
        fib.append(fib[i - 1] + fib[i - 2])
    return fib


def format_data(data, separator=", "):
    """Format data as a string."""
    if isinstance(data, (list, tuple)):
        return separator.join(str(item) for item in data)
    return str(data)