import gradio as gr from tomorrowcities import DataGenerator import warnings import uuid import os import matplotlib.pyplot as plt warnings.simplefilter(action='ignore') plt.switch_backend("agg") def generate(land_use_file, parameter_file, seed): oppath='.' dg = DataGenerator(parameter_file=parameter_file.name, land_use_file=land_use_file.name) building, household, individual, land_use = dg.generate(seed) # Generate unique filenames opfile_map = 'map'+str(uuid.uuid4())+'.png' opfile_building = 'building_layer_'+str(uuid.uuid4())+'.xlsx' opfile_household = 'household_layer_'+str(uuid.uuid4())+'.xlsx' opfile_individual = 'individual_layer_'+str(uuid.uuid4())+'.xlsx' opfile_landuse = 'landuse_layer_'+str(uuid.uuid4())+'.xlsx' fig, ax = plt.subplots(1,1,figsize=(10,10)) building.plot(ax=ax) plt.savefig(opfile_map) # Save to Excel files building.to_excel(os.path.join(oppath,opfile_building),index=False) household.to_excel(os.path.join(oppath,opfile_household),index=False) individual.to_excel(os.path.join(oppath,opfile_individual),index=False) land_use.to_excel(os.path.join(oppath,opfile_landuse),index=False) info = f'# buildings: {len(building)}, # households: {len(household)}, # individuals: {len(individual)}' return opfile_building, opfile_household, opfile_individual, opfile_landuse, opfile_map, info with gr.Blocks() as demo: with gr.Row(): land_use_file = gr.File(label="Upload Land Use File") parameter_file = gr.File(label="Upload Parameter File") seed = gr.Slider(label="Seed", minimum=0, maximum=1000, value=0, step=1) btn = gr.Button("Generate") with gr.Row(): with gr.Column(): building = gr.File(label="Buildings") household = gr.File(label="Households") with gr.Column(): individual = gr.File(label="Individuals") land_use = gr.File(label="Land Use") map = gr.Image(label="Map") info = gr.Textbox(label="Info") gr.Examples(examples=[['tests/polygonsTV50_v2b.zip','tests/Input_DistributionTables_20230614.xlsx',0]], inputs=[land_use_file, parameter_file, seed]) btn.click(fn=generate, inputs=[land_use_file, parameter_file, seed], outputs=[building, household, individual, land_use, map, info]) demo.launch()