Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| # Conversion functions | |
| def convert_speed(value, from_unit, to_unit): | |
| conversions = { | |
| "kt": 1, | |
| "mph": 1.15078, | |
| "km/h": 1.852, | |
| "m/s": 0.514444, | |
| "Mach": 0.0015118, | |
| } | |
| return value * (conversions[to_unit] / conversions[from_unit]) | |
| def convert_distance(value, from_unit, to_unit): | |
| conversions = { | |
| "NM": 1, | |
| "miles": 1.15078, | |
| "km": 1.852, | |
| "ft": 6076.12, | |
| "m": 1852, | |
| } | |
| return value * (conversions[to_unit] / conversions[from_unit]) | |
| def convert_weight(value, from_unit, to_unit): | |
| conversions = { | |
| "lb": 1, | |
| "kg": 0.453592, | |
| "ton (metric)": 0.000453592, | |
| "ton (US)": 0.0005, | |
| } | |
| return value * (conversions[to_unit] / conversions[from_unit]) | |
| def convert_temperature(value, from_unit, to_unit): | |
| if from_unit == to_unit: | |
| return value | |
| if from_unit == "°C": | |
| return (value * 9/5 + 32) if to_unit == "°F" else value + 273.15 | |
| if from_unit == "°F": | |
| return (value - 32) * 5/9 if to_unit == "°C" else ((value - 32) * 5/9) + 273.15 | |
| if from_unit == "K": | |
| return value - 273.15 if to_unit == "°C" else ((value - 273.15) * 9/5) + 32 | |
| def convert_pressure(value, from_unit, to_unit): | |
| conversions = { | |
| "hPa": 1, | |
| "inHg": 0.029529983071445, | |
| "mmHg": 0.75006375541921, | |
| } | |
| return value * (conversions[to_unit] / conversions[from_unit]) | |
| def convert_fuel(value, from_unit, to_unit): | |
| conversions = { | |
| "gallons (US)": 1, | |
| "L": 3.78541, | |
| "kg": 0.8, | |
| "lb": 6.7, | |
| } | |
| return value * (conversions[to_unit] / conversions[from_unit]) | |
| def convert_heading(value, from_unit, to_unit): | |
| return value % 360 if to_unit == "degrees" else value # placeholder logic | |
| # Interface layout | |
| def build_interface(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## ✈️ Cobra: Aviation Unit Converter") | |
| category = gr.Radio( | |
| ["Speed / Velocity / Wind", "Distance / Altitude", "Weight / Mass", | |
| "Temperature", "Pressure", "Fuel", "Heading / Bearings / Navigation"], | |
| label="Select a Category" | |
| ) | |
| value = gr.Number(label="Enter Value") | |
| from_unit = gr.Dropdown(choices=[], label="Convert From") | |
| to_unit = gr.Dropdown(choices=[], label="Convert To") | |
| result = gr.Textbox(label="Converted Result") | |
| def update_units(cat): | |
| options = { | |
| "Speed / Velocity / Wind": ["kt", "mph", "km/h", "m/s", "Mach"], | |
| "Distance / Altitude": ["NM", "miles", "km", "ft", "m"], | |
| "Weight / Mass": ["lb", "kg", "ton (metric)", "ton (US)"], | |
| "Temperature": ["°C", "°F", "K"], | |
| "Pressure": ["hPa", "inHg", "mmHg"], | |
| "Fuel": ["gallons (US)", "L", "kg", "lb"], | |
| "Heading / Bearings / Navigation": ["degrees"], | |
| } | |
| unit_list = options.get(cat, []) | |
| return gr.update(choices=unit_list, value=None), gr.update(choices=unit_list, value=None) | |
| def convert_all(cat, val, from_u, to_u): | |
| if not all([cat, val, from_u, to_u]): | |
| return "Please fill in all fields." | |
| try: | |
| converters = { | |
| "Speed / Velocity / Wind": convert_speed, | |
| "Distance / Altitude": convert_distance, | |
| "Weight / Mass": convert_weight, | |
| "Temperature": convert_temperature, | |
| "Pressure": convert_pressure, | |
| "Fuel": convert_fuel, | |
| "Heading / Bearings / Navigation": convert_heading, | |
| } | |
| converter = converters.get(cat) | |
| result = converter(float(val), from_u, to_u) | |
| return round(result, 4) | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| category.change(update_units, inputs=category, outputs=[from_unit, to_unit]) | |
| gr.Button("Convert").click(convert_all, inputs=[category, value, from_unit, to_unit], outputs=result) | |
| return demo | |
| app = build_interface() | |
| app.launch() | |