import numpy as np from fastapi import FastAPI, HTTPException from pydantic import BaseModel from dsiUnits import dsiUnit app = FastAPI() class UnitRequest(BaseModel): unit_string: str class UnitComparisonRequest(BaseModel): unit_string1: str unit_string2: str complete: bool = False @app.post("/convert/utf8/") async def convert_to_utf8(request: UnitRequest): try: unit=dsiUnit(request.unit_string) if unit.valid: return {unit.toUTF8()} else: raise HTTPException(status_code=500, detail=str(unit.warnings)) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/convert/latex/") async def convert_to_latex(request: UnitRequest): try: unit = dsiUnit(request.unit_string) # Assuming you have a function to convert unit strings to LaTeX if unit.valid: return {unit.toLatex()} else: raise HTTPException(status_code=500, detail=str(unit.warnings)) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/compare/units/") async def compare_units(request: UnitComparisonRequest): try: unit1 = dsiUnit(request.unit_string1) unit2 = dsiUnit(request.unit_string2) complete = request.complete if unit1.valid and unit2.valid: scale_factor, base_unit = unit1.isScalablyEqualTo(unit2, complete=complete) if not np.isnan(scale_factor): return {"scale_factor": scale_factor, "base_unit": str(base_unit)} else: return {"error": "Units are not scalably equal try complete conversion instead. "} else: warnings = unit1.warnings if not unit1.valid else unit2.warnings raise HTTPException(status_code=400, detail=str(warnings)) except Exception as e: raise HTTPException(status_code=500, detail=str(e))