Spaces:
Sleeping
Sleeping
File size: 3,332 Bytes
222fbf0 edbcfa6 222fbf0 460af25 e69aea3 edbcfa6 71ed397 c6a43c4 f072863 460af25 f072863 222fbf0 cc248dd 222fbf0 71ed397 222fbf0 f072863 c6a43c4 f072863 e69aea3 f072863 460af25 c6a43c4 f072863 dc554ea f072863 8614da9 f072863 454ec0a f072863 8614da9 f072863 454ec0a f072863 8614da9 f072863 454ec0a f072863 8614da9 454ec0a 8614da9 f072863 edbcfa6 f072863 edbcfa6 222fbf0 f072863 |
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 |
import io
import gradio as gr
import os
import tempfile
import numpy as np
import pandas as pd
import traceback as tb
empty_df = pd.DataFrame(
{
"equation": [],
"loss": [],
"complexity": [],
}
)
def greet(
file_obj: tempfile._TemporaryFileWrapper,
col_to_fit: str,
niterations: int,
binary_operators: list,
unary_operators: list,
):
if col_to_fit == "":
return (
empty_df,
"Please enter a column to predict!",
)
if len(binary_operators) == 0 and len(unary_operators) == 0:
return (
empty_df,
"Please select at least one operator!",
)
if file_obj is None:
return (
empty_df,
"Please upload a CSV file!",
)
niterations = int(niterations)
# Need to install PySR in separate python instance:
os.system(
"""if [ ! -d "$HOME/.julia/environments/pysr-0.9.3" ]
then
python -c 'import pysr; pysr.install()'
fi"""
)
import pysr
try:
from julia.api import JuliaInfo
info = JuliaInfo.load(julia="/usr/bin/julia")
from julia import Main as _Main
pysr.sr.Main = _Main
except Exception as e:
error_message = tb.format_exc()
return (
empty_df,
error_message,
)
from pysr import PySRRegressor
df = pd.read_csv(file_obj.name)
y = np.array(df[col_to_fit])
X = df.drop([col_to_fit], axis=1)
model = PySRRegressor(
update=False,
temp_equation_file=True,
niterations=niterations,
binary_operators=binary_operators,
unary_operators=unary_operators,
)
try:
model.fit(X, y)
# Catch all error:
except Exception as e:
error_traceback = tb.format_exc()
if "CalledProcessError" in error_traceback:
return (
empty_df,
"Could not initialize Julia. Error message:\n"
+ error_traceback,
)
else:
return (
empty_df,
"Failed due to error:\n" + error_traceback,
)
df = model.equations_[["equation", "loss", "complexity"]]
# Convert all columns to string type:
df = df.astype(str)
return df, "Successful."
def main():
demo = gr.Interface(
fn=greet,
description="PySR Demo",
inputs=[
gr.inputs.File(label="Upload a CSV File"),
gr.inputs.Textbox(label="Column to Predict", placeholder="y"),
gr.inputs.Slider(
minimum=1,
maximum=1000,
default=40,
label="Number of iterations",
),
gr.inputs.CheckboxGroup(
choices=["+", "-", "*", "/", "^"],
label="Binary Operators",
default=["+", "-", "*", "/"],
),
gr.inputs.CheckboxGroup(
choices=["sin", "cos", "exp", "log"],
label="Unary Operators",
default=[],
),
],
outputs=[
"dataframe",
gr.outputs.Textbox(label="Error Log"),
],
)
# Add file to the demo:
demo.launch()
if __name__ == "__main__":
main()
|