hedtorresca commited on
Commit
90bcf50
·
verified ·
1 Parent(s): 2273894

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -21
app.py CHANGED
@@ -4,8 +4,20 @@ 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):
8
- total = A + B + C - AB - AC - BC + ABC
 
 
 
 
 
 
 
 
 
 
 
 
9
  if total == 0:
10
  return {
11
  "P(A)": 0,
@@ -17,23 +29,25 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC):
17
  "P(A ∩ B ∩ C)": 0,
18
  }
19
 
20
- P_A = A / total if total > 0 else 0
21
- P_B = B / total if total > 0 else 0
22
- P_C = C / total if total > 0 else 0
23
- P_AB = AB / total if total > 0 else 0
24
- P_AC = AC / total if total > 0 else 0
25
- P_BC = BC / total if total > 0 else 0
26
- P_ABC = ABC / total if total > 0 else 0
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))
@@ -46,9 +60,13 @@ def plot_venn(A, B, C, AB, AC, BC, ABC):
46
  img = Image.open(buf)
47
  return img
48
 
49
- def main(A, B, C, AB, AC, BC, ABC):
 
 
 
 
50
  venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
51
- probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC)
52
  return venn_diagram, probabilities
53
 
54
  iface = gr.Interface(
@@ -60,12 +78,14 @@ iface = gr.Interface(
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
  ],
65
  outputs=[
66
  gr.Image(type="pil", label="Diagrama de Venn"),
67
  gr.JSON(label="Probabilidades Calculadas")
68
- ]
 
69
  )
70
 
71
  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:
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 calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
20
+ total = U if U > 0 else (A + B + C - AB - AC - BC + ABC)
21
  if total == 0:
22
  return {
23
  "P(A)": 0,
 
29
  "P(A ∩ B ∩ C)": 0,
30
  }
31
 
32
+ P_A = A / total
33
+ P_B = B / total
34
+ P_C = C / total
35
+ P_AB = AB / total
36
+ P_AC = AC / total
37
+ P_BC = BC / total
38
+ P_ABC = ABC / total
39
 
40
+ formatted_probs = {
41
+ "P(A)": f"{P_A:.2%} ({A}/{total})",
42
+ "P(B)": f"{P_B:.2%} ({B}/{total})",
43
+ "P(C)": f"{P_C:.2%} ({C}/{total})",
44
+ "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
45
+ "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
46
+ "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
47
+ "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})",
48
  }
49
+
50
+ return formatted_probs
51
 
52
  def plot_venn(A, B, C, AB, AC, BC, ABC):
53
  plt.figure(figsize=(8, 8))
 
60
  img = Image.open(buf)
61
  return img
62
 
63
+ def main(A, B, C, AB, AC, BC, ABC, U):
64
+ errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
65
+ if errors:
66
+ return None, {"error": "\n".join(errors)}
67
+
68
  venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
69
+ probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
70
  return venn_diagram, probabilities
71
 
72
  iface = gr.Interface(
 
78
  gr.Number(label="Cantidad en A ∩ B"),
79
  gr.Number(label="Cantidad en A ∩ C"),
80
  gr.Number(label="Cantidad en B ∩ C"),
81
+ gr.Number(label="Cantidad en A ∩ B ∩ C"),
82
+ gr.Number(label="Conjunto Universal (U)")
83
  ],
84
  outputs=[
85
  gr.Image(type="pil", label="Diagrama de Venn"),
86
  gr.JSON(label="Probabilidades Calculadas")
87
+ ],
88
+ live=True
89
  )
90
 
91
  iface.launch()