File size: 5,486 Bytes
7949e50
6609537
 
a26ed8f
290e3e6
 
 
 
 
0a74433
290e3e6
 
 
 
 
 
 
 
 
 
 
 
 
 
64bf3aa
290e3e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e781a2
 
a26ed8f
 
 
51a2adc
8e781a2
 
 
 
 
 
 
 
 
 
 
 
01e0394
8e781a2
a26ed8f
e3e93d3
a26ed8f
6609537
a26ed8f
1b91a5d
a26ed8f
c8b2e06
a26ed8f
0db7d18
8e781a2
1b91a5d
a26ed8f
290e3e6
7949e50
6609537
e3e93d3
6609537
290e3e6
6609537
 
3e86e45
a26ed8f
 
e3e93d3
c8b2e06
 
 
e3e93d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265be45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import streamlit as st
import sys
import io

# CSS for background image and custom styling
tabs_css = """
    <style>
        /* Full-screen background image */
        .stApp {
            background: url('https://huggingface.co/spaces/MLDeveloper/code_compiler/resolve/main/images/blank.png') no-repeat center center fixed;
            background-size: cover;
        }
        /* Remove the white background box in header */
        .stHeader, .stSubheader {
            background-color: transparent !important;
        }
        /* Remove any background box around the text */
        .stMarkdown, .stTitle, .stText, .stList, .stSubheader {
            background-color: transparent;
            color: black !important;
            font-weight: bold;
        }
        /* Custom styling for tabs */
        .stTabs [data-baseweb="tab-list"] {
            background-color: white;
            border-radius: 20px;
            padding: 5px;
            box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1);
        }
        .stTabs [data-baseweb="tab"] {
            color: #B71C1C;
            font-weight: bold;
            border-radius: 20px;
            padding: 10px 20px;
        }
        .stTabs [aria-selected="true"] {
            background-color: #FAE5D3 !important;
            color: #B71C1C !important;
            font-weight: bold;
        }
        /* Add some padding and styling to text boxes */
        .stTextInput, .stTextArea {
            font-size: 16px;
            padding: 10px;
            border-radius: 8px;
            border: 1px solid #ccc;
        }
    </style>
"""
st.markdown(tabs_css, unsafe_allow_html=True)

def execute_code(code, user_input=""):
    """Execute the given code with simulated input and return the output."""
    old_stdout = sys.stdout  # Backup original stdout
    redirected_output = io.StringIO()  # Create a new string buffer
    sys.stdout = redirected_output  # Redirect stdout to buffer

    input_values = user_input.strip().split("\n")  # Split user inputs by line
    input_counter = 0  

    def mock_input(prompt=""):
        nonlocal input_counter
        if input_counter < len(input_values):
            value = input_values[input_counter]
            input_counter += 1
            return value
        else:
            raise ValueError("Not enough inputs provided.")

    try:
        exec(code, {"input": mock_input})  # Execute the user's code with mock input
        output = redirected_output.getvalue()  # Get the output from buffer
    except Exception as e:
        output = f"Error: {str(e)}"  # Capture and display any errors
    finally:
        sys.stdout = old_stdout  # Restore original stdout

    return output.strip()  # Return cleaned output

# Streamlit UI
st.title("💻 Python Compiler 🐍")
st.write("Write your Python code and get the correct output!")

code_input = st.text_area("Enter your Python code:", height=200)
user_input = st.text_area("Enter input values (one per line):", height=100)

if st.button("Run Code"):
    if code_input.strip():
        with st.spinner("Executing..."):
            output = execute_code(code_input, user_input)
        st.subheader("Output:")
        st.code(output, language="plaintext")
    else:
        st.warning("⚠️ Please enter some Python code before running.")




        
# V1 without gemini api

# import streamlit as st
# import requests
# import os  # Import os to access environment variables

# # Get API token from environment variable
# API_TOKEN = os.getenv("HF_API_TOKEN")


# # Change MODEL_ID to a better model
# MODEL_ID = "Salesforce/codet5p-770m"  # CodeT5+ (Recommended)
# # MODEL_ID = "bigcode/starcoder2-15b"  # StarCoder2
# # MODEL_ID = "bigcode/starcoder"
# API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
# HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

# def translate_code(code_snippet, source_lang, target_lang):
#     """Translate code using Hugging Face API securely."""
#     prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:\n"

#     response = requests.post(API_URL, headers=HEADERS, json={
#         "inputs": prompt,
#         "parameters": {
#             "max_new_tokens": 150,
#             "temperature": 0.2,
#             "top_k": 50
#             # "stop": ["\n\n", "#", "//", "'''"]
#         }
#     })

#     if response.status_code == 200:
#         generated_text = response.json()[0]["generated_text"]
#         translated_code = generated_text.split(f"Translated {target_lang} Code:\n")[-1].strip()
#         return translated_code
#     else:
#         return f"Error: {response.status_code}, {response.text}"

# # Streamlit UI
# st.title("🔄 Code Translator using StarCoder")
# st.write("Translate code between different programming languages using AI.")

# languages = ["Python", "Java", "C++", "C"]

# source_lang = st.selectbox("Select source language", languages)
# target_lang = st.selectbox("Select target language", languages)
# code_input = st.text_area("Enter your code here:", height=200)

# if st.button("Translate"):
#     if code_input.strip():
#         with st.spinner("Translating..."):
#             translated_code = translate_code(code_input, source_lang, target_lang)
#             st.subheader("Translated Code:")
#             st.code(translated_code, language=target_lang.lower())
#     else:
#         st.warning("⚠️ Please enter some code before translating. ")