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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -62
app.py CHANGED
@@ -4,15 +4,19 @@ 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
- total_needed = A + B + C - AB - AC - BC + ABC
9
- errors = []
10
- if total_needed > U:
11
- errors.append("El conjunto universal U debe ser mayor o igual a la suma de los subconjuntos y sus intersecciones.")
12
- return errors
13
-
14
  def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
15
- total = U
 
 
 
 
 
 
 
 
 
 
 
16
  P_A = A / total
17
  P_B = B / total
18
  P_C = C / total
@@ -20,86 +24,48 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
20
  P_AC = AC / total
21
  P_BC = BC / total
22
  P_ABC = ABC / total
23
-
24
- formatted_probs = {
25
- "P(A)": f"{P_A:.2%} ({A}/{total})",
26
- "P(B)": f"{P_B:.2%} ({B}/{total})",
27
- "P(C)": f"{P_C:.2%} ({C}/{total})",
28
- "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
29
- "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
30
- "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
31
- "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})"
32
- }
33
 
34
- return formatted_probs
 
 
 
 
 
 
 
 
35
 
36
  def plot_venn(A, B, C, AB, AC, BC, ABC):
37
  plt.figure(figsize=(8, 8))
38
- subsets = {
39
- '100': A - AB - AC + ABC,
40
- '010': B - AB - BC + ABC,
41
- '001': C - AC - BC + ABC,
42
- '110': AB - ABC,
43
- '101': AC - ABC,
44
- '011': BC - ABC,
45
- '111': ABC
46
- }
47
- venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
48
- plt.title(f"Diagrama de Venn")
49
-
50
  buf = BytesIO()
51
  plt.savefig(buf, format='png')
52
  buf.seek(0)
53
  img = Image.open(buf)
54
  return img
55
 
56
- def suggest_intersections(A, B, C, AB, AC, BC, ABC):
57
- max_AB = min(A, B)
58
- max_AC = min(A, C)
59
- max_BC = min(B, C)
60
- max_ABC = min(max_AB, max_AC, max_BC)
61
-
62
- min_AB = max(0, AB)
63
- min_AC = max(0, AC)
64
- min_BC = max(0, BC)
65
- min_ABC = max(0, ABC)
66
-
67
- suggestions = {
68
- "Máximo valor sugerido para A ∩ B": max_AB,
69
- "Mínimo valor sugerido para A ∩ B": min_AB,
70
- "Máximo valor sugerido para A ∩ C": max_AC,
71
- "Mínimo valor sugerido para A ∩ C": min_AC,
72
- "Máximo valor sugerido para B ∩ C": max_BC,
73
- "Mínimo valor sugerido para B ∩ C": min_BC,
74
- "Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
75
- "Mínimo valor sugerido para A ∩ B ∩ C": min_ABC,
76
- }
77
- return suggestions
78
-
79
  def main(A, B, C, AB, AC, BC, ABC, U):
80
- errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
81
- if errors:
82
- return None, {"error": "\n".join(errors), "sugerencias": suggest_intersections(A, B, C, AB, AC, BC, ABC)}
83
-
84
  venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
85
  probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
86
- return venn_diagram, {"probabilidades": probabilities, "sugerencias": suggest_intersections(A, B, C, AB, AC, BC, ABC)}
87
 
88
  iface = gr.Interface(
89
  fn=main,
90
  inputs=[
91
- gr.Number(label="Conjunto Universal (U)", value=0),
92
  gr.Number(label="Cantidad en A"),
93
  gr.Number(label="Cantidad en B"),
94
  gr.Number(label="Cantidad en C"),
95
  gr.Number(label="Cantidad en A ∩ B"),
96
  gr.Number(label="Cantidad en A ∩ C"),
97
  gr.Number(label="Cantidad en B ∩ C"),
98
- gr.Number(label="Cantidad en A ∩ B ∩ C")
 
99
  ],
100
  outputs=[
101
  gr.Image(type="pil", label="Diagrama de Venn"),
102
- gr.JSON(label="Resultados y Sugerencias")
103
  ],
104
  live=True
105
  )
 
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:
10
+ return {
11
+ "P(A)": 0,
12
+ "P(B)": 0,
13
+ "P(C)": 0,
14
+ "P(A ∩ B)": 0,
15
+ "P(A ∩ C)": 0,
16
+ "P(B ∩ C)": 0,
17
+ "P(A ∩ B ∩ C)": 0,
18
+ }
19
+
20
  P_A = A / total
21
  P_B = B / total
22
  P_C = C / total
 
24
  P_AC = AC / total
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))
40
+ venn = venn3(subsets=(A, B, AB, C, AC, BC, ABC), set_labels=('A', 'B', 'C'))
41
+ plt.title("Venn Diagram")
42
+
 
 
 
 
 
 
 
 
 
43
  buf = BytesIO()
44
  plt.savefig(buf, format='png')
45
  buf.seek(0)
46
  img = Image.open(buf)
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
53
 
54
  iface = gr.Interface(
55
  fn=main,
56
  inputs=[
 
57
  gr.Number(label="Cantidad en A"),
58
  gr.Number(label="Cantidad en B"),
59
  gr.Number(label="Cantidad en C"),
60
  gr.Number(label="Cantidad en A ∩ B"),
61
  gr.Number(label="Cantidad en A ∩ C"),
62
  gr.Number(label="Cantidad en B ∩ C"),
63
+ gr.Number(label="Cantidad en A ∩ B ∩ C"),
64
+ gr.Number(label="Conjunto Universal (U)")
65
  ],
66
  outputs=[
67
  gr.Image(type="pil", label="Diagrama de Venn"),
68
+ gr.JSON(label="Probabilidades Calculadas")
69
  ],
70
  live=True
71
  )