hedtorresca commited on
Commit
695fe89
·
verified ·
1 Parent(s): 2baf94a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -63
app.py CHANGED
@@ -1,6 +1,5 @@
1
  import gradio as gr
2
  import matplotlib.pyplot as plt
3
- from matplotlib.patches import Rectangle
4
  from matplotlib_venn import venn3
5
  from io import BytesIO
6
  from PIL import Image
@@ -20,7 +19,6 @@ def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
20
 
21
  def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
22
  total = U
23
-
24
  P_A = A / total
25
  P_B = B / total
26
  P_C = C / total
@@ -29,15 +27,6 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
29
  P_BC = BC / total
30
  P_ABC = ABC / total
31
 
32
- P_A_given_B = P_AB / P_B if P_B > 0 else 0
33
- P_B_given_A = P_AB / P_A if P_A > 0 else 0
34
- P_A_given_C = P_AC / P_C if P_C > 0 else 0
35
- P_C_given_A = P_AC / P_A if P_A > 0 else 0
36
- P_B_given_C = P_BC / P_C if P_C > 0 else 0
37
- P_C_given_B = P_BC / P_B if P_B > 0 else 0
38
-
39
- P_B_given_A_bayes = (P_A_given_B * P_B) / P_A if P_A > 0 else 0
40
-
41
  formatted_probs = {
42
  "P(A)": f"{P_A:.2%} ({A}/{total})",
43
  "P(B)": f"{P_B:.2%} ({B}/{total})",
@@ -45,26 +34,13 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
45
  "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
46
  "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
47
  "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
48
- "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})",
49
- "P(A | B)": f"{P_A_given_B:.2%}",
50
- "P(B | A)": f"{P_B_given_A:.2%}",
51
- "P(A | C)": f"{P_A_given_C:.2%}",
52
- "P(C | A)": f"{P_C_given_A:.2%}",
53
- "P(B | C)": f"{P_B_given_C:.2%}",
54
- "P(C | B)": f"{P_C_given_B:.2%}",
55
- "P(B | A) (Bayes)": f"{P_B_given_A_bayes:.2%}",
56
  }
57
 
58
  return formatted_probs
59
 
60
  def plot_venn(A, B, C, AB, AC, BC, ABC, U):
61
  plt.figure(figsize=(8, 8))
62
-
63
- # Dibujar el conjunto universal como un rectángulo
64
- ax = plt.gca()
65
- ax.add_patch(Rectangle((0, 0), 1, 1, fill=None, edgecolor='black', linewidth=2))
66
-
67
- # Dibujar el diagrama de Venn
68
  subsets = {
69
  '100': A - AB - AC + ABC,
70
  '010': B - AB - BC + ABC,
@@ -75,15 +51,8 @@ def plot_venn(A, B, C, AB, AC, BC, ABC, U):
75
  '111': ABC
76
  }
77
  venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
78
-
79
- # Mostrar la cantidad fuera de A, B y C si no coincide con U
80
- suma_subconjuntos = A + B + C - AB - AC - BC + ABC
81
- if U > suma_subconjuntos:
82
- faltante = U - suma_subconjuntos
83
- plt.text(0.5, 0.9, f"Fuera de A, B y C: {faltante}", horizontalalignment='center', fontsize=12, bbox=dict(facecolor='white', alpha=0.5))
84
 
85
- plt.title(f"Diagrama de Venn con U = {U}")
86
-
87
  buf = BytesIO()
88
  plt.savefig(buf, format='png')
89
  buf.seek(0)
@@ -91,39 +60,17 @@ def plot_venn(A, B, C, AB, AC, BC, ABC, U):
91
  return img
92
 
93
  def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
94
- # Ajuste de los valores sugeridos para que sean realistas y no negativos
95
- max_AB = min(A, B, U - (A + B + C - AB - AC - BC + ABC))
96
- max_AC = min(A, C, U - (A + B + C - AB - AC - BC + ABC))
97
- max_BC = min(B, C, U - (A + B + C - AB - AC - BC + ABC))
98
  max_ABC = min(max_AB, max_AC, max_BC)
99
-
100
- min_AB = max(0, A + B - U + C)
101
- min_AC = max(0, A + C - U + B)
102
- min_BC = max(0, B + C - U + A)
103
- min_ABC = max(0, A + B + C - U)
104
-
105
- max_A = U - (B + C - BC)
106
- max_B = U - (A + C - AC)
107
- max_C = U - (A + B - AB)
108
- min_A = max(AB + AC - ABC, 0)
109
- min_B = max(AB + BC - ABC, 0)
110
- min_C = max(AC + BC - ABC, 0)
111
 
112
  suggestions = {
113
- "Máximo valor sugerido para A": max(0, max_A),
114
- "Mínimo valor sugerido para A": max(0, min_A),
115
- "Máximo valor sugerido para B": max(0, max_B),
116
- "Mínimo valor sugerido para B": max(0, min_B),
117
- "Máximo valor sugerido para C": max(0, max_C),
118
- "Mínimo valor sugerido para C": max(0, min_C),
119
- "Máximo valor sugerido para A ∩ B": max(0, max_AB),
120
- "Mínimo valor sugerido para A ∩ B": max(0, min_AB),
121
- "Máximo valor sugerido para A ∩ C": max(0, max_AC),
122
- "Mínimo valor sugerido para A ∩ C": max(0, min_AC),
123
- "Máximo valor sugerido para B ∩ C": max(0, max_BC),
124
- "Mínimo valor sugerido para B ∩ C": max(0, min_BC),
125
- "Máximo valor sugerido para A ∩ B ∩ C": max(0, max_ABC),
126
- "Mínimo valor sugerido para A ∩ B ∩ C": max(0, min_ABC),
127
  }
128
  return suggestions
129
 
 
1
  import gradio as gr
2
  import matplotlib.pyplot as plt
 
3
  from matplotlib_venn import venn3
4
  from io import BytesIO
5
  from PIL import Image
 
19
 
20
  def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
21
  total = U
 
22
  P_A = A / total
23
  P_B = B / total
24
  P_C = C / total
 
27
  P_BC = BC / total
28
  P_ABC = ABC / total
29
 
 
 
 
 
 
 
 
 
 
30
  formatted_probs = {
31
  "P(A)": f"{P_A:.2%} ({A}/{total})",
32
  "P(B)": f"{P_B:.2%} ({B}/{total})",
 
34
  "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
35
  "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
36
  "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
37
+ "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})"
 
 
 
 
 
 
 
38
  }
39
 
40
  return formatted_probs
41
 
42
  def plot_venn(A, B, C, AB, AC, BC, ABC, U):
43
  plt.figure(figsize=(8, 8))
 
 
 
 
 
 
44
  subsets = {
45
  '100': A - AB - AC + ABC,
46
  '010': B - AB - BC + ABC,
 
51
  '111': ABC
52
  }
53
  venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
54
+ plt.title(f"Diagrama de Venn")
 
 
 
 
 
55
 
 
 
56
  buf = BytesIO()
57
  plt.savefig(buf, format='png')
58
  buf.seek(0)
 
60
  return img
61
 
62
  def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
63
+ # Generar sugerencias válidas y sin valores negativos
64
+ max_AB = min(A, B)
65
+ max_AC = min(A, C)
66
+ max_BC = min(B, C)
67
  max_ABC = min(max_AB, max_AC, max_BC)
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
  suggestions = {
70
+ "Máximo valor sugerido para A ∩ B": max_AB,
71
+ "Máximo valor sugerido para A ∩ C": max_AC,
72
+ "Máximo valor sugerido para B ∩ C": max_BC,
73
+ "Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
 
 
 
 
 
 
 
 
 
 
74
  }
75
  return suggestions
76