Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Switch to GitLab Next
Sign in / Register
Toggle navigation
Menu
Open sidebar
SageMath
SageMath Developers
tracmirror
Compare Revisions
develop...9a49d59b96a65f8c304c5325947255f44c6bc389
Commits (4)
Make the assumption in _language_naive clearer
· 90571936
Martin Rejmon
authored
Apr 18, 2021
90571936
Make the argument in _language_naive also a factor
· c3379330
Martin Rejmon
authored
Apr 18, 2021
c3379330
Speed up _language_naive
· e6d88b22
Martin Rejmon
authored
Apr 18, 2021
e6d88b22
31684: Inline a function call
· 9a49d59b
Martin Rejmon
authored
Apr 19, 2021
9a49d59b
Hide whitespace changes
Inline
Side-by-side
src/sage/combinat/words/morphism.py
View file @
9a49d59b
...
...
@@ -2038,6 +2038,8 @@ class WordMorphism(SageObject):
The language of the substitution is the DOL language which consist
of factors of `s^n(u)`.
This method assumes this substitution is non-erasing.
INPUT:
- ``n`` -- non-negative integer - length of the words in the language
...
...
@@ -2057,19 +2059,38 @@ class WordMorphism(SageObject):
sage: s._language_naive(3, W())
set()
sage: W([1, 1]) in s._language_naive(3, W([1, 1]))
True
"""
L
=
set
(
u
.
parent
()())
todo
=
[
u
]
L
=
set
()
todo
=
[]
for
i
in
range
(
len
(
u
)):
for
j
in
range
(
i
+
1
,
min
(
len
(
u
)
+
1
,
i
+
n
)):
f
=
u
[
i
:
j
]
if
f
not
in
L
:
todo
.
append
(
f
)
L
.
add
(
f
)
while
todo
:
u
=
todo
.
pop
()
v
=
self
(
u
)
for
i
in
range
(
len
(
v
)):
for
j
in
range
(
i
+
1
,
min
(
len
(
v
)
+
1
,
i
+
n
)):
f
=
v
[
i
:
j
]
if
f
not
in
L
:
todo
.
append
(
f
)
L
.
add
(
f
)
if
u
.
length
()
==
1
:
for
i
in
range
(
len
(
v
)):
for
j
in
range
(
i
+
1
,
min
(
len
(
v
)
+
1
,
i
+
n
)):
f
=
v
[
i
:
j
]
if
f
not
in
L
:
todo
.
append
(
f
)
L
.
add
(
f
)
else
:
l
=
self
.
_morph
[
u
[
0
]].
length
()
r
=
self
.
_morph
[
u
[
-
1
]].
length
()
m
=
v
.
length
()
-
l
-
r
x
=
n
-
1
-
m
for
i
in
range
(
l
-
min
(
x
-
1
,
l
),
l
):
for
j
in
range
(
l
+
m
+
1
,
l
+
m
+
1
+
min
(
x
-
l
+
i
,
r
)):
f
=
v
[
i
:
j
]
if
f
not
in
L
:
todo
.
append
(
f
)
L
.
add
(
f
)
return
L
def
language
(
self
,
n
,
u
=
None
):
...
...