Skip to content

Commit 4c5defe

Browse files
author
Release Manager
committed
sagemathgh-40939: n_nodes and number_of_nodes_xxx in tree related classes fix sagemath#40935 in tree related classes. cf sagemath#40932 Should `number_of_nodes` also be an alias, or perhaps instead of `n_nodes`? Should `n_nodes_to_the_right`, `n_nodes_at_depth` also be aliases? Does this pollute the namespace too much? URL: sagemath#40939 Reported by: Martin Rubey Reviewer(s): David Coudert
2 parents c789ae6 + 542ad45 commit 4c5defe

File tree

11 files changed

+115
-99
lines changed

11 files changed

+115
-99
lines changed

src/sage/combinat/abstract_tree.py

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def pre_order_traversal_iter(self):
187187
sage: v = BinaryTree([u, u])
188188
sage: w = BinaryTree([v, v])
189189
sage: t = BinaryTree([w, w])
190-
sage: t.node_number()
190+
sage: t.number_of_nodes()
191191
7
192192
sage: l = [1 for i in t.pre_order_traversal_iter()]
193193
sage: len(l)
@@ -259,7 +259,7 @@ def iterative_pre_order_traversal(self, action=None):
259259
sage: v = BinaryTree([u, u])
260260
sage: w = BinaryTree([v, v])
261261
sage: t = BinaryTree([w, w])
262-
sage: t.node_number()
262+
sage: t.number_of_nodes()
263263
7
264264
sage: l = []
265265
sage: t.iterative_pre_order_traversal(lambda node: l.append(1))
@@ -376,7 +376,7 @@ def pre_order_traversal(self, action=None):
376376
sage: v = BinaryTree([u, u])
377377
sage: w = BinaryTree([v, v])
378378
sage: t = BinaryTree([w, w])
379-
sage: t.node_number()
379+
sage: t.number_of_nodes()
380380
7
381381
sage: l = []
382382
sage: t.pre_order_traversal(lambda node: l.append(1))
@@ -471,7 +471,7 @@ def post_order_traversal_iter(self):
471471
sage: v = BinaryTree([u, u])
472472
sage: w = BinaryTree([v, v])
473473
sage: t = BinaryTree([w, w])
474-
sage: t.node_number()
474+
sage: t.number_of_nodes()
475475
7
476476
sage: l = [1 for i in t.post_order_traversal_iter()]
477477
sage: len(l)
@@ -543,7 +543,7 @@ def post_order_traversal(self, action=None):
543543
sage: v = BinaryTree([u, u])
544544
sage: w = BinaryTree([v, v])
545545
sage: t = BinaryTree([w, w])
546-
sage: t.node_number()
546+
sage: t.number_of_nodes()
547547
7
548548
sage: l = []
549549
sage: t.post_order_traversal(lambda node: l.append(1))
@@ -617,7 +617,7 @@ def iterative_post_order_traversal(self, action=None):
617617
sage: v = BinaryTree([u, u])
618618
sage: w = BinaryTree([v, v])
619619
sage: t = BinaryTree([w, w])
620-
sage: t.node_number()
620+
sage: t.number_of_nodes()
621621
7
622622
sage: l = []
623623
sage: t.iterative_post_order_traversal(lambda node: l.append(1))
@@ -710,7 +710,7 @@ def contour_traversal(self, first_action=None, middle_action=None, final_action=
710710
sage: v = BinaryTree([u, u])
711711
sage: w = BinaryTree([v, v])
712712
sage: t = BinaryTree([w, w])
713-
sage: t.node_number()
713+
sage: t.number_of_nodes()
714714
7
715715
sage: l = []
716716
sage: t.contour_traversal(first_action = lambda node: l.append(0))
@@ -852,7 +852,7 @@ def paths_at_depth(self, depth, path=[]):
852852
853853
.. SEEALSO::
854854
855-
:meth:`paths`, :meth:`paths_to_the_right`, :meth:`node_number_at_depth`
855+
:meth:`paths`, :meth:`paths_to_the_right`, :meth:`number_of_nodes_at_depth`
856856
857857
EXAMPLES::
858858
@@ -886,7 +886,7 @@ def paths_at_depth(self, depth, path=[]):
886886
for i in range(len(self)):
887887
yield from self[i].paths_at_depth(depth - 1, path + [i])
888888

889-
def node_number_at_depth(self, depth):
889+
def number_of_nodes_at_depth(self, depth):
890890
r"""
891891
Return the number of nodes at a given depth.
892892
@@ -900,7 +900,8 @@ def node_number_at_depth(self, depth):
900900
901901
.. SEEALSO::
902902
903-
:meth:`node_number`, :meth:`node_number_to_the_right`, :meth:`paths_at_depth`
903+
:meth:`number_of_nodes`, :meth:`number_of_nodes_to_the_right`,
904+
:meth:`paths_at_depth`
904905
905906
EXAMPLES::
906907
@@ -915,7 +916,7 @@ def node_number_at_depth(self, depth):
915916
o o
916917
|
917918
o
918-
sage: [T.node_number_at_depth(i) for i in range(6)]
919+
sage: [T.number_of_nodes_at_depth(i) for i in range(6)]
919920
[1, 3, 4, 2, 1, 0]
920921
921922
TESTS:
@@ -927,15 +928,15 @@ def node_number_at_depth(self, depth):
927928
.
928929
sage: T.is_empty()
929930
True
930-
sage: [T.node_number_at_depth(i) for i in range(3)]
931+
sage: [T.number_of_nodes_at_depth(i) for i in range(3)]
931932
[0, 0, 0]
932933
933934
Check that we do not hit a recursion limit::
934935
935936
sage: T = OrderedTree([])
936937
sage: for _ in range(9999):
937938
....: T = OrderedTree([T])
938-
sage: T.node_number_at_depth(2000)
939+
sage: T.number_of_nodes_at_depth(2000)
939940
1
940941
"""
941942
if self.is_empty():
@@ -965,6 +966,8 @@ def lf_action(node):
965966
self.contour_traversal(fr_action, m_action, fn_action, lf_action)
966967
return Integer(m)
967968

969+
node_number_at_depth = number_of_nodes_at_depth
970+
968971
def paths_to_the_right(self, path):
969972
r"""
970973
Return a generator of paths for all nodes at the same
@@ -979,7 +982,7 @@ def paths_to_the_right(self, path):
979982
980983
.. SEEALSO::
981984
982-
:meth:`paths`, :meth:`paths_at_depth`, :meth:`node_number_to_the_right`
985+
:meth:`paths`, :meth:`paths_at_depth`, :meth:`number_of_nodes_to_the_right`
983986
984987
EXAMPLES::
985988
@@ -1023,7 +1026,7 @@ def paths_to_the_right(self, path):
10231026
for p in self[path[0]].paths_to_the_right(path[1:]):
10241027
yield tuple([path[0]] + list(p))
10251028

1026-
def node_number_to_the_right(self, path):
1029+
def number_of_nodes_to_the_right(self, path):
10271030
r"""
10281031
Return the number of nodes at the same depth and to the right of
10291032
the node identified by ``path``.
@@ -1033,7 +1036,8 @@ def node_number_to_the_right(self, path):
10331036
10341037
.. SEEALSO::
10351038
1036-
:meth:`node_number`, :meth:`node_number_at_depth`, :meth:`paths_to_the_right`
1039+
:meth:`number_of_nodes`, :meth:`number_of_nodes_at_depth`,
1040+
:meth:`paths_to_the_right`
10371041
10381042
EXAMPLES::
10391043
@@ -1048,28 +1052,30 @@ def node_number_to_the_right(self, path):
10481052
o o
10491053
|
10501054
o
1051-
sage: T.node_number_to_the_right(())
1055+
sage: T.number_of_nodes_to_the_right(())
10521056
0
1053-
sage: T.node_number_to_the_right((0,))
1057+
sage: T.number_of_nodes_to_the_right((0,))
10541058
2
1055-
sage: T.node_number_to_the_right((0,1))
1059+
sage: T.number_of_nodes_to_the_right((0,1))
10561060
2
1057-
sage: T.node_number_to_the_right((0,1,0))
1061+
sage: T.number_of_nodes_to_the_right((0,1,0))
10581062
1
10591063
10601064
sage: T = OrderedTree([])
1061-
sage: T.node_number_to_the_right(())
1065+
sage: T.number_of_nodes_to_the_right(())
10621066
0
10631067
"""
10641068
depth = len(path)
10651069
if depth == 0:
10661070
return Integer(0)
1067-
result = sum(son.node_number_at_depth(depth - 1)
1071+
result = sum(son.number_of_nodes_at_depth(depth - 1)
10681072
for son in self[path[0] + 1:])
10691073
if path[0] < len(self) and path[0] >= 0:
1070-
result += self[path[0]].node_number_to_the_right(path[1:])
1074+
result += self[path[0]].number_of_nodes_to_the_right(path[1:])
10711075
return result
10721076

1077+
node_number_to_the_right = number_of_nodes_to_the_right
1078+
10731079
def subtrees(self):
10741080
"""
10751081
Return a generator for all nonempty subtrees of ``self``.
@@ -1099,12 +1105,12 @@ def subtrees(self):
10991105
TESTS::
11001106
11011107
sage: t = OrderedTree([[], [[], [[], []], [[], []]], [[], []]])
1102-
sage: t.node_number() == len(list(t.subtrees()))
1108+
sage: t.number_of_nodes() == len(list(t.subtrees()))
11031109
True
11041110
sage: list(BinaryTree().subtrees())
11051111
[]
11061112
sage: bt = BinaryTree([[],[[],[]]])
1107-
sage: bt.node_number() == len(list(bt.subtrees()))
1113+
sage: bt.number_of_nodes() == len(list(bt.subtrees()))
11081114
True
11091115
"""
11101116
return self.pre_order_traversal_iter()
@@ -1142,12 +1148,12 @@ def paths(self):
11421148
TESTS::
11431149
11441150
sage: t = OrderedTree([[], [[], [[], []], [[], []]], [[], []]])
1145-
sage: t.node_number() == len(list(t.paths()))
1151+
sage: t.number_of_nodes() == len(list(t.paths()))
11461152
True
11471153
sage: list(BinaryTree().paths())
11481154
[]
11491155
sage: bt = BinaryTree([[],[[],[]]])
1150-
sage: bt.node_number() == len(list(bt.paths()))
1156+
sage: bt.number_of_nodes() == len(list(bt.paths()))
11511157
True
11521158
"""
11531159
if not self.is_empty():
@@ -1156,36 +1162,36 @@ def paths(self):
11561162
for p in t.paths():
11571163
yield (i,) + p
11581164

1159-
def node_number(self):
1165+
def number_of_nodes(self):
11601166
"""
11611167
Return the number of nodes of ``self``.
11621168
11631169
.. SEEALSO::
11641170
1165-
:meth:`node_number_at_depth`, :meth:`node_number_to_the_right`
1171+
:meth:`number_of_nodes_at_depth`, :meth:`number_of_nodes_to_the_right`
11661172
11671173
EXAMPLES::
11681174
1169-
sage: OrderedTree().node_number()
1175+
sage: OrderedTree().number_of_nodes()
11701176
1
1171-
sage: OrderedTree([]).node_number()
1177+
sage: OrderedTree([]).number_of_nodes()
11721178
1
1173-
sage: OrderedTree([[],[]]).node_number()
1179+
sage: OrderedTree([[],[]]).number_of_nodes()
11741180
3
1175-
sage: OrderedTree([[],[[]]]).node_number()
1181+
sage: OrderedTree([[],[[]]]).number_of_nodes()
11761182
4
1177-
sage: OrderedTree([[], [[], [[], []], [[], []]], [[], []]]).node_number()
1183+
sage: OrderedTree([[], [[], [[], []], [[], []]], [[], []]]).number_of_nodes()
11781184
13
11791185
11801186
EXAMPLES::
11811187
1182-
sage: BinaryTree(None).node_number()
1188+
sage: BinaryTree(None).number_of_nodes()
11831189
0
1184-
sage: BinaryTree([]).node_number()
1190+
sage: BinaryTree([]).number_of_nodes()
11851191
1
1186-
sage: BinaryTree([[], None]).node_number()
1192+
sage: BinaryTree([[], None]).number_of_nodes()
11871193
2
1188-
sage: BinaryTree([[None, [[], []]], None]).node_number()
1194+
sage: BinaryTree([[None, [[], []]], None]).number_of_nodes()
11891195
5
11901196
11911197
TESTS:
@@ -1195,7 +1201,7 @@ def node_number(self):
11951201
sage: T = OrderedTree([])
11961202
sage: for _ in range(9999):
11971203
....: T = OrderedTree([T])
1198-
sage: T.node_number()
1204+
sage: T.number_of_nodes()
11991205
10000
12001206
"""
12011207
# An attribute _node_number for storing the number of nodes
@@ -1221,6 +1227,8 @@ def count(node):
12211227
self.iterative_post_order_traversal(count)
12221228
return self._node_number
12231229

1230+
node_number = number_of_nodes
1231+
12241232
def depth(self):
12251233
"""
12261234
Return the depth of ``self``.
@@ -1581,7 +1589,7 @@ def to_hexacode(self):
15811589
"""
15821590
if len(self) > 15:
15831591
raise ValueError("the width of the tree is too large")
1584-
if self.node_number() == 1:
1592+
if self.number_of_nodes() == 1:
15851593
return "0"
15861594
return ("%x" % len(self)) + "".join(u.to_hexacode() for u in self)
15871595

@@ -1609,7 +1617,7 @@ def tree_factorial(self):
16091617
sage: BinaryTree().tree_factorial()
16101618
1
16111619
"""
1612-
nb = self.node_number()
1620+
nb = self.number_of_nodes()
16131621
if nb <= 1:
16141622
return Integer(1)
16151623
return nb * prod(s.tree_factorial() for s in self)
@@ -2409,7 +2417,7 @@ def leaf_labels(self):
24092417
sage: LBT(None).leaf_labels()
24102418
[]
24112419
"""
2412-
return [t.label() for t in self.subtrees() if t.node_number() == 1]
2420+
return [t.label() for t in self.subtrees() if t.number_of_nodes() == 1]
24132421

24142422
def __eq__(self, other):
24152423
"""

src/sage/combinat/bijectionist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@
156156
....: else:
157157
....: return m+1
158158
sage: bij = Bijectionist(A, B, tau)
159-
sage: bij.set_statistics((lambda a: a.size(), lambda b: b.node_number()-1))
159+
sage: bij.set_statistics((lambda a: a.size(), lambda b: b.number_of_nodes()-1))
160160
sage: from sage.combinat.cyclic_sieving_phenomenon import orbit_decomposition
161161
sage: bij.set_constant_blocks(orbit_decomposition(A, theta))
162162
sage: list(bij.solutions_iterator())
@@ -173,7 +173,7 @@
173173
....: B2.to_dyck_word()).to_binary_tree()
174174
sage: bij = Bijectionist(A, B)
175175
sage: bij.set_intertwining_relations((2, concat_path, concat_tree))
176-
sage: bij.set_statistics((lambda d: d.semilength(), lambda t: t.node_number()))
176+
sage: bij.set_statistics((lambda d: d.semilength(), lambda t: t.number_of_nodes()))
177177
sage: for D in sorted(bij.minimal_subdistributions_iterator(), key=lambda x: (len(x[0][0]), x)):
178178
....: ascii_art(D)
179179
( [ /\ ], [ o ] )

0 commit comments

Comments
 (0)