# BRAIN Expression Template Decoder - Flask Web Application A comprehensive Flask web application for decoding string templates with grammar checking, syntax highlighting, and seamless integration with WorldQuant BRAIN platform for real operator data. ## πŸš€ Features ### Core Functionality - **Template Detection**: Automatically detects `` patterns in expressions - **Grammar Checking**: Real-time validation for semicolons, comments, and syntax - **Syntax Highlighting**: Color-coded display with line numbers and autocomplete - **Template Decoding**: Two modes for generating expressions - **Full Iteration**: Generate all possible combinations of template variables - **Random Iteration**: Generate a random sample of specified size - **Export Options**: Copy results or download as text file ### Template Types - **Op (Operators)** - Blue button, integrates with BRAIN operators - **Data (Data Fields)** - Green button, for data field configuration - **Normal (Parameters)** - Gray button, for general parameters ### BRAIN Integration - **Built-in API Integration**: Direct connection to WorldQuant BRAIN API with CORS handling - **186+ Operators**: Access to all operator categories (Arithmetic, Ranking, Reduce, Time Series, etc.) - **800+ Data Fields**: From fundamental datasets with search and filtering - **Advanced Search**: Filter operators by category and search by name - **Multi-select Interface**: Professional operator selection with visual feedback ## πŸ› οΈ Setup and Installation ### Prerequisites - Python 3.7 or higher - pip (Python package installer) - WorldQuant BRAIN account (for BRAIN integration features) ### Quick Start 1. **Clone or download** this repository to your local machine 2. **Run the application** (dependencies will be installed automatically!): **On Windows:** ```bash # Double-click run_app.bat or run in terminal: run_app.bat ``` **On macOS/Linux:** ```bash # Make the script executable (first time only): chmod +x run_app.sh # Run the application: ./run_app.sh ``` **Or run directly with Python:** ```bash python app.py ``` 3. **Automatic dependency installation**: - The application will automatically check for missing dependencies - If any packages are missing, they will be installed from requirements.txt - **For users in China**: Dependencies are automatically downloaded from Tsinghua University mirror for faster installation - No manual installation needed! 4. **Open the application**: - The Flask server starts on `http://localhost:5000` - Open your web browser and navigate to `http://localhost:5000` - Everything is integrated - no separate proxy server needed! ### For Users in China (δΈ­ε›½η”¨ζˆ·) The application automatically uses Tsinghua University's PyPI mirror (ζΈ…εŽε€§ε­¦ι•œεƒ) for faster downloads. If you prefer to install dependencies manually: **Windows:** ```bash # Use the setup script with Tsinghua mirror setup_tsinghua.bat ``` **macOS/Linux:** ```bash # Make executable and run chmod +x setup_tsinghua.sh ./setup_tsinghua.sh ``` **Manual installation with Tsinghua mirror:** ```bash pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt ``` **Configuring Alternative Mirrors:** You can change the mirror source by editing `mirror_config.txt`. The file includes several popular Chinese mirrors: - Tsinghua (ζΈ…εŽε€§ε­¦) - Default - Aliyun (ι˜Ώι‡ŒδΊ‘) - Douban (豆瓣) - USTC (δΈ­ε›½η§‘ε­¦ζŠ€ζœ―ε€§ε­¦) ### Manual Installation If the automatic installation doesn't work, you can install manually: ```bash # Install dependencies from requirements.txt pip install -r requirements.txt # Or install individual packages pip install flask==2.3.3 flask-cors==4.0.0 requests==2.31.0 pandas==2.0.3 # Start the application python app.py ``` **Note**: The application includes automatic dependency checking and will attempt to install missing packages when you run it. ## πŸ”— BRAIN Integration ### Setup 1. **No separate setup required** - BRAIN API integration is built into the Flask application 2. **Connect to BRAIN**: Click "Connect to BRAIN" button in the web interface 3. **Enter credentials**: Use your WorldQuant BRAIN username and password 4. **Automatic operator loading**: The system fetches all available operators (186+) ### Using BRAIN Operators 1. **Configure templates**: Set template type to "Op" 2. **Choose from BRAIN**: Click the "Choose from BRAIN" button in template configuration 3. **Search and filter**: Use the search box and category filter to find operators 4. **Multi-select**: Check multiple operators and apply them to your template 5. **Generate combinations**: Decode templates to get all possible operator combinations ## πŸ“ Usage Guide ### 1. Expression Editor - Type or paste your expression in the main editor - Grammar is checked automatically with visual feedback - Templates are detected and highlighted in real-time - Use autocomplete by typing `<` for template suggestions ### 2. Template Management - Templates appear in the right panel as they're detected - Click template type buttons (Op/Data/Normal) to configure - Visual indicators show configured (βœ“) vs unconfigured (β€’) templates - Click template names to view current configuration ### 3. Template Configuration - **Normal templates**: Enter comma-separated values manually - **Op templates**: Choose from BRAIN operators or enter manually - **Data templates**: Enter data field specifications ### 4. Template Decoding Two options for generating expressions: - **full_iteration**: Generate all possible combinations - Creates every possible combination using Cartesian product - Shows first 999 results with search functionality for large datasets - **random_iteration**: Generate random sample - Specify number of random expressions (default: 10) - Generates all combinations first, then randomly selects the specified number - Useful for testing or when you only need a subset of possibilities - Each template must have at least one configured value - Results are displayed with copy and download options ## πŸ’‘ Example Expression ``` positive_sentiment = rank((,)); negative_sentiment = rank((, )); sentiment_difference = (positive_sentiment, negative_sentiment); (sentiment_difference, ) ``` ### Example Configuration - `` β†’ `7, 14, 30` - `` β†’ `ts_max, ts_min` (selected from BRAIN) - `` β†’ `ts_delta, ts_mean` (selected from BRAIN) ### Generated Output The decoder will generate all combinations: ``` ts_delta(ts_max(7), 7) ts_delta(ts_max(14), 14) ts_delta(ts_max(30), 30) ts_delta(ts_min(7), 7) ts_delta(ts_min(14), 14) ts_delta(ts_min(30), 30) ts_mean(ts_max(7), 7) ...and so on ``` ## 🎯 Grammar Rules - Use `/* */` for multi-line comments - End statements with `;` (except the last line) - No classes, objects, pointers, or functions allowed - The last line is the Alpha expression for BRAIN simulator ## πŸ—οΈ Technical Architecture ### Flask Application Structure ``` BRAINProject/ β”œβ”€β”€ app.py # Flask application with auto-dependency installation β”œβ”€β”€ templates/ β”‚ └── index.html # Main web interface template β”œβ”€β”€ static/ β”‚ β”œβ”€β”€ styles.css # Application styling β”‚ β”œβ”€β”€ script.js # Core application logic β”‚ β”œβ”€β”€ decoder.js # Template decoding algorithms β”‚ └── brain.js # BRAIN API integration module β”œβ”€β”€ requirements.txt # Python dependencies β”œβ”€β”€ mirror_config.txt # PyPI mirror configuration β”œβ”€β”€ run_app.bat # Windows startup script β”œβ”€β”€ run_app.sh # Unix/macOS startup script β”œβ”€β”€ setup_tsinghua.bat # Windows setup with Tsinghua mirror (for China) β”œβ”€β”€ setup_tsinghua.sh # Unix setup with Tsinghua mirror (for China) β”œβ”€β”€ brain_function_tester.ipynb # Jupyter notebook for testing └── README.md # This file ``` ### Key Components - **Flask Backend**: Handles BRAIN API authentication and data fetching - **Template Engine**: Jinja2 templates for dynamic content - **Static Assets**: CSS and JavaScript served efficiently - **CORS Handling**: Built-in cross-origin request support - **Session Management**: Secure session handling for BRAIN authentication ### API Endpoints - `GET /` - Main application page - `POST /api/authenticate` - BRAIN authentication - `GET /api/operators` - Fetch BRAIN operators with pagination - `GET /api/datafields` - Fetch BRAIN data fields - `GET /api/status` - Check authentication status - `POST /api/logout` - Logout from BRAIN ## πŸ”§ Advanced Features ### Operator Fetching - **Robust Pagination**: Handles BRAIN API pagination automatically - **Category Support**: Fetches operators from all categories - **Error Handling**: Multiple fallback strategies for reliable data loading - **Debugging**: Built-in endpoints for API response analysis ### Template Processing - **Real-time Detection**: Templates detected as you type - **Visual Feedback**: Color-coded syntax highlighting - **Status Indicators**: Clear visual cues for template configuration state - **Validation**: Ensures all templates are configured before decoding ### User Experience - **Professional UI**: Clean, modern interface design - **Responsive Design**: Works on desktop and tablet devices - **Keyboard Shortcuts**: Efficient template autocomplete - **Export Options**: Copy individual results or download all ## πŸ› Troubleshooting ### Common Issues 1. **Flask server won't start**: - Check Python version (3.7+ required) - Install missing dependencies: `pip install -r requirements.txt` 2. **BRAIN connection fails**: - Verify your BRAIN credentials - Check internet connectivity - Ensure no firewall blocking outbound HTTPS requests 3. **Templates not detecting**: - Check template syntax: `` - Refresh templates manually using the button 4. **No operators loading**: - Verify BRAIN authentication is successful - Check browser console for error messages - Try logout and re-authentication ### Debug Mode Run the application in debug mode for detailed error information: ```bash python app.py # Debug mode is enabled by default in the application ``` ## πŸ“ˆ Performance - **Efficient Loading**: Operators loaded once during authentication - **Pagination Handling**: Automatically fetches all data regardless of API pagination - **Session Management**: Persistent sessions for better user experience - **Optimized Frontend**: Minimal JavaScript dependencies for fast loading ## πŸ” Security - **Session Security**: Flask secure sessions with configurable secret key - **Credential Handling**: Credentials never stored, only used for API authentication - **CORS Protection**: Properly configured cross-origin request handling - **Input Validation**: Template syntax validation and grammar checking ## 🚧 Future Enhancements - **Template Library**: Save and share template configurations - **Advanced Filtering**: More sophisticated operator and data field filtering - **Batch Operations**: Process multiple expressions simultaneously - **API Integration**: Connect to additional financial data providers - **Export Formats**: Support for JSON, CSV, and other output formats --- **Note**: This Flask application replaces the previous HTML+proxy architecture, providing a more robust and integrated solution for BRAIN template decoding.