Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Allzweckmesser
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Messerschleifer
Allzweckmesser
Commits
3f68e9fb
Commit
3f68e9fb
authored
6 years ago
by
Simon Will
Browse files
Options
Downloads
Patches
Plain Diff
Fix Position.after_mora classmethod and add tests
parent
dea04d9f
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
allzweckmesser/model.py
+32
-7
32 additions, 7 deletions
allzweckmesser/model.py
tests/test_model.py
+178
-3
178 additions, 3 deletions
tests/test_model.py
with
210 additions
and
10 deletions
allzweckmesser/model.py
+
32
−
7
View file @
3f68e9fb
...
@@ -448,30 +448,48 @@ class Verse:
...
@@ -448,30 +448,48 @@ class Verse:
class
Position
:
class
Position
:
def
__init__
(
self
,
reading
:
Reading
,
mora
:
int
,
word_boundary
:
bool
,
def
__init__
(
self
,
reading
:
Reading
,
mora
:
int
,
word_boundary
:
bool
,
token
:
Token
,
syllable
:
Syllable
,
token
:
Token
,
syllable
:
Syllable
,
punctuation
:
str
=
None
,
meter
:
'
.meters.Meter
'
=
None
,
element
:
int
=
None
):
meter
:
'
.meters.Meter
'
=
None
,
element
:
int
=
None
):
self
.
reading
=
reading
self
.
reading
=
reading
self
.
mora
=
mora
self
.
mora
=
mora
self
.
word_boundary
=
word_boundary
self
.
word_boundary
=
word_boundary
self
.
token
=
token
self
.
syllable
=
syllable
self
.
punctuation
=
punctuation
self
.
meter
=
meter
self
.
meter
=
meter
self
.
element
=
element
self
.
element
=
element
@classmethod
@classmethod
def
after_mora
(
cls
,
reading
:
Reading
,
mora
:
int
)
->
'
Position
'
:
def
after_mora
(
cls
,
reading
:
Reading
,
mora
:
int
)
->
'
Position
'
:
morae
=
0
morae
=
0
p
osi
tion
=
None
p
unctua
tion
=
''
for
token
in
reading
.
tokens
:
for
token
in
reading
.
tokens
:
if
token
.
is_punct
():
punctuation
+=
token
.
text
for
i
,
syllable
in
enumerate
(
token
.
syllables
):
for
i
,
syllable
in
enumerate
(
token
.
syllables
):
word_boundary
=
i
==
0
word_boundary
=
i
==
0
if
morae
==
mora
:
if
morae
==
mora
and
syllable
.
syllable_length
>
0
:
position
=
cls
(
position
=
cls
(
reading
=
reading
,
mora
=
mora
,
token
=
token
,
reading
=
reading
,
mora
=
mora
,
token
=
token
,
syllable
=
syllable
,
word_boundary
=
word_boundary
,
syllable
=
syllable
,
word_boundary
=
word_boundary
,
meter
=
meter
punctuation
=
punctuation
)
)
return
position
else
:
else
:
morae
+=
syllable
.
syllable_length
morae
+=
syllable
.
syllable_length
return
position
punctuation
=
''
else
:
# The position has not been found. There are two possibilities:
if
morae
==
mora
:
# The position is at the end of the sentence.
position
=
cls
(
reading
=
reading
,
mora
=
mora
,
token
=
None
,
syllable
=
None
,
word_boundary
=
True
,
punctuation
=
punctuation
)
return
position
else
:
# There is no syllable boundary at the given mora.
return
None
@classmethod
@classmethod
def
after_element
(
cls
,
reading
:
Reading
,
meter
:
'
.meters.Meter
'
,
def
after_element
(
cls
,
reading
:
Reading
,
meter
:
'
.meters.Meter
'
,
...
@@ -483,11 +501,18 @@ class Position:
...
@@ -483,11 +501,18 @@ class Position:
def
after
(
cls
,
type
:
str
,
reading
:
Reading
,
position_number
:
int
,
def
after
(
cls
,
type
:
str
,
reading
:
Reading
,
position_number
:
int
,
meter
:
'
.meters.Meter
'
)
->
'
Position
'
:
meter
:
'
.meters.Meter
'
)
->
'
Position
'
:
if
type
==
'
mora
'
:
if
type
==
'
mora
'
:
return
cls
.
after_mora
(
*
args
,
reading
,
position_number
)
return
cls
.
after_mora
(
reading
,
position_number
)
elif
type
==
'
element
'
:
elif
type
==
'
element
'
:
return
cls
.
after_element
(
*
args
,
reading
,
meter
,
position_number
)
return
cls
.
after_element
(
reading
,
meter
,
position_number
)
else
:
else
:
raise
ValueError
(
raise
ValueError
(
'
The after type has to be
"
mora
"
or
"
element
"
, but is {!r}
'
'
The after type has to be
"
mora
"
or
"
element
"
, but is {!r}
'
.
format
(
spec
)
.
format
(
spec
)
)
)
def
__repr__
(
self
):
return
'
Position(
'
+
'
,
'
.
join
(
'
{key}={val!r}
'
.
format
(
key
=
attr
,
val
=
getattr
(
self
,
attr
))
for
attr
in
[
'
reading
'
,
'
mora
'
,
'
word_boundary
'
,
'
token
'
,
'
syllable
'
,
'
punctuation
'
,
'
meter
'
,
'
element
'
]
)
+
'
)
'
This diff is collapsed.
Click to expand it.
tests/test_model.py
+
178
−
3
View file @
3f68e9fb
...
@@ -3,18 +3,30 @@
...
@@ -3,18 +3,30 @@
import
os.path
import
os.path
import
json
import
json
import
pytest
import
allzweckmesser
as
azm
import
allzweckmesser
as
azm
Position
=
azm
.
model
.
Position
TEST_DIR
=
os
.
path
.
dirname
(
__file__
)
TEST_DIR
=
os
.
path
.
dirname
(
__file__
)
@pytest.fixture
()
def
verse_models
():
verse_filepath
=
os
.
path
.
join
(
TEST_DIR
,
'
verses.json
'
)
verse_models
=
azm
.
model
.
from_json
(
verse_filepath
)
return
verse_models
def
test_import_json
():
def
test_import_json
():
verse_filepath
=
os
.
path
.
join
(
TEST_DIR
,
'
verses.json
'
)
verse_filepath
=
os
.
path
.
join
(
TEST_DIR
,
'
verses.json
'
)
verse_models
=
azm
.
model
.
from_json
(
verse_filepath
)
verse_models
=
azm
.
model
.
from_json
(
verse_filepath
)
verse_list_from_model
=
[
verse_model
.
to_dict
()
for
verse_model
in
verse_models
]
verse_list_from_model
=
[
verse_model
.
to_dict
()
for
verse_model
in
verse_models
]
with
open
(
verse_filepath
,
'
r
'
)
as
verse_file
:
with
open
(
verse_filepath
,
'
r
'
)
as
verse_file
:
verse_list_from_json
=
json
.
loads
(
verse_file
.
read
())
verse_list_from_json
=
json
.
loads
(
verse_file
.
read
())
...
@@ -23,10 +35,173 @@ def test_import_json():
...
@@ -23,10 +35,173 @@ def test_import_json():
for
verse
in
verse_models
:
for
verse
in
verse_models
:
parsed_verses
=
azm
.
scanner
.
parse_verse
(
verse
)
parsed_verses
=
azm
.
scanner
.
parse_verse
(
verse
)
for
verse_model
in
parsed_verses
:
for
verse_model
in
parsed_verses
:
#print(json.dumps(json.loads(verse_model.to_json()), indent=4, sort_keys=True))
#print(json.dumps(json.loads(verse_model.to_json()), indent=4,
# sort_keys=True))
pass
pass
def
test_position_after_mora
(
verse_models
):
hex_reading
=
verse_models
[
3
].
readings
[
0
]
begin
=
Position
.
after_mora
(
hex_reading
,
0
)
assert
isinstance
(
begin
,
Position
)
assert
begin
.
mora
==
0
assert
begin
.
word_boundary
assert
begin
.
token
.
text
==
'
an
'
assert
begin
.
syllable
.
text
==
'
an
'
assert
begin
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
1
)
is
None
after2
=
Position
.
after_mora
(
hex_reading
,
2
)
assert
isinstance
(
after2
,
Position
)
assert
after2
.
mora
==
2
assert
after2
.
word_boundary
assert
after2
.
token
.
text
==
'
quod
'
assert
after2
.
syllable
.
text
==
'
quod
'
assert
after2
.
punctuation
==
'
,
'
after3
=
Position
.
after_mora
(
hex_reading
,
3
)
assert
isinstance
(
after3
,
Position
)
assert
after3
.
mora
==
3
assert
after3
.
word_boundary
assert
after3
.
token
.
text
==
'
ubique
'
assert
after3
.
syllable
.
text
==
'
u
'
assert
after3
.
punctuation
==
''
after4
=
Position
.
after_mora
(
hex_reading
,
4
)
assert
isinstance
(
after4
,
Position
)
assert
after4
.
mora
==
4
assert
not
after4
.
word_boundary
assert
after4
.
token
.
text
==
'
ubique
'
assert
after4
.
syllable
.
text
==
'
bi
'
assert
after4
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
5
)
is
None
after6
=
Position
.
after_mora
(
hex_reading
,
6
)
assert
isinstance
(
after6
,
Position
)
assert
after6
.
mora
==
6
assert
not
after6
.
word_boundary
assert
after6
.
token
.
text
==
'
ubique
'
assert
after6
.
syllable
.
text
==
'
que
'
assert
after6
.
punctuation
==
''
after7
=
Position
.
after_mora
(
hex_reading
,
7
)
assert
isinstance
(
after7
,
Position
)
assert
after7
.
mora
==
7
assert
after7
.
word_boundary
assert
after7
.
token
.
text
==
'
tuum
'
assert
after7
.
syllable
.
text
==
'
tu
'
assert
after7
.
punctuation
==
'
,
'
after8
=
Position
.
after_mora
(
hex_reading
,
8
)
assert
isinstance
(
after8
,
Position
)
assert
after8
.
mora
==
8
assert
not
after8
.
word_boundary
assert
after8
.
token
.
text
==
'
tuum
'
assert
after8
.
syllable
.
text
==
'
um
'
assert
after8
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
9
)
is
None
after10
=
Position
.
after_mora
(
hex_reading
,
10
)
assert
isinstance
(
after10
,
Position
)
assert
after10
.
mora
==
10
assert
after10
.
word_boundary
assert
after10
.
token
.
text
==
'
tua
'
assert
after10
.
syllable
.
text
==
'
tu
'
assert
after10
.
punctuation
==
'
?
'
after11
=
Position
.
after_mora
(
hex_reading
,
11
)
assert
isinstance
(
after11
,
Position
)
assert
after11
.
mora
==
11
assert
not
after11
.
word_boundary
assert
after11
.
token
.
text
==
'
tua
'
assert
after11
.
syllable
.
text
==
'
a
'
assert
after11
.
punctuation
==
''
after12
=
Position
.
after_mora
(
hex_reading
,
12
)
assert
isinstance
(
after12
,
Position
)
assert
after12
.
mora
==
12
assert
after12
.
word_boundary
assert
after12
.
token
.
text
==
'
sunt
'
assert
after12
.
syllable
.
text
==
'
sunt
'
assert
after12
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
13
)
is
None
after14
=
Position
.
after_mora
(
hex_reading
,
14
)
assert
isinstance
(
after14
,
Position
)
assert
after14
.
mora
==
14
assert
after14
.
word_boundary
assert
after14
.
token
.
text
==
'
Heliconia
'
assert
after14
.
syllable
.
text
==
'
He
'
assert
after14
.
punctuation
==
''
after15
=
Position
.
after_mora
(
hex_reading
,
15
)
assert
isinstance
(
after15
,
Position
)
assert
after15
.
mora
==
15
assert
not
after15
.
word_boundary
assert
after15
.
token
.
text
==
'
Heliconia
'
assert
after15
.
syllable
.
text
==
'
li
'
assert
after15
.
punctuation
==
''
after16
=
Position
.
after_mora
(
hex_reading
,
16
)
assert
isinstance
(
after16
,
Position
)
assert
after16
.
mora
==
16
assert
not
after16
.
word_boundary
assert
after16
.
token
.
text
==
'
Heliconia
'
assert
after16
.
syllable
.
text
==
'
co
'
assert
after16
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
17
)
is
None
after18
=
Position
.
after_mora
(
hex_reading
,
18
)
assert
isinstance
(
after18
,
Position
)
assert
after18
.
mora
==
18
assert
not
after18
.
word_boundary
assert
after18
.
token
.
text
==
'
Heliconia
'
assert
after18
.
syllable
.
text
==
'
ni
'
assert
after18
.
punctuation
==
''
after19
=
Position
.
after_mora
(
hex_reading
,
19
)
assert
isinstance
(
after19
,
Position
)
assert
after19
.
mora
==
19
assert
not
after19
.
word_boundary
assert
after19
.
token
.
text
==
'
Heliconia
'
assert
after19
.
syllable
.
text
==
'
a
'
assert
after19
.
punctuation
==
''
after20
=
Position
.
after_mora
(
hex_reading
,
20
)
assert
isinstance
(
after20
,
Position
)
assert
after20
.
mora
==
20
assert
after20
.
word_boundary
assert
after20
.
token
.
text
==
'
Tempe
'
assert
after20
.
syllable
.
text
==
'
Tem
'
assert
after20
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
21
)
is
None
after22
=
Position
.
after_mora
(
hex_reading
,
22
)
assert
isinstance
(
after22
,
Position
)
assert
after22
.
mora
==
22
assert
not
after22
.
word_boundary
assert
after22
.
token
.
text
==
'
Tempe
'
assert
after22
.
syllable
.
text
==
'
pe
'
assert
after22
.
punctuation
==
''
assert
Position
.
after_mora
(
hex_reading
,
23
)
is
None
after24
=
Position
.
after_mora
(
hex_reading
,
24
)
assert
isinstance
(
after24
,
Position
)
assert
after24
.
mora
==
24
assert
after24
.
word_boundary
assert
after24
.
token
is
None
assert
after24
.
syllable
is
None
assert
after24
.
punctuation
==
'
?
'
if
__name__
==
"
__main__
"
:
if
__name__
==
"
__main__
"
:
test_import_json
()
test_import_json
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment