hedtorresca commited on
Commit
e0ff385
·
verified ·
1 Parent(s): 6fd93c8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -9
app.py CHANGED
@@ -4,6 +4,32 @@ from matplotlib_venn import venn3
4
  from io import BytesIO
5
  from PIL import Image
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
8
  total = U if U > 0 else (A + B + C - AB - AC - BC + ABC)
9
  if total == 0:
@@ -25,15 +51,17 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
25
  P_BC = BC / total
26
  P_ABC = ABC / total
27
 
28
- return {
29
- "P(A)": P_A,
30
- "P(B)": P_B,
31
- "P(C)": P_C,
32
- "P(A ∩ B)": P_AB,
33
- "P(A ∩ C)": P_AC,
34
- "P(B ∩ C)": P_BC,
35
- "P(A ∩ B ∩ C)": P_ABC,
36
  }
 
 
37
 
38
  def plot_venn(A, B, C, AB, AC, BC, ABC):
39
  plt.figure(figsize=(8, 8))
@@ -47,6 +75,11 @@ def plot_venn(A, B, C, AB, AC, BC, ABC):
47
  return img
48
 
49
  def main(A, B, C, AB, AC, BC, ABC, U):
 
 
 
 
 
50
  venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
51
  probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
52
  return venn_diagram, probabilities
@@ -65,7 +98,7 @@ iface = gr.Interface(
65
  ],
66
  outputs=[
67
  gr.Image(type="pil", label="Diagrama de Venn"),
68
- gr.JSON(label="Probabilidades Calculadas")
69
  ],
70
  live=True
71
  )
 
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:
12
+ errors.append("B no puede ser menor que la suma de AB y BC menos ABC.")
13
+ if C < AC + BC - ABC:
14
+ errors.append("C no puede ser menor que la suma de AC y BC menos ABC.")
15
+ if U < A + B + C - AB - AC - BC + ABC:
16
+ errors.append("El conjunto universal U es menor que la suma total de los conjuntos y sus intersecciones.")
17
+ return errors
18
+
19
+ def suggest_intersections(A, B, C, U):
20
+ max_AB = min(A, B, U - (A + B + C - A - B))
21
+ max_AC = min(A, C, U - (A + B + C - A - C))
22
+ max_BC = min(B, C, U - (A + B + C - B - C))
23
+ max_ABC = min(max_AB, max_AC, max_BC)
24
+
25
+ suggestions = {
26
+ "Máximo valor sugerido para A ∩ B": max_AB,
27
+ "Máximo valor sugerido para A ∩ C": max_AC,
28
+ "Máximo valor sugerido para B ∩ C": max_BC,
29
+ "Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
30
+ }
31
+ return suggestions
32
+
33
  def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
34
  total = U if U > 0 else (A + B + C - AB - AC - BC + ABC)
35
  if total == 0:
 
51
  P_BC = BC / total
52
  P_ABC = ABC / total
53
 
54
+ formatted_probs = {
55
+ "P(A)": f"{P_A:.2%} ({A}/{total})",
56
+ "P(B)": f"{P_B:.2%} ({B}/{total})",
57
+ "P(C)": f"{P_C:.2%} ({C}/{total})",
58
+ "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
59
+ "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
60
+ "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
61
+ "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})",
62
  }
63
+
64
+ return formatted_probs
65
 
66
  def plot_venn(A, B, C, AB, AC, BC, ABC):
67
  plt.figure(figsize=(8, 8))
 
75
  return img
76
 
77
  def main(A, B, C, AB, AC, BC, ABC, U):
78
+ errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
79
+ if errors:
80
+ suggestions = suggest_intersections(A, B, C, U)
81
+ return None, {"error": "\n".join(errors), "sugerencias": suggestions}
82
+
83
  venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
84
  probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
85
  return venn_diagram, probabilities
 
98
  ],
99
  outputs=[
100
  gr.Image(type="pil", label="Diagrama de Venn"),
101
+ gr.JSON(label="Resultados")
102
  ],
103
  live=True
104
  )