| """Demo script to test Modal code execution integration. |
| |
| Run with: uv run python examples/modal_demo/test_code_execution.py |
| """ |
|
|
| import sys |
| from pathlib import Path |
|
|
| |
| sys.path.insert(0, str(Path(__file__).parent.parent.parent)) |
|
|
| from src.tools.code_execution import CodeExecutionError, get_code_executor |
|
|
|
|
| def test_basic_execution(): |
| """Test basic code execution.""" |
| print("\n=== Test 1: Basic Execution ===") |
| executor = get_code_executor() |
|
|
| code = """ |
| print("Hello from Modal sandbox!") |
| result = 2 + 2 |
| print(f"2 + 2 = {result}") |
| """ |
|
|
| result = executor.execute(code) |
| print(f"Success: {result['success']}") |
| print(f"Stdout:\n{result['stdout']}") |
| if result["stderr"]: |
| print(f"Stderr:\n{result['stderr']}") |
|
|
|
|
| def test_scientific_computing(): |
| """Test scientific computing libraries.""" |
| print("\n=== Test 2: Scientific Computing ===") |
| executor = get_code_executor() |
|
|
| code = """ |
| import pandas as pd |
| import numpy as np |
| |
| # Create sample data |
| data = { |
| 'drug': ['DrugA', 'DrugB', 'DrugC'], |
| 'efficacy': [0.75, 0.82, 0.68], |
| 'sample_size': [100, 150, 120] |
| } |
| |
| df = pd.DataFrame(data) |
| |
| # Calculate weighted average |
| weighted_avg = np.average(df['efficacy'], weights=df['sample_size']) |
| |
| print(f"Drugs tested: {len(df)}") |
| print(f"Weighted average efficacy: {weighted_avg:.3f}") |
| print("\\nDataFrame:") |
| print(df.to_string()) |
| """ |
|
|
| result = executor.execute(code) |
| print(f"Success: {result['success']}") |
| print(f"Output:\n{result['stdout']}") |
|
|
|
|
| def test_statistical_analysis(): |
| """Test statistical analysis.""" |
| print("\n=== Test 3: Statistical Analysis ===") |
| executor = get_code_executor() |
|
|
| code = """ |
| import numpy as np |
| from scipy import stats |
| |
| # Simulate two treatment groups |
| np.random.seed(42) |
| control_group = np.random.normal(100, 15, 50) |
| treatment_group = np.random.normal(110, 15, 50) |
| |
| # Perform t-test |
| t_stat, p_value = stats.ttest_ind(treatment_group, control_group) |
| |
| print(f"Control mean: {np.mean(control_group):.2f}") |
| print(f"Treatment mean: {np.mean(treatment_group):.2f}") |
| print(f"T-statistic: {t_stat:.3f}") |
| print(f"P-value: {p_value:.4f}") |
| |
| if p_value < 0.05: |
| print("Result: Statistically significant difference") |
| else: |
| print("Result: No significant difference") |
| """ |
|
|
| result = executor.execute(code) |
| print(f"Success: {result['success']}") |
| print(f"Output:\n{result['stdout']}") |
|
|
|
|
| def test_with_return_value(): |
| """Test execute_with_return method.""" |
| print("\n=== Test 4: Return Value ===") |
| executor = get_code_executor() |
|
|
| code = """ |
| import numpy as np |
| |
| # Calculate something |
| data = np.array([1, 2, 3, 4, 5]) |
| result = { |
| 'mean': float(np.mean(data)), |
| 'std': float(np.std(data)), |
| 'sum': int(np.sum(data)) |
| } |
| """ |
|
|
| try: |
| result = executor.execute_with_return(code) |
| print(f"Returned result: {result}") |
| print(f"Mean: {result['mean']}") |
| print(f"Std: {result['std']}") |
| print(f"Sum: {result['sum']}") |
| except CodeExecutionError as e: |
| print(f"Error: {e}") |
|
|
|
|
| def test_error_handling(): |
| """Test error handling.""" |
| print("\n=== Test 5: Error Handling ===") |
| executor = get_code_executor() |
|
|
| code = """ |
| # This will fail |
| x = 1 / 0 |
| """ |
|
|
| result = executor.execute(code) |
| print(f"Success: {result['success']}") |
| print(f"Error: {result['error']}") |
|
|
|
|
| def main(): |
| """Run all tests.""" |
| print("=" * 60) |
| print("Modal Code Execution Demo") |
| print("=" * 60) |
|
|
| tests = [ |
| test_basic_execution, |
| test_scientific_computing, |
| test_statistical_analysis, |
| test_with_return_value, |
| test_error_handling, |
| ] |
|
|
| for test in tests: |
| try: |
| test() |
| except Exception as e: |
| print(f"\n❌ Test failed: {e}") |
| import traceback |
|
|
| traceback.print_exc() |
|
|
| print("\n" + "=" * 60) |
| print("Demo completed!") |
| print("=" * 60) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|