mwxlib 1.1.6__py3-none-any.whl → 1.2.0__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/__init__.py CHANGED
@@ -8,7 +8,7 @@ from .framework import Frame, MiniFrame, ShellFrame, deb
8
8
 
9
9
  ## Controls
10
10
  from .controls import Param, LParam, Knob, ControlPanel, Clipboard, Icon
11
- from .controls import Button, ToggleButton, ClassicButton, TextCtrl, Choice, Gauge, Indicator
11
+ from .controls import Button, ToggleButton, ClassicButton, TextBox, Choice, Gauge, Indicator
12
12
 
13
13
  ## Plugman
14
14
  ## from .graphman import Frame as GraphmanFrame, Layer, Thread, Graph
mwx/controls.py CHANGED
@@ -73,7 +73,7 @@ class Param:
73
73
  v = self.value
74
74
  try:
75
75
  return self.__format(v)
76
- except ValueError:
76
+ except (TypeError, ValueError):
77
77
  return str(v)
78
78
 
79
79
  def __int__(self):
@@ -93,7 +93,7 @@ class Param:
93
93
  return
94
94
  elif isinstance(v, str):
95
95
  try:
96
- v = self.__eval(v.replace(',', '')) # eliminates commas; includes nan, inf
96
+ v = self.__eval(v.replace(',', '')) # eliminates commas
97
97
  except Exception:
98
98
  v = self.value
99
99
  internal_callback = False
@@ -202,9 +202,10 @@ class Param:
202
202
  def index(self):
203
203
  """A knob index -> value.
204
204
  Returns -1 if the value is not defined."""
205
- if self:
206
- return int(np.searchsorted(self.range, self.value))
207
- return -1
205
+ v = self.value
206
+ if np.isnan(v) or np.isinf(v):
207
+ return -1
208
+ return int(np.searchsorted(self.range, v))
208
209
 
209
210
  @index.setter
210
211
  def index(self, j):
@@ -267,7 +268,7 @@ class LParam(Param):
267
268
  v = self.value
268
269
  if np.isnan(v) or np.isinf(v):
269
270
  return -1
270
- return int(round((self.value - self.min) / self.step))
271
+ return int(round((v - self.min) / self.step))
271
272
 
272
273
  @index.setter
273
274
  def index(self, j):
@@ -711,24 +712,25 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
711
712
  return params
712
713
  return filter(lambda c: getattr(c, 'check', None), params)
713
714
 
714
- def set_params(self, argv=None, checked_only=False):
715
+ def set_params(self, argv, checked_only=False):
715
716
  params = self.get_params(checked_only)
716
- if argv is None:
717
- for p in params:
718
- try:
719
- p.reset()
720
- except (AttributeError, TypeError):
721
- pass
722
- else:
723
- for p, v in zip(params, argv):
724
- try:
725
- p.reset(v) # eval v:str -> value
726
- except AttributeError:
727
- p.value = v
728
- except Exception as e: # failed to eval
729
- print(f"- Failed to reset {p!r}.", e)
717
+ for p, v in zip(params, argv):
718
+ try:
719
+ p.reset(v) # eval v:str -> value
720
+ except AttributeError:
721
+ p.value = v
722
+ except Exception as e:
723
+ print(f"- Failed to eval {v}:", e)
730
724
 
731
- reset_params = set_params
725
+ def reset_params(self, checked_only=False):
726
+ params = self.get_params(checked_only)
727
+ for p in params:
728
+ try:
729
+ p.reset()
730
+ except (AttributeError, TypeError):
731
+ ## TypeError might occur if p.reset(v) is called with
732
+ ## missing 1 required positional argument.
733
+ pass
732
734
 
733
735
  def copy_to_clipboard(self, checked_only=False):
734
736
  params = self.get_params(checked_only)
@@ -1040,7 +1042,7 @@ class ToggleButton(wx.ToggleButton):
1040
1042
  self.SetBitmap(Icon(icon))
1041
1043
 
1042
1044
 
1043
- class TextCtrl(wx.Control):
1045
+ class TextBox(wx.Control):
1044
1046
  """Text control
1045
1047
 
1046
1048
  Args:
@@ -1094,6 +1096,9 @@ class TextCtrl(wx.Control):
1094
1096
  pass
1095
1097
 
1096
1098
 
1099
+ TextCtrl = TextBox #: for backward compatibility
1100
+
1101
+
1097
1102
  class Choice(wx.Control):
1098
1103
  """Editable Choice (ComboBox) control
1099
1104
 
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "1.1.6"
4
+ __version__ = "1.2.0"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from contextlib import contextmanager
mwx/graphman.py CHANGED
@@ -16,6 +16,7 @@ import platform
16
16
  import re
17
17
  import wx
18
18
  from wx import aui
19
+ from wx import stc
19
20
 
20
21
  from matplotlib import cm
21
22
  from matplotlib import colors
@@ -322,18 +323,22 @@ class LayerInterface(CtrlInterface):
322
323
  except AttributeError:
323
324
  self.parameters = None
324
325
 
325
- def copy_params(**kwargs):
326
- if self.parameters:
327
- return self.copy_to_clipboard(**kwargs)
326
+ def copy_params(evt, checked_only=False):
327
+ if isinstance(evt.EventObject, (wx.TextEntry, stc.StyledTextCtrl)):
328
+ evt.Skip()
329
+ elif self.parameters:
330
+ self.copy_to_clipboard(checked_only)
328
331
 
329
- def paste_params(**kwargs):
330
- if self.parameters:
331
- return self.paste_from_clipboard(**kwargs)
332
+ def paste_params(evt, checked_only=False):
333
+ if isinstance(evt.EventObject, (wx.TextEntry, stc.StyledTextCtrl)):
334
+ evt.Skip()
335
+ elif self.parameters:
336
+ self.paste_from_clipboard(checked_only)
332
337
 
333
- def reset_params(**kwargs):
338
+ def reset_params(evt, checked_only=False):
334
339
  self.Draw(None)
335
340
  if self.parameters:
336
- return self.set_params(**kwargs)
341
+ self.reset_params(checked_only)
337
342
 
338
343
  self.handler.append({ # DNA<Layer>
339
344
  None : {
@@ -356,15 +361,15 @@ class LayerInterface(CtrlInterface):
356
361
  })
357
362
  self.menu = [
358
363
  (wx.ID_COPY, "&Copy params\t(C-c)", "Copy params",
359
- lambda v: copy_params(checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
364
+ lambda v: copy_params(v, checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
360
365
  lambda v: v.Enable(bool(self.parameters))),
361
366
 
362
367
  (wx.ID_PASTE, "&Paste params\t(C-v)", "Read params",
363
- lambda v: paste_params(checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
368
+ lambda v: paste_params(v, checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
364
369
  lambda v: v.Enable(bool(self.parameters))),
365
370
  (),
366
371
  (wx.ID_RESET, "&Reset params\t(C-n)", "Reset params", Icon('-'),
367
- lambda v: reset_params(checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
372
+ lambda v: reset_params(v, checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
368
373
  lambda v: v.Enable(bool(self.parameters))),
369
374
  (),
370
375
  (wx.ID_EDIT, "&Edit module", "Edit module", Icon('pen'),
mwx/matplot2g.py CHANGED
@@ -235,11 +235,11 @@ class AxesImagePhantom:
235
235
 
236
236
  @unit.setter
237
237
  def unit(self, v):
238
- if v is None:
238
+ if v is None or np.isnan(v): # nan => undefined
239
239
  v = self.parent.unit
240
240
  self.__localunit = None
241
- elif np.isnan(v) or np.isinf(v):
242
- raise ValueError("The unit value cannot be NaN or Inf")
241
+ elif np.isinf(v):
242
+ raise ValueError("The unit value must not be inf")
243
243
  elif v <= 0:
244
244
  raise ValueError("The unit value must be greater than zero")
245
245
  else:
@@ -802,10 +802,8 @@ class GraphPlot(MatplotPanel):
802
802
 
803
803
  @unit.setter
804
804
  def unit(self, v):
805
- if v is None:
806
- raise ValueError("The globalunit must be non-nil value")
807
- elif np.isnan(v) or np.isinf(v):
808
- raise ValueError("Axis limits cannot be NaN or Inf")
805
+ if v is None or np.isnan(v) or np.isinf(v):
806
+ raise ValueError("The unit value must not be nan or inf")
809
807
  elif v <= 0:
810
808
  raise ValueError("The unit value must be greater than zero")
811
809
  else:
mwx/mgplt.py CHANGED
@@ -139,7 +139,7 @@ class GnuplotFrame(mwx.Frame):
139
139
  lambda v: self.panel.paste_from_clipboard()),
140
140
  (),
141
141
  (wx.ID_RESET, "&Reset params\tCtrl-n", "Reset params to ini-value",
142
- lambda v: self.panel.set_params()),
142
+ lambda v: self.panel.reset_params()),
143
143
  ]
144
144
  self.menubar["Gnuplot"] = [
145
145
  (mwx.ID_(80), "&Gnuplot setting\tCtrl-g", "Edit settings",
mwx/nutshell.py CHANGED
@@ -4,6 +4,7 @@
4
4
  from functools import wraps
5
5
  from importlib import import_module
6
6
  from contextlib import contextmanager
7
+ from pathlib import Path
7
8
  from pprint import pformat
8
9
  from bdb import BdbQuit
9
10
  import traceback
@@ -220,21 +221,21 @@ class AutoCompInterfaceMixin:
220
221
  if self.CallTipActive():
221
222
  self.CallTipCancel()
222
223
 
223
- text = next(self.gen_text_at_caret(), None)
224
+ text = self.SelectedText or self.expr_at_caret or self.line_at_caret
224
225
  if text:
225
226
  text = introspect.getRoot(text, terminator='(')
226
227
  try:
227
228
  obj = self.eval(text)
228
229
  self.help(obj)
229
230
  except Exception as e:
230
- self.message("- {} : {!r}".format(e, text))
231
+ self.message(e)
231
232
 
232
233
  def call_helpTip(self, evt):
233
234
  """Show a calltip for the selected function."""
234
235
  if self.CallTipActive():
235
236
  self.CallTipCancel()
236
237
 
237
- text = next(self.gen_text_at_caret(), None)
238
+ text = self.SelectedText or self.expr_at_caret or self.line_at_caret
238
239
  if text:
239
240
  p = self.cpos
240
241
  self.autoCallTipShow(text,
@@ -1721,10 +1722,19 @@ class Buffer(EditorInterface, EditWindow):
1721
1722
  return self.__filename
1722
1723
 
1723
1724
  def update_filestamp(self, fn):
1724
- if fn and os.path.isfile(fn):
1725
- self.__mtime = os.path.getmtime(fn) # update timestamp (modified time)
1725
+ self.__path = Path(fn)
1726
+ if self.__path.is_file():
1727
+ self.__mtime = self.__path.stat().st_mtime # update timestamp (modified time)
1726
1728
  else:
1727
- self.__mtime = None
1729
+ if re.match(url_re, fn):
1730
+ self.__mtime = -1
1731
+ else:
1732
+ try:
1733
+ self.__path.resolve(True) # Check if the path format is valid.
1734
+ except FileNotFoundError:
1735
+ self.__mtime = False
1736
+ except Exception:
1737
+ self.__mtime = None
1728
1738
  if self.__filename != fn:
1729
1739
  self.__filename = fn
1730
1740
  self.update_caption()
@@ -1735,16 +1745,30 @@ class Buffer(EditorInterface, EditWindow):
1735
1745
 
1736
1746
  Returns:
1737
1747
  None : no file
1738
- = 0 : a file
1748
+ = 0 : a file (even if not found)
1739
1749
  > 0 : a file edited externally
1740
1750
  < 0 : a url file
1741
1751
  """
1742
- fn = self.filename
1743
- if os.path.isfile(fn):
1744
- return os.path.getmtime(fn) - self.__mtime
1745
- if re.match(url_re, fn):
1746
- return -1
1747
- return None
1752
+ try:
1753
+ return self.__path.stat().st_mtime - self.__mtime
1754
+ except Exception:
1755
+ if isinstance(self.__mtime, float): # path not resolved.
1756
+ self.__mtime = False
1757
+ return self.__mtime
1758
+
1759
+ @property
1760
+ def need_buffer_save(self):
1761
+ """Returns whether the buffer should be saved.
1762
+ The file has been modified internally.
1763
+ """
1764
+ return self.mtdelta is not None and self.IsModified()
1765
+
1766
+ @property
1767
+ def need_buffer_load(self):
1768
+ """Returns whether the buffer should be loaded.
1769
+ The file has been modified externally.
1770
+ """
1771
+ return self.mtdelta is not None and self.mtdelta > 0
1748
1772
 
1749
1773
  @property
1750
1774
  def caption_prefix(self):
@@ -1769,20 +1793,6 @@ class Buffer(EditorInterface, EditWindow):
1769
1793
  except AttributeError:
1770
1794
  pass
1771
1795
 
1772
- @property
1773
- def need_buffer_save(self):
1774
- """Returns whether the buffer should be saved.
1775
- The file has been modified internally.
1776
- """
1777
- return self.mtdelta is not None and self.IsModified()
1778
-
1779
- @property
1780
- def need_buffer_load(self):
1781
- """Returns whether the buffer should be loaded.
1782
- The file has been modified externally.
1783
- """
1784
- return self.mtdelta is not None and self.mtdelta > 0
1785
-
1786
1796
  def __init__(self, parent, filename, **kwargs):
1787
1797
  EditWindow.__init__(self, parent, **kwargs)
1788
1798
  EditorInterface.__init__(self)
@@ -2083,34 +2093,21 @@ class Buffer(EditorInterface, EditWindow):
2083
2093
  dispatcher.send(signal='Interpreter.push',
2084
2094
  sender=self, command=None, more=False)
2085
2095
 
2086
- def gen_text_at_caret(self):
2087
- """Generates the selected text,
2088
- otherwise the line or expression at the caret.
2089
- """
2090
- def _gen_text():
2091
- text = self.SelectedText
2092
- if text:
2093
- yield text
2094
- else:
2095
- yield self.line_at_caret
2096
- yield self.expr_at_caret
2097
- return filter(None, _gen_text())
2098
-
2099
2096
  def eval_line(self):
2100
2097
  if self.CallTipActive():
2101
2098
  self.CallTipCancel()
2102
2099
 
2103
- status = "No words"
2104
- for text in self.gen_text_at_caret():
2100
+ text = self.SelectedText or self.expr_at_caret
2101
+ if text:
2105
2102
  try:
2106
2103
  obj = eval(text, self.globals, self.locals)
2107
2104
  except Exception as e:
2108
- status = "- {} : {!r}".format(e, text)
2105
+ self.message(e)
2109
2106
  else:
2110
2107
  self.CallTipShow(self.cpos, pformat(obj))
2111
2108
  self.message(text)
2112
- return
2113
- self.message(status)
2109
+ else:
2110
+ self.message("No words")
2114
2111
 
2115
2112
  def exec_region(self):
2116
2113
  try:
@@ -2425,8 +2422,8 @@ class EditorBook(AuiNotebook, CtrlInterface):
2425
2422
  self.swap_buffer(buf, lineno)
2426
2423
  return True
2427
2424
  return False
2428
- except OSError as e:
2429
- self.post_message(e)
2425
+ except (OSError, UnicodeDecodeError) as e:
2426
+ self.post_message("Failed to load:", e)
2430
2427
  self.delete_buffer(buf)
2431
2428
  return False
2432
2429
 
@@ -2441,11 +2438,10 @@ class EditorBook(AuiNotebook, CtrlInterface):
2441
2438
  for fn in dlg.Paths:
2442
2439
  self.find_file(fn)
2443
2440
  return
2444
- if self.load_file(filename) == False: # not None
2441
+ if self.load_file(filename) == False: # noqa: not None
2445
2442
  buf = self.create_buffer(filename)
2446
- buf._Buffer__mtime = 0 # => need_buffer_save
2447
2443
  self.swap_buffer(buf)
2448
- self.post_message(f"New file: {filename!r}.")
2444
+ self.post_message("New file.")
2449
2445
 
2450
2446
  def save_file(self, filename, buf=None, verbose=True):
2451
2447
  """Save the current buffer to a file.
@@ -2467,8 +2463,8 @@ class EditorBook(AuiNotebook, CtrlInterface):
2467
2463
  self.default_buffer = None
2468
2464
  return True
2469
2465
  return False
2470
- except Exception as e:
2471
- self.post_message(f"Failed to save {filename!r}.", e)
2466
+ except (OSError, UnicodeDecodeError) as e:
2467
+ self.post_message("Failed to save:", e)
2472
2468
  return False
2473
2469
 
2474
2470
  def load_buffer(self, buf=None):
@@ -3592,39 +3588,25 @@ class Nautilus(EditorInterface, Shell):
3592
3588
  self.cpos, self.anchor = self.anchor, self.cpos
3593
3589
  self.EnsureCaretVisible()
3594
3590
 
3595
- def gen_text_at_caret(self):
3596
- """Generates the selected text,
3597
- otherwise the line or expression at the caret.
3598
- (override) Generates command line (that starts with a prompt).
3599
- """
3600
- def _gen_text():
3601
- text = self.SelectedText
3602
- if text:
3603
- yield text
3604
- else:
3605
- yield self.getCommand() # self.line_at_caret
3606
- yield self.expr_at_caret
3607
- return filter(None, _gen_text())
3608
-
3609
3591
  def eval_line(self, evt):
3610
3592
  """Evaluate the selected word or line."""
3611
3593
  if self.CallTipActive():
3612
3594
  self.CallTipCancel()
3613
3595
 
3614
- status = "No words"
3615
- for text in self.gen_text_at_caret():
3596
+ text = self.SelectedText or self.expr_at_caret
3597
+ if text:
3616
3598
  tokens = split_words(text)
3617
3599
  try:
3618
3600
  cmd = self.magic_interpret(tokens)
3619
3601
  cmd = self.regulate_cmd(cmd)
3620
3602
  obj = self.eval(cmd)
3621
3603
  except Exception as e:
3622
- status = "- {} : {!r}".format(e, text)
3604
+ self.message(e)
3623
3605
  else:
3624
3606
  self.CallTipShow(self.cpos, pformat(obj))
3625
3607
  self.message(cmd)
3626
- return
3627
- self.message(status)
3608
+ else:
3609
+ self.message("No words")
3628
3610
 
3629
3611
  def exec_region(self, evt):
3630
3612
  """Execute the the selected region."""
@@ -10,7 +10,7 @@ import wx.media
10
10
 
11
11
  from mwx.framework import _F, hotkey
12
12
  from mwx.graphman import Layer
13
- from mwx.controls import LParam, Icon, Button, TextCtrl
13
+ from mwx.controls import LParam, Icon, Button, TextBox
14
14
 
15
15
 
16
16
  def read_info(path):
@@ -101,7 +101,7 @@ class Plugin(Layer):
101
101
  handler=self.set_offset,
102
102
  updater=self.get_offset,
103
103
  )
104
- self.crop = TextCtrl(self, icon="cut", size=(130,-1),
104
+ self.crop = TextBox(self, icon="cut", size=(130,-1),
105
105
  handler=self.set_crop,
106
106
  updater=self.get_crop,
107
107
  )
@@ -210,20 +210,18 @@ class Plugin(Layer):
210
210
 
211
211
  def set_offset(self, tc):
212
212
  """Set offset value by referring to ss/to value."""
213
- try:
213
+ if self._path:
214
214
  self.mc.Seek(self.DELTA + int(tc.value * 1000))
215
- except Exception:
216
- pass
217
215
 
218
216
  def get_offset(self, tc):
219
217
  """Get offset value and assigns it to ss/to value."""
220
- try:
218
+ if self._path:
221
219
  tc.value = round(self.mc.Tell()) / 1000
222
- except Exception:
223
- pass
224
220
 
225
221
  def set_crop(self):
226
222
  """Set crop area (W:H:Left:Top) to roi."""
223
+ if not self._path:
224
+ return
227
225
  frame = self.graph.frame
228
226
  if frame:
229
227
  try:
@@ -238,6 +236,8 @@ class Plugin(Layer):
238
236
 
239
237
  def get_crop(self):
240
238
  """Get crop area (W:H:Left:Top) from roi."""
239
+ if not self._path:
240
+ return
241
241
  crop = ''
242
242
  frame = self.graph.frame
243
243
  if frame:
@@ -246,28 +246,24 @@ class Plugin(Layer):
246
246
  xo, yo = nx[0], ny[1]
247
247
  xp, yp = nx[1], ny[0]
248
248
  crop = "{}:{}:{}:{}".format(xp-xo, yp-yo, xo, yo)
249
- if self._path and not crop:
249
+ if not crop:
250
250
  crop = "{}:{}:0:0".format(*self.video_size)
251
251
  self.crop.Value = crop
252
252
 
253
253
  def seekto(self, offset):
254
254
  """Seek position with offset [ms] from the `to` position."""
255
- try:
255
+ if self._path:
256
256
  t = self.to.value + offset/1000
257
257
  if 0 <= t < self.video_dur:
258
258
  self.to.value = round(t, 3)
259
259
  self.set_offset(self.to)
260
- except AttributeError:
261
- pass
262
260
 
263
261
  def seekd(self, offset):
264
262
  """Seek position with offset [ms] from the current position."""
265
- try:
263
+ if self._path:
266
264
  t = self.mc.Tell() + offset
267
265
  if 0 <= t < self.video_dur * 1000:
268
266
  self.mc.Seek(self.DELTA + t)
269
- except AttributeError:
270
- pass
271
267
 
272
268
  def snapshot(self):
273
269
  """Create a snapshot of the current frame.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mwxlib
3
- Version: 1.1.6
3
+ Version: 1.2.0
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
@@ -1,14 +1,14 @@
1
- mwx/__init__.py,sha256=psabnAMei5VzB2TsB2qBNLrIZMX0LiqjlXCpNGmDejk,668
1
+ mwx/__init__.py,sha256=pS7ZG8QKRypiFFiaWAq_opBB6I_1viZ0zUMk2TbjzE0,667
2
2
  mwx/bookshelf.py,sha256=b_TMDaNIzLHoL0xbbqb3tt0BnRvhLAqaCn_pBdrigZw,7523
3
- mwx/controls.py,sha256=cNZkgwSv90lPIz61FvMtYxHIt8hJD_RQYXxsgTQIdLc,47949
4
- mwx/framework.py,sha256=kqreWhh0wfhBz70vx9b5b8XHJR6BD-TxFbopzl__Ryc,76125
5
- mwx/graphman.py,sha256=LjN1R8UZxHycrgAfnl_SoTT_vHuKcSISr5VVf0cMflM,69821
3
+ mwx/controls.py,sha256=X4zx2h6oggUsQxi2PRk4RUsJieYTmcAPIvWwaz-ysTI,48107
4
+ mwx/framework.py,sha256=8QHKtncqf_ip6BkcVA9CFttFFsjw4EgxEkT9efltECg,76125
5
+ mwx/graphman.py,sha256=RqD0W9I2BvJ3Q2kyMiyyg4n-T4-_x7PDuCI5bGAg5k4,70110
6
6
  mwx/images.py,sha256=oxCn0P-emiWujSS2gUgU5TUnr5cPjix2jBcjOBDr24I,48701
7
7
  mwx/matplot2.py,sha256=RuVWXC2A_qgZRNmBBptbHDn5MyxaWBqp3ru4bP_lDE0,33150
8
- mwx/matplot2g.py,sha256=4G5uZJZzATEC3QEVZ4pGHetEDfu5NJNUFyeAaQScK5s,64495
8
+ mwx/matplot2g.py,sha256=dBAODQvSM_yf2uQUCrRO03ZOK3MycR8lEXTJfRXDlbY,64432
9
9
  mwx/matplot2lg.py,sha256=JRWjWnLJUytbSq6wxs4P0gbVUr3xoLSF6Wwqd5V_pJI,27404
10
- mwx/mgplt.py,sha256=M5rt-H7Uq1OHnlFvMA4a3945UBvppbR9L_mw8NL_YZ0,5602
11
- mwx/nutshell.py,sha256=wzcZSxTM9G2bYtIBri51-AA6JhiKrtfsh-DMgwJZ5io,141340
10
+ mwx/mgplt.py,sha256=8mXbHpCmm7lz3XbAxOg7IVC7DaSGBEby1UfTlMl9kjk,5604
11
+ mwx/nutshell.py,sha256=qPMOa4froZAhslacI2Oz_Xhe99zU6ucgh42zwe3sKxQ,140838
12
12
  mwx/testsuite.py,sha256=kiM3-BVhr42LRRN7xG7pYl3at8o2vnypWSxD8KRvA7c,1228
13
13
  mwx/utilus.py,sha256=HFvP682SyeSp8yNfUrdUXPhWdLuWVlsUSg6LqNBJOT8,37451
14
14
  mwx/wxmon.py,sha256=yzWqrbY6LzpfRwQeytYUeqFhFuLVm_XEvrVAL_k0HBQ,12756
@@ -16,14 +16,14 @@ mwx/wxpdb.py,sha256=AObuf4JLAmlQLj-yf0_mkBBd-Bhhz2Vb8hbTVcHEZOs,18875
16
16
  mwx/wxwil.py,sha256=hhyB1lPrF9ixeObxCOKQv0Theu-B-kpJg_yVU3EGSNg,5406
17
17
  mwx/wxwit.py,sha256=1hHtMi2YEy2T_LnUpwdmrIdtCuvxMOFyykqnbq6jLP0,7294
18
18
  mwx/plugins/__init__.py,sha256=jnJ-Sl9XJ_7BFDslD_r7dsbxsOT57q_IaEriV53XIGY,41
19
- mwx/plugins/ffmpeg_view.py,sha256=Yp1BMeNfkTTPwykvWW1_h4wrvhBSeBUdAvKhnMQIa6g,11102
19
+ mwx/plugins/ffmpeg_view.py,sha256=NIHFJLPeliOXH3ke0NvQzYBhY0oeEP6dgZQofB5Ry1c,11031
20
20
  mwx/plugins/fft_view.py,sha256=08A_Y73XirV7kXpwf-v0mUA0Hr0MOfdMXv3tvL1hvWA,2789
21
21
  mwx/plugins/frame_listview.py,sha256=gowjQ-ARNonMkDSXkQgPKq4U9YBJ-vQ0jK2krBVOdCs,10420
22
22
  mwx/plugins/line_profile.py,sha256=zzm6_7lnAnNepLbh07ordp3nRWDFQJtu719ZVjrVf8s,819
23
23
  mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
24
24
  mwx/py/filling.py,sha256=fumUG1F5M9TL-Dfqni4G85uk7TmvnUunTbdcPDV0vfo,16857
25
- mwxlib-1.1.6.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
26
- mwxlib-1.1.6.dist-info/METADATA,sha256=XXM7dJHiEuRk1rwo-UIfx9wfYFH6A5Vg_POkY0SPSpI,7258
27
- mwxlib-1.1.6.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
28
- mwxlib-1.1.6.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
29
- mwxlib-1.1.6.dist-info/RECORD,,
25
+ mwxlib-1.2.0.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
26
+ mwxlib-1.2.0.dist-info/METADATA,sha256=0hdCtq1FWS8gy0i8hVk3Yslu0L7fmOp9ZBoxc0QVIlQ,7258
27
+ mwxlib-1.2.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
28
+ mwxlib-1.2.0.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
29
+ mwxlib-1.2.0.dist-info/RECORD,,
File without changes