mwxlib 1.4.5__py3-none-any.whl → 1.4.8__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 CHANGED
@@ -2,6 +2,7 @@
2
2
  """mwxlib param controller and wx custom controls.
3
3
  """
4
4
  from itertools import chain
5
+ import inspect
5
6
  import wx
6
7
  import wx.lib.platebtn as pb
7
8
  import wx.lib.scrolledpanel as scrolled
@@ -68,7 +69,8 @@ class Param:
68
69
  'overflow' : [],
69
70
  'underflow' : [],
70
71
  })
71
- self._tooltip = _Tip(handler.__doc__, updater.__doc__)
72
+ self._tooltip = _Tip(handler.__doc__,
73
+ updater.__doc__)
72
74
 
73
75
  def __str__(self, v=None):
74
76
  if v is None:
@@ -293,7 +295,6 @@ class Knob(wx.Panel):
293
295
  style : style of label
294
296
  None -> static text (default)
295
297
  button -> label with flat button
296
- chkbox -> label with checkbox
297
298
  checkbox -> label with checkbox
298
299
  cw : width of control
299
300
  lw : width of label
@@ -313,6 +314,15 @@ class Knob(wx.Panel):
313
314
  self.update_range()
314
315
  self.update_ctrl()
315
316
 
317
+ @property
318
+ def button(self):
319
+ if isinstance(self._label, pb.PlateButton):
320
+ return self._label
321
+
322
+ @property
323
+ def control(self):
324
+ return self._ctrl
325
+
316
326
  def __init__(self, parent, param, type=None,
317
327
  style=None, cw=-1, lw=-1, tw=-1, h=22, **kwargs):
318
328
  wx.Panel.__init__(self, parent, **kwargs)
@@ -335,9 +345,11 @@ class Knob(wx.Panel):
335
345
  label = self.__par.name + ' '
336
346
 
337
347
  if style == 'chkbox' or style == 'checkbox':
348
+ ## Keep margin for the checkbox: lw += 16
338
349
  self._label = wx.CheckBox(self, label=label, size=(lw,-1))
339
350
  self._label.Bind(wx.EVT_CHECKBOX, self.OnCheck)
340
351
  elif style == 'button':
352
+ ## Keep margin for the button: lw += 16
341
353
  self._label = pb.PlateButton(self, label=label, size=(lw,-1),
342
354
  style=pb.PB_STYLE_DEFAULT|pb.PB_STYLE_SQUARE)
343
355
  self._label.Bind(wx.EVT_BUTTON, self.OnPress)
@@ -668,17 +680,18 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
668
680
 
669
681
  self.Sizer.Add(sizer, expand>1, p | wx.ALL, border)
670
682
 
671
- ## Register object and parameter groups
672
- def _flatiter(a):
673
- for c in a:
683
+ ## Register objects and parameter groups
684
+ def _flatiter(objects):
685
+ for c in objects:
674
686
  if isinstance(c, tuple):
675
687
  yield from _flatiter(c)
676
688
  elif isinstance(c, wx.Object):
677
689
  yield c
678
690
  self.__groups.append(list(_flatiter(objs)))
679
691
 
680
- def _variter(a):
681
- for c in a:
692
+ ## Parameters : Knob.param or widgets that have a `value`.
693
+ def _variter(objects):
694
+ for c in objects:
682
695
  if isinstance(c, Knob):
683
696
  yield c.param
684
697
  elif hasattr(c, 'value'):
@@ -689,6 +702,8 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
689
702
  self.show(-1, visible)
690
703
  self.fold(-1, not show)
691
704
  self.Sizer.Fit(self)
705
+
706
+ return self.__groups[-1]
692
707
 
693
708
  ## --------------------------------
694
709
  ## 外部入出力/クリップボード通信
@@ -860,8 +875,8 @@ class Icon(wx.Bitmap):
860
875
  '!!!' : wx.ART_ERROR,
861
876
  '+' : wx.ART_PLUS,
862
877
  '-' : wx.ART_MINUS,
863
- 'x' : wx.ART_DELETE,
864
- 't' : wx.ART_TICK_MARK,
878
+ ## 'x' : wx.ART_DELETE,
879
+ ## 't' : wx.ART_TICK_MARK,
865
880
  '~' : wx.ART_GO_HOME,
866
881
  'undo' : wx.ART_UNDO,
867
882
  'redo' : wx.ART_REDO,
@@ -901,18 +916,17 @@ class Icon(wx.Bitmap):
901
916
  except Exception:
902
917
  art = Icon.provided_arts.get(key)
903
918
  bmp = wx.ArtProvider.GetBitmap(art or key, wx.ART_OTHER, size)
919
+ ## Note: The result could be a zero-shaped bitmap.
904
920
  return bmp
905
-
906
- ## Note: null (0-shaped) bitmap fails with AssertionError from 4.1.1
907
921
  elif key == '':
922
+ ## Note: A zero-shaped bitmap fails with AssertionError since 4.1.1
908
923
  bmp = wx.Bitmap(size)
909
924
  with wx.MemoryDC(bmp) as dc:
910
925
  dc.SetBackground(wx.Brush('black'))
911
926
  dc.Clear()
912
927
  bmp.SetMaskColour('black') # return dummy-sized blank bitmap
913
928
  return bmp
914
-
915
- return wx.NullBitmap # The standard wx controls accept this,
929
+ return wx.NullBitmap # The standard wx controls accept this.
916
930
 
917
931
  @staticmethod
918
932
  def _getBitmap2(back, fore, size=None, subsize=3/4):
@@ -922,6 +936,8 @@ class Icon(wx.Bitmap):
922
936
  subsize = wx.Size(size) * subsize
923
937
  back = Icon._getBitmap1(back, size)
924
938
  fore = Icon._getBitmap1(fore, subsize)
939
+ if back.Size == (0, 0) or fore.Size == (0, 0):
940
+ return back
925
941
  x = size[0] - subsize[0]
926
942
  y = size[1] - subsize[1]
927
943
  with wx.MemoryDC(back) as dc:
@@ -975,8 +991,7 @@ class ClassicButton(wx.Button):
975
991
 
976
992
  if handler:
977
993
  self.Bind(wx.EVT_BUTTON, _F(handler))
978
-
979
- self.SetToolTip(_Tip(handler.__doc__))
994
+ self.SetToolTip(_Tip(handler.__doc__))
980
995
  if icon:
981
996
  self.SetBitmap(Icon(icon))
982
997
 
@@ -996,8 +1011,7 @@ class Button(pb.PlateButton):
996
1011
 
997
1012
  if handler:
998
1013
  self.Bind(wx.EVT_BUTTON, _F(handler))
999
-
1000
- self.SetToolTip(_Tip(handler.__doc__))
1014
+ self.SetToolTip(_Tip(handler.__doc__))
1001
1015
  if icon:
1002
1016
  self.SetBitmap(Icon(icon))
1003
1017
 
@@ -1029,8 +1043,7 @@ class ToggleButton(wx.ToggleButton):
1029
1043
 
1030
1044
  if handler:
1031
1045
  self.Bind(wx.EVT_TOGGLEBUTTON, _F(handler))
1032
-
1033
- self.SetToolTip(_Tip(handler.__doc__))
1046
+ self.SetToolTip(_Tip(handler.__doc__))
1034
1047
  if icon:
1035
1048
  try:
1036
1049
  self.SetBitmap(Icon(icon[0]))
@@ -1058,19 +1071,20 @@ class TextBox(wx.Control):
1058
1071
 
1059
1072
  value = Value #: internal use only
1060
1073
 
1074
+ button = property(lambda self: self._btn)
1075
+ control = property(lambda self: self._ctrl)
1076
+
1061
1077
  def __init__(self, parent, label='', handler=None, updater=None,
1062
1078
  icon=None, readonly=False, size=(-1,-1), **kwargs):
1063
1079
  wx.Control.__init__(self, parent, size=size, style=wx.BORDER_NONE)
1064
1080
 
1065
1081
  kwargs['style'] = (kwargs.get('style', 0)
1066
- | wx.TE_PROCESS_ENTER
1067
- | (wx.TE_READONLY if readonly else 0))
1082
+ | wx.TE_PROCESS_ENTER
1083
+ | (wx.TE_READONLY if readonly else 0))
1068
1084
 
1069
1085
  self._ctrl = wx.TextCtrl(self, **kwargs)
1070
1086
  self._btn = Button(self, label, None, icon,
1071
1087
  size=(-1,-1) if label or icon else (0,0))
1072
- self._ctrl.SetToolTip(_Tip(handler.__doc__))
1073
- self._btn.SetToolTip(_Tip(updater.__doc__))
1074
1088
 
1075
1089
  self.SetSizer(
1076
1090
  pack(self, (
@@ -1081,9 +1095,11 @@ class TextBox(wx.Control):
1081
1095
  if handler:
1082
1096
  self._handler = _F(handler)
1083
1097
  self._ctrl.Bind(wx.EVT_TEXT_ENTER, lambda v: self._handler(self))
1098
+ self._ctrl.SetToolTip(_Tip(handler.__doc__))
1084
1099
  if updater:
1085
1100
  self._updater = _F(updater)
1086
1101
  self._btn.Bind(wx.EVT_BUTTON, lambda v: self._updater(self))
1102
+ self._btn.SetToolTip(_Tip(updater.__doc__))
1087
1103
 
1088
1104
  self.Bind(wx.EVT_NAVIGATION_KEY, self.OnNavKey)
1089
1105
 
@@ -1134,19 +1150,20 @@ class Choice(wx.Control):
1134
1150
  lambda self,v: self._ctrl.SetItems(v),
1135
1151
  doc="combobox items:list")
1136
1152
 
1153
+ button = property(lambda self: self._btn)
1154
+ control = property(lambda self: self._ctrl)
1155
+
1137
1156
  def __init__(self, parent, label='', handler=None, updater=None,
1138
1157
  icon=None, readonly=False, size=(-1,-1), **kwargs):
1139
1158
  wx.Control.__init__(self, parent, size=size, style=wx.BORDER_NONE)
1140
1159
 
1141
1160
  kwargs['style'] = (kwargs.get('style', 0)
1142
- | wx.TE_PROCESS_ENTER
1143
- | (wx.CB_READONLY if readonly else 0))
1161
+ | wx.TE_PROCESS_ENTER
1162
+ | (wx.CB_READONLY if readonly else 0))
1144
1163
 
1145
1164
  self._ctrl = wx.ComboBox(self, **kwargs)
1146
1165
  self._btn = Button(self, label, None, icon,
1147
1166
  size=(-1,-1) if label or icon else (0,0))
1148
- self._ctrl.SetToolTip(_Tip(handler.__doc__))
1149
- self._btn.SetToolTip(_Tip(updater.__doc__))
1150
1167
 
1151
1168
  self.SetSizer(
1152
1169
  pack(self, (
@@ -1158,10 +1175,12 @@ class Choice(wx.Control):
1158
1175
  self._handler = _F(handler)
1159
1176
  self._ctrl.Bind(wx.EVT_TEXT_ENTER, lambda v: self._handler(self))
1160
1177
  self._ctrl.Bind(wx.EVT_COMBOBOX, lambda v: self._handler(self))
1178
+ self._ctrl.SetToolTip(_Tip(handler.__doc__))
1161
1179
  self._ctrl.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter)
1162
1180
  if updater:
1163
1181
  self._updater = _F(updater)
1164
1182
  self._btn.Bind(wx.EVT_BUTTON, lambda v: self._updater(self))
1183
+ self._btn.SetToolTip(_Tip(updater.__doc__))
1165
1184
 
1166
1185
  self.Bind(wx.EVT_NAVIGATION_KEY, self.OnNavKey)
1167
1186
 
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "1.4.5"
4
+ __version__ = "1.4.8"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from contextlib import contextmanager
mwx/graphman.py CHANGED
@@ -381,10 +381,10 @@ class LayerInterface(CtrlInterface):
381
381
  lambda v: reset_params(v, checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
382
382
  lambda v: v.Enable(bool(self.parameters))),
383
383
  (),
384
- (wx.ID_EDIT, "&Edit module", "Edit module", Icon('pen'),
385
- lambda v: self.parent.edit_plug(self.__module__),
386
- lambda v: v.Enable(self.editable)),
387
-
384
+ ## (wx.ID_EDIT, "&Edit module", "Edit module", Icon('pen'),
385
+ ## lambda v: self.parent.edit_plug(self.__module__),
386
+ ## lambda v: v.Enable(self.editable)),
387
+ ##
388
388
  (mwx.ID_(201), "&Reload module", "Reload module", Icon('load'),
389
389
  lambda v: self.parent.reload_plug(self.__module__),
390
390
  lambda v: v.Enable(self.reloadable
@@ -843,9 +843,6 @@ class Frame(mwx.Frame):
843
843
 
844
844
  ## Accepts DnD
845
845
  self.SetDropTarget(MyFileDropLoader(self.graph, self))
846
-
847
- ## Script editor for plugins (external call)
848
- EDITOR = "notepad"
849
846
 
850
847
  SYNC_SWITCH = True
851
848
 
@@ -1339,13 +1336,13 @@ class Frame(mwx.Frame):
1339
1336
  if shell.target is plug:
1340
1337
  shell.handler('shell_activated', shell)
1341
1338
 
1342
- @ignore(ResourceWarning)
1343
- def edit_plug(self, name):
1344
- plug = self.get_plug(name)
1345
- if not plug:
1346
- return
1347
-
1348
- Popen([self.EDITOR, inspect.getmodule(plug).__file__])
1339
+ ## Script editor for plugins (external call)
1340
+ ## EDITOR = "notepad"
1341
+ ##
1342
+ ## @ignore(ResourceWarning)
1343
+ ## def edit_plug(self, name):
1344
+ ## plug = self.get_plug(name)
1345
+ ## Popen([self.EDITOR, inspect.getmodule(plug).__file__])
1349
1346
 
1350
1347
  def inspect_plug(self, name):
1351
1348
  """Dive into the process to inspect plugs in the shell.
mwx/images.py CHANGED
@@ -652,6 +652,22 @@ w = PyEmbeddedImage(
652
652
  b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWfIwBngDGCYAAAAASUVO'
653
653
  b'RK5CYII=')
654
654
 
655
+ #----------------------------------------------------------------------
656
+ x = PyEmbeddedImage(
657
+ b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0'
658
+ b'RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIhSURBVDjLlZPrThNRFIWJicmJ'
659
+ b'z6BWiYbIkYDEG0JbBiitDQgm0PuFXqSAtKXtpE2hNuoPTXwSnwtExd6w0pl2OtPlrphKLSXh'
660
+ b'x07OZM769qy19wwAGLhM1ddC184+d18QMzoq3lfsD3LZ7Y3XbE5DL6Atzuyilc5Ciyd7IHVf'
661
+ b'gNcDYTQ2tvDr5crn6uLSvX+Av2Lk36FFpSVENDe3OxDZu8apO5rROJDLo30+Nlvj5RnTlVNA'
662
+ b'Ks1aCVFr7b4BPn6Cls21AWgEQlz2+Dl1h7IdA+i97A/geP65WhbmrnZZ0GIJpr6OqZqYAd5/'
663
+ b'gJpKox4Mg7pD2YoC2b0/54rJQuJZdm6Izcgma4TW1WZ0h+y8BfbyJMwBmSxkjw+VObNanp5h'
664
+ b'/adwGhaTXF4NWbLj9gEONyCmUZmd10pGgf1/vwcgOT3tUQE0DdicwIod2EmSbwsKE1P8QoDk'
665
+ b'cHPJ5YESjgBJkYQpIEZ2KEB51Y6y3ojvY+P8XEDN7uKS0w0ltA7QGCWHCxSWWpwyaCeLy0Bk'
666
+ b'A7UXyyg8fIzDoWHeBaDN4tQdSvAVdU1Aok+nsNTipIEVnkywo/FHatVkBoIhnFisOBoZxcGt'
667
+ b'Qd4B0GYJNZsDSiAEadUBCkstPtN3Avs2Msa+Dt9XfxoFSNYF/Bh9gP0bOqHLAm2WUF1YQskw'
668
+ b'rVFYPWkf3h1iXwbvqGfFPSGW9Eah8HSS9fuZDnS32f71m8KFY7xs/QZyu6TH2+2+FAAAAABJ'
669
+ b'RU5ErkJggg==')
670
+
655
671
  #----------------------------------------------------------------------
656
672
  xo = PyEmbeddedImage(
657
673
  b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEWywNxcVlwcHhwUEhQE'
mwx/nutshell.py CHANGED
@@ -32,19 +32,6 @@ from .utilus import split_words, split_parts, split_tokens, find_modules
32
32
  from .framework import CtrlInterface, AuiNotebook, Menu
33
33
 
34
34
 
35
- ## Monkey-patch for wx.py.introspect.getRoot with terminator '('.
36
- getRoot = introspect.getRoot
37
- def _getRoot(command, terminator=None):
38
- """Return the rightmost root portion of an arbitrary Python command."""
39
- if terminator == '(':
40
- words = split_words(command, reverse=1)
41
- for word in words:
42
- if word == terminator:
43
- return next(words, '')
44
- return getRoot(command, terminator) # original
45
- introspect.getRoot = _getRoot
46
-
47
-
48
35
  ## URL pattern (flag = re.M | re.A)
49
36
  ## url_re = r"https?://[\w/:%#$&?()~.=+-]+"
50
37
  url_re = r"https?://[\w/:%#$&?!@~.,;=+-]+" # excluding ()
@@ -925,15 +912,15 @@ class EditorInterface(AutoCompInterfaceMixin, CtrlInterface):
925
912
  def expr_at_caret(self):
926
913
  """A syntax unit (expression) at the caret-line."""
927
914
  p = q = self.cpos
928
- lsty = self.get_style(p-1)
929
- rsty = self.get_style(p)
930
- if lsty == rsty == 'moji': # inside string
915
+ lst = self.get_style(p-1)
916
+ rst = self.get_style(p)
917
+ if lst == rst == 'moji': # inside string
931
918
  ## styles = {'moji'}
932
919
  return ''
933
- elif lsty == 'suji' or rsty == 'suji':
920
+ elif lst == 'suji' or rst == 'suji':
934
921
  styles = {'suji'}
935
- elif lsty in ('word', 'dot', 'moji', 'rparen')\
936
- or rsty in ('word', 'dot', 'moji', 'lparen'):
922
+ elif lst in ('word', 'dot', 'moji', 'rparen')\
923
+ or rst in ('word', 'dot', 'moji', 'lparen'):
937
924
  styles = {'word', 'dot', 'moji', 'paren'}
938
925
  else:
939
926
  return ''
@@ -2011,9 +1998,9 @@ class Buffer(EditorInterface, EditWindow):
2011
1998
 
2012
1999
  def OnEnterDot(self, evt):
2013
2000
  p = self.cpos
2014
- st = self.get_style(p-1)
2001
+ lst = self.get_style(p-1)
2015
2002
  rst = self.get_style(p)
2016
- if st not in ('moji', 'word', 'rparen') or rst == 'word':
2003
+ if lst not in ('moji', 'word', 'rparen') or rst == 'word':
2017
2004
  self.handler('quit', evt) # don't enter autocomp
2018
2005
  evt.Skip()
2019
2006
 
@@ -3132,13 +3119,13 @@ class Nautilus(EditorInterface, Shell):
3132
3119
  self.handler('quit', evt)
3133
3120
  return
3134
3121
  p = self.cpos
3135
- st = self.get_style(p-1)
3122
+ lst = self.get_style(p-1)
3136
3123
  rst = self.get_style(p)
3137
3124
  if p == self.bolc:
3138
3125
  self.ReplaceSelection('self') # replace [.] --> [self.]
3139
- elif st in ('space', 'sep', 'lparen'):
3126
+ elif lst in ('space', 'sep', 'lparen'):
3140
3127
  self.ReplaceSelection('self')
3141
- elif st not in ('moji', 'word', 'rparen') or rst == 'word':
3128
+ elif lst not in ('moji', 'word', 'rparen') or rst == 'word':
3142
3129
  self.handler('quit', evt) # don't enter autocomp
3143
3130
  evt.Skip()
3144
3131
 
mwx/utilus.py CHANGED
@@ -999,13 +999,13 @@ def get_fullargspec(f):
999
999
  ## ...(details)...
1000
1000
  ## ```
1001
1001
  doc = inspect.getdoc(f)
1002
- if doc is None:
1003
- return None
1004
- m = re.match(r"(\w+)\s*\((.*?)\)", doc.strip(), re.S)
1005
- if not m:
1006
- return None
1002
+ for word in split_parts(doc or ''): # Search pattern for `func(argspec)`.
1003
+ if word.startswith('('):
1004
+ argspec = word[1:-1]
1005
+ break
1007
1006
  else:
1008
- name, argspec = m.groups()
1007
+ return None # no argument spec information
1008
+ if argspec:
1009
1009
  argparts = ['']
1010
1010
  for part in split_parts(argspec): # Separate argument parts with commas.
1011
1011
  if not part.strip():
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: mwxlib
3
- Version: 1.4.5
3
+ Version: 1.4.8
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,16 +1,16 @@
1
1
  mwx/__init__.py,sha256=pS7ZG8QKRypiFFiaWAq_opBB6I_1viZ0zUMk2TbjzE0,667
2
2
  mwx/bookshelf.py,sha256=MXjrm_ryRGHvOFKu8wb10qz_oka70xW2yFbYjBMYfns,8140
3
- mwx/controls.py,sha256=RssTROprNfgnRMiWVOoSSd8Fy0qwZ8DCrYM2f5Wgr4E,48610
4
- mwx/framework.py,sha256=DO2VrF_SOS6Gdr22PZclHChWr2oRQfW__7-1xxr97Cc,76830
5
- mwx/graphman.py,sha256=_8_DaG3qhhZByoh5wboyYQlAsm7GlPoR8wT-RNMx4Cw,70627
6
- mwx/images.py,sha256=oxCn0P-emiWujSS2gUgU5TUnr5cPjix2jBcjOBDr24I,48701
3
+ mwx/controls.py,sha256=_YYcSn2X4sgWOfHiOtBoPCMWtr9ZCfd5QM0O84cPtio,49421
4
+ mwx/framework.py,sha256=Qxxi5ximgB4l-I2cWTMTKYFRD0j-uXKP0M5FVj3-_W8,76830
5
+ mwx/graphman.py,sha256=anyTeJUTuqL1JnPdw7eJA5spbZQiCxBDCkd8GuUX8eI,70601
6
+ mwx/images.py,sha256=Kkfy9QI_hMtwShSjUS4-ZpC_EkVuah_XhpBOR4wAKkM,49792
7
7
  mwx/matplot2.py,sha256=Htwegq6N5G7oKSRCuajik5Dixd93i8PKVbkL7Azy99M,33150
8
8
  mwx/matplot2g.py,sha256=4BBHlvfhg1796hu1nTCsTA82YRkZhwUnfcHCBf5ZGO8,65083
9
9
  mwx/matplot2lg.py,sha256=cb0EZXivccDQu4oFj5ddSUF9pEE4f5UuFJJK2ELItww,27404
10
10
  mwx/mgplt.py,sha256=8mXbHpCmm7lz3XbAxOg7IVC7DaSGBEby1UfTlMl9kjk,5604
11
- mwx/nutshell.py,sha256=4GDfGCHvHptpLqJIUVAfCMyI6V2KFcgji8S0PWMviL0,142385
11
+ mwx/nutshell.py,sha256=_qUA89Xu7PZKbDO5XjMSfXfwj9MiNOGJjWi-pdrfYAA,141900
12
12
  mwx/testsuite.py,sha256=Zk75onPSEn2tf0swS3l-vIn6yTXGB7allIyvJsPHj20,1229
13
- mwx/utilus.py,sha256=iAqtDbkVuFsSuS71leUd-mHH0ETRQ3GLnII7O2wcw3I,38065
13
+ mwx/utilus.py,sha256=ObXYWsDVn5DmjvwVQgP2HGAhrdxlDrwL7g9pMCDbU7U,38127
14
14
  mwx/wxmon.py,sha256=yzWqrbY6LzpfRwQeytYUeqFhFuLVm_XEvrVAL_k0HBQ,12756
15
15
  mwx/wxpdb.py,sha256=ih2iLcOgYnUX849YXO4niIYue6amuoG7nWdpr-X1jFw,18839
16
16
  mwx/wxwil.py,sha256=hhyB1lPrF9ixeObxCOKQv0Theu-B-kpJg_yVU3EGSNg,5406
@@ -22,7 +22,7 @@ mwx/plugins/frame_listview.py,sha256=gowjQ-ARNonMkDSXkQgPKq4U9YBJ-vQ0jK2krBVOdCs
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.4.5.dist-info/METADATA,sha256=004S_ou1NJHL8BynaX391SwQ5vamthk4oifMNz8yUrE,7433
26
- mwxlib-1.4.5.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
27
- mwxlib-1.4.5.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
- mwxlib-1.4.5.dist-info/RECORD,,
25
+ mwxlib-1.4.8.dist-info/METADATA,sha256=6dosmSNJ_AVOVaurY8hLbmyxKhMIiCn7rzWdbQmP0zU,7433
26
+ mwxlib-1.4.8.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
27
+ mwxlib-1.4.8.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
+ mwxlib-1.4.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5