mwxlib 0.79.8__py3-none-any.whl → 0.80.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/controls.py CHANGED
@@ -5,8 +5,6 @@
5
5
  Author: Kazuya O'moto <komoto@jeol.co.jp>
6
6
  """
7
7
  from itertools import chain
8
- import numpy as np
9
- from numpy import nan, inf
10
8
  import wx
11
9
  import wx.lib.platebtn as pb
12
10
  import wx.lib.scrolledpanel as scrolled
@@ -15,6 +13,9 @@ from . import images
15
13
  from .utilus import SSM
16
14
  from .framework import pack, Menu, CtrlInterface
17
15
 
16
+ import numpy as np
17
+ from numpy import nan, inf
18
+
18
19
 
19
20
  class Param(object):
20
21
  """Standard Parameter
@@ -786,22 +787,27 @@ class Clipboard:
786
787
  @staticmethod
787
788
  def read():
788
789
  do = wx.TextDataObject()
789
- wx.TheClipboard.Open() or print("- Unable to open the clipboard")
790
- wx.TheClipboard.GetData(do)
791
- wx.TheClipboard.Close()
792
- text = do.GetText()
793
- if Clipboard.verbose:
794
- print("From clipboard: {}".format(text))
795
- return text
790
+ if wx.TheClipboard.Open():
791
+ wx.TheClipboard.GetData(do)
792
+ wx.TheClipboard.Close()
793
+ text = do.GetText()
794
+ if Clipboard.verbose:
795
+ print("From clipboard: {}".format(text))
796
+ return text
797
+ else:
798
+ print("- Unable to open clipboard.")
796
799
 
797
800
  @staticmethod
798
801
  def write(text):
799
802
  do = wx.TextDataObject(str(text))
800
- wx.TheClipboard.Open() or print("- Unable to open the clipboard")
801
- wx.TheClipboard.SetData(do)
802
- wx.TheClipboard.Close()
803
- if Clipboard.verbose:
804
- print("To clipboard: {}".format(text))
803
+ if wx.TheClipboard.Open():
804
+ wx.TheClipboard.SetData(do)
805
+ wx.TheClipboard.Flush()
806
+ wx.TheClipboard.Close()
807
+ if Clipboard.verbose:
808
+ print("To clipboard: {}".format(text))
809
+ else:
810
+ print("- Unable to open clipboard.")
805
811
 
806
812
 
807
813
  ## --------------------------------
mwx/framework.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Author: Kazuya O'moto <komoto@jeol.co.jp>
6
6
  """
7
- __version__ = "0.79.8"
7
+ __version__ = "0.80.0"
8
8
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
9
9
 
10
10
  from functools import wraps, partial
@@ -1110,8 +1110,10 @@ class ShellFrame(MiniFrame):
1110
1110
  LOGGING_FILE = get_rootpath("deb-logging.log")
1111
1111
  HISTORY_FILE = get_rootpath("deb-history.log")
1112
1112
 
1113
- def load_session(self):
1113
+ def load_session(self, rc=None):
1114
1114
  """Load session from file."""
1115
+ if rc:
1116
+ self.SESSION_FILE = os.path.abspath(rc)
1115
1117
  try:
1116
1118
  scratch = self.Scratch.default_buffer
1117
1119
  if not scratch or scratch.mtdelta is not None:
@@ -1120,9 +1122,7 @@ class ShellFrame(MiniFrame):
1120
1122
 
1121
1123
  with open(self.SESSION_FILE) as i:
1122
1124
  exec(i.read())
1123
- return True
1124
- except FileNotFoundError:
1125
- pass
1125
+
1126
1126
  except Exception:
1127
1127
  traceback.print_exc()
1128
1128
  print("- Failed to load session")
@@ -1167,7 +1167,6 @@ class ShellFrame(MiniFrame):
1167
1167
  if buffer.mtdelta is not None:
1168
1168
  o.write("self.Scratch.load_file({!r}, {})\n".format(
1169
1169
  buffer.filename, buffer.markline+1))
1170
- return True
1171
1170
  except Exception:
1172
1171
  traceback.print_exc()
1173
1172
  print("- Failed to save session")
mwx/graphman.py CHANGED
@@ -19,20 +19,14 @@ import platform
19
19
  import re
20
20
  import wx
21
21
  from wx import aui
22
- try:
23
- from mwx import framework as mwx
24
- from mwx.utilus import funcall as _F
25
- from mwx.controls import ControlPanel, Icon
26
- from mwx.framework import CtrlInterface
27
- from mwx.matplot2g import GraphPlot
28
- from mwx.matplot2lg import Histogram
29
- except ImportError:
30
- from . import framework as mwx
31
- from .utilus import funcall as _F
32
- from .controls import ControlPanel, Icon
33
- from .framework import CtrlInterface
34
- from .matplot2g import GraphPlot
35
- from .matplot2lg import Histogram
22
+
23
+ from . import framework as mwx
24
+ from .utilus import funcall as _F
25
+ from .controls import ControlPanel, Icon
26
+ from .framework import CtrlInterface
27
+ from .matplot2g import GraphPlot
28
+ from .matplot2lg import Histogram
29
+
36
30
  from matplotlib import cm
37
31
  from matplotlib import colors
38
32
  ## from matplotlib import pyplot as plt
@@ -1681,7 +1675,7 @@ class Frame(mwx.Frame):
1681
1675
  if flush:
1682
1676
  del self.graph[:]
1683
1677
  del self.output[:]
1684
- for name in list(self.plugins): # OrderedDict mutated during iteration
1678
+ for name in list(self.plugins): # plugins:dict mutates during iteration
1685
1679
  self.unload_plug(name)
1686
1680
 
1687
1681
  self.statusbar("Loading session from {!r}...".format(f))
@@ -1784,15 +1778,7 @@ if __name__ == "__main__":
1784
1778
  ## frm.load_plug("demo.template.py", show=1, force=1)
1785
1779
  ## frm.load_plug("demo/template.py", show=1, force=1)
1786
1780
 
1787
- frm.load_plug(r"C:\usr\home\lib\python\demo\template.py", show=1, dock=0)
1788
-
1789
- ## sys.path.append(r"C:\usr\home\lib\python\Lib\wxpyNautilus\plugins")
1790
- ## frm.require("viewfft")
1791
- ## frm.require("viewframe")
1792
- ## frm.require("lineprofile")
1793
- ## frm.require("ffmpeg_viewer")
1794
- ## frm.load_plug("randn.py", show=1, dock=0)
1781
+ frm.load_plug(r"C:\usr\home\lib\python\demo\template.py", show=1, dock=4)
1795
1782
 
1796
- frm.shellframe.debugger.skip.remove(mwx.FSM.__module__)
1797
1783
  frm.Show()
1798
1784
  app.MainLoop()
mwx/matplot2.py CHANGED
@@ -4,12 +4,10 @@
4
4
 
5
5
  Author: Kazuya O'moto <komoto@jeol.co.jp>
6
6
  """
7
- import sys
8
7
  import wx
9
- try:
10
- from mwx import framework as mwx
11
- except ImportError:
12
- from . import framework as mwx
8
+
9
+ from . import framework as mwx
10
+
13
11
  import matplotlib; matplotlib.use('wxagg') # noqa
14
12
  from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
15
13
  from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as Toolbar
@@ -21,6 +19,7 @@ from matplotlib.figure import Figure
21
19
  from matplotlib import cm
22
20
  import numpy as np
23
21
 
22
+
24
23
  ## state constants
25
24
  NORMAL = 'Normal'
26
25
  DRAGGING = '-dragging'
mwx/matplot2g.py CHANGED
@@ -5,18 +5,13 @@
5
5
  Author: Kazuya O'moto <komoto@jeol.co.jp>
6
6
  """
7
7
  import traceback
8
- import sys
9
8
  import wx
10
- try:
11
- from mwx import framework as mwx
12
- from mwx.utilus import funcall as _F
13
- from mwx.matplot2 import MatplotPanel
14
- from mwx.matplot2 import NORMAL, DRAGGING, PAN, ZOOM, MARK, LINE, REGION
15
- except ImportError:
16
- from . import framework as mwx
17
- from .utilus import funcall as _F
18
- from .matplot2 import MatplotPanel
19
- from .matplot2 import NORMAL, DRAGGING, PAN, ZOOM, MARK, LINE, REGION
9
+
10
+ from . import framework as mwx
11
+ from .utilus import funcall as _F
12
+ from .matplot2 import MatplotPanel
13
+ from .matplot2 import NORMAL, DRAGGING, PAN, ZOOM, MARK, LINE, REGION
14
+
20
15
  from matplotlib import cm
21
16
  from matplotlib import patches
22
17
  from PIL import Image
@@ -371,36 +366,47 @@ class Clipboard:
371
366
 
372
367
  @staticmethod
373
368
  def imread():
374
- try:
375
- do = wx.BitmapDataObject()
376
- wx.TheClipboard.Open() or print("- Unable to open the clipboard")
369
+ do = wx.BitmapDataObject()
370
+ if wx.TheClipboard.Open():
377
371
  wx.TheClipboard.GetData(do)
372
+ wx.TheClipboard.Close()
378
373
  bmp = do.GetBitmap()
374
+ else:
375
+ print("- Unable to open clipboard.")
376
+ return
377
+ try:
378
+ ## Convert bmp --> buf
379
379
  img = bmp.ConvertToImage()
380
380
  buf = np.array(img.GetDataBuffer()) # do copy, don't ref
381
381
  if Clipboard.verbose:
382
382
  print("From clipboard {:.1f} Mb data".format(buf.nbytes/1e6))
383
383
  w, h = img.GetSize()
384
384
  return buf.reshape(h, w, 3)
385
- finally:
386
- wx.TheClipboard.Close()
385
+ except Exception:
386
+ print("- The contents of the clipboard are not images.")
387
387
 
388
388
  @staticmethod
389
389
  def imwrite(buf):
390
390
  try:
391
+ ## Convert buf --> bmp
391
392
  h, w = buf.shape[:2]
392
393
  if buf.ndim < 3:
393
394
  ## buf = np.array([buf] * 3).transpose((1,2,0)) # convert to gray bitmap
394
- buf = buf.repeat(3, axis=1)
395
+ buf = buf.repeat(3, axis=1) # convert to gray bitmap
395
396
  img = wx.Image(w, h, buf.tobytes())
396
397
  bmp = img.ConvertToBitmap()
397
- do = wx.BitmapDataObject(bmp)
398
- wx.TheClipboard.Open() or print("- Unable to open the clipboard")
398
+ except Exception:
399
+ print("- The contents of the clipboard are not images.")
400
+ return
401
+ do = wx.BitmapDataObject(bmp)
402
+ if wx.TheClipboard.Open():
399
403
  wx.TheClipboard.SetData(do)
404
+ wx.TheClipboard.Flush()
405
+ wx.TheClipboard.Close()
400
406
  if Clipboard.verbose:
401
407
  print("To clipboard: {:.1f} Mb data".format(buf.nbytes/1e6))
402
- finally:
403
- wx.TheClipboard.Close()
408
+ else:
409
+ print("- Unable to open clipboard.")
404
410
 
405
411
 
406
412
  class GraphPlot(MatplotPanel):
mwx/matplot2lg.py CHANGED
@@ -5,18 +5,13 @@
5
5
  Author: Kazuya O'moto <komoto@jeol.co.jp>
6
6
  """
7
7
  from itertools import chain
8
- import sys
9
8
  import wx
10
- try:
11
- from mwx import framework as mwx
12
- from mwx.utilus import funcall as _F
13
- from mwx.matplot2 import MatplotPanel
14
- from mwx.matplot2 import NORMAL, MARK, LINE, REGION
15
- except ImportError:
16
- from . import framework as mwx
17
- from .utilus import funcall as _F
18
- from .matplot2 import MatplotPanel
19
- from .matplot2 import NORMAL, MARK, LINE, REGION
9
+
10
+ from . import framework as mwx
11
+ from .utilus import funcall as _F
12
+ from .matplot2 import MatplotPanel
13
+ from .matplot2 import NORMAL, MARK, LINE, REGION
14
+
20
15
  from matplotlib import patches
21
16
  import numpy as np
22
17
  from scipy import signal
mwx/nutshell.py CHANGED
@@ -1376,7 +1376,13 @@ class Buffer(EditWindow, EditorInterface):
1376
1376
  self.__mtime = os.path.getmtime(f)
1377
1377
  else:
1378
1378
  self.__mtime = None
1379
+ try:
1380
+ renamed = (self.filename != f)
1381
+ except AttributeError:
1382
+ renamed = False
1379
1383
  self.__filename = f
1384
+ if renamed:
1385
+ self.parent.handler('buffer_filename_set', self)
1380
1386
 
1381
1387
  @property
1382
1388
  def mtdelta(self):
@@ -1695,9 +1701,10 @@ class EditorBook(aui.AuiNotebook, CtrlInterface):
1695
1701
  'buffer_selected' : [ None, ],
1696
1702
  'buffer_activated' : [ None, ],
1697
1703
  'buffer_inactivated' : [ None, ],
1704
+ 'buffer_filename_set' : [ None, ],
1705
+ 'title_window' : [ None, dispatch ],
1698
1706
  '*button* pressed' : [ None, dispatch, skip ],
1699
1707
  '*button* released' : [ None, dispatch, skip ],
1700
- 'title_window' : [ None, dispatch ],
1701
1708
  },
1702
1709
  0 : { # Normal mode
1703
1710
  '* pressed' : (0, skip),
mwx/utilus.py CHANGED
@@ -4,7 +4,6 @@
4
4
 
5
5
  Author: Kazuya O'moto <komoto@jeol.co.jp>
6
6
  """
7
- from collections import OrderedDict
8
7
  from functools import wraps
9
8
  from bdb import BdbQuit
10
9
  import traceback
@@ -396,7 +395,7 @@ def get_rootpath(f):
396
395
  ## Finite State Machine
397
396
  ## --------------------------------
398
397
 
399
- class SSM(OrderedDict):
398
+ class SSM(dict):
400
399
  """Single State Machine/Context of FSM
401
400
  """
402
401
  def __call__(self, event, *args, **kwargs):
@@ -664,7 +663,7 @@ class FSM(dict):
664
663
  context = self[state]
665
664
  ast = []
666
665
  bra = []
667
- for event in list(context): #? OrderedDict mutated during iteration
666
+ for event in list(context): # context mutates during iteration
668
667
  if re.search(r"\[.+\]", event):
669
668
  bra.append((event, context.pop(event))) # event key has '[]'
670
669
  elif '*' in event or '?' in event:
@@ -709,8 +708,10 @@ class FSM(dict):
709
708
  continue
710
709
  for act in transaction[1:]:
711
710
  self.unbind(event, act, k)
712
- if not any(callable(x) for x in transaction):
713
- self[k].pop(event) # remove null event:transaction
711
+ ## cleanup
712
+ for k, v in list(self.items()): # self mutates during iteration
713
+ if not v:
714
+ del self[k]
714
715
 
715
716
  def define(self, event, action=None, state=None, state2=None):
716
717
  self.unbind(event, None, state)
@@ -800,7 +801,7 @@ class FSM(dict):
800
801
 
801
802
 
802
803
  class TreeList(object):
803
- """TreeList of <item : (key, data)>
804
+ """Tree access wrapper of list<item : (key, value)>
804
805
  [
805
806
  [key, [item,
806
807
  item, ...]],
@@ -814,8 +815,11 @@ class TreeList(object):
814
815
  ## __getattr__ may be called before __init__.
815
816
  __items = None
816
817
 
817
- def __init__(self):
818
- self.__items = []
818
+ def __init__(self, ls=None):
819
+ self.__items = ls or []
820
+
821
+ def __call__(self, k):
822
+ return TreeList(self[k])
819
823
 
820
824
  def __getattr__(self, attr):
821
825
  return getattr(self.__items, attr)
@@ -841,7 +845,28 @@ class TreeList(object):
841
845
  return self.delf(self.__items, k)
842
846
  return self.__items.__delitem__(k)
843
847
 
844
- @classmethod
848
+ def items(self):
849
+ def _items(ls, key=None):
850
+ for item in ls:
851
+ try:
852
+ k, v = item
853
+ rootkey = f"{key}/{k}" if key else k
854
+ except Exception:
855
+ yield key, item
856
+ else:
857
+ if v and isinstance(v, (list, tuple)):
858
+ yield from _items(v, rootkey)
859
+ else:
860
+ yield rootkey, v
861
+ yield from _items(self)
862
+
863
+ def _find_item(self, ls, key):
864
+ for x in ls:
865
+ if isinstance(x, (tuple, list)) and x and x[0] == key:
866
+ if len(x) < 2:
867
+ raise ValueError("No value for key={!r}".format(key))
868
+ return x
869
+
845
870
  def getf(self, ls, key):
846
871
  if '/' in key:
847
872
  a, b = key.split('/', 1)
@@ -849,9 +874,10 @@ class TreeList(object):
849
874
  if la is not None:
850
875
  return self.getf(la, b)
851
876
  return None
852
- return next((x[-1] for x in ls if x and x[0] == key), None)
877
+ li = self._find_item(ls, key)
878
+ if li is not None:
879
+ return li[-1]
853
880
 
854
- @classmethod
855
881
  def setf(self, ls, key, value):
856
882
  if '/' in key:
857
883
  a, b = key.split('/', 1)
@@ -861,18 +887,17 @@ class TreeList(object):
861
887
  p, key = key.rsplit('/', 1)
862
888
  return self.setf(ls, p, [[key, value]]) # >>> ls[p].append([key, value])
863
889
  try:
864
- li = next((x for x in ls if x and x[0] == key), None)
890
+ li = self._find_item(ls, key)
865
891
  if li is not None:
866
- if isinstance(value, list):
867
- li[-1][:] = value # assign value:list to items:list
868
- else:
869
- li[-1] = value # assign value to item (li must be a list)
892
+ try:
893
+ li[-1] = value # assign value to item (ls must be a list)
894
+ except TypeError:
895
+ li[-1][:] = value # assign value to items:list
870
896
  else:
871
897
  ls.append([key, value]) # append to items:list
872
- except (TypeError, AttributeError) as e:
898
+ except (ValueError, TypeError, AttributeError) as e:
873
899
  print("- TreeList:warning {!r}: key={!r}".format(e, key))
874
900
 
875
- @classmethod
876
901
  def delf(self, ls, key):
877
902
  if '/' in key:
878
903
  p, key = key.rsplit('/', 1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mwxlib
3
- Version: 0.79.8
3
+ Version: 0.80.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 <komoto@jeol.co.jp>
@@ -0,0 +1,22 @@
1
+ mwx/__init__.py,sha256=CxhKHOhig62F8p6GvP5gii-VvQtSjp9yWJpHvC_Kans,2592
2
+ mwx/controls.py,sha256=d5ZRw21nXxV06QHV5Y9t85Lqm3pLZRoPS27YknC_H54,42455
3
+ mwx/framework.py,sha256=m4iGorLqvdUnsr_6aP3uECEMe55WXAcc5vZY2EdRL98,69041
4
+ mwx/graphman.py,sha256=M5hUEW4hZDlXTOvROab2te68HWb6OVgxakz8Z4iEEy0,69214
5
+ mwx/images.py,sha256=9e8X7OpJ6Z3fF3ez17P_qk2D1NMO10-lN8TCtulAqT0,46248
6
+ mwx/matplot2.py,sha256=OnG33VYvNY9tPbTiUdhM1bibnMwx8Z91hq2Wv7az78s,36000
7
+ mwx/matplot2g.py,sha256=yfF4r6juclU1I1k41lGb_VwxRmp0ktuD8az-wQ26MsE,67727
8
+ mwx/matplot2lg.py,sha256=Dnz_U7K_QkPmsJd18WzZ6PkaTOtWu_IwOgkfEdJv4d0,27606
9
+ mwx/mgplt.py,sha256=49_wpFZUEKErQmtobqrlNKDjWlAsdLft-izlqSyGPD0,6878
10
+ mwx/nutshell.py,sha256=EO4s_67Dk4EiI7h-3vHOzWyI9WnaXl4QQmsVkF7s5Xk,133557
11
+ mwx/utilus.py,sha256=3VaUX_hclVLYixOyDC-4gxxug9_4kMzCTQcDuHs3REA,34863
12
+ mwx/wxmon.py,sha256=Odmh13Ek4oJo9V5uFCTemoWlsPyZt4ITTmYZiKl_BKI,11405
13
+ mwx/wxpdb.py,sha256=WweNxRCaJa3DAO8mkpU57sluTk4oxBEZm44AVBR4vSI,18700
14
+ mwx/wxwil.py,sha256=BUfEF0Nc1E-mVC3Vdz6k1E-2s5J0PO6qEzRQ6lfyePI,5246
15
+ mwx/wxwit.py,sha256=M_jRGJOZge2B4Cq1OsAHqnGjeg56UI-v1BolDybPR-o,7246
16
+ mwx/py/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ mwx/py/filling.py,sha256=NnQnfUVol-Nz4QYZUKFIyRX-Yxp54m5n54Yxza3Iwho,16655
18
+ mwxlib-0.80.0.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
19
+ mwxlib-0.80.0.dist-info/METADATA,sha256=8cua-4t5PPXlX-lsmZ587VDduSYK6DdMSieqonWiLQg,1995
20
+ mwxlib-0.80.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
21
+ mwxlib-0.80.0.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
22
+ mwxlib-0.80.0.dist-info/RECORD,,
@@ -1,22 +0,0 @@
1
- mwx/__init__.py,sha256=CxhKHOhig62F8p6GvP5gii-VvQtSjp9yWJpHvC_Kans,2592
2
- mwx/controls.py,sha256=zUAiaJp-eypBjtRCfmL7zbIyOQw3r6mZmlzVrvFLyE4,42324
3
- mwx/framework.py,sha256=kdWJs4ccryP0ynTtXJPotJ5raQ2k2YKu9VoPqUyFREE,69052
4
- mwx/graphman.py,sha256=MIN4Ddd-Dc2F_F4DBYJxjcQ3gN661uv2WG7xLYEHxJ0,69846
5
- mwx/images.py,sha256=9e8X7OpJ6Z3fF3ez17P_qk2D1NMO10-lN8TCtulAqT0,46248
6
- mwx/matplot2.py,sha256=8eRrf6G4On-wi2F-SizQbOcNFWoJG4P8172PU4ke3mQ,36075
7
- mwx/matplot2g.py,sha256=fgbeaOsXmQLwur69BSKNh1qS7XokgWCyN_IaTVeUPCE,67611
8
- mwx/matplot2lg.py,sha256=Uybj8ZpK8N3E7KmTog4Mipf03am6Z6gknautOtC39QY,27837
9
- mwx/mgplt.py,sha256=49_wpFZUEKErQmtobqrlNKDjWlAsdLft-izlqSyGPD0,6878
10
- mwx/nutshell.py,sha256=4yMxL9pO9pXIO53PXCtlVbbahKoHlRUliq8e3k8Srpk,133309
11
- mwx/utilus.py,sha256=c1NRpehYxyE2GzN9mIW3FW6TJPjaZfsilpH9-qw4IJE,34086
12
- mwx/wxmon.py,sha256=Odmh13Ek4oJo9V5uFCTemoWlsPyZt4ITTmYZiKl_BKI,11405
13
- mwx/wxpdb.py,sha256=WweNxRCaJa3DAO8mkpU57sluTk4oxBEZm44AVBR4vSI,18700
14
- mwx/wxwil.py,sha256=BUfEF0Nc1E-mVC3Vdz6k1E-2s5J0PO6qEzRQ6lfyePI,5246
15
- mwx/wxwit.py,sha256=M_jRGJOZge2B4Cq1OsAHqnGjeg56UI-v1BolDybPR-o,7246
16
- mwx/py/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- mwx/py/filling.py,sha256=NnQnfUVol-Nz4QYZUKFIyRX-Yxp54m5n54Yxza3Iwho,16655
18
- mwxlib-0.79.8.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
19
- mwxlib-0.79.8.dist-info/METADATA,sha256=9QEcfsV2sn0hAyu5I3jTQgWlJGI0MvPQTjg52WRzZRQ,1995
20
- mwxlib-0.79.8.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
21
- mwxlib-0.79.8.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
22
- mwxlib-0.79.8.dist-info/RECORD,,