Anchor-annotator 0.9.1__py3-none-any.whl → 0.9.2__py3-none-any.whl
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.
- anchor/_version.py +2 -2
- anchor/command_line.py +3 -0
- anchor/main.py +2 -9
- anchor/models.py +8 -10
- anchor/plot.py +41 -20
- anchor/widgets.py +28 -14
- anchor/workers.py +11 -1
- {anchor_annotator-0.9.1.dist-info → anchor_annotator-0.9.2.dist-info}/METADATA +1 -1
- {anchor_annotator-0.9.1.dist-info → anchor_annotator-0.9.2.dist-info}/RECORD +12 -12
- {anchor_annotator-0.9.1.dist-info → anchor_annotator-0.9.2.dist-info}/WHEEL +0 -0
- {anchor_annotator-0.9.1.dist-info → anchor_annotator-0.9.2.dist-info}/licenses/LICENSE +0 -0
- {anchor_annotator-0.9.1.dist-info → anchor_annotator-0.9.2.dist-info}/top_level.txt +0 -0
anchor/_version.py
CHANGED
anchor/command_line.py
CHANGED
anchor/main.py
CHANGED
@@ -764,9 +764,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
764
764
|
for worker in self.workers:
|
765
765
|
worker.stopped.set()
|
766
766
|
self.file_utterances_model.clean_up_for_close()
|
767
|
-
self.settings.setValue(
|
768
|
-
AnchorSettings.UTTERANCES_VISIBLE, self.ui.utteranceDockWidget.isVisible()
|
769
|
-
)
|
770
767
|
self.settings.setValue(
|
771
768
|
AnchorSettings.DICTIONARY_VISIBLE, self.ui.dictionaryDockWidget.isVisible()
|
772
769
|
)
|
@@ -934,7 +931,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
934
931
|
self.corpus_undo_stack.cleanChanged.connect(self.corpus_changed)
|
935
932
|
self.ui.lockEditAct.toggled.connect(self.undo_act.setDisabled)
|
936
933
|
self.ui.lockEditAct.toggled.connect(self.redo_act.setDisabled)
|
937
|
-
self.ui.menuWindow.addAction(self.ui.utteranceDockWidget.toggleViewAction())
|
938
934
|
self.ui.menuWindow.addAction(self.ui.dictionaryDockWidget.toggleViewAction())
|
939
935
|
self.ui.menuWindow.addAction(self.ui.oovDockWidget.toggleViewAction())
|
940
936
|
self.ui.menuWindow.addAction(self.ui.speakerDockWidget.toggleViewAction())
|
@@ -1217,6 +1213,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1217
1213
|
|
1218
1214
|
for m in (
|
1219
1215
|
session.query(anchor.db.Dictionary)
|
1216
|
+
.filter(anchor.db.Dictionary.path != '.')
|
1220
1217
|
.filter_by(available_locally=True)
|
1221
1218
|
.order_by(anchor.db.Dictionary.last_used.desc())
|
1222
1219
|
):
|
@@ -1839,7 +1836,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1839
1836
|
self.ui.titleScreen.setVisible(False)
|
1840
1837
|
|
1841
1838
|
self.ui.utteranceDockWidget.setVisible(
|
1842
|
-
|
1839
|
+
True
|
1843
1840
|
)
|
1844
1841
|
self.ui.dictionaryDockWidget.setVisible(
|
1845
1842
|
self.settings.value(AnchorSettings.DICTIONARY_VISIBLE)
|
@@ -1972,8 +1969,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1972
1969
|
if dock_tab_bar.tabText(i) == "Utterances":
|
1973
1970
|
dock_tab_bar.setCurrentIndex(i)
|
1974
1971
|
break
|
1975
|
-
else:
|
1976
|
-
self.ui.utteranceDockWidget.toggleViewAction().trigger()
|
1977
1972
|
self.ui.utteranceListWidget.search_box.setFocus()
|
1978
1973
|
if search_term is not None:
|
1979
1974
|
self.ui.utteranceListWidget.search_box.setQuery(search_term)
|
@@ -1989,8 +1984,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1989
1984
|
if dock_tab_bar.tabText(i) == "Utterances":
|
1990
1985
|
dock_tab_bar.setCurrentIndex(i)
|
1991
1986
|
break
|
1992
|
-
else:
|
1993
|
-
self.ui.utteranceDockWidget.toggleViewAction().trigger()
|
1994
1987
|
|
1995
1988
|
def open_search_speaker(self, search_term=None, show=False):
|
1996
1989
|
if search_term is not None:
|
anchor/models.py
CHANGED
@@ -1375,11 +1375,18 @@ class DictionaryTableModel(TableModel):
|
|
1375
1375
|
self.g2p_generator: typing.Optional[PyniniValidator] = None
|
1376
1376
|
self.word_sets = {}
|
1377
1377
|
self.speaker_mapping = {}
|
1378
|
-
|
1378
|
+
|
1379
1379
|
self.graphemes = []
|
1380
1380
|
self.reference_phone_set = set()
|
1381
1381
|
self.custom_mapping = {}
|
1382
1382
|
|
1383
|
+
@property
|
1384
|
+
def phones(self):
|
1385
|
+
phones = [x.phone for x in self.corpus_model.phones.values() if x.phone_type == PhoneType.non_silence]
|
1386
|
+
if self.corpus_model.corpus.position_dependent_phones:
|
1387
|
+
phones = sorted(set(x.rsplit("_", maxsplit=1)[0] for x in phones))
|
1388
|
+
return phones
|
1389
|
+
|
1383
1390
|
def set_custom_mapping(self, path):
|
1384
1391
|
with mfa_open(path, "r") as f:
|
1385
1392
|
self.custom_mapping = {k: v for k, v in yaml.safe_load(f).items() if k in self.phones}
|
@@ -1413,15 +1420,6 @@ class DictionaryTableModel(TableModel):
|
|
1413
1420
|
|
1414
1421
|
def setup(self) -> None:
|
1415
1422
|
self.refresh_dictionaries()
|
1416
|
-
phones = [
|
1417
|
-
x
|
1418
|
-
for x, in self.corpus_model.session.query(Phone.phone).filter(
|
1419
|
-
Phone.phone_type == PhoneType.non_silence
|
1420
|
-
)
|
1421
|
-
]
|
1422
|
-
if self.corpus_model.corpus.position_dependent_phones:
|
1423
|
-
phones = sorted(set(x.rsplit("_", maxsplit=1)[0] for x in phones))
|
1424
|
-
self.phones = phones
|
1425
1423
|
specials = self.corpus_model.corpus.specials_set
|
1426
1424
|
specials.update(
|
1427
1425
|
[
|
anchor/plot.py
CHANGED
@@ -10,7 +10,8 @@ from typing import Optional
|
|
10
10
|
import numpy as np
|
11
11
|
import pyqtgraph as pg
|
12
12
|
import sqlalchemy
|
13
|
-
from
|
13
|
+
from kalpy.gmm.data import CtmInterval
|
14
|
+
from _kalpy.util import align_intervals
|
14
15
|
from montreal_forced_aligner.db import (
|
15
16
|
PhoneInterval,
|
16
17
|
Pronunciation,
|
@@ -600,6 +601,7 @@ class UtteranceView(QtWidgets.QWidget):
|
|
600
601
|
tier.draggingLine.connect(self.audio_plot.update_drag_line)
|
601
602
|
tier.lineDragFinished.connect(self.audio_plot.hide_drag_line)
|
602
603
|
tier.receivedWheelEvent.connect(self.audio_plot.wheelEvent)
|
604
|
+
tier.receivedGestureEvent.connect(self.audio_plot.gestureEvent)
|
603
605
|
tier.set_extra_tiers(self.extra_tiers)
|
604
606
|
tier.setZValue(30)
|
605
607
|
available_speakers[speaker_name] = speaker_id
|
@@ -1136,9 +1138,8 @@ class TranscriberErrorHighlighter(QtGui.QSyntaxHighlighter):
|
|
1136
1138
|
if self.alignment:
|
1137
1139
|
current_align_ind = 0
|
1138
1140
|
for word_object in re.finditer(self.WORDS, text.lower()):
|
1139
|
-
sb = self.alignment
|
1140
|
-
|
1141
|
-
if sb == "-":
|
1141
|
+
sa, sb = self.alignment[current_align_ind]
|
1142
|
+
if sb.label == "-":
|
1142
1143
|
start = word_object.start() - 1
|
1143
1144
|
if start < 0:
|
1144
1145
|
start = 0
|
@@ -1148,19 +1149,18 @@ class TranscriberErrorHighlighter(QtGui.QSyntaxHighlighter):
|
|
1148
1149
|
count,
|
1149
1150
|
self.highlight_format,
|
1150
1151
|
)
|
1151
|
-
while sb != word_object.group():
|
1152
|
+
while sb.label != word_object.group():
|
1152
1153
|
current_align_ind += 1
|
1153
|
-
sb = self.alignment
|
1154
|
-
|
1155
|
-
|
1156
|
-
if sb != sa:
|
1154
|
+
sa, sb = self.alignment[current_align_ind]
|
1155
|
+
if sb.label == word_object.group():
|
1156
|
+
if sb.label != sa.label:
|
1157
1157
|
self.setFormat(
|
1158
1158
|
word_object.start(),
|
1159
1159
|
word_object.end() - word_object.start(),
|
1160
1160
|
self.highlight_format,
|
1161
1161
|
)
|
1162
1162
|
current_align_ind += 1
|
1163
|
-
if current_align_ind < len(self.alignment
|
1163
|
+
if current_align_ind < len(self.alignment):
|
1164
1164
|
self.setFormat(
|
1165
1165
|
len(text) - 1,
|
1166
1166
|
1,
|
@@ -2652,16 +2652,9 @@ class UtteranceRegion(MfaRegion):
|
|
2652
2652
|
|
2653
2653
|
def update_transcription_highlight(self):
|
2654
2654
|
if self.item.normalized_text and self.item.transcription_text:
|
2655
|
-
|
2656
|
-
|
2657
|
-
|
2658
|
-
0,
|
2659
|
-
-2,
|
2660
|
-
-1,
|
2661
|
-
-1,
|
2662
|
-
gap_char=["-"],
|
2663
|
-
one_alignment_only=True,
|
2664
|
-
)[0]
|
2655
|
+
ref_intervals = [CtmInterval(0.0, 0.0, w) for w in self.item.normalized_text.lower().split()]
|
2656
|
+
test_intervals = [CtmInterval(0.0, 0.0, w) for w in self.item.transcription_text.lower().split()]
|
2657
|
+
alignment = align_intervals(ref_intervals, test_intervals, "<eps>", {})
|
2665
2658
|
self.transcription_text.highlighter.set_alignment(alignment)
|
2666
2659
|
|
2667
2660
|
def set_search_term(self, term):
|
@@ -3264,6 +3257,7 @@ class AudioPlots(pg.GraphicsObject):
|
|
3264
3257
|
self.wave_form.setParentItem(self)
|
3265
3258
|
self.spectrogram.setParentItem(self)
|
3266
3259
|
self.pitch_track.setParentItem(self)
|
3260
|
+
self.grabGesture(QtCore.Qt.PinchGesture)
|
3267
3261
|
color = self.plot_theme.selected_range_color
|
3268
3262
|
color.setAlphaF(0.25)
|
3269
3263
|
self.selection_brush = pg.mkBrush(color)
|
@@ -3318,6 +3312,20 @@ class AudioPlots(pg.GraphicsObject):
|
|
3318
3312
|
def hide_drag_line(self):
|
3319
3313
|
self.update_line.hide()
|
3320
3314
|
|
3315
|
+
def sceneEvent(self, ev):
|
3316
|
+
if ev.type() == QtCore.QEvent.Gesture:
|
3317
|
+
return self.gestureEvent(ev)
|
3318
|
+
return super().sceneEvent(ev)
|
3319
|
+
|
3320
|
+
def gestureEvent(self, ev):
|
3321
|
+
ev.accept()
|
3322
|
+
pinch = ev.gesture(QtCore.Qt.PinchGesture)
|
3323
|
+
if pinch is not None:
|
3324
|
+
delta = pinch.scaleFactor()
|
3325
|
+
sc = delta
|
3326
|
+
center = self.getViewBox().mapToView(pinch.centerPoint())
|
3327
|
+
self.selection_model.zoom(sc, center.x())
|
3328
|
+
|
3321
3329
|
def wheelEvent(self, ev: QtWidgets.QGraphicsSceneWheelEvent):
|
3322
3330
|
ev.accept()
|
3323
3331
|
delta = ev.delta()
|
@@ -3446,6 +3454,7 @@ class AudioPlots(pg.GraphicsObject):
|
|
3446
3454
|
|
3447
3455
|
class SpeakerTier(pg.GraphicsObject):
|
3448
3456
|
receivedWheelEvent = QtCore.Signal(object)
|
3457
|
+
receivedGestureEvent = QtCore.Signal(object)
|
3449
3458
|
draggingLine = QtCore.Signal(object)
|
3450
3459
|
lineDragFinished = QtCore.Signal(object)
|
3451
3460
|
|
@@ -3499,10 +3508,22 @@ class SpeakerTier(pg.GraphicsObject):
|
|
3499
3508
|
self.selection_model.model().utterancesReady.connect(self.refresh)
|
3500
3509
|
self.available_speakers = {}
|
3501
3510
|
self.painter_path_cache = {}
|
3511
|
+
self.grabGesture(QtCore.Qt.PinchGesture)
|
3502
3512
|
|
3503
3513
|
def wheelEvent(self, ev):
|
3504
3514
|
self.receivedWheelEvent.emit(ev)
|
3505
3515
|
|
3516
|
+
def sceneEvent(self, ev):
|
3517
|
+
if ev.type() == QtCore.QEvent.Gesture:
|
3518
|
+
return self.gestureEvent(ev)
|
3519
|
+
return super().sceneEvent(ev)
|
3520
|
+
|
3521
|
+
def gestureEvent(self, ev):
|
3522
|
+
ev.accept()
|
3523
|
+
pinch = ev.gesture(QtCore.Qt.PinchGesture)
|
3524
|
+
if pinch is not None:
|
3525
|
+
self.receivedGestureEvent.emit(ev)
|
3526
|
+
|
3506
3527
|
def create_utterance(self, begin, end):
|
3507
3528
|
self.file_model.create_utterance(self.speaker_id, begin, end)
|
3508
3529
|
|
anchor/widgets.py
CHANGED
@@ -1732,7 +1732,7 @@ class IpaKeyboard(QtWidgets.QMenu):
|
|
1732
1732
|
def __init__(self, phones, parent=None):
|
1733
1733
|
super().__init__(parent)
|
1734
1734
|
self.settings = AnchorSettings()
|
1735
|
-
layout = QtWidgets.
|
1735
|
+
layout = QtWidgets.QHBoxLayout()
|
1736
1736
|
self.scroll_area = QtWidgets.QScrollArea(self)
|
1737
1737
|
self.scroll_area.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
1738
1738
|
widget = QtWidgets.QWidget(self)
|
@@ -1753,12 +1753,13 @@ class IpaKeyboard(QtWidgets.QMenu):
|
|
1753
1753
|
col_index = 0
|
1754
1754
|
row_index += 1
|
1755
1755
|
layout.addWidget(self.scroll_area)
|
1756
|
+
scroll_layout.setContentsMargins(0,0,0,0)
|
1756
1757
|
widget.setLayout(scroll_layout)
|
1757
1758
|
self.scroll_area.setWidget(widget)
|
1758
1759
|
self.setLayout(layout)
|
1759
1760
|
self.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
1760
1761
|
self.scroll_area.setMinimumWidth(
|
1761
|
-
widget.sizeHint().width() + self.scroll_area.verticalScrollBar().sizeHint().width()
|
1762
|
+
widget.sizeHint().width() + self.scroll_area.verticalScrollBar().sizeHint().width() + 1
|
1762
1763
|
)
|
1763
1764
|
self.scroll_area.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
1764
1765
|
self.setStyleSheet(self.settings.keyboard_style_sheet)
|
@@ -1773,7 +1774,10 @@ class IpaKeyboard(QtWidgets.QMenu):
|
|
1773
1774
|
self.inputPhone.emit(b.text(), True)
|
1774
1775
|
|
1775
1776
|
def showEvent(self, event: QtGui.QShowEvent) -> None:
|
1776
|
-
|
1777
|
+
super().showEvent(event)
|
1778
|
+
pos = self.parent().geometry().bottomLeft()
|
1779
|
+
p = self.parent().mapToGlobal(pos)
|
1780
|
+
|
1777
1781
|
geo = self.geometry()
|
1778
1782
|
new_pos = int(p.x() - (geo.width() / 2))
|
1779
1783
|
self.move(new_pos, p.y())
|
@@ -1814,6 +1818,21 @@ class PronunciationField(QtWidgets.QTextEdit):
|
|
1814
1818
|
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
1815
1819
|
|
1816
1820
|
|
1821
|
+
class KeyboardWidget(QtWidgets.QPushButton):
|
1822
|
+
def __init__(self, phones, *args, **kwargs):
|
1823
|
+
super().__init__(*args, **kwargs)
|
1824
|
+
self.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
1825
|
+
keyboard_icon = QtGui.QIcon.fromTheme("input-keyboard")
|
1826
|
+
self.setIcon(keyboard_icon)
|
1827
|
+
self.keyboard = IpaKeyboard(phones, self)
|
1828
|
+
self.setMenu(self.keyboard)
|
1829
|
+
|
1830
|
+
self.clicked.connect(self.showMenu)
|
1831
|
+
|
1832
|
+
def showMenu(self):
|
1833
|
+
self.menu().show()
|
1834
|
+
|
1835
|
+
|
1817
1836
|
class PronunciationInput(QtWidgets.QToolBar):
|
1818
1837
|
validationError = QtCore.Signal(object)
|
1819
1838
|
returnPressed = QtCore.Signal()
|
@@ -1842,15 +1861,10 @@ class PronunciationInput(QtWidgets.QToolBar):
|
|
1842
1861
|
|
1843
1862
|
self.cancel_action = QtGui.QAction(icon=cancel_icon, parent=self)
|
1844
1863
|
self.cancel_action.triggered.connect(self.cancel)
|
1845
|
-
keyboard_icon = QtGui.QIcon.fromTheme("input-keyboard")
|
1846
1864
|
|
1847
|
-
self.keyboard_widget =
|
1848
|
-
self.keyboard_widget.
|
1849
|
-
self.keyboard_widget.
|
1850
|
-
self.keyboard = IpaKeyboard(phones)
|
1851
|
-
self.keyboard.installEventFilter(self)
|
1852
|
-
self.keyboard.inputPhone.connect(self.add_phone)
|
1853
|
-
self.keyboard_widget.setMenu(self.keyboard)
|
1865
|
+
self.keyboard_widget = KeyboardWidget(phones, self)
|
1866
|
+
self.keyboard_widget.keyboard.installEventFilter(self)
|
1867
|
+
self.keyboard_widget.keyboard.inputPhone.connect(self.add_phone)
|
1854
1868
|
|
1855
1869
|
self.addWidget(self.input)
|
1856
1870
|
self.addWidget(self.keyboard_widget)
|
@@ -2033,14 +2047,14 @@ class EditableDelegate(QtWidgets.QStyledItemDelegate):
|
|
2033
2047
|
|
2034
2048
|
def setEditorData(
|
2035
2049
|
self,
|
2036
|
-
editor:
|
2050
|
+
editor: WordInput,
|
2037
2051
|
index: typing.Union[QtCore.QModelIndex, QtCore.QPersistentModelIndex],
|
2038
2052
|
) -> None:
|
2039
2053
|
editor.setText(index.model().data(index, QtCore.Qt.ItemDataRole.EditRole))
|
2040
2054
|
|
2041
2055
|
def setModelData(
|
2042
2056
|
self,
|
2043
|
-
editor:
|
2057
|
+
editor: WordInput,
|
2044
2058
|
model: DictionaryTableModel,
|
2045
2059
|
index: typing.Union[QtCore.QModelIndex, QtCore.QPersistentModelIndex],
|
2046
2060
|
) -> None:
|
@@ -2051,7 +2065,7 @@ class EditableDelegate(QtWidgets.QStyledItemDelegate):
|
|
2051
2065
|
|
2052
2066
|
def updateEditorGeometry(
|
2053
2067
|
self,
|
2054
|
-
editor:
|
2068
|
+
editor: WordInput,
|
2055
2069
|
option: QtWidgets.QStyleOptionViewItem,
|
2056
2070
|
index: typing.Union[QtCore.QModelIndex, QtCore.QPersistentModelIndex],
|
2057
2071
|
) -> None:
|
anchor/workers.py
CHANGED
@@ -55,6 +55,7 @@ from montreal_forced_aligner.db import (
|
|
55
55
|
Dictionary2Job,
|
56
56
|
File,
|
57
57
|
Phone,
|
58
|
+
Job,
|
58
59
|
PhoneInterval,
|
59
60
|
Pronunciation,
|
60
61
|
ReferencePhoneInterval,
|
@@ -3935,6 +3936,11 @@ class ImportDictionaryWorker(FunctionWorker): # pragma: no cover
|
|
3935
3936
|
session.query(Word).delete()
|
3936
3937
|
session.query(Phone).delete()
|
3937
3938
|
session.execute(sqlalchemy.update(Speaker).values(dictionary_id=None))
|
3939
|
+
session.flush()
|
3940
|
+
d = session.query(Dictionary).filter(Dictionary.name=='.').first()
|
3941
|
+
if d is not None:
|
3942
|
+
d.delete()
|
3943
|
+
session.flush()
|
3938
3944
|
session.execute(
|
3939
3945
|
sqlalchemy.update(CorpusWorkflow).values(
|
3940
3946
|
done=False, alignments_collected=False, score=None
|
@@ -3945,8 +3951,12 @@ class ImportDictionaryWorker(FunctionWorker): # pragma: no cover
|
|
3945
3951
|
session.commit()
|
3946
3952
|
corpus.dictionary_setup()
|
3947
3953
|
with corpus.session() as session:
|
3954
|
+
d = session.query(Dictionary).filter(Dictionary.name==self.dictionary_path.stem).first()
|
3955
|
+
jobs = session.query(Job).all()
|
3956
|
+
for j in jobs:
|
3957
|
+
j.dictionaries = [d]
|
3948
3958
|
session.execute(
|
3949
|
-
sqlalchemy.update(Speaker).values(dictionary_id=
|
3959
|
+
sqlalchemy.update(Speaker).values(dictionary_id=d.id)
|
3950
3960
|
)
|
3951
3961
|
session.commit()
|
3952
3962
|
corpus.text_normalized = False
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: Anchor_annotator
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.2
|
4
4
|
Summary: Anchor annotator is a program for inspecting corpora for the Montreal Forced Aligner and correcting transcriptions and pronunciations.
|
5
5
|
Home-page: https://github.com/MontrealCorpusTools/Anchor-annotator
|
6
6
|
Author: Montreal Corpus Tools
|
@@ -1,11 +1,11 @@
|
|
1
1
|
anchor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
anchor/__main__.py,sha256=5ufG8lcx2x1am-04xI991AG7saJd24dxPw5JzjmB878,45
|
3
|
-
anchor/_version.py,sha256=
|
4
|
-
anchor/command_line.py,sha256=
|
3
|
+
anchor/_version.py,sha256=eeYYTSIkrgfRwSQ7LKo_py3xs3DvzgfWiAtK4K1JM4A,511
|
4
|
+
anchor/command_line.py,sha256=Ls0XNAxjG2cMsFSts8xzMyA-X373xgyHMPjS2b_BiR4,589
|
5
5
|
anchor/db.py,sha256=LlZzAy4bjmJIu0v4ev5Qjg_Fh2n9sMsKI2nAY1pwd0A,5057
|
6
|
-
anchor/main.py,sha256=
|
7
|
-
anchor/models.py,sha256=
|
8
|
-
anchor/plot.py,sha256=
|
6
|
+
anchor/main.py,sha256=vEE00ugQjI64IiPeozMUXaBp-3sOm4_i5L0eJQrXiEM,139426
|
7
|
+
anchor/models.py,sha256=PFmQFLsoD3XbXkchUJcGsBC-9SPkl-CXPTujbj8iMV4,112107
|
8
|
+
anchor/plot.py,sha256=qhE7CfOs89PDpR8Zsr_5WX2nAhjaks1ECBpz78aK5O4,147311
|
9
9
|
anchor/resources_rc.py,sha256=5eFkwVBdDzfc6rkcC-HSzy8EYDmxiMXnYucgAoGVGsA,3599114
|
10
10
|
anchor/settings.py,sha256=kY8S8-55D4-gSnZXrPQK3HLWNlokGWBoPHB_GdwKg98,52714
|
11
11
|
anchor/ui_corpus_manager.py,sha256=e3ybOd4UdYarrLBATxI8vIFnioa4R_BHrbsEz5mJ5eA,8564
|
@@ -13,10 +13,10 @@ anchor/ui_error_dialog.py,sha256=HKbjGT_jtdb9jfn9THQMbl1fmcdWyjYDazM4hCwZ5Yo,393
|
|
13
13
|
anchor/ui_main_window.py,sha256=VWYsIwvKMHe1bLeH3_fLNU1iO84kxOSoDoDTTptQaJw,40443
|
14
14
|
anchor/ui_preferences.py,sha256=_1U67al_FoTjVizcK1He4JKBEqfmh3KxUo0UEB7kt5Q,43822
|
15
15
|
anchor/undo.py,sha256=wdjh-clcNBl6fKXbxr60kUIJaPOnJWADk0U32BGylJU,60966
|
16
|
-
anchor/widgets.py,sha256=
|
17
|
-
anchor/workers.py,sha256=
|
18
|
-
anchor_annotator-0.9.
|
19
|
-
anchor_annotator-0.9.
|
20
|
-
anchor_annotator-0.9.
|
21
|
-
anchor_annotator-0.9.
|
22
|
-
anchor_annotator-0.9.
|
16
|
+
anchor/widgets.py,sha256=_k25fy9yQrU-TLU2wK9xRL8yg0ielIAzWywlchfPi_Y,171602
|
17
|
+
anchor/workers.py,sha256=RQ9QgB-WPMveHaLustOBx43im6gKDebVfuA5OvVM4wE,203828
|
18
|
+
anchor_annotator-0.9.2.dist-info/licenses/LICENSE,sha256=C0oIsblENEgWQ7XMNdYoXyXsIA5wa3YF0I9lK3H7A1s,1076
|
19
|
+
anchor_annotator-0.9.2.dist-info/METADATA,sha256=Ti-5T0fF_IjfC125qUW5eAeILunvS-E05NZdOCRqXC8,1522
|
20
|
+
anchor_annotator-0.9.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
21
|
+
anchor_annotator-0.9.2.dist-info/top_level.txt,sha256=wX6ZKxImGRZKFQjs3f6XYw_TfbAp6Xs3SmbLfLbFAJ0,7
|
22
|
+
anchor_annotator-0.9.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|