Skip to content

Commit 14d7a89

Browse files
author
Val Brodsky
committed
PR feedback
Move tests for free text annotation to its separate file
1 parent 1cd7cd0 commit 14d7a89

File tree

2 files changed

+112
-78
lines changed

2 files changed

+112
-78
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
from labelbox.data.annotation_types.annotation import ClassificationAnnotation
2+
from labelbox.data.annotation_types.classification.classification import Checklist, ClassificationAnswer, Radio, Text
3+
from labelbox.data.annotation_types.data.text import TextData
4+
from labelbox.data.annotation_types.label import Label
5+
6+
from labelbox.data.serialization.ndjson.converter import NDJsonConverter
7+
8+
9+
def test_serialization():
10+
label = Label(uid="ckj7z2q0b0000jx6x0q2q7q0d",
11+
data=TextData(
12+
uid="bkj7z2q0b0000jx6x0q2q7q0d",
13+
text="This is a test",
14+
),
15+
annotations=[
16+
ClassificationAnnotation(name="free_text_annotation",
17+
value=Text(confidence=0.5,
18+
answer="text_answer"))
19+
])
20+
21+
serialized = NDJsonConverter.serialize([label])
22+
res = next(serialized)
23+
24+
assert res['confidence'] == 0.5
25+
assert res['name'] == "free_text_annotation"
26+
assert res['answer'] == "text_answer"
27+
assert res['dataRow']['id'] == "bkj7z2q0b0000jx6x0q2q7q0d"
28+
29+
deserialized = NDJsonConverter.deserialize([res])
30+
res = next(deserialized)
31+
32+
annotation = res.annotations[0]
33+
34+
annotation_value = annotation.value
35+
assert type(annotation_value) is Text
36+
assert annotation_value.answer == "text_answer"
37+
assert annotation_value.confidence == 0.5
38+
39+
40+
def test_nested_serialization():
41+
label = Label(
42+
uid="ckj7z2q0b0000jx6x0q2q7q0d",
43+
data=TextData(
44+
uid="bkj7z2q0b0000jx6x0q2q7q0d",
45+
text="This is a test",
46+
),
47+
annotations=[
48+
ClassificationAnnotation(
49+
name="nested test",
50+
value=Checklist(answer=[
51+
ClassificationAnswer(
52+
name="first_answer",
53+
confidence=0.9,
54+
classifications=[
55+
ClassificationAnnotation(
56+
name="sub_radio_question",
57+
value=Radio(answer=ClassificationAnswer(
58+
name="first_sub_radio_answer",
59+
confidence=0.8,
60+
classifications=[
61+
ClassificationAnnotation(
62+
name="nested answer",
63+
value=Text(
64+
answer="nested answer",
65+
confidence=0.7,
66+
))
67+
])))
68+
])
69+
]),
70+
)
71+
])
72+
73+
serialized = NDJsonConverter.serialize([label])
74+
res = next(serialized)
75+
76+
assert res['dataRow']['id'] == "bkj7z2q0b0000jx6x0q2q7q0d"
77+
answer = res['answer'][0]
78+
assert answer['confidence'] == 0.9
79+
assert answer['name'] == "first_answer"
80+
classification = answer['classifications'][0]
81+
nested_classification_answer = classification['answer']
82+
assert nested_classification_answer['confidence'] == 0.8
83+
assert nested_classification_answer['name'] == "first_sub_radio_answer"
84+
sub_classification = nested_classification_answer['classifications'][0]
85+
assert sub_classification['name'] == "nested answer"
86+
assert sub_classification['answer'] == "nested answer"
87+
assert sub_classification['confidence'] == 0.7
88+
89+
deserialized = NDJsonConverter.deserialize([res])
90+
res = next(deserialized)
91+
annotation = res.annotations[0]
92+
answer = annotation.value.answer[0]
93+
assert answer.confidence == 0.9
94+
assert answer.name == "first_answer"
95+
96+
classification_answer = answer.classifications[0].value.answer
97+
assert classification_answer.confidence == 0.8
98+
assert classification_answer.name == "first_sub_radio_answer"
99+
100+
sub_classification_answer = classification_answer.classifications[0].value
101+
assert type(sub_classification_answer) is Text
102+
assert sub_classification_answer.answer == "nested answer"
103+
assert sub_classification_answer.confidence == 0.7
Lines changed: 9 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from labelbox.data.annotation_types.annotation import ClassificationAnnotation
2-
from labelbox.data.annotation_types.classification.classification import Checklist, ClassificationAnswer, Radio, Text
2+
from labelbox.data.annotation_types.classification.classification import ClassificationAnswer, Radio, Text
33
from labelbox.data.annotation_types.data.text import TextData
44
from labelbox.data.annotation_types.label import Label
55

@@ -13,92 +13,23 @@ def test_serialization():
1313
text="This is a test",
1414
),
1515
annotations=[
16-
ClassificationAnnotation(name="free_text_annotation",
17-
value=Text(confidence=0.5,
18-
answer="text_answer"))
16+
ClassificationAnnotation(
17+
name="radio_question_geo",
18+
confidence=0.5,
19+
value=Text(answer="first_radio_answer"))
1920
])
2021

2122
serialized = NDJsonConverter.serialize([label])
2223
res = next(serialized)
23-
24-
assert res['confidence'] == 0.5
25-
assert res['name'] == "free_text_annotation"
26-
assert res['answer'] == "text_answer"
24+
assert 'confidence' not in res # because confidence needs to be set on the annotation itself
25+
assert res['name'] == "radio_question_geo"
26+
assert res['answer'] == "first_radio_answer"
2727
assert res['dataRow']['id'] == "bkj7z2q0b0000jx6x0q2q7q0d"
2828

2929
deserialized = NDJsonConverter.deserialize([res])
3030
res = next(deserialized)
31-
3231
annotation = res.annotations[0]
33-
answer = annotation.value.answer
3432

3533
annotation_value = annotation.value
3634
assert type(annotation_value) is Text
37-
assert annotation_value.answer == "text_answer"
38-
assert annotation_value.confidence == 0.5
39-
40-
41-
def test_nested_serialization():
42-
label = Label(
43-
uid="ckj7z2q0b0000jx6x0q2q7q0d",
44-
data=TextData(
45-
uid="bkj7z2q0b0000jx6x0q2q7q0d",
46-
text="This is a test",
47-
),
48-
annotations=[
49-
ClassificationAnnotation(
50-
name="nested test",
51-
value=Checklist(answer=[
52-
ClassificationAnswer(
53-
name="first_answer",
54-
confidence=0.9,
55-
classifications=[
56-
ClassificationAnnotation(
57-
name="sub_radio_question",
58-
value=Radio(answer=ClassificationAnswer(
59-
name="first_sub_radio_answer",
60-
confidence=0.8,
61-
classifications=[
62-
ClassificationAnnotation(
63-
name="nested answer",
64-
value=Text(
65-
answer="nested answer",
66-
confidence=0.7,
67-
))
68-
])))
69-
])
70-
]),
71-
)
72-
])
73-
74-
serialized = NDJsonConverter.serialize([label])
75-
res = next(serialized)
76-
77-
assert res['dataRow']['id'] == "bkj7z2q0b0000jx6x0q2q7q0d"
78-
answer = res['answer'][0]
79-
assert answer['confidence'] == 0.9
80-
assert answer['name'] == "first_answer"
81-
classification = answer['classifications'][0]
82-
nested_classification_answer = classification['answer']
83-
assert nested_classification_answer['confidence'] == 0.8
84-
assert nested_classification_answer['name'] == "first_sub_radio_answer"
85-
sub_classification = nested_classification_answer['classifications'][0]
86-
assert sub_classification['name'] == "nested answer"
87-
assert sub_classification['answer'] == "nested answer"
88-
assert sub_classification['confidence'] == 0.7
89-
90-
deserialized = NDJsonConverter.deserialize([res])
91-
res = next(deserialized)
92-
annotation = res.annotations[0]
93-
answer = annotation.value.answer[0]
94-
assert answer.confidence == 0.9
95-
assert answer.name == "first_answer"
96-
97-
classification_answer = answer.classifications[0].value.answer
98-
assert classification_answer.confidence == 0.8
99-
assert classification_answer.name == "first_sub_radio_answer"
100-
101-
sub_classification_answer = classification_answer.classifications[0].value
102-
assert type(sub_classification_answer) is Text
103-
assert sub_classification_answer.answer == "nested answer"
104-
assert sub_classification_answer.confidence == 0.7
35+
assert annotation_value.answer == "first_radio_answer"

0 commit comments

Comments
 (0)