"""
UnitConverter
Generated by Eden via recursive self-improvement
2025-10-28 00:46:17.308504
"""

class UnitConverter:
    def __init__(self):
        pass

    def convert(self, category, from_unit, to_unit, value):
        if category == 'temperature':
            return self._convert_temperature(from_unit, to_unit, value)
        elif category == 'length':
            return self._convert_length(from_unit, to_unit, value)
        elif category == 'weight':
            return self._convert_weight(from_unit, to_unit, value)
        else:
            raise ValueError("Invalid measurement category")

    def _convert_temperature(self, from_unit, to_unit, value):
        base = self._to_base_temp(from_unit, value)
        return self._from_base_temp(to_unit, base)

    @staticmethod
    def _to_base_temp(unit, value):
        if unit == 'celsius':
            return value + 273.15
        elif unit == 'fahrenheit':
            return (value + 459.67) * (5/9)
        else:
            raise ValueError("Invalid temperature unit")

    @staticmethod
    def _from_base_temp(unit, base_value):
        if unit == 'celsius':
            return base_value - 273.15
        elif unit == 'fahrenheit':
            return (base_value * (9/5)) - 459.67
        else:
            raise ValueError("Invalid temperature unit")

    def _convert_length(self, from_unit, to_unit, value):
        base = self._to_base_length(from_unit, value)
        return self._from_base_length(to_unit, base)

    @staticmethod
    def _to_base_length(unit, value):
        base_units = {
            'meters': 1,
            'centimeters': 0.01,
            'kilometers': 1000,
            'inches': 0.0254,
            'feet': 0.3048,
            'miles': 1609.34
        }
        return value * base_units[unit]

    @staticmethod
    def _from_base_length(unit, base_value):
        base_units = {
            'meters': 1,
            'centimeters': 100,
            'kilometers': 0.001,
            'inches': 1 / 0.0254,
            'feet': 1 / 0.3048,
            'miles': 1 / 1609.34
        }
        return base_value * base_units[unit]

    def _convert_weight(self, from_unit, to_unit, value):
        base = self._to_base_weight(from_unit, value)
        return self._from_base_weight(to_unit, base)

    @staticmethod
    def _to_base_weight(unit, value):
        base_units = {
            'kilograms': 1,
            'grams': 0.001,
            'milligrams': 0.000001,
            'pounds': 0.453592,
            'ounces': 0.0283495
        }
        return value * base_units[unit]

    @staticmethod
    def _from_base_weight(unit, base_value):
        base_units = {
            'kilograms': 1,
            'grams': 1000,
            'milligrams': 1000000,
            'pounds': 1 / 0.453592,
            'ounces': 1 / 0.0283495
        }
        return base_value * base_units[unit]


def example_usage():
    uc = UnitConverter()
    print("Example Conversions:")
    # Temperature Conversion
    print(f"100°C to Fahrenheit: {uc.convert('temperature', 'celsius', 'fahrenheit', 100)}")
    # Length Conversion
    print(f"5 kilometers to miles: {uc.convert('length', 'kilometers', 'miles', 5)}")
    # Weight Conversion
    print(f"2 pounds to kilograms: {uc.convert('weight', 'pounds', 'kilograms', 2)}")


if __name__ == "__main__":
    example_usage()