Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -346,33 +346,60 @@ def extract_and_run_sympy_code(response_text):
|
|
| 346 |
logger.debug(f"Code after removing imports:\n{sympy_code}")
|
| 347 |
|
| 348 |
# Create globals dict with all SymPy symbols
|
|
|
|
| 349 |
import sys
|
| 350 |
-
|
| 351 |
|
| 352 |
-
#
|
| 353 |
-
|
| 354 |
|
| 355 |
-
#
|
| 356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 357 |
|
| 358 |
# Create locals dict to store variables
|
| 359 |
local_vars = {}
|
| 360 |
|
| 361 |
-
# Execute the code
|
| 362 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 363 |
|
| 364 |
-
#
|
| 365 |
-
|
|
|
|
|
|
|
|
|
|
| 366 |
|
| 367 |
-
#
|
| 368 |
-
|
| 369 |
-
|
| 370 |
-
not hasattr(value, '__module__')):
|
| 371 |
-
output.append(f"{var_name} = {value}")
|
| 372 |
|
| 373 |
-
# Join all output lines with newlines
|
| 374 |
-
final_output = "\n".join(output)
|
| 375 |
-
logger.debug(f"Final output:\n{final_output}")
|
| 376 |
return final_output
|
| 377 |
|
| 378 |
except Exception as e:
|
|
|
|
| 346 |
logger.debug(f"Code after removing imports:\n{sympy_code}")
|
| 347 |
|
| 348 |
# Create globals dict with all SymPy symbols
|
| 349 |
+
import io
|
| 350 |
import sys
|
| 351 |
+
from contextlib import redirect_stdout
|
| 352 |
|
| 353 |
+
# Import SymPy first at the function level
|
| 354 |
+
import sympy
|
| 355 |
|
| 356 |
+
# Create output buffer
|
| 357 |
+
output_buffer = io.StringIO()
|
| 358 |
+
|
| 359 |
+
# Create globals dict with SymPy module
|
| 360 |
+
globals_dict = {
|
| 361 |
+
'__builtins__': __builtins__,
|
| 362 |
+
'symbols': sympy.symbols,
|
| 363 |
+
'diff': sympy.diff,
|
| 364 |
+
'solve': sympy.solve,
|
| 365 |
+
'integrate': sympy.integrate,
|
| 366 |
+
'oo': sympy.oo,
|
| 367 |
+
'Sum': sympy.Sum
|
| 368 |
+
}
|
| 369 |
+
|
| 370 |
+
logger.debug(f"Globals dictionary contains: {list(globals_dict.keys())}")
|
| 371 |
|
| 372 |
# Create locals dict to store variables
|
| 373 |
local_vars = {}
|
| 374 |
|
| 375 |
+
# Execute the code and capture its output
|
| 376 |
+
try:
|
| 377 |
+
with redirect_stdout(output_buffer):
|
| 378 |
+
exec(sympy_code, globals_dict, local_vars)
|
| 379 |
+
stdout_output = output_buffer.getvalue()
|
| 380 |
+
logger.debug(f"Code execution stdout: {stdout_output}")
|
| 381 |
+
except Exception as e:
|
| 382 |
+
logger.error(f"Error during code execution: {str(e)}")
|
| 383 |
+
return f"Error executing code: {str(e)}"
|
| 384 |
+
|
| 385 |
+
# Format the final output
|
| 386 |
+
output_lines = ["SymPy Calculation Results:", "-" * 25]
|
| 387 |
+
|
| 388 |
+
# Add stdout if there was any
|
| 389 |
+
if stdout_output.strip():
|
| 390 |
+
output_lines.append(f"Output:")
|
| 391 |
+
output_lines.append(stdout_output.strip())
|
| 392 |
|
| 393 |
+
# Add variables
|
| 394 |
+
output_lines.append("\nVariables:")
|
| 395 |
+
for name, value in local_vars.items():
|
| 396 |
+
if not name.startswith('__') and not hasattr(value, '__module__'):
|
| 397 |
+
output_lines.append(f"{name} = {value}")
|
| 398 |
|
| 399 |
+
# Join all lines
|
| 400 |
+
final_output = "\n".join(output_lines)
|
| 401 |
+
logger.debug(f"Final formatted output:\n{final_output}")
|
|
|
|
|
|
|
| 402 |
|
|
|
|
|
|
|
|
|
|
| 403 |
return final_output
|
| 404 |
|
| 405 |
except Exception as e:
|