Multiclass-interface 1.0__tar.gz → 1.1__tar.gz

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.
Files changed (22) hide show
  1. {Multiclass_interface-1.0 → Multiclass_interface-1.1/Multiclass_interface.egg-info}/PKG-INFO +1 -1
  2. {Multiclass_interface-1.0/Multiclass_interface.egg-info → Multiclass_interface-1.1}/PKG-INFO +1 -1
  3. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/multiprocess_interface.py +9 -4
  4. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_multiprocessinterface.py +4 -3
  5. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/version.py +2 -2
  6. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/.gitignore +0 -0
  7. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/.gitlab-ci.yml +0 -0
  8. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/LICENSE +0 -0
  9. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/SOURCES.txt +0 -0
  10. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/dependency_links.txt +0 -0
  11. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/requires.txt +0 -0
  12. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/top_level.txt +0 -0
  13. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/README.md +0 -0
  14. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/__init__.py +0 -0
  15. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/mpi_interface.py +0 -0
  16. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/multi_object_list.py +0 -0
  17. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/__init__.py +0 -0
  18. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/my_test_cls.py +0 -0
  19. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_mpi.py +0 -0
  20. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_multiclass_list.py +0 -0
  21. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/pyproject.toml +0 -0
  22. {Multiclass_interface-1.0 → Multiclass_interface-1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Multiclass_interface
3
- Version: 1.0
3
+ Version: 1.1
4
4
  Summary: Multiclass interface
5
5
  Author-email: "Mads M. Pedersen" <mmpe@dtu.dk>
6
6
  Project-URL: Homepage, https://gitlab.windenergy.dtu.dk/DYNAMIKS/multiclass_interface
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Multiclass_interface
3
- Version: 1.0
3
+ Version: 1.1
4
4
  Summary: Multiclass interface
5
5
  Author-email: "Mads M. Pedersen" <mmpe@dtu.dk>
6
6
  Project-URL: Homepage, https://gitlab.windenergy.dtu.dk/DYNAMIKS/multiclass_interface
@@ -48,8 +48,9 @@ def run(cls, inputQueue, outputQueue, cls_args, **kwargs):
48
48
  class ProcessClass():
49
49
  cls = None
50
50
 
51
- def __init__(self, cls, cls_attrs={}):
51
+ def __init__(self, cls, cls_attrs={}, index=""):
52
52
  self.cls_attrs = cls_attrs
53
+ self.index = index
53
54
  self.cls = cls
54
55
  self.ctx = multiprocessing.get_context('spawn')
55
56
  self.inputQueue = self.ctx.Queue()
@@ -103,7 +104,7 @@ class ProcessClass():
103
104
  return self.get_result(raise_exception=True, cmd=lambda: f"checking if '{name}' is callable")
104
105
 
105
106
  def __setattr__(self, name, value):
106
- if name in {'cls', 'ctx', 'inputQueue', 'outputQueue', 'closed', 'process', 'cls_attrs'}:
107
+ if name in {'cls', 'ctx', 'inputQueue', 'outputQueue', 'closed', 'process', 'cls_attrs', 'index'}:
107
108
  return object.__setattr__(self, name, value)
108
109
  else:
109
110
  self.inputQueue.put(('setattr', (name, value), {}))
@@ -124,7 +125,10 @@ class ProcessClass():
124
125
  else:
125
126
  if hasattr(cmd, '__call__'):
126
127
  cmd = cmd()
127
- e = Exception(f'{self.cls.__name__} process died before or while {cmd}')
128
+ p_id = f'{self.cls.__name__} process'
129
+ if self.index:
130
+ p_id += f" index {self.index}"
131
+ e = Exception(f'{p_id} died before or while {cmd}')
128
132
  if raise_exception:
129
133
  raise e
130
134
  return e
@@ -153,7 +157,8 @@ class ThreadClass(ProcessClass):
153
157
  class MultiProcessClassInterface(MultiObjectList):
154
158
 
155
159
  def __init__(self, cls, args_lst, cls_attrs={}):
156
- MultiObjectList.__init__(self, [ProcessClass(cls, cls_attrs)(*args) for args in args_lst], SubsetProcessWrapper)
160
+ MultiObjectList.__init__(self, [ProcessClass(cls, cls_attrs, i)(*args)
161
+ for i, args in enumerate(args_lst)], SubsetProcessWrapper)
157
162
 
158
163
  def __getattr__(self, name):
159
164
  obj_lst = self.obj_lst
@@ -79,11 +79,12 @@ def test_subset(mpri):
79
79
  mpri[1].close()
80
80
 
81
81
 
82
- def test_():
83
- pri = ProcessClass(MyTest)(1)
82
+ @pytest.mark.parametrize('index,s', [('', ''), (5, ' index 5')])
83
+ def test_dying_process(index, s):
84
+ pri = ProcessClass(MyTest, index=index)(1)
84
85
 
85
86
  def run():
86
- with pytest.raises(Exception, match="MyTest process died before or while checking if 'work' is callable"):
87
+ with pytest.raises(Exception, match=f"MyTest process{s} died before or while checking if 'work' is callable"):
87
88
  pri.work(5)
88
89
  t = Thread(target=run)
89
90
  t.start()
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.0'
16
- __version_tuple__ = version_tuple = (1, 0)
15
+ __version__ = version = '1.1'
16
+ __version_tuple__ = version_tuple = (1, 1)