hedtorresca commited on
Commit
f21c6ac
·
verified ·
1 Parent(s): e5d5105

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -143
app.py CHANGED
@@ -4,16 +4,6 @@ from matplotlib_venn import venn3
4
  from io import BytesIO
5
  from PIL import Image
6
 
7
- def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
8
- errors = []
9
- if A < AB + AC - ABC:
10
- errors.append("A no puede ser menor que la suma de AB y AC menos ABC.")
11
- if B < AB + BC - ABC:import gradio as gr
12
- import matplotlib.pyplot as plt
13
- from matplotlib_venn import venn3
14
- from io import BytesIO
15
- from PIL import Image
16
-
17
  def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
18
  errors = []
19
  if A < AB + AC - ABC:
@@ -165,137 +155,4 @@ iface = gr.Interface(
165
  live=True
166
  )
167
 
168
- iface.launch()
169
-
170
- errors.append("B no puede ser menor que la suma de AB y BC menos ABC.")
171
- if C < AC + BC - ABC:
172
- errors.append("C no puede ser menor que la suma de AC y BC menos ABC.")
173
- if U < A + B + C - AB - AC - BC + ABC:
174
- errors.append("El conjunto universal U es menor que la suma total de los conjuntos y sus intersecciones.")
175
- return errors
176
-
177
- def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
178
- # Máximos valores permitidos para las intersecciones
179
- max_AB = min(A, B, U - (A + B + C - AB - AC - BC + ABC))
180
- max_AC = min(A, C, U - (A + B + C - AB - AC - BC + ABC))
181
- max_BC = min(B, C, U - (A + B + C - AB - AC - BC + ABC))
182
- max_ABC = min(max_AB, max_AC, max_BC)
183
-
184
- # Mínimos valores permitidos para las intersecciones
185
- min_AB = max(0, A + B - U + C)
186
- min_AC = max(0, A + C - U + B)
187
- min_BC = max(0, B + C - U + A)
188
- min_ABC = max(0, A + B + C - U)
189
-
190
- # Máximos y mínimos valores permitidos para los conjuntos
191
- max_A = U - (B + C - BC)
192
- max_B = U - (A + C - AC)
193
- max_C = U - (A + B - AB)
194
- min_A = max(AB + AC - ABC, 0)
195
- min_B = max(AB + BC - ABC, 0)
196
- min_C = max(AC + BC - ABC, 0)
197
-
198
- suggestions = {
199
- "Máximo valor sugerido para A": max_A,
200
- "Mínimo valor sugerido para A": min_A,
201
- "Máximo valor sugerido para B": max_B,
202
- "Mínimo valor sugerido para B": min_B,
203
- "Máximo valor sugerido para C": max_C,
204
- "Mínimo valor sugerido para C": min_C,
205
- "Máximo valor sugerido para A ∩ B": max_AB,
206
- "Mínimo valor sugerido para A ∩ B": min_AB,
207
- "Máximo valor sugerido para A ∩ C": max_AC,
208
- "Mínimo valor sugerido para A ∩ C": min_AC,
209
- "Máximo valor sugerido para B ∩ C": max_BC,
210
- "Mínimo valor sugerido para B ∩ C": min_BC,
211
- "Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
212
- "Mínimo valor sugerido para A ∩ B ∩ C": min_ABC,
213
- }
214
- return suggestions
215
-
216
- def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
217
- total = U if U > 0 else (A + B + C - AB - AC - BC + ABC)
218
- if total == 0:
219
- return {
220
- "P(A)": 0,
221
- "P(B)": 0,
222
- "P(C)": 0,
223
- "P(A ∩ B)": 0,
224
- "P(A ∩ C)": 0,
225
- "P(B ∩ C)": 0,
226
- "P(A ∩ B ∩ C)": 0,
227
- }
228
-
229
- P_A = A / total
230
- P_B = B / total
231
- P_C = C / total
232
- P_AB = AB / total
233
- P_AC = AC / total
234
- P_BC = BC / total
235
- P_ABC = ABC / total
236
-
237
- formatted_probs = {
238
- "P(A)": f"{P_A:.2%} ({A}/{total})",
239
- "P(B)": f"{P_B:.2%} ({B}/{total})",
240
- "P(C)": f"{P_C:.2%} ({C}/{total})",
241
- "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
242
- "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
243
- "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
244
- "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})",
245
- }
246
-
247
- return formatted_probs
248
-
249
- def plot_venn(A, B, C, AB, AC, BC, ABC, U):
250
- subsets = {
251
- '100': A - AB - AC + ABC,
252
- '010': B - AB - BC + ABC,
253
- '001': C - AC - BC + ABC,
254
- '110': AB - ABC,
255
- '101': AC - ABC,
256
- '011': BC - ABC,
257
- '111': ABC
258
- }
259
- plt.figure(figsize=(8, 8))
260
- venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
261
- plt.title(f"Diagrama de Venn con U = {U}")
262
-
263
- buf = BytesIO()
264
- plt.savefig(buf, format='png')
265
- buf.seek(0)
266
- img = Image.open(buf)
267
- return img
268
-
269
- def main(A, B, C, AB, AC, BC, ABC, U):
270
- if U == 0:
271
- U = A + B + C
272
-
273
- errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
274
- suggestions = suggest_intersections(A, B, C, AB, AC, BC, ABC, U)
275
- if errors:
276
- return None, {"error": "\n".join(errors), "sugerencias": suggestions}
277
-
278
- venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC, U)
279
- probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
280
- return venn_diagram, probabilities
281
-
282
- iface = gr.Interface(
283
- fn=main,
284
- inputs=[
285
- gr.Number(label="Conjunto Universal (U)", value=0),
286
- gr.Number(label="Cantidad en A"),
287
- gr.Number(label="Cantidad en B"),
288
- gr.Number(label="Cantidad en C"),
289
- gr.Number(label="Cantidad en A ∩ B"),
290
- gr.Number(label="Cantidad en A ∩ C"),
291
- gr.Number(label="Cantidad en B ∩ C"),
292
- gr.Number(label="Cantidad en A ∩ B ∩ C")
293
- ],
294
- outputs=[
295
- gr.Image(type="pil", label="Diagrama de Venn"),
296
- gr.JSON(label="Resultados y Sugerencias")
297
- ],
298
- live=True
299
- )
300
-
301
  iface.launch()
 
4
  from io import BytesIO
5
  from PIL import Image
6
 
 
 
 
 
 
 
 
 
 
 
7
  def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
8
  errors = []
9
  if A < AB + AC - ABC:
 
155
  live=True
156
  )
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  iface.launch()