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 CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.9.1'
21
- __version_tuple__ = version_tuple = (0, 9, 1)
20
+ __version__ = version = '0.9.2'
21
+ __version_tuple__ = version_tuple = (0, 9, 2)
anchor/command_line.py CHANGED
@@ -6,6 +6,9 @@ from montreal_forced_aligner.helper import configure_logger
6
6
 
7
7
  from anchor.main import Application, MainWindow
8
8
 
9
+ if sys.platform == 'darwin':
10
+ os.environ["QT_MEDIA_BACKEND"] = "darwin"
11
+
9
12
 
10
13
  def main(debug=False):
11
14
  configure_logger("anchor")
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
- self.settings.value(AnchorSettings.UTTERANCES_VISIBLE)
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
- self.phones = []
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 Bio import pairwise2
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.seqB[current_align_ind]
1140
- sa = self.alignment.seqA[current_align_ind]
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.seqB[current_align_ind]
1154
- sa = self.alignment.seqA[current_align_ind]
1155
- if sb == word_object.group():
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.seqB):
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
- alignment = pairwise2.align.globalms(
2656
- self.item.normalized_text.lower().split(),
2657
- self.item.transcription_text.lower().split(),
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.QVBoxLayout()
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
- p = self.pos()
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 = QtWidgets.QPushButton(self)
1848
- self.keyboard_widget.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
1849
- self.keyboard_widget.setIcon(keyboard_icon)
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: PronunciationInput,
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: PronunciationInput,
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: PronunciationInput,
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=corpus._default_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.1
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=QG_t-w_CzDn2UjPaW-Svt-wTU1NXK2QkudawUihJfHA,511
4
- anchor/command_line.py,sha256=2IxO0fe_Uc37EjpVcF6SQMsrYOsYheCi4bUlWs3Y_tE,513
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=xY2dAzmdu8P0C9yxdRJank-sDQjlyPuzguBy0tQrUbg,139814
7
- anchor/models.py,sha256=xiScJkAt3PFAhE8gWUPPUCre63iPCq9UpFGm9anvw3A,112180
8
- anchor/plot.py,sha256=KTToQ74z6Vb5PRSt1IjHMzX7OGTjL1Qk2tFTMmKs-fE,146364
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=ZsWkY31T2DVX-rc98SM3rY9ryoMJ_3HAR9Fy1rYBzdA,171235
17
- anchor/workers.py,sha256=UOxTfG_HBCVlAWospwwBcenGwEeV5zK6cTj6n9LwnOk,203407
18
- anchor_annotator-0.9.1.dist-info/licenses/LICENSE,sha256=C0oIsblENEgWQ7XMNdYoXyXsIA5wa3YF0I9lK3H7A1s,1076
19
- anchor_annotator-0.9.1.dist-info/METADATA,sha256=8Eo79TDQk6W62IkHQ6Aklq48LPfCR72-L0DXBth-Lc4,1522
20
- anchor_annotator-0.9.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- anchor_annotator-0.9.1.dist-info/top_level.txt,sha256=wX6ZKxImGRZKFQjs3f6XYw_TfbAp6Xs3SmbLfLbFAJ0,7
22
- anchor_annotator-0.9.1.dist-info/RECORD,,
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,,