GroupsMath 0.7.2__tar.gz → 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GroupsMath
3
- Version: 0.7.2
3
+ Version: 1.0.0
4
4
  Summary: The educational Python library for Group Theory
5
5
  Author-email: Mario Sultan Romero <mariosultan.uem@gmail.com>
6
6
  License: PolyForm Strict License 1.0.0.
@@ -20,26 +20,25 @@ Requires-Dist: matplotlib>=3.0.0
20
20
  Requires-Dist: numpy>=1.20.0
21
21
  Dynamic: license-file
22
22
 
23
- # GroupsMath – v0.7.2 – release candidate for v1.0.0
23
+ # GroupsMath – v1.0.0
24
24
 
25
25
  [![PyPI Downloads](https://img.shields.io/pypi/dm/groupsmath)](https://pypistats.org/packages/groupsmath)
26
26
  [![PyPI Version](https://img.shields.io/pypi/v/groupsmath?color=2A646E)](https://pypi.org/project/groupsmath/)
27
27
  [![Python Versions](https://img.shields.io/pypi/pyversions/groupsmath?color=2A646E)](https://pypi.org/project/groupsmath/)
28
28
  ![Last Commit](https://img.shields.io/github/last-commit/MarioSultan/groupsmath?color=2A646E)
29
- ![coverage](https://img.shields.io/badge/road%20to%20v1.0.0-97%25-yellowgreen?color=2A646E)
30
29
  <!-- ![GitHub Stars](https://img.shields.io/github/stars/MarioSultan/groupsmath?style=social) -->
31
30
 
32
31
 
33
32
  ![GroupsMath Logo](https://raw.githubusercontent.com/MarioSultan/GroupsMath/main/logo.png)
34
33
 
35
34
 
36
- **GroupsMath** is a Python module for constructing, studying, and manipulating finite and infinite groups.
35
+ **GroupsMath** is an open-source Python library for exploring and computing with mathematical groups. It lets you construct groups, perform operations on their elements, and study their structure through concepts such as subgroups, quotient groups, products, automorphisms, and conjugacy classes. Its goal is to make group theory **accessible, intuitive, and computational**, connecting abstract mathematics with hands-on experimentation in Python.
37
36
 
38
- The project aims to provide a **simple** and **intuitive** interface for working with groups and their algebraic properties.
39
37
 
40
38
  ![Examples](https://raw.githubusercontent.com/MarioSultan/GroupsMath/main/imgs/examples.png)
41
39
 
42
- > Visit here the [GroupsMath official documentation](https://groupsmath.readthedocs.io/en/latest/).
40
+
41
+ 📚 Visit here the [GroupsMath official documentation](https://groupsmath.readthedocs.io/en/latest/).
43
42
 
44
43
 
45
44
  ---
@@ -115,7 +114,7 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
115
114
  **GROUPS:**
116
115
  * Construction of finite groups with classes `CayleyGroup` and `ExplicitGroup`.
117
116
  * Determination of the order of a group and its elements.
118
- * Operation with group elements (multiplication, inverse, powers, ...)
117
+ * Operation with group elements (multiplication, inverse, powers, ...).
119
118
  * Computation of Cayley tables with `matplotlib.pyplot`.
120
119
  * Detection of algebraic properties such as cyclicity, commutativity and solubility.
121
120
  * Centralizers, conjugacy classes and conmutator.
@@ -128,7 +127,7 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
128
127
  * Normal subgroups.
129
128
  * Quotient groups $Q=G/H$.
130
129
  * Conmutator and derived subgroups $G'$.
131
- * Abelianization $G/G'$
130
+ * Abelianization $G/G'$.
132
131
  * Hasse diagrams. (*experimental feature*)
133
132
 
134
133
  **AUTOMORPHISMS:**
@@ -148,6 +147,10 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
148
147
  **PRESENTED GROUPS**
149
148
  * Presentation of groups, generators and class `PresentedGroup`. (*experimental feature*)
150
149
 
150
+ **EDUCATION**
151
+ * Jupyter notebook [A swift introduction to group theory with *GroupsMath*](https://mybinder.org/v2/gh/MarioSultan/GroupsMath/main?labpath=GroupsMath_demo.ipynb) in Binder.
152
+
153
+
151
154
  The available functionality will expand as the project develops.
152
155
 
153
156
  ---
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GroupsMath
3
- Version: 0.7.2
3
+ Version: 1.0.0
4
4
  Summary: The educational Python library for Group Theory
5
5
  Author-email: Mario Sultan Romero <mariosultan.uem@gmail.com>
6
6
  License: PolyForm Strict License 1.0.0.
@@ -20,26 +20,25 @@ Requires-Dist: matplotlib>=3.0.0
20
20
  Requires-Dist: numpy>=1.20.0
21
21
  Dynamic: license-file
22
22
 
23
- # GroupsMath – v0.7.2 – release candidate for v1.0.0
23
+ # GroupsMath – v1.0.0
24
24
 
25
25
  [![PyPI Downloads](https://img.shields.io/pypi/dm/groupsmath)](https://pypistats.org/packages/groupsmath)
26
26
  [![PyPI Version](https://img.shields.io/pypi/v/groupsmath?color=2A646E)](https://pypi.org/project/groupsmath/)
27
27
  [![Python Versions](https://img.shields.io/pypi/pyversions/groupsmath?color=2A646E)](https://pypi.org/project/groupsmath/)
28
28
  ![Last Commit](https://img.shields.io/github/last-commit/MarioSultan/groupsmath?color=2A646E)
29
- ![coverage](https://img.shields.io/badge/road%20to%20v1.0.0-97%25-yellowgreen?color=2A646E)
30
29
  <!-- ![GitHub Stars](https://img.shields.io/github/stars/MarioSultan/groupsmath?style=social) -->
31
30
 
32
31
 
33
32
  ![GroupsMath Logo](https://raw.githubusercontent.com/MarioSultan/GroupsMath/main/logo.png)
34
33
 
35
34
 
36
- **GroupsMath** is a Python module for constructing, studying, and manipulating finite and infinite groups.
35
+ **GroupsMath** is an open-source Python library for exploring and computing with mathematical groups. It lets you construct groups, perform operations on their elements, and study their structure through concepts such as subgroups, quotient groups, products, automorphisms, and conjugacy classes. Its goal is to make group theory **accessible, intuitive, and computational**, connecting abstract mathematics with hands-on experimentation in Python.
37
36
 
38
- The project aims to provide a **simple** and **intuitive** interface for working with groups and their algebraic properties.
39
37
 
40
38
  ![Examples](https://raw.githubusercontent.com/MarioSultan/GroupsMath/main/imgs/examples.png)
41
39
 
42
- > Visit here the [GroupsMath official documentation](https://groupsmath.readthedocs.io/en/latest/).
40
+
41
+ 📚 Visit here the [GroupsMath official documentation](https://groupsmath.readthedocs.io/en/latest/).
43
42
 
44
43
 
45
44
  ---
@@ -115,7 +114,7 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
115
114
  **GROUPS:**
116
115
  * Construction of finite groups with classes `CayleyGroup` and `ExplicitGroup`.
117
116
  * Determination of the order of a group and its elements.
118
- * Operation with group elements (multiplication, inverse, powers, ...)
117
+ * Operation with group elements (multiplication, inverse, powers, ...).
119
118
  * Computation of Cayley tables with `matplotlib.pyplot`.
120
119
  * Detection of algebraic properties such as cyclicity, commutativity and solubility.
121
120
  * Centralizers, conjugacy classes and conmutator.
@@ -128,7 +127,7 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
128
127
  * Normal subgroups.
129
128
  * Quotient groups $Q=G/H$.
130
129
  * Conmutator and derived subgroups $G'$.
131
- * Abelianization $G/G'$
130
+ * Abelianization $G/G'$.
132
131
  * Hasse diagrams. (*experimental feature*)
133
132
 
134
133
  **AUTOMORPHISMS:**
@@ -148,6 +147,10 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
148
147
  **PRESENTED GROUPS**
149
148
  * Presentation of groups, generators and class `PresentedGroup`. (*experimental feature*)
150
149
 
150
+ **EDUCATION**
151
+ * Jupyter notebook [A swift introduction to group theory with *GroupsMath*](https://mybinder.org/v2/gh/MarioSultan/GroupsMath/main?labpath=GroupsMath_demo.ipynb) in Binder.
152
+
153
+
151
154
  The available functionality will expand as the project develops.
152
155
 
153
156
  ---
@@ -1,23 +1,22 @@
1
- # GroupsMath – v0.7.2 – release candidate for v1.0.0
1
+ # GroupsMath – v1.0.0
2
2
 
3
3
  [![PyPI Downloads](https://img.shields.io/pypi/dm/groupsmath)](https://pypistats.org/packages/groupsmath)
4
4
  [![PyPI Version](https://img.shields.io/pypi/v/groupsmath?color=2A646E)](https://pypi.org/project/groupsmath/)
5
5
  [![Python Versions](https://img.shields.io/pypi/pyversions/groupsmath?color=2A646E)](https://pypi.org/project/groupsmath/)
6
6
  ![Last Commit](https://img.shields.io/github/last-commit/MarioSultan/groupsmath?color=2A646E)
7
- ![coverage](https://img.shields.io/badge/road%20to%20v1.0.0-97%25-yellowgreen?color=2A646E)
8
7
  <!-- ![GitHub Stars](https://img.shields.io/github/stars/MarioSultan/groupsmath?style=social) -->
9
8
 
10
9
 
11
10
  ![GroupsMath Logo](https://raw.githubusercontent.com/MarioSultan/GroupsMath/main/logo.png)
12
11
 
13
12
 
14
- **GroupsMath** is a Python module for constructing, studying, and manipulating finite and infinite groups.
13
+ **GroupsMath** is an open-source Python library for exploring and computing with mathematical groups. It lets you construct groups, perform operations on their elements, and study their structure through concepts such as subgroups, quotient groups, products, automorphisms, and conjugacy classes. Its goal is to make group theory **accessible, intuitive, and computational**, connecting abstract mathematics with hands-on experimentation in Python.
15
14
 
16
- The project aims to provide a **simple** and **intuitive** interface for working with groups and their algebraic properties.
17
15
 
18
16
  ![Examples](https://raw.githubusercontent.com/MarioSultan/GroupsMath/main/imgs/examples.png)
19
17
 
20
- > Visit here the [GroupsMath official documentation](https://groupsmath.readthedocs.io/en/latest/).
18
+
19
+ 📚 Visit here the [GroupsMath official documentation](https://groupsmath.readthedocs.io/en/latest/).
21
20
 
22
21
 
23
22
  ---
@@ -93,7 +92,7 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
93
92
  **GROUPS:**
94
93
  * Construction of finite groups with classes `CayleyGroup` and `ExplicitGroup`.
95
94
  * Determination of the order of a group and its elements.
96
- * Operation with group elements (multiplication, inverse, powers, ...)
95
+ * Operation with group elements (multiplication, inverse, powers, ...).
97
96
  * Computation of Cayley tables with `matplotlib.pyplot`.
98
97
  * Detection of algebraic properties such as cyclicity, commutativity and solubility.
99
98
  * Centralizers, conjugacy classes and conmutator.
@@ -106,7 +105,7 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
106
105
  * Normal subgroups.
107
106
  * Quotient groups $Q=G/H$.
108
107
  * Conmutator and derived subgroups $G'$.
109
- * Abelianization $G/G'$
108
+ * Abelianization $G/G'$.
110
109
  * Hasse diagrams. (*experimental feature*)
111
110
 
112
111
  **AUTOMORPHISMS:**
@@ -126,6 +125,10 @@ GroupsMath is designed to provide tools for working with finite (and infinite) g
126
125
  **PRESENTED GROUPS**
127
126
  * Presentation of groups, generators and class `PresentedGroup`. (*experimental feature*)
128
127
 
128
+ **EDUCATION**
129
+ * Jupyter notebook [A swift introduction to group theory with *GroupsMath*](https://mybinder.org/v2/gh/MarioSultan/GroupsMath/main?labpath=GroupsMath_demo.ipynb) in Binder.
130
+
131
+
129
132
  The available functionality will expand as the project develops.
130
133
 
131
134
  ---
@@ -21,7 +21,7 @@ from math import gcd
21
21
 
22
22
  #################### DEFINITIONS ####################
23
23
 
24
- __version__ = "0.7.2"
24
+ __version__ = "1.0.0"
25
25
  __errorcolor__ = "\033[31m"
26
26
 
27
27
  tgl_color = "#2A646E"
@@ -183,11 +183,11 @@ class ExplicitGroup(Group):
183
183
  def is_abelian(self):
184
184
  return self.order()==len(self.center())
185
185
 
186
- def cayley_table(self, title="", colormap=rainbow, names=None, math_mode=True):
187
- return self.toCayleyGroup().cayley_table(title=title, colormap=colormap, names=names, math_mode=math_mode)
186
+ def cayley_table(self, **kwargs):
187
+ return self.toCayleyGroup().cayley_table(**kwargs)
188
188
 
189
- def cayley_graph(self, generators=None, title="", colormap=standard, names=None, edgenames=None, math_mode=True, node_size=1000):
190
- return self.toCayleyGroup.cayley_graph(generators=generators, title=title, colormap=colormap, names=names, edgenames=edgenames, math_mode=math_mode, node_size=node_size)
189
+ def cayley_graph(self, **kwargs):
190
+ return self.toCayleyGroup().cayley_graph(**kwargs)
191
191
 
192
192
  #–> SUBGROUPS
193
193
 
@@ -336,6 +336,9 @@ class ExplicitGroup(Group):
336
336
 
337
337
  def is_solvable(self):
338
338
  return len(self.derived_series()[-1]) == 1
339
+
340
+ def hasse_diagram(self):
341
+ self.toCayleyGroup().hasse_diagram()
339
342
 
340
343
  #–> AUTOMORPHISMS
341
344
 
@@ -366,6 +369,9 @@ class ExplicitGroup(Group):
366
369
  sub_indices = _subgroup_generated_by(cayley_grp.cayley, subset_indices)
367
370
  return len(sub_indices) == len(self)
368
371
 
372
+ def rank(self):
373
+ return len(self.generators())
374
+
369
375
  #-> ISOMORPHISMS
370
376
 
371
377
  def is_isomorphic_to(self, target):
@@ -885,10 +891,6 @@ class CayleyGroup(Group):
885
891
  #nx.draw_networkx_edges(gr,pos,arrows=False)
886
892
  plt.show()
887
893
 
888
-
889
-
890
-
891
-
892
894
  #–> AUTOMORPHISMS
893
895
 
894
896
  def is_automorphism(self, phi):
@@ -1020,6 +1022,9 @@ class CayleyGroup(Group):
1020
1022
  sub_indices = _subgroup_generated_by(self.cayley, subset_indices)
1021
1023
  return len(sub_indices) == self.order()
1022
1024
 
1025
+ def rank(self):
1026
+ return len(self.generators())
1027
+
1023
1028
  #-> ISOMORPHISMS
1024
1029
 
1025
1030
  def is_isomorphic_to(self, target): #Revisar, pues es demasiado grande y algo puede salir mal
@@ -1138,6 +1143,17 @@ class ExplicitSubgroup(ExplicitGroup, Subgroup):
1138
1143
  def __lt__(self, group):
1139
1144
  return group == self.group and self.subgroup.order() < self.group.order()
1140
1145
 
1146
+ #-> GRAPHS
1147
+
1148
+ def cayley_table(self, **kwargs):
1149
+ return self.subgroup.cayley_table(**kwargs)
1150
+
1151
+ def cayley_graph(self, **kwargs):
1152
+ return self.subgroup.cayley_graph(**kwargs)
1153
+
1154
+ def hasse_diagram(self, **kwargs):
1155
+ return self.subgroup.hasse_diagram(**kwargs)
1156
+
1141
1157
  #–> QUOTIENTS & COSETS
1142
1158
 
1143
1159
  def coset(self, element, side="left", return_names=True):
@@ -1269,6 +1285,17 @@ class CayleySubgroup(CayleyGroup, Subgroup):
1269
1285
 
1270
1286
  return True
1271
1287
 
1288
+ #-> GRAPHS
1289
+
1290
+ def cayley_table(self, **kwargs):
1291
+ return self.subgroup.cayley_table(**kwargs)
1292
+
1293
+ def cayley_graph(self, **kwargs):
1294
+ return self.subgroup.cayley_graph(**kwargs)
1295
+
1296
+ def hasse_diagram(self, **kwargs):
1297
+ return self.subgroup.hasse_diagram(**kwargs)
1298
+
1272
1299
  #–> QUOTIENTS
1273
1300
 
1274
1301
  def coset(self, element, side="left", return_names=True):
@@ -1435,12 +1462,6 @@ class AutomorphismFunction:
1435
1462
 
1436
1463
  #################### HIDDEN FUNCTIONS ####################
1437
1464
 
1438
- def _obtener_nombre(var_obj):
1439
- for nombre, valor in globals().items():
1440
- if valor is var_obj:
1441
- return nombre
1442
- return None
1443
-
1444
1465
  def _is_closed(tabla):
1445
1466
  n = len(tabla)
1446
1467
  E = _get_elements(tabla)
@@ -1581,24 +1602,6 @@ def _check_explicit_group(elements: list, operation) -> tuple[bool, str]:
1581
1602
 
1582
1603
  return True, "Valid Group"
1583
1604
 
1584
- def _identity(G):
1585
- neutro = None
1586
- for e in range(len(G)):
1587
- ok = True
1588
- for a in range(len(G)):
1589
- if G[e][a] != a:
1590
- ok = False
1591
- break
1592
- if G[a][e] != a:
1593
- ok = False
1594
- break
1595
- if ok:
1596
- neutro = e
1597
- break
1598
- if neutro is None:
1599
- return (False,"IndentityError – no identity element found")
1600
- return neutro
1601
-
1602
1605
  def _subset(G, elements):
1603
1606
  return [[G[r][c] for c in elements] for r in elements]
1604
1607
 
@@ -1726,24 +1729,6 @@ def _subgroup_generated_by(cayley, generators_indices):
1726
1729
 
1727
1730
  return sorted(list(generated))
1728
1731
 
1729
- def _order_preserving_permutations(orders):
1730
-
1731
- classes = {}
1732
-
1733
- for i, order in enumerate(orders):
1734
- classes.setdefault(order, []).append(i)
1735
-
1736
- classes = list(classes.values())
1737
-
1738
- for perms in product(*(permutations(c) for c in classes)):
1739
- result = list(range(len(orders)))
1740
-
1741
- for domain, image in zip(classes, perms):
1742
- for x, y in zip(domain, image):
1743
- result[x] = y
1744
-
1745
- yield tuple(result)
1746
-
1747
1732
 
1748
1733
  #################### PRODUCTS ####################
1749
1734
 
@@ -2010,53 +1995,7 @@ def icosahedral_group():
2010
1995
  return CayleyGroup((alternating_group(5) * cyclic_group(2)).cayley,_skip_validation=True)
2011
1996
 
2012
1997
 
2013
- #################### VISUALIZATION AND RENAMING HELPERS ####################
2014
-
2015
- def cayley_table(G, title="", colormap=rainbow, names="", renaming=[], math_mode=True):
2016
-
2017
- if title=="":
2018
- if _obtener_nombre(G)==None:
2019
- title = f"Cayley table"
2020
- else:
2021
- title = f"Cayley table of {_obtener_nombre(G)}"
2022
- if names=="":
2023
- if len(G)<=20:
2024
- names=True
2025
- else:
2026
- names=False
2027
- if renaming==[]:
2028
- if math_mode:
2029
- renaming = [rf"${e}$" for e in range(len(G))]
2030
- else:
2031
- renaming = [rf"{e}" for e in range(len(G))]
2032
-
2033
- elements = range(len(G))
2034
- fig, ax = plt.subplots(figsize=(6, 5))
2035
- im = ax.imshow(G, cmap=colormap)
2036
- ax.set_xticks(np.arange(len(elements)))
2037
- ax.set_yticks(np.arange(len(elements)))
2038
- ax.set_xticklabels(renaming)
2039
- ax.set_yticklabels(renaming)
2040
-
2041
- ax.xaxis.tick_top()
2042
-
2043
- if names:
2044
- for i in range(len(elements)):
2045
- for j in range(len(elements)):
2046
- color_texto = "black"
2047
- ax.text(
2048
- i,
2049
- j,
2050
- f"{renaming[G[j][i]]}",
2051
- ha="center",
2052
- va="center",
2053
- color=color_texto,
2054
- fontsize=12,
2055
- )
2056
-
2057
- plt.title(title)
2058
- plt.tight_layout()
2059
- plt.show()
1998
+ #################### RENAMING HELPERS ####################
2060
1999
 
2061
2000
  def _renaming_C(n):
2062
2001
  r = []
@@ -555,4 +555,4 @@ class PresentedGroup(Group):
555
555
 
556
556
 
557
557
  def __repr__(self):
558
- return self.__str__()
558
+ return self.__str__()
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "GroupsMath" # Nombre en PyPI
7
- version = "0.7.2"
7
+ version = "1.0.0"
8
8
  description = "The educational Python library for Group Theory"
9
9
  readme = "README.md" # Esta será la documentación visible en la portada de PyPI
10
10
  requires-python = ">=3.8"
File without changes
File without changes