Spaces:
Sleeping
Sleeping
| title: Python C Extension Generator | |
| app_file: app.py | |
| sdk: gradio | |
| sdk_version: 6.14.0 | |
| license: mit | |
| emoji: 🐉 | |
| colorFrom: blue | |
| colorTo: green | |
| short_description: High-performance Python C Extension generator from Python. | |
| pinned: true | |
| thumbnail: >- | |
| https://cdn-uploads.huggingface.co/production/uploads/67caf50af30e4fe450042ac4/7DVx6daYTcVfiqhfRHCI9.png | |
| ## Python C Extension code generator | |
| A Gradio app that provides an interactive interface for users to input Python code and | |
| generate C extension code | |
| Optionally, a compile and eval stage can be activated for local deployments to compare | |
| its performance against the original Python code. | |
| > [!CAUTION] | |
| > | |
| > **Always review the generated codes before running them, as they will be executed in | |
| > your local environment and may contain code that could be harmful or unwanted.** | |
| > | |
| > AI-generated code may contain errors or unsafe practices, so it's crucial to | |
| > thoroughly review and test on a sandboxed environment any code before using it in a | |
| > production environment. | |
| > | |
| > Never run code generated by AI models without understanding its implications and | |
| > ensuring it adheres to your security and safety standards. | |
| > [!IMPORTANT] | |
| > | |
| > **Disclaimer:** This App and Notebook are provided for educational purposes only. | |
| > Use it at your own risk. | |
| ### Installation | |
| * Install the required Python dependencies: | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| * Or, if you prefer Pipenv: | |
| ```bash | |
| pipenv install | |
| ``` | |
| ### Configuration | |
| The app reads configuration from environment variables and from a `.env` file if present. | |
| * `MODELS`: Colon-separated list of models to expose in the dropdown. | |
| * Examples: | |
| *bash:* | |
| ```bash | |
| export MODELS="gpt-5.1-codex-mini:gpt-5.4-mini" | |
| ``` | |
| *powershell:* | |
| ```powershell | |
| $env:MODELS = "gpt-5.1-codex-mini:gpt-5.4-mini" | |
| ``` | |
| If not set, the app defaults to `gpt-5.1-codex-mini` and `gpt-5.4-mini`. | |
| * `COMPILE_STAGE`: Set to `true`, `1`, or `yes` to enable the compile and test stage. | |
| * Examples: | |
| *bash:* | |
| ```bash | |
| export COMPILE_STAGE=true | |
| ``` | |
| *powershell:* | |
| ```powershell | |
| $env:COMPILE_STAGE = "true" | |
| ``` | |
| ### Running locally | |
| * Run the app locally with: | |
| ```bash | |
| python app.py | |
| ``` | |
| * For autoreload during development, use the Gradio CLI: | |
| ```bash | |
| gradio app.py | |
| ``` | |
| ### Gradio app overview | |
| In this image, you can see the Gradio app dashboard whose main sections are | |
| described below. | |
| \ | |
| *Image: Gradio app dashboard with default example `hello world` code loaded.* | |
| *(compile output redacted for privacy)* | |
| Sections: | |
| * **Dropdown selectors and input fields**: | |
| * **Module name input**: | |
| A text input field where users can specify the name of the C extension module to be | |
| generated. | |
| That name will be used to create the C extension file `<module_name>.c` and | |
| the `setup.py` file required to compile the extension. | |
| That name will also be used to import the compiled module as usual in Python: | |
| ```python | |
| import <module_name> | |
| ``` | |
| Or | |
| ```python | |
| from <module_name> import <function_name> | |
| ``` | |
| * **Model selector**: | |
| A dropdown menu to select the model used for code generation. | |
| The available options are taken from the `MODELS` environment variable if set. | |
| Otherwise the app defaults to `gpt-5.1-codex-mini` and `gpt-5.4-mini`. | |
| * **Platform selector**: | |
| A dropdown menu to select the target platform for the generated C extension. | |
| This affects how the app frames the prompt for the model and ensures the | |
| generated code targets the selected platform (`Windows` or `Linux`). | |
| * **Examples selector**: | |
| A list of ready-made Python examples to load into the input field. | |
| Built-in examples include `Hello world`, `Sum array`, `Fibonacci`, `Leibniz pi`, | |
| and `Max subarray sum`. | |
| * **Text input areas**: | |
| These areas are all editable, including those filled with generated code by the model. | |
| This allows users to modify and experiment with the code as needed. | |
| * **Python code**: | |
| A text area where users can input their Python code. | |
| > [!NOTE] | |
| > | |
| > We are creating an importable module not an executable program so the code to be | |
| > optimized must contain only declarations such as DEF or CLASS. | |
| * **C extension code**: | |
| A text area that displays the generated C extension code. | |
| * **Compilation code**: | |
| A text area that shows the generated `setup.py` code. | |
| This file is required to compile the C extension. | |
| * **Test compare code**: | |
| A text area that provides example code to run the compiled C extension. | |
| * **Output areas**: | |
| These are non-editable areas that display the results of various operations. | |
| * **C Extension result**: *(Only with Compile Stage Enabled)* | |
| A text area that displays the output of the C extension code build. | |
| > [!CAUTION] | |
| > Beware that this area can contain a large amount of text including warnings during | |
| > the compilation process and sensible information about the local environment, | |
| > like: paths, Python version, etc may be included. | |
| > | |
| > Redact that information if you plan to share the output. | |
| * **Test result**: *(Only with Compile Stage Enabled)* | |
| A text area that displays the output of the test code run. | |
| * **Buttons**: | |
| * **Generate extension code**: | |
| A button that triggers the generation of the C extension code from the provided | |
| Python code. | |
| It will call the model to generate the C code, the setup.py file and the test code, | |
| filling the corresponding text areas automatically. | |
| * **Compile extension**: *(Only with Compile Stage Enabled)* | |
| A button that compiles the generated C extension using the provided `setup.py` file. | |
| It will create the extension C file, `<module_name>.c`, and the `setup.py` file in | |
| the local folder, then it will run the compilation command and build the C extension, | |
| `<module_name>.<arch_info>.pyd`.\ | |
| *`arch_info` represents architecture info the extension has been compiled for:* | |
| * `hello_world.cp313-win_amd64.pyd`: CPython 3.13 + Windows + Amd64 Architecture. | |
| > [!CAUTION] | |
| > | |
| > **Always review the `setup.py` code before running it, as it will be executed in | |
| > your local environment and may contain code that could be harmful or unwanted.** | |
| > | |
| > **Also review the generated C code, as it will be compiled and executed in your | |
| > local environment and may contain code that could be harmful or unwanted.** | |
| It will display the compilation output in the "C Extension result" area. | |
| * **Test code**: *(Only with Compile Stage Enabled)* | |
| A button that executes the test code to compare the performance of the original | |
| Python code and the generated C extension. | |
| > [!CAUTION] | |
| > | |
| > **Always review the test code before running it, as it will be executed in | |
| > your local environment and may contain code that could be harmful or unwanted.** | |
| Will save the test code provided in the "Test compare code" into the | |
| `usage_example.py` file and execute it, showing the output in the "Test result" area. | |
| ## Notebook | |
| The `notebooks` folder contains an example notebook demonstrating the usage and workflow | |
| of the Python C Extension Generator app. | |
| It provides a step-by-step, interactive overview for users who prefer a notebook-based | |
| approach. | |
| ## TO DO | |
| * Add an Anthropic Claude based `optimizer` | |