mwxlib 0.96.4__py3-none-any.whl → 0.96.6__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.
Potentially problematic release.
This version of mwxlib might be problematic. Click here for more details.
- mwx/controls.py +18 -20
- mwx/framework.py +3 -3
- mwx/graphman.py +2 -2
- mwx/images.py +35 -0
- mwx/nutshell.py +11 -1
- mwx/plugins/ffmpeg_view.py +1 -1
- mwx/plugins/fft_view.py +10 -4
- mwx/plugins/frame_listview.py +5 -4
- mwx/utilus.py +14 -15
- {mwxlib-0.96.4.dist-info → mwxlib-0.96.6.dist-info}/METADATA +2 -4
- {mwxlib-0.96.4.dist-info → mwxlib-0.96.6.dist-info}/RECORD +14 -14
- {mwxlib-0.96.4.dist-info → mwxlib-0.96.6.dist-info}/LICENSE +0 -0
- {mwxlib-0.96.4.dist-info → mwxlib-0.96.6.dist-info}/WHEEL +0 -0
- {mwxlib-0.96.4.dist-info → mwxlib-0.96.6.dist-info}/top_level.txt +0 -0
mwx/controls.py
CHANGED
|
@@ -44,7 +44,7 @@ class Param(object):
|
|
|
44
44
|
- underflow -> when value underflows
|
|
45
45
|
"""
|
|
46
46
|
def __init__(self, name, range=None, value=None, fmt=None,
|
|
47
|
-
handler=None, updater=None
|
|
47
|
+
handler=None, updater=None):
|
|
48
48
|
self.knobs = []
|
|
49
49
|
self.name = name
|
|
50
50
|
self.range = range
|
|
@@ -66,7 +66,7 @@ class Param(object):
|
|
|
66
66
|
'overflow' : [],
|
|
67
67
|
'underflow' : [],
|
|
68
68
|
})
|
|
69
|
-
self._tooltip = _Tip(
|
|
69
|
+
self._tooltip = _Tip(handler.__doc__, updater.__doc__)
|
|
70
70
|
|
|
71
71
|
def __str__(self, v=None):
|
|
72
72
|
v = self.value if v is None else v
|
|
@@ -1000,15 +1000,14 @@ class Button(pb.PlateButton):
|
|
|
1000
1000
|
self.SetBitmap(_Icon(v))
|
|
1001
1001
|
self.Refresh()
|
|
1002
1002
|
|
|
1003
|
-
def __init__(self, parent, label='',
|
|
1004
|
-
handler=None, icon=None, tip='', **kwargs):
|
|
1003
|
+
def __init__(self, parent, label='', handler=None, icon=None, **kwargs):
|
|
1005
1004
|
kwargs.setdefault('style', pb.PB_STYLE_DEFAULT | pb.PB_STYLE_SQUARE)
|
|
1006
1005
|
pb.PlateButton.__init__(self, parent, -1, label, **kwargs)
|
|
1007
1006
|
|
|
1008
1007
|
if handler:
|
|
1009
1008
|
self.Bind(wx.EVT_BUTTON, _F(handler))
|
|
1010
1009
|
|
|
1011
|
-
self.ToolTip = _Tip(
|
|
1010
|
+
self.ToolTip = _Tip(handler.__doc__)
|
|
1012
1011
|
self.icon = icon
|
|
1013
1012
|
|
|
1014
1013
|
def SetBitmap(self, bmp):
|
|
@@ -1048,14 +1047,13 @@ class ToggleButton(wx.ToggleButton):
|
|
|
1048
1047
|
self.SetBitmap(_Icon(v))
|
|
1049
1048
|
self.Refresh()
|
|
1050
1049
|
|
|
1051
|
-
def __init__(self, parent, label='',
|
|
1052
|
-
handler=None, icon=None, tip='', **kwargs):
|
|
1050
|
+
def __init__(self, parent, label='', handler=None, icon=None, **kwargs):
|
|
1053
1051
|
wx.ToggleButton.__init__(self, parent, -1, label, **kwargs)
|
|
1054
1052
|
|
|
1055
1053
|
if handler:
|
|
1056
1054
|
self.Bind(wx.EVT_TOGGLEBUTTON, _F(handler))
|
|
1057
1055
|
|
|
1058
|
-
self.ToolTip = _Tip(
|
|
1056
|
+
self.ToolTip = _Tip(handler.__doc__)
|
|
1059
1057
|
self.icon = icon
|
|
1060
1058
|
|
|
1061
1059
|
|
|
@@ -1087,20 +1085,20 @@ class TextCtrl(wx.Control):
|
|
|
1087
1085
|
def icon(self, v):
|
|
1088
1086
|
self._btn.icon = v
|
|
1089
1087
|
|
|
1090
|
-
def __init__(self, parent, label='',
|
|
1091
|
-
|
|
1092
|
-
icon=None, tip='', readonly=False, **kwargs):
|
|
1088
|
+
def __init__(self, parent, label='', handler=None, updater=None,
|
|
1089
|
+
icon=None, readonly=False, size=(-1,-1), **kwargs):
|
|
1093
1090
|
wx.Control.__init__(self, parent, size=size, style=wx.BORDER_NONE)
|
|
1094
1091
|
|
|
1095
1092
|
kwargs['style'] = (kwargs.get('style', 0)
|
|
1096
1093
|
| wx.TE_PROCESS_ENTER
|
|
1097
1094
|
| (wx.TE_READONLY if readonly else 0))
|
|
1098
1095
|
|
|
1099
|
-
tooltip = _Tip(tip, handler.__doc__, updater.__doc__)
|
|
1100
|
-
|
|
1101
1096
|
self._ctrl = wx.TextCtrl(self, **kwargs)
|
|
1102
|
-
self._btn = Button(self, label, None, icon,
|
|
1097
|
+
self._btn = Button(self, label, None, icon,
|
|
1103
1098
|
size=(-1,-1) if label or icon else (0,0))
|
|
1099
|
+
self._ctrl.ToolTip = _Tip(handler.__doc__)
|
|
1100
|
+
self._btn.ToolTip = _Tip(updater.__doc__)
|
|
1101
|
+
|
|
1104
1102
|
self.SetSizer(
|
|
1105
1103
|
pack(self, (
|
|
1106
1104
|
(self._btn, 0, wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, 0),
|
|
@@ -1164,20 +1162,20 @@ class Choice(wx.Control):
|
|
|
1164
1162
|
def icon(self, v):
|
|
1165
1163
|
self._btn.icon = v
|
|
1166
1164
|
|
|
1167
|
-
def __init__(self, parent, label='',
|
|
1168
|
-
|
|
1169
|
-
icon=None, tip='', readonly=False, **kwargs):
|
|
1165
|
+
def __init__(self, parent, label='', handler=None, updater=None,
|
|
1166
|
+
icon=None, readonly=False, size=(-1,-1), **kwargs):
|
|
1170
1167
|
wx.Control.__init__(self, parent, size=size, style=wx.BORDER_NONE)
|
|
1171
1168
|
|
|
1172
1169
|
kwargs['style'] = (kwargs.get('style', 0)
|
|
1173
1170
|
| wx.TE_PROCESS_ENTER
|
|
1174
1171
|
| (wx.CB_READONLY if readonly else 0))
|
|
1175
1172
|
|
|
1176
|
-
tooltip = _Tip(tip, handler.__doc__, updater.__doc__)
|
|
1177
|
-
|
|
1178
1173
|
self._ctrl = wx.ComboBox(self, **kwargs)
|
|
1179
|
-
self._btn = Button(self, label, None, icon,
|
|
1174
|
+
self._btn = Button(self, label, None, icon,
|
|
1180
1175
|
size=(-1,-1) if label or icon else (0,0))
|
|
1176
|
+
self._ctrl.ToolTip = _Tip(handler.__doc__)
|
|
1177
|
+
self._btn.ToolTip = _Tip(updater.__doc__)
|
|
1178
|
+
|
|
1181
1179
|
self.SetSizer(
|
|
1182
1180
|
pack(self, (
|
|
1183
1181
|
(self._btn, 0, wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, 0),
|
mwx/framework.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#! python3
|
|
2
2
|
"""mwxlib framework.
|
|
3
3
|
"""
|
|
4
|
-
__version__ = "0.96.
|
|
4
|
+
__version__ = "0.96.6"
|
|
5
5
|
__author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
|
|
6
6
|
|
|
7
7
|
from functools import wraps, partial
|
|
@@ -1594,7 +1594,7 @@ class ShellFrame(MiniFrame):
|
|
|
1594
1594
|
if isinstance(editor, str):
|
|
1595
1595
|
editor = getattr(self, editor, None)
|
|
1596
1596
|
if editor:
|
|
1597
|
-
return editor.load_file(filename, lineno
|
|
1597
|
+
return editor.load_file(filename, lineno)
|
|
1598
1598
|
|
|
1599
1599
|
def load(self, filename, lineno=0, show=True):
|
|
1600
1600
|
"""Load file @where the object is defined.
|
|
@@ -1615,7 +1615,7 @@ class ShellFrame(MiniFrame):
|
|
|
1615
1615
|
filename, ln = m.groups()
|
|
1616
1616
|
lineno = int(ln)
|
|
1617
1617
|
editor = self.find_editor(filename) or self.Log
|
|
1618
|
-
ret = editor.load_file(filename, lineno
|
|
1618
|
+
ret = editor.load_file(filename, lineno)
|
|
1619
1619
|
if ret:
|
|
1620
1620
|
self.popup_window(editor, show)
|
|
1621
1621
|
return ret
|
mwx/graphman.py
CHANGED
|
@@ -1268,8 +1268,8 @@ class Frame(mwx.Frame):
|
|
|
1268
1268
|
.Name(title).Caption(title)
|
|
1269
1269
|
.FloatingSize(size).MinSize(size).Show(0))
|
|
1270
1270
|
j = nb.GetPageIndex(plug)
|
|
1271
|
-
|
|
1272
|
-
nb.SetPageToolTip(j,
|
|
1271
|
+
tips = "[{}]\n{}".format(plug.__module__, plug.__doc__)
|
|
1272
|
+
nb.SetPageToolTip(j, tips.strip())
|
|
1273
1273
|
else:
|
|
1274
1274
|
nb = None
|
|
1275
1275
|
size = plug.GetSize()
|
mwx/images.py
CHANGED
|
@@ -178,6 +178,23 @@ colour_grey = PyEmbeddedImage(
|
|
|
178
178
|
b'r7rzc2YUF8aOx3m0NYJWAPe76VmttzK1bzsbW0dAKwAAAID/tYu/URIDsoEAAAAASUVORK5C'
|
|
179
179
|
b'YII=')
|
|
180
180
|
|
|
181
|
+
#----------------------------------------------------------------------
|
|
182
|
+
connect = PyEmbeddedImage(
|
|
183
|
+
b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0'
|
|
184
|
+
b'RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ+SURBVBgZlcFLSBRhAAfw/858'
|
|
185
|
+
b's860aygiptIp9NChoDzkxYNUYIcO0TUIOghFUNElvEad6lBkdEqCIugi3QQfLR2yQumBaPh+'
|
|
186
|
+
b'7Li7o/uanfmes1972IOEQv5+Ma01DuPRh+U+StlEhSsZUnElprXGQd6kdomUsoOJaiflojXk'
|
|
187
|
+
b'4mIM+pZjaXCp8GslTwkOMDLlOVyoCamiXhkpVCOJRDyGpG2CCYlsgSPvh4TgACGVt21L97Y0'
|
|
188
|
+
b'meBCg0kNyiW28wHiJrC8VYAo0wsE+3g1vtRdquYeHyXHUfAldkohKJcIuUSjbWI5XYKXLQ5/'
|
|
189
|
+
b'fnk1RbDHyJTnSKHeCbF6SbVMGCteH5pxAk7cQLbAQZmAGbOQccuQZTqGGoK615M5woX6aRPd'
|
|
190
|
+
b'ZTkn4a+7kehMmdOzMmptaDOTNkEuzxE3gaAcQITMQ42BugpVHUzIrqRjwCJVOA3nzPLvMzKS'
|
|
191
|
+
b'cujPxnK04RbRdIQgYBxhIYSs0DRqDNSFnHUKIUG5xKZXQTweg5Potmyde9hz/quZ9RbgukWs'
|
|
192
|
+
b'LWQQlvxFFQkXNQbqKgFvDRhHyCRCKrC27cOxYmhrPksyP5rQMzAPd3FJZVdzoyrip+cn7yvU'
|
|
193
|
+
b'ENSVQnajvclCSAUqlIMyCa8oYVsmoPsxM/pJRVVxam7ywTz2IKi5+WLmXqNjXI4TA5lCgIRt'
|
|
194
|
+
b'wjI1GqwYhJBY39hFLt0+NPtxcB7/IIPPvt9N2MaTRNwAZQKWqbGeLmFnxwf1GZhPwXz+RXH2'
|
|
195
|
+
b'HPsgPuVP25qT0DrCZtbHpltEwQuGlRBjEedexFVaCenOjd9R2Acp+RQb2xFMaKS3iiju+v3T'
|
|
196
|
+
b'b69N4T8RGtBjK/lSRoWKKsYGvr2/nsIh/AUG0IfiieuuUQAAAABJRU5ErkJggg==')
|
|
197
|
+
|
|
181
198
|
#----------------------------------------------------------------------
|
|
182
199
|
copy = PyEmbeddedImage(
|
|
183
200
|
b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA'
|
|
@@ -209,6 +226,24 @@ core = PyEmbeddedImage(
|
|
|
209
226
|
b'AQgglIQEcp6GhgaDtrY22JmgAAT5HRQOnz9/BqsB5Y2dO3eCNHOAYh8ggOAGgJyKbhgygAUa'
|
|
210
227
|
b'VDMjTBwggMAGTJ48+flvIJCWlpYjlH2RNYMAQIABANLKHICUilYLAAAAAElFTkSuQmCC')
|
|
211
228
|
|
|
229
|
+
#----------------------------------------------------------------------
|
|
230
|
+
disconnect = PyEmbeddedImage(
|
|
231
|
+
b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0'
|
|
232
|
+
b'RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKuSURBVDjLlZLLS5RRGMbf7zrz'
|
|
233
|
+
b'ebdw8FaSqJAbF0GgRBvptinoPxDKRdDKQjBw2TKClgVJCwmUyMBKydDKS9TCME2tRhs1cZwZ'
|
|
234
|
+
b'57ud853bfB0HiiAVOvBuDuf5ve/7nEcJwxAOOgPTtk4Fr6ZU1OCAVyBCm2Td9jEdcxG5pBwE'
|
|
235
|
+
b'eDyZtaRwjAvWSpkAxjkITsGKqJBIuvB903upH9QdE3rd1MLW0gIVCMsBoYq8U8H2CUQNBdJZ'
|
|
236
|
+
b'p33fCe6PbJo+4XZVmRHFhEDKCXaB4Accii0NFlfT8GNt56a6X/er56qog/Cd1aQjRRQictas'
|
|
237
|
+
b'R8B2EXgIQyblAbX95X9WeDSRPiriz3oZY1pvZ2dH590Z7GB+q7LcjBZHVdhMBaCpEfBsCXDR'
|
|
238
|
+
b'9p8V+t9lLGlUP7PXLxyJbkUMw4DZ2dm+rq6ujjPdz09xTEZrY8VWYZEh/WAwNxWHwEV1eYDs'
|
|
239
|
+
b'qsuOCxFDaYRQwGZ8ljeUE31+fr4PY3xFVulM5mQzC4LRypoSy037kEykvuZytDnvAQ5oNSa8'
|
|
240
|
+
b'scAE0JQcGIeb9LcrJl02Tj+U4gcIoanG8MU35qKzK58SaCux9ZSLoGVxvJvnPfAQrQEQEhTC'
|
|
241
|
+
b'RhpBYVQB61CNyZY+v6qvrzdisRgMDg6O1+kjbUt+23EpTPz2LA9wMa7QFJBuhxIWQHKHQWmB'
|
|
242
|
+
b'DrXHGozJuTfQ4sWBEDI9NDSUkc8zf5ueB9gubiqyVJBacBDZXQm2MhSiugZW7QkYfj/NuGi5'
|
|
243
|
+
b'ttd3a9uxi6bM9FhFmak5fgCmHEXqQFcVEDkBiZVt+edhz8fh7om9AHrWxV5JgWoImXMfE1jb'
|
|
244
|
+
b'sMHd8QF7AQQyONjxp4UQ9/YLnJ710JgaGucXUi6sr2cY84MeQfmyCOg2p3RD5PjPL69v8H0B'
|
|
245
|
+
b'yEWXnSR7IoPSzjEt+jDQQeE/zi9kq6pv7shelwAAAABJRU5ErkJggg==')
|
|
246
|
+
|
|
212
247
|
#----------------------------------------------------------------------
|
|
213
248
|
exit = PyEmbeddedImage(
|
|
214
249
|
b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0'
|
mwx/nutshell.py
CHANGED
|
@@ -9,6 +9,7 @@ from bdb import BdbQuit
|
|
|
9
9
|
import traceback
|
|
10
10
|
import inspect
|
|
11
11
|
import builtins
|
|
12
|
+
import operator
|
|
12
13
|
import dis
|
|
13
14
|
import pydoc
|
|
14
15
|
import keyword
|
|
@@ -163,10 +164,19 @@ class EditorInterface(CtrlInterface):
|
|
|
163
164
|
## This avoids sending the `EVT_STC_NEEDSHOWN` notification.
|
|
164
165
|
self.SetAutomaticFold(stc.STC_AUTOMATICFOLD_SHOW)
|
|
165
166
|
|
|
167
|
+
def _dunders(*objects):
|
|
168
|
+
ss = set()
|
|
169
|
+
for obj in objects:
|
|
170
|
+
ss |= set(x for x in dir(obj) if x.startswith('__'))
|
|
171
|
+
return ss
|
|
172
|
+
|
|
166
173
|
## Keyword(2) setting
|
|
167
174
|
self.SetLexer(stc.STC_LEX_PYTHON)
|
|
168
175
|
self.SetKeyWords(0, ' '.join(keyword.kwlist))
|
|
169
|
-
self.SetKeyWords(1, ' '.join(builtins.__dict__)
|
|
176
|
+
self.SetKeyWords(1, ' '.join(builtins.__dict__)
|
|
177
|
+
+ ' '.join(_dunders(type, int, float, str, bytes,
|
|
178
|
+
tuple, list, range, operator,))
|
|
179
|
+
+ ' self this')
|
|
170
180
|
|
|
171
181
|
## AutoComp setting
|
|
172
182
|
self.AutoCompSetAutoHide(False)
|
mwx/plugins/ffmpeg_view.py
CHANGED
|
@@ -106,7 +106,7 @@ class Plugin(Layer):
|
|
|
106
106
|
updater=self.get_crop,
|
|
107
107
|
)
|
|
108
108
|
|
|
109
|
-
self.snp = Button(self, handler=self.snapshot, icon='
|
|
109
|
+
self.snp = Button(self, handler=self.snapshot, icon='clip')
|
|
110
110
|
self.exp = Button(self, handler=self.export, icon='save')
|
|
111
111
|
|
|
112
112
|
self.rw = Button(self, handler=lambda v: self.seekdelta(-100), icon='|<-')
|
mwx/plugins/fft_view.py
CHANGED
|
@@ -4,12 +4,18 @@
|
|
|
4
4
|
import wx
|
|
5
5
|
import numpy as np
|
|
6
6
|
from numpy.fft import fft2,ifft2,fftshift,ifftshift
|
|
7
|
-
## from scipy.fftpack import fft,ifft,fft2,ifft2 Memory Leak? <scipy 0.16.1>
|
|
8
|
-
## import cv2
|
|
9
7
|
|
|
10
8
|
from mwx.graphman import Layer
|
|
11
9
|
from mwx.controls import Param
|
|
12
|
-
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def fftcrop(src):
|
|
13
|
+
"""Crop src image in 2**N square ROI centered at (x, y)."""
|
|
14
|
+
h, w = src.shape
|
|
15
|
+
m = min(h, w)
|
|
16
|
+
n = 1 if m < 2 else 2 ** int(np.log2(m) - 1) # +-m/2
|
|
17
|
+
x, y = w//2, h//2
|
|
18
|
+
return src[y-n:y+n, x-n:x+n]
|
|
13
19
|
|
|
14
20
|
|
|
15
21
|
class Plugin(Layer):
|
|
@@ -45,7 +51,7 @@ class Plugin(Layer):
|
|
|
45
51
|
frame = self.graph.frame
|
|
46
52
|
if frame:
|
|
47
53
|
self.message("FFT execution...")
|
|
48
|
-
src =
|
|
54
|
+
src = fftcrop(frame.roi)
|
|
49
55
|
h, w = src.shape
|
|
50
56
|
|
|
51
57
|
dst = fftshift(fft2(src))
|
mwx/plugins/frame_listview.py
CHANGED
|
@@ -233,10 +233,11 @@ class CheckList(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
|
|
|
233
233
|
self.Select(j, False)
|
|
234
234
|
|
|
235
235
|
def on_frames_removed(self, indices):
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
self.
|
|
236
|
+
with wx.FrozenWindow(self):
|
|
237
|
+
for j in reversed(indices):
|
|
238
|
+
self.DeleteItem(j)
|
|
239
|
+
for k in range(self.ItemCount): # id(0) を更新する
|
|
240
|
+
self.SetItem(k, 0, str(k))
|
|
240
241
|
|
|
241
242
|
|
|
242
243
|
class Plugin(Layer):
|
mwx/utilus.py
CHANGED
|
@@ -444,7 +444,7 @@ def find_modules(force=False, verbose=True):
|
|
|
444
444
|
lm = eval(o.read()) # read and evaluate module list
|
|
445
445
|
|
|
446
446
|
## Check additional packages and modules
|
|
447
|
-
|
|
447
|
+
verbose = False
|
|
448
448
|
for info in walk_packages_no_import(['.']):
|
|
449
449
|
_callback('.', info.name)
|
|
450
450
|
else:
|
|
@@ -692,7 +692,8 @@ class FSM(dict):
|
|
|
692
692
|
" to : {}".format(self.__state),
|
|
693
693
|
" action : {}".format(typename(act)),
|
|
694
694
|
" args : {}".format(args),
|
|
695
|
-
" kwargs : {}".format(kwargs)
|
|
695
|
+
" kwargs : {}".format(kwargs),
|
|
696
|
+
"")
|
|
696
697
|
self.__matched_pattern = None
|
|
697
698
|
return retvals
|
|
698
699
|
|
|
@@ -827,17 +828,15 @@ class FSM(dict):
|
|
|
827
828
|
|
|
828
829
|
if event in context:
|
|
829
830
|
if state2 != context[event][0]:
|
|
830
|
-
warn(f"- FSM transaction may conflict.\n"
|
|
831
|
-
f" The state {state2!r} is different from the original state."
|
|
832
|
-
f" {event!r} : {state!r} --> {state2!r}")
|
|
831
|
+
warn(f"- FSM transaction may conflict ({event!r} : {state!r} --> {state2!r}).\n"
|
|
832
|
+
f" The state {state2!r} is different from the original state.")
|
|
833
833
|
pass
|
|
834
834
|
context[event][0] = state2 # update transition
|
|
835
835
|
else:
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
## pass
|
|
836
|
+
if state2 not in self:
|
|
837
|
+
warn(f"- FSM transaction may contradict ({event!r} : {state!r} --> {state2!r}).\n"
|
|
838
|
+
f" The state {state2!r} is not found in the contexts.")
|
|
839
|
+
pass
|
|
841
840
|
context[event] = [state2] # new event:transaction
|
|
842
841
|
|
|
843
842
|
transaction = context[event]
|
|
@@ -848,8 +847,8 @@ class FSM(dict):
|
|
|
848
847
|
try:
|
|
849
848
|
transaction.append(action)
|
|
850
849
|
except AttributeError:
|
|
851
|
-
warn(f"- FSM cannot append new transaction ({state!r} : {event!r})
|
|
852
|
-
f" The transaction must be a list, not a tuple")
|
|
850
|
+
warn(f"- FSM cannot append new transaction ({state!r} : {event!r}).\n"
|
|
851
|
+
f" The transaction must be a list, not a tuple.")
|
|
853
852
|
return action
|
|
854
853
|
|
|
855
854
|
def unbind(self, event, action=None, state=None):
|
|
@@ -868,7 +867,7 @@ class FSM(dict):
|
|
|
868
867
|
|
|
869
868
|
context = self[state]
|
|
870
869
|
if event not in context:
|
|
871
|
-
warn(f"- FSM has no such transaction ({state!r} : {event!r})")
|
|
870
|
+
warn(f"- FSM has no such transaction ({state!r} : {event!r}).")
|
|
872
871
|
return
|
|
873
872
|
|
|
874
873
|
transaction = context[event]
|
|
@@ -882,7 +881,7 @@ class FSM(dict):
|
|
|
882
881
|
transaction.remove(action)
|
|
883
882
|
return True
|
|
884
883
|
except AttributeError:
|
|
885
|
-
warn(f"- FSM removing action from context ({state!r} : {event!r})
|
|
884
|
+
warn(f"- FSM removing action from context ({state!r} : {event!r}).\n"
|
|
886
885
|
f" The transaction must be a list, not a tuple")
|
|
887
886
|
return False
|
|
888
887
|
|
|
@@ -965,7 +964,7 @@ class TreeList(object):
|
|
|
965
964
|
else:
|
|
966
965
|
ls.append([key, value]) # append to items:list
|
|
967
966
|
except (ValueError, TypeError, AttributeError) as e:
|
|
968
|
-
warn(f"- TreeList
|
|
967
|
+
warn(f"- TreeList {e!r}: {key=!r}")
|
|
969
968
|
|
|
970
969
|
def _delf(self, ls, key):
|
|
971
970
|
if '/' in key:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mwxlib
|
|
3
|
-
Version: 0.96.
|
|
3
|
+
Version: 0.96.6
|
|
4
4
|
Summary: A wrapper of matplotlib and wxPython (phoenix)
|
|
5
5
|
Home-page: https://github.com/komoto48g/mwxlib
|
|
6
6
|
Author: Kazuya O'moto
|
|
@@ -16,11 +16,9 @@ Classifier: Topic :: Scientific/Engineering :: Image Processing
|
|
|
16
16
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: wxpython
|
|
19
|
-
Requires-Dist: numpy
|
|
20
|
-
Requires-Dist: scipy
|
|
21
|
-
Requires-Dist: pillow
|
|
22
19
|
Requires-Dist: matplotlib
|
|
23
20
|
Requires-Dist: opencv-python
|
|
21
|
+
Requires-Dist: scipy
|
|
24
22
|
|
|
25
23
|
Project description
|
|
26
24
|
===================
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
mwx/__init__.py,sha256=nN62CGTWjME7Zz2h-jIRB8MxwuErIkHPGrlBzydkF0o,643
|
|
2
2
|
mwx/bookshelf.py,sha256=CjcgtHC33KR5mHp1lW6Bqfndpzr7hC8ICkFihw4kM3g,5134
|
|
3
|
-
mwx/controls.py,sha256=
|
|
4
|
-
mwx/framework.py,sha256=
|
|
5
|
-
mwx/graphman.py,sha256=
|
|
6
|
-
mwx/images.py,sha256=
|
|
3
|
+
mwx/controls.py,sha256=s6yJzQyYnjCzcjXa6nbTJncxzpMI0E5zYWPn3-cFy5Q,48378
|
|
4
|
+
mwx/framework.py,sha256=xo6rnlRMtCtGT3FDJt2dJ8dOdelnPRoN93I1lKQO5lE,75227
|
|
5
|
+
mwx/graphman.py,sha256=XoD_wbt5wrmiRf8Q3lpn_eklakE2K-rLfpzfXG1L-Pc,71269
|
|
6
|
+
mwx/images.py,sha256=_-Eh3xF7Khu42ivkYp97NXIzSNGbjcidqtWjZQFGtqE,47827
|
|
7
7
|
mwx/matplot2.py,sha256=-G7z0Osozm9NjLfXvX5UcdFviwbNUktjbd904_g-PqQ,33516
|
|
8
8
|
mwx/matplot2g.py,sha256=22rpdkqJQEJADINPaG5htACutbt8oG1ewO8LMpxaqH4,65237
|
|
9
9
|
mwx/matplot2lg.py,sha256=MDbkO0vn5yi9rwTBCBJ4rsIHcWyoGXeNTbp0xfrvTdM,27381
|
|
10
10
|
mwx/mgplt.py,sha256=ITzxA97yDwr_35BUk5OqnyskSuKVDbpf2AQCKY1jHTI,5671
|
|
11
|
-
mwx/nutshell.py,sha256=
|
|
12
|
-
mwx/utilus.py,sha256=
|
|
11
|
+
mwx/nutshell.py,sha256=cdrg3cuF6AVU2OuR3QswSiTWrTsGIVaqrBSMuxJIjdE,137364
|
|
12
|
+
mwx/utilus.py,sha256=8GK_2mGY08DVN5_SGWynLKQEJsCKqvqWTDToar1XozM,37333
|
|
13
13
|
mwx/wxmon.py,sha256=f3V24EF7kdMlYF7usLYK9QE5KU6fSu0jVqsvwAiA-Ag,12647
|
|
14
14
|
mwx/wxpdb.py,sha256=lLowkkAgMhPFHAfklD7wZHq0qbSMjRxnBFtSajmVgME,19133
|
|
15
15
|
mwx/wxwil.py,sha256=0bzSTfMEjllJheKxZPb4p8Luz6Il3V29bCLBty72U2o,5576
|
|
16
16
|
mwx/wxwit.py,sha256=yU6XeCCWRBP7CLmpphjT072PfXAL30DNaxoChDX2p0I,7322
|
|
17
17
|
mwx/plugins/__init__.py,sha256=jnJ-Sl9XJ_7BFDslD_r7dsbxsOT57q_IaEriV53XIGY,41
|
|
18
|
-
mwx/plugins/ffmpeg_view.py,sha256=
|
|
19
|
-
mwx/plugins/fft_view.py,sha256=
|
|
20
|
-
mwx/plugins/frame_listview.py,sha256=
|
|
18
|
+
mwx/plugins/ffmpeg_view.py,sha256=QjNqnvPEd9vCwfATU2BOO75fIOFD5LQ-Wf-BBhvZNZs,9368
|
|
19
|
+
mwx/plugins/fft_view.py,sha256=HVptnn1dq-Dg7AzXKJXq1dfKiy38catlrMbJkvyLM98,2790
|
|
20
|
+
mwx/plugins/frame_listview.py,sha256=7LDAYbl5NvmD4Ehc690IrTbcRgCALRWeLVVOT9cm9Do,10404
|
|
21
21
|
mwx/plugins/line_profile.py,sha256=--9NIc3x5EfRB3L59JvD7rzENQHyiYfu7wWJo6AuMkA,820
|
|
22
22
|
mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
|
|
23
23
|
mwx/py/filling.py,sha256=KaHooM32hrGGgqw75Cbt8lAvACwC6RXadob9LGgNnEc,16806
|
|
24
|
-
mwxlib-0.96.
|
|
25
|
-
mwxlib-0.96.
|
|
26
|
-
mwxlib-0.96.
|
|
27
|
-
mwxlib-0.96.
|
|
28
|
-
mwxlib-0.96.
|
|
24
|
+
mwxlib-0.96.6.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
|
|
25
|
+
mwxlib-0.96.6.dist-info/METADATA,sha256=8MHmMhq14c6bbvPdH1uCOk-LxYTijq_07e7ACN_bbpQ,1880
|
|
26
|
+
mwxlib-0.96.6.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
|
|
27
|
+
mwxlib-0.96.6.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
|
|
28
|
+
mwxlib-0.96.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|