Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -30,13 +30,7 @@ request_history = deque(maxlen=1000)
|
|
30 |
SYMPY_GUIDELINES = """
|
31 |
When writing SymPy code to verify solutions:
|
32 |
|
33 |
-
1.
|
34 |
-
- Start with: from sympy import *
|
35 |
-
- DO NOT use NumPy, SciPy, or other libraries
|
36 |
-
- For numerical integration, use integrate() instead of scipy.integrate.quad()
|
37 |
-
- For any numerical computations, use native SymPy functions only
|
38 |
-
|
39 |
-
2. Variable Declaration and Functions:
|
40 |
- Always define symbolic variables first, for example:
|
41 |
```python
|
42 |
x, y, z = symbols('x y z') # For multiple variables
|
@@ -45,7 +39,7 @@ When writing SymPy code to verify solutions:
|
|
45 |
- Use Abs() for absolute value (not abs())
|
46 |
- Define functions using Function() class when needed
|
47 |
|
48 |
-
|
49 |
- Never use strings in solve() or other SymPy functions:
|
50 |
CORRECT: solve(eq, x)
|
51 |
INCORRECT: solve(eq, 'x')
|
@@ -53,7 +47,7 @@ When writing SymPy code to verify solutions:
|
|
53 |
CORRECT: eq = 2*sqrt(h) - sqrt(12) + 5*k
|
54 |
INCORRECT: eq = 2*sqrt('h') - sqrt(12) + 5*k
|
55 |
|
56 |
-
|
57 |
- Include print statements for ALL calculations and results
|
58 |
- Print intermediate steps and final answers
|
59 |
- Print variable values after they are computed
|
@@ -64,7 +58,7 @@ When writing SymPy code to verify solutions:
|
|
64 |
print(expression)
|
65 |
```
|
66 |
|
67 |
-
|
68 |
- Use Float() for decimal numbers in calculations
|
69 |
- Use float() for final printing of results
|
70 |
- Avoid evalf() as it may cause errors
|
@@ -75,10 +69,10 @@ When writing SymPy code to verify solutions:
|
|
75 |
print(float(result))
|
76 |
```
|
77 |
|
78 |
-
|
79 |
- Use Float() for sequence terms
|
80 |
- Convert sums to float() before printing
|
81 |
-
- For series calculations, print intermediate terms
|
82 |
"""
|
83 |
|
84 |
|
@@ -491,54 +485,37 @@ def extract_and_run_sympy_code_simple(response_text):
|
|
491 |
|
492 |
sympy_code = response_text[code_start:code_end].strip()
|
493 |
|
494 |
-
#
|
495 |
-
|
496 |
-
def run_sympy_verification():
|
497 |
-
# Import SymPy
|
498 |
-
from sympy import *
|
499 |
-
|
500 |
-
# Define standard helper functions
|
501 |
-
def safe_print_expr(label, expr):
|
502 |
-
print(label)
|
503 |
-
if expr is not None:
|
504 |
-
try:
|
505 |
-
float_val = float(expr)
|
506 |
-
print(float_val)
|
507 |
-
except:
|
508 |
-
print(expr)
|
509 |
-
|
510 |
-
# Start user code
|
511 |
-
"""
|
512 |
-
|
513 |
-
# Indent the original code
|
514 |
-
indented_code = '\n'.join(' ' + line for line in sympy_code.split('\n'))
|
515 |
|
516 |
-
#
|
517 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
|
519 |
-
#
|
520 |
import io
|
521 |
-
import sympy
|
522 |
from contextlib import redirect_stdout
|
523 |
|
524 |
-
# Create a dictionary of allowed names
|
525 |
-
globals_dict = {
|
526 |
-
"sympy": sympy,
|
527 |
-
"Symbol": sympy.Symbol,
|
528 |
-
"solve": sympy.solve,
|
529 |
-
"sqrt": sympy.sqrt,
|
530 |
-
"pi": sympy.pi,
|
531 |
-
"diff": sympy.diff,
|
532 |
-
"integrate": sympy.integrate,
|
533 |
-
"simplify": sympy.simplify,
|
534 |
-
"print": print,
|
535 |
-
"float": float
|
536 |
-
}
|
537 |
-
|
538 |
-
# Capture output
|
539 |
output_buffer = io.StringIO()
|
540 |
with redirect_stdout(output_buffer):
|
541 |
-
exec(
|
542 |
|
543 |
return output_buffer.getvalue().strip() or "No output produced"
|
544 |
|
|
|
30 |
SYMPY_GUIDELINES = """
|
31 |
When writing SymPy code to verify solutions:
|
32 |
|
33 |
+
1. Variable Declaration and Functions:
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
- Always define symbolic variables first, for example:
|
35 |
```python
|
36 |
x, y, z = symbols('x y z') # For multiple variables
|
|
|
39 |
- Use Abs() for absolute value (not abs())
|
40 |
- Define functions using Function() class when needed
|
41 |
|
42 |
+
2. Solving and Computing:
|
43 |
- Never use strings in solve() or other SymPy functions:
|
44 |
CORRECT: solve(eq, x)
|
45 |
INCORRECT: solve(eq, 'x')
|
|
|
47 |
CORRECT: eq = 2*sqrt(h) - sqrt(12) + 5*k
|
48 |
INCORRECT: eq = 2*sqrt('h') - sqrt(12) + 5*k
|
49 |
|
50 |
+
3. Printing and Output:
|
51 |
- Include print statements for ALL calculations and results
|
52 |
- Print intermediate steps and final answers
|
53 |
- Print variable values after they are computed
|
|
|
58 |
print(expression)
|
59 |
```
|
60 |
|
61 |
+
4. Numeric Calculations:
|
62 |
- Use Float() for decimal numbers in calculations
|
63 |
- Use float() for final printing of results
|
64 |
- Avoid evalf() as it may cause errors
|
|
|
69 |
print(float(result))
|
70 |
```
|
71 |
|
72 |
+
5. Working with Series and Sequences:
|
73 |
- Use Float() for sequence terms
|
74 |
- Convert sums to float() before printing
|
75 |
+
- For series calculations, print intermediate terms
|
76 |
"""
|
77 |
|
78 |
|
|
|
485 |
|
486 |
sympy_code = response_text[code_start:code_end].strip()
|
487 |
|
488 |
+
# Import SymPy at the module level
|
489 |
+
import sympy
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
490 |
|
491 |
+
# Create globals dict with all SymPy functions
|
492 |
+
globals_dict = {}
|
493 |
+
globals_dict.update(vars(sympy)) # This adds all SymPy functions
|
494 |
+
globals_dict.update({
|
495 |
+
'print': print,
|
496 |
+
'float': float,
|
497 |
+
'Symbol': sympy.Symbol,
|
498 |
+
'symbols': sympy.symbols,
|
499 |
+
'solve': sympy.solve,
|
500 |
+
'sqrt': sympy.sqrt,
|
501 |
+
'pi': sympy.pi,
|
502 |
+
'diff': sympy.diff,
|
503 |
+
'integrate': sympy.integrate,
|
504 |
+
'simplify': sympy.simplify,
|
505 |
+
})
|
506 |
+
|
507 |
+
# Remove the sympy import line from the code if present
|
508 |
+
lines = sympy_code.split('\n')
|
509 |
+
filtered_lines = [line for line in lines if not line.strip().startswith('from sympy import') and not line.strip().startswith('import sympy')]
|
510 |
+
modified_code = '\n'.join(filtered_lines)
|
511 |
|
512 |
+
# Capture output
|
513 |
import io
|
|
|
514 |
from contextlib import redirect_stdout
|
515 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
516 |
output_buffer = io.StringIO()
|
517 |
with redirect_stdout(output_buffer):
|
518 |
+
exec(modified_code, globals_dict)
|
519 |
|
520 |
return output_buffer.getvalue().strip() or "No output produced"
|
521 |
|