File size: 7,212 Bytes
ab2028a
a3ff20d
 
a09b6d4
a2cc35d
 
55b6a72
06a38bb
a3ff20d
a09b6d4
 
 
 
 
ff28ea7
06a38bb
 
 
 
 
ff28ea7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f98abe0
8bb3175
 
 
 
 
 
 
 
 
 
7a50d25
e74a6d5
7a50d25
 
 
 
 
dec3ffb
7a50d25
 
dec3ffb
8bb3175
7a50d25
a3ff20d
 
 
 
f98abe0
 
 
 
 
ca883bf
f98abe0
 
662683c
a3ff20d
 
 
 
f98abe0
8e5029d
f49c4dc
d4b4467
 
f49c4dc
d4b4467
 
 
0cd86bb
92bdd1d
 
 
 
e71a574
92bdd1d
 
 
 
 
 
 
 
 
 
 
 
 
c853766
d4b4467
 
 
 
a2cc35d
06a38bb
ff28ea7
a3ff20d
ff28ea7
a3ff20d
 
 
ff28ea7
a3ff20d
06a38bb
ff28ea7
a3ff20d
 
ff28ea7
a3ff20d
 
ff28ea7
06a38bb
ff28ea7
 
 
7d98fee
ff28ea7
55b6a72
ff28ea7
 
 
 
 
 
 
 
a3ff20d
 
b6dfb48
700258a
8e5029d
 
5b25129
8e5029d
 
23028aa
8e5029d
5b25129
23028aa
 
8e5029d
 
8f67fbb
8e5029d
5b25129
23028aa
 
8e5029d
700258a
a3ff20d
 
ff28ea7
55b6a72
f49c4dc
 
 
 
 
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
import streamlit as st
import json
import matplotlib.pyplot as plt
import time
from PIL import Image
from streamlit_image_comparison import image_comparison

st.set_page_config(layout="wide")

# HIN Number +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
from SPARQLWrapper import SPARQLWrapper, JSON
from streamlit_agraph import agraph, TripleStore, Node, Edge, Config
import json

# Function to load JSON data
def load_data(filename):
    with open(filename, 'r') as file:
        data = json.load(file)
    return data

# Dictionary for color codes
color_codes = {
    "residential": "#ADD8E6",
    "commercial": "#90EE90",
    "community_facilities": "#FFFF00",
    "school": "#FFFF00",
    "healthcare_facility": "#FFFF00",
    "green_space": "#90EE90",
    "utility_infrastructure": "#90EE90",
    "emergency_services": "#FF0000",
    "cultural_facilities": "#D8BFD8",
    "recreational_facilities": "#D8BFD8",
    "innovation_center": "#90EE90",
    "elderly_care_home": "#FFFF00",
    "childcare_centers": "#FFFF00",
    "places_of_worship": "#D8BFD8",
    "event_spaces": "#D8BFD8",
    "guest_housing": "#FFA500",
    "pet_care_facilities": "#FFA500",
    "public_sanitation_facilities": "#A0A0A0",
    "environmental_monitoring_stations": "#90EE90",
    "disaster_preparedness_center": "#A0A0A0",
    "outdoor_community_spaces": "#90EE90",
    # Add other types with their corresponding colors
}

# Function to draw the grid with optional highlighting

def draw_grid(data, highlight_coords=None):
    fig, ax = plt.subplots(figsize=(12, 12))
    nrows, ncols = data['size']['rows'], data['size']['columns']
    ax.set_xlim(0, ncols)
    ax.set_ylim(0, nrows)
    ax.set_xticks(range(ncols+1))
    ax.set_yticks(range(nrows+1))
    ax.grid(True)

    # Draw roads with a specified grey color
    road_color = "#606060"  # Light grey; change to "#505050" for dark grey
    for road in data.get('roads', []):  # Check for roads in the data
        start, end = road['start'], road['end']
        # Determine if the road is vertical or horizontal based on start and end coordinates
        if start[0] == end[0]:  # Vertical road
            for y in range(min(start[1], end[1]), max(start[1], end[1]) + 1):
                ax.add_patch(plt.Rectangle((start[0], nrows-y-1), 1, 1, color=road['color']))
        else:  # Horizontal road
            for x in range(min(start[0], end[0]), max(start[0], end[0]) + 1):
                ax.add_patch(plt.Rectangle((x, nrows-start[1]-1), 1, 1, color=road['color']))

    # Draw buildings
    for building in data['buildings']:
        coords = building['coords']
        b_type = building['type']
        size = building['size']
        color = color_codes.get(b_type, '#FFFFFF')  # Default color is white if not specified
        
        if highlight_coords and (coords[0], coords[1]) == tuple(highlight_coords):
            highlighted_color = "#FFD700"  # Gold for highlighting
            ax.add_patch(plt.Rectangle((coords[1], nrows-coords[0]-size), size, size, color=highlighted_color, edgecolor='black', linewidth=2))
        else:
            ax.add_patch(plt.Rectangle((coords[1], nrows-coords[0]-size), size, size, color=color, edgecolor='black', linewidth=1))
            ax.text(coords[1]+0.5*size, nrows-coords[0]-0.5*size, b_type, ha='center', va='center', fontsize=8, color='black')

    ax.set_xlabel('Columns')
    ax.set_ylabel('Rows')
    ax.set_title('Village Layout with Color Coding')
    return fig

  
# Tabs +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Create the main app with three tabs
tab1, tab2, tab3 = st.tabs(["Interpretive Number","Green Village", "Control Room"])


with tab1:
    
    st.header("Engineering Tools")

    # Divide the page into three columns
    col1, col2 = st.columns(2)

    with col1:
        st.header("Human Interpretive Number (HIN)")
        st.write("")
        "How do LLMs interpret us and over “a period” of time what is the result of our interaction with them?"
        st.write("")
      
        image_comparison(
            img1="./data/robot.jpg",
            img2="./data/life.jpg",
            label1="What the LMM Sees (Simulated Life)",
            label2="What we See (Real Life)",
        )
    with col2:
        st.header("Custom GPT Engineering Tools")


with tab2:

    st.header("Green Smart Village Application")

    # Divide the page into three columns
    col1, col2, col3 = st.columns(3)
    
    with col1:
        st.header("Today's Agenda")
        st.write("1. Morning Meeting\n2. Review Project Plans\n3. Lunch Break\n4. Site Visit\n5. Evening Wrap-up")
        
        st.header("Agent Advisors")
        st.write("Would you like to optimize your HIN number?")
        
        st.header("My Incentive")
        st.write("Total incentive for HIN optimization")
    
    with col2:
        st.header("Green Smart Village Layout")
        data = load_data('grid.json')  # Ensure this path is correct
        
        # Dropdown for selecting a building
        building_options = [f"{bld['type']} at ({bld['coords'][0]}, {bld['coords'][1]})" for bld in data['buildings']]
        selected_building = st.selectbox("Select a building to highlight:", options=building_options)
        selected_index = building_options.index(selected_building)
        selected_building_coords = data['buildings'][selected_index]['coords']

        # Draw the grid with the selected building highlighted
        fig = draw_grid(data, highlight_coords=selected_building_coords)
        st.pyplot(fig)
        
        # Assuming sensors are defined in your data, display them
        sensors = data['buildings'][selected_index].get('sensors', [])
        st.write(f"Sensors in selected building: {', '.join(sensors)}")
        
    with col3:
        st.header("Check Your HIN Number")
        # config = Config(height=400, width=400, nodeHighlightBehavior=True, highlightColor="#F7A7A6", directed=True, collapsible=True)


        if sensors:  # Check if there are sensors to display
            graph_store = TripleStore()
            building_name = f"{data['buildings'][selected_index]['type']} ({selected_building_coords[0]}, {selected_building_coords[1]})"
            
            # Iterate through each sensor and create a triple linking it to the building
            for sensor in sensors:
                sensor_id = f"Sensor: {sensor}"  # Label for sensor nodes
                # Correctly add the triple without named arguments
                graph_store.add_triple(building_name, "has_sensor", sensor_id)
        
            # Configuration for the graph visualization
            agraph_config = Config(height=300, width=300, nodeHighlightBehavior=True, highlightColor="#F7A7A6", directed=True, collapsible=True)
        
            # Display the graph
            agraph(nodes=graph_store.getNodes(), edges=graph_store.getEdges(), config=agraph_config)

    

        hin_number = st.text_input("Enter your HIN number:")
        if hin_number:
            st.write("HIN number details...")  # Placeholder for actual HIN number check

with tab3:
   
    st.header("Control Room")