ucl-pond / pySuStaIn

Subtype and Stage Inference (SuStaIn) algorithm with an example using simulated data.
MIT License
112 stars 62 forks source link

`use_parallel_startpoints` fails on numpy 1.21 #27

Open noxtoby opened 3 years ago

noxtoby commented 3 years ago

Just putting this here for reference. Not sure there's anything we can do.

use_parallel_startpoints fails on my Mac because pickle cannot pickle a numpy object.

I was using numpy 1.21 and managed to fix the issue by downgrading to v1.20

sea-shunned commented 3 years ago

Would you be able to post the full error? I can't see anything in the release notes in numpy v1.21 that relate to pickle, so I'm not sure why downgrading would fix the issue.

noxtoby commented 3 years ago

If you really really want me to, yes.

But the idea of reinstalling 1.21 and re-running pySuStaIn does not fill me with excitement

noxtoby commented 3 years ago

Now it's also failing on numpy 1.20. Not sure why I thought 1.20 fixed it (it was very late...)

Could it be something to do with multiprocessing or pathos.multiprocessing trying to pickle everything?


PicklingError                             Traceback (most recent call last)
<ipython-input-7-41457a54ebd5> in <module>
      5     test_idxs_validate.append(test_validate)
      6 test_idxs_validate              = np.array(test_idxs_validate)
----> 7 CVIC_validate, loglike_matrix_validate   = sustain_kdeebm_validate.cross_validate_sustain_model(test_idxs_validate,plot=True)

/usr/local/lib/python3.9/site-packages/pySuStaIn/AbstractSustain.py in cross_validate_sustain_model(self, test_idxs, select_fold, plot)
    308                     ml_sequence_mat_EM,     \
    309                     ml_f_mat_EM,            \
--> 310                     ml_likelihood_mat_EM    = self._estimate_ml_sustain_model_nplus1_clusters(sustainData_train, ml_sequence_prev_EM, ml_f_prev_EM)
    311
    312                     seq_init                    = ml_sequence_EM

/usr/local/lib/python3.9/site-packages/pySuStaIn/AbstractSustain.py in _estimate_ml_sustain_model_nplus1_clusters(self, sustainData, ml_sequence_prev, ml_f_prev)
    582             ml_sequence_mat,    \
    583             ml_f_mat,           \
--> 584             ml_likelihood_mat               = self._find_ml(sustainData)
    585             print('Overall ML likelihood is', ml_likelihood)
    586

/usr/local/lib/python3.9/site-packages/pySuStaIn/AbstractSustain.py in _find_ml(self, sustainData)
    671         partial_iter                        = partial(self._find_ml_iteration, sustainData)
    672         seed_sequences = np.random.SeedSequence(self.global_rng.integers(1e10))
--> 673         pool_output_list                    = self.pool.map(partial_iter, seed_sequences.spawn(self.N_startpoints))
    674
    675         if ~isinstance(pool_output_list, list):

/usr/local/lib/python3.9/site-packages/pathos/multiprocessing.py in map(self, f, *args, **kwds)
    137         AbstractWorkerPool._AbstractWorkerPool__map(self, f, *args, **kwds)
    138         _pool = self._serve()
--> 139         return _pool.map(star(f), zip(*args)) # chunksize
    140     map.__doc__ = AbstractWorkerPool.map.__doc__
    141     def imap(self, f, *args, **kwds):

/usr/local/lib/python3.9/site-packages/multiprocess/pool.py in map(self, func, iterable, chunksize)
    362         in a list that is returned.
    363         '''
--> 364         return self._map_async(func, iterable, mapstar, chunksize).get()
    365
    366     def starmap(self, func, iterable, chunksize=None):

/usr/local/lib/python3.9/site-packages/multiprocess/pool.py in get(self, timeout)
    769             return self._value
    770         else:
--> 771             raise self._value
    772
    773     def _set(self, i, obj):

/usr/local/lib/python3.9/site-packages/multiprocess/pool.py in _handle_tasks(taskqueue, put, outqueue, pool, cache)
    535                         break
    536                     try:
--> 537                         put(task)
    538                     except Exception as e:
    539                         job, idx = task[:2]

/usr/local/lib/python3.9/site-packages/multiprocess/connection.py in send(self, obj)
    212         self._check_closed()
    213         self._check_writable()
--> 214         self._send_bytes(_ForkingPickler.dumps(obj))
    215
    216     def recv_bytes(self, maxlength=None):

/usr/local/lib/python3.9/site-packages/multiprocess/reduction.py in dumps(cls, obj, protocol, *args, **kwds)
     52     def dumps(cls, obj, protocol=None, *args, **kwds):
     53         buf = io.BytesIO()
---> 54         cls(buf, protocol, *args, **kwds).dump(obj)
     55         return buf.getbuffer()
     56

/usr/local/lib/python3.9/site-packages/dill/_dill.py in dump(self, obj)
    496             raise PicklingError(msg)
    497         else:
--> 498             StockPickler.dump(self, obj)
    499         stack.clear()  # clear record of 'recursion-sensitive' pickled objects
    500         return

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in dump(self, obj)
    485         if self.proto >= 4:
    486             self.framer.start_framing()
--> 487         self.save(obj)
    488         self.write(STOP)
    489         self.framer.end_framing()

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    899         write(MARK)
    900         for element in obj:
--> 901             save(element)
    902
    903         if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    884         if n <= 3 and self.proto >= 2:
    885             for element in obj:
--> 886                 save(element)
    887             # Subtle.  Same as in the big comment below.
    888             if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    884         if n <= 3 and self.proto >= 2:
    885             for element in obj:
--> 886                 save(element)
    887             # Subtle.  Same as in the big comment below.
    888             if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_function(pickler, obj)
   1491             if _memo: pickler._recurse = False
   1492             fkwdefaults = getattr(obj, '__kwdefaults__', None)
-> 1493             pickler.save_reduce(_create_function, (obj.__code__,
   1494                                 globs, obj.__name__,
   1495                                 obj.__defaults__, obj.__closure__,

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    690         else:
    691             save(func)
--> 692             save(args)
    693             write(REDUCE)
    694

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    899         write(MARK)
    900         for element in obj:
--> 901             save(element)
    902
    903         if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    884         if n <= 3 and self.proto >= 2:
    885             for element in obj:
--> 886                 save(element)
    887             # Subtle.  Same as in the big comment below.
    888             if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_cell(pickler, obj)
   1225     log.info("Ce: %s" % obj)
   1226     f = obj.cell_contents
-> 1227     pickler.save_reduce(_create_cell, (f,), obj=obj)
   1228     log.info("# Ce")
   1229     return

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    690         else:
    691             save(func)
--> 692             save(args)
    693             write(REDUCE)
    694

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    884         if n <= 3 and self.proto >= 2:
    885             for element in obj:
--> 886                 save(element)
    887             # Subtle.  Same as in the big comment below.
    888             if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_functor(pickler, obj)
   1133 def save_functor(pickler, obj):
   1134     log.info("Fu: %s" % obj)
-> 1135     pickler.save_reduce(_create_ftype, (type(obj), obj.func, obj.args,
   1136                                         obj.keywords), obj=obj)
   1137     log.info("# Fu")

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    690         else:
    691             save(func)
--> 692             save(args)
    693             write(REDUCE)
    694

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    899         write(MARK)
    900         for element in obj:
--> 901             save(element)
    902
    903         if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_instancemethod0(pickler, obj)
   1174     log.info("Me: %s" % obj) #XXX: obj.__dict__ handled elsewhere?
   1175     if PY3:
-> 1176         pickler.save_reduce(MethodType, (obj.__func__, obj.__self__), obj=obj)
   1177     else:
   1178         pickler.save_reduce(MethodType, (obj.im_func, obj.im_self,

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    690         else:
    691             save(func)
--> 692             save(args)
    693             write(REDUCE)
    694

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    884         if n <= 3 and self.proto >= 2:
    885             for element in obj:
--> 886                 save(element)
    887             # Subtle.  Same as in the big comment below.
    888             if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_function(pickler, obj)
   1491             if _memo: pickler._recurse = False
   1492             fkwdefaults = getattr(obj, '__kwdefaults__', None)
-> 1493             pickler.save_reduce(_create_function, (obj.__code__,
   1494                                 globs, obj.__name__,
   1495                                 obj.__defaults__, obj.__closure__,

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    690         else:
    691             save(func)
--> 692             save(args)
    693             write(REDUCE)
    694

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    899         write(MARK)
    900         for element in obj:
--> 901             save(element)
    902
    903         if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_module_dict(pickler, obj)
    988             # we only care about session the first pass thru
    989             pickler._session = False
--> 990         StockPickler.save_dict(pickler, obj)
    991         log.info("# D2")
    992     return

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_dict(self, obj)
    969
    970         self.memoize(obj)
--> 971         self._batch_setitems(obj.items())
    972
    973     dispatch[dict] = save_dict

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in _batch_setitems(self, items)
    995                 for k, v in tmp:
    996                     save(k)
--> 997                     save(v)
    998                 write(SETITEMS)
    999             elif n:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_module(pickler, obj)
   1373             [_main_dict.pop(item, None) for item in singletontypes
   1374                 + ["__builtins__", "__loader__"]]
-> 1375             pickler.save_reduce(_import_module, (obj.__name__,), obj=obj,
   1376                                 state=_main_dict)
   1377             log.info("# M1")

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    715         if state is not None:
    716             if state_setter is None:
--> 717                 save(state)
    718                 write(BUILD)
    719             else:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_module_dict(pickler, obj)
    988             # we only care about session the first pass thru
    989             pickler._session = False
--> 990         StockPickler.save_dict(pickler, obj)
    991         log.info("# D2")
    992     return

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_dict(self, obj)
    969
    970         self.memoize(obj)
--> 971         self._batch_setitems(obj.items())
    972
    973     dispatch[dict] = save_dict

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in _batch_setitems(self, items)
    995                 for k, v in tmp:
    996                     save(k)
--> 997                     save(v)
    998                 write(SETITEMS)
    999             elif n:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_function(pickler, obj)
   1491             if _memo: pickler._recurse = False
   1492             fkwdefaults = getattr(obj, '__kwdefaults__', None)
-> 1493             pickler.save_reduce(_create_function, (obj.__code__,
   1494                                 globs, obj.__name__,
   1495                                 obj.__defaults__, obj.__closure__,

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, state_setter, obj)
    690         else:
    691             save(func)
--> 692             save(args)
    693             write(REDUCE)
    694

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_tuple(self, obj)
    899         write(MARK)
    900         for element in obj:
--> 901             save(element)
    902
    903         if id(obj) in memo:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_module_dict(pickler, obj)
    988             # we only care about session the first pass thru
    989             pickler._session = False
--> 990         StockPickler.save_dict(pickler, obj)
    991         log.info("# D2")
    992     return

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_dict(self, obj)
    969
    970         self.memoize(obj)
--> 971         self._batch_setitems(obj.items())
    972
    973     dispatch[dict] = save_dict

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in _batch_setitems(self, items)
    995                 for k, v in tmp:
    996                     save(k)
--> 997                     save(v)
    998                 write(SETITEMS)
    999             elif n:

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save(self, obj, save_persistent_id)
    558             f = self.dispatch.get(t)
    559             if f is not None:
--> 560                 f(self, obj)  # Call unbound method with explicit self
    561                 return
    562

/usr/local/lib/python3.9/site-packages/dill/_dill.py in save_type(pickler, obj)
   1437        #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
   1438         name = getattr(obj, '__qualname__', getattr(obj, '__name__', None))
-> 1439         StockPickler.save_global(pickler, obj, name=name)
   1440         log.info("# T4")
   1441     return

/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pickle.py in save_global(self, obj, name)
   1068             obj2, parent = _getattribute(module, name)
   1069         except (ImportError, KeyError, AttributeError):
-> 1070             raise PicklingError(
   1071                 "Can't pickle %r: it's not found as %s.%s" %
   1072                 (obj, module_name, name)) from None

PicklingError: Can't pickle <class 'ellipsis'>: it's not found as builtins.ellipsis```
sea-shunned commented 3 years ago

pathos uses dill to pickle (referenced in the stack, fortunately) which can pickle Ellipsis. I am not clear at all how it got to that point, and what is causing this, as the pickling should not have changed. Did you recently change Python version?

Either way, I'll spin up a 3.9 environment and try to recreate this. If you could post/send me either your pip freeze or conda list output that would help reproducing this!

noxtoby commented 3 years ago

No recent change to python: 3.9

I originally wondered if multiprocessing was to blame, but it's only used in pySuStaIn to get the number of cores.

>> pip freeze academic==0.7.0 alabaster==0.7.12 anyio==3.2.1 appdirs==1.4.4 appnope==0.1.2 argon2-cffi==20.1.0 arrow==1.1.0 astroid==2.5.6 async-generator==1.10 attrs==20.3.0 awkde @ git+https://github.com/noxtoby/awkde.git@b714c99f6272e123864a5d3f23cefc4fbf923b61 Babel==2.9.1 backcall==0.2.0 beautifulsoup4==4.9.3 bibtexparser==1.1.0 bleach==3.3.0 build==0.3.1.post1 certifi==2021.5.30 cffi==1.14.5 chardet==4.0.0 ci-info==0.2.0 click==7.1.2 cmdstanpy==0.9.67 colorama==0.4.4 configobj==5.0.6 cycler==0.10.0 Cython==0.29.21 dcmstack==0.8.0 debugpy==1.3.0 decorator==4.4.2 defusedxml==0.7.1 Deprecated==1.2.12 dicom-csv==0.2.0 dicom2nifti==2.3.0 dicomsort==3.0.0 dill==0.3.4 distlib==0.3.1 docutils==0.16 entrypoints==0.3 etelemetry==0.2.2 filelock==3.0.12 filetype==1.0.7 future==0.18.2 ghp-import==2.0.1 gitdb==4.0.7 GitPython==3.1.18 heudiconv==0.9.0 idna==2.10 imagesize==1.2.0 importlib-metadata==4.6.0 ipykernel==6.0.1 ipython==7.25.0 ipython-genutils==0.2.0 ipywidgets==7.6.3 isodate==0.6.0 isort==5.8.0 jedi==0.18.0 Jinja2==3.0.1 joblib==1.0.1 json5==0.9.5 jsonschema==3.2.0 jupyter==1.0.0 jupyter-book==0.11.1 jupyter-cache==0.4.2 jupyter-client==6.1.12 jupyter-console==6.4.0 jupyter-core==4.7.1 jupyter-server==1.9.0 jupyter-server-mathjax==0.2.3 jupyter-sphinx==0.3.2 jupyterbook-latex==0.3.1 jupyterlab==2.2.9 jupyterlab-pygments==0.1.2 jupyterlab-server==1.2.0 jupyterlab-widgets==1.0.0 jupytext==1.10.3 kde-ebm @ git+https://github.com/ucl-pond/kde_ebm.git@489d68a179115db3be64979100e86cc8dde9bf3b keyring==12.0.2 kiwisolver==1.3.1 latexcodec==2.0.1 lazy-object-proxy==1.6.0 linalg==1.0.4 linkify-it-py==1.0.1 loo==1.0.0a4 lxml==4.6.3 markdown-it-py==0.6.2 MarkupSafe==2.0.1 matplotlib==3.4.2 matplotlib-inline==0.1.2 mccabe==0.6.1 mdit-py-plugins==0.2.6 missingdata==0.1.3 mistune==0.8.4 multiprocess==0.70.12.2 mypy-extensions==0.4.3 myst-nb==0.12.3 myst-parser==0.13.7 natsort==7.1.1 nbclient==0.5.3 nbconvert==5.6.1 nbdime==3.1.0 nbformat==5.1.3 nest-asyncio==1.5.1 networkx==2.5.1 nibabel==3.2.1 nipype==1.6.1 notebook==6.4.0 numpy==1.20.0 packaging==20.9 pandas==1.2.5 pandocfilters==1.4.3 parso==0.8.2 pathos==0.2.8 pathspec==0.8.1 patsy==0.5.1 pep517==0.10.0 pexpect==4.8.0 pickle5==0.0.11 pickleshare==0.7.5 Pillow==8.2.0 plotly==5.1.0 pluggy==0.13.1 pox==0.3.0 ppft==1.6.6.4 prometheus-client==0.11.0 prompt-toolkit==3.0.19 prov==2.0.0 ptyprocess==0.7.0 pybind11==2.6.2 pybtex==0.24.0 pybtex-docutils==1.0.0 pycodestyle==2.6.0 pycparser==2.20 pydata-sphinx-theme==0.6.3 pydicom==2.1.2 pydot==1.4.2 pyflakes==2.2.0 Pygments==2.9.0 pyobjc-core==7.3 pyobjc-framework-Accounts==7.3 pyobjc-framework-AddressBook==7.3 pyobjc-framework-AdSupport==7.3 pyobjc-framework-AppleScriptKit==7.3 pyobjc-framework-AppleScriptObjC==7.3 pyobjc-framework-ApplicationServices==7.3 pyobjc-framework-AuthenticationServices==7.3 pyobjc-framework-AutomaticAssessmentConfiguration==7.3 pyobjc-framework-Automator==7.3 pyobjc-framework-AVFoundation==7.3 pyobjc-framework-AVKit==7.3 pyobjc-framework-BusinessChat==7.3 pyobjc-framework-CalendarStore==7.3 pyobjc-framework-CFNetwork==7.3 pyobjc-framework-CloudKit==7.3 pyobjc-framework-Cocoa==7.3 pyobjc-framework-Collaboration==7.3 pyobjc-framework-ColorSync==7.3 pyobjc-framework-Contacts==7.3 pyobjc-framework-ContactsUI==7.3 pyobjc-framework-CoreAudio==7.3 pyobjc-framework-CoreAudioKit==7.3 pyobjc-framework-CoreBluetooth==7.3 pyobjc-framework-CoreData==7.3 pyobjc-framework-CoreHaptics==7.3 pyobjc-framework-CoreLocation==7.3 pyobjc-framework-CoreMedia==7.3 pyobjc-framework-CoreMediaIO==7.3 pyobjc-framework-CoreMIDI==7.3 pyobjc-framework-CoreML==7.3 pyobjc-framework-CoreMotion==7.3 pyobjc-framework-CoreServices==7.3 pyobjc-framework-CoreSpotlight==7.3 pyobjc-framework-CoreText==7.3 pyobjc-framework-CoreWLAN==7.3 pyobjc-framework-CryptoTokenKit==7.3 pyobjc-framework-DeviceCheck==7.3 pyobjc-framework-DictionaryServices==7.3 pyobjc-framework-DiscRecording==7.3 pyobjc-framework-DiscRecordingUI==7.3 pyobjc-framework-DiskArbitration==7.3 pyobjc-framework-DVDPlayback==7.3 pyobjc-framework-EventKit==7.3 pyobjc-framework-ExceptionHandling==7.3 pyobjc-framework-ExecutionPolicy==7.3 pyobjc-framework-ExternalAccessory==7.3 pyobjc-framework-FileProvider==7.3 pyobjc-framework-FileProviderUI==7.3 pyobjc-framework-FinderSync==7.3 pyobjc-framework-FSEvents==7.3 pyobjc-framework-GameCenter==7.3 pyobjc-framework-GameController==7.3 pyobjc-framework-GameKit==7.3 pyobjc-framework-GameplayKit==7.3 pyobjc-framework-ImageCaptureCore==7.3 pyobjc-framework-IMServicePlugIn==7.3 pyobjc-framework-InputMethodKit==7.3 pyobjc-framework-InstallerPlugins==7.3 pyobjc-framework-InstantMessage==7.3 pyobjc-framework-Intents==7.3 pyobjc-framework-IOSurface==7.3 pyobjc-framework-iTunesLibrary==7.3 pyobjc-framework-LatentSemanticMapping==7.3 pyobjc-framework-LaunchServices==7.3 pyobjc-framework-libdispatch==7.3 pyobjc-framework-LinkPresentation==7.3 pyobjc-framework-LocalAuthentication==7.3 pyobjc-framework-MapKit==7.3 pyobjc-framework-MediaAccessibility==7.3 pyobjc-framework-MediaLibrary==7.3 pyobjc-framework-MediaPlayer==7.3 pyobjc-framework-MediaToolbox==7.3 pyobjc-framework-Metal==7.3 pyobjc-framework-MetalKit==7.3 pyobjc-framework-MetalPerformanceShaders==7.3 pyobjc-framework-ModelIO==7.3 pyobjc-framework-MultipeerConnectivity==7.3 pyobjc-framework-NaturalLanguage==7.3 pyobjc-framework-NetFS==7.3 pyobjc-framework-Network==7.3 pyobjc-framework-NetworkExtension==7.3 pyobjc-framework-NotificationCenter==7.3 pyobjc-framework-OpenDirectory==7.3 pyobjc-framework-OSAKit==7.3 pyobjc-framework-OSLog==7.3 pyobjc-framework-PencilKit==7.3 pyobjc-framework-Photos==7.3 pyobjc-framework-PhotosUI==7.3 pyobjc-framework-PreferencePanes==7.3 pyobjc-framework-PushKit==7.3 pyobjc-framework-Quartz==7.3 pyobjc-framework-QuickLookThumbnailing==7.3 pyobjc-framework-SafariServices==7.3 pyobjc-framework-SceneKit==7.3 pyobjc-framework-ScreenSaver==7.3 pyobjc-framework-ScriptingBridge==7.3 pyobjc-framework-SearchKit==7.3 pyobjc-framework-Security==7.3 pyobjc-framework-SecurityFoundation==7.3 pyobjc-framework-SecurityInterface==7.3 pyobjc-framework-ServiceManagement==7.3 pyobjc-framework-Social==7.3 pyobjc-framework-SoundAnalysis==7.3 pyobjc-framework-Speech==7.3 pyobjc-framework-SpriteKit==7.3 pyobjc-framework-StoreKit==7.3 pyobjc-framework-SyncServices==7.3 pyobjc-framework-SystemConfiguration==7.3 pyobjc-framework-SystemExtensions==7.3 pyobjc-framework-UserNotifications==7.3 pyobjc-framework-VideoSubscriberAccount==7.3 pyobjc-framework-VideoToolbox==7.3 pyobjc-framework-Vision==7.3 pyobjc-framework-WebKit==7.3 pyparsing==2.4.7 PyQt3D==5.15.4 PyQt5==5.15.4 PyQt5-sip==12.9.0 PyQtChart==5.15.4 PyQtDataVisualization==5.15.4 PyQtNetworkAuth==5.15.4 PyQtPurchasing==5.15.4 PyQtWebEngine==5.15.4 pyrsistent==0.18.0 pystan==2.19.1.1 pySuStaIn @ git+https://github.com/ucl-pond/pySuStaIn@76ec40da7e3ac1411f1e419ddbabbba861055284 python-dateutil==2.8.1 python-jsonrpc-server==0.4.0 python-language-server==0.36.2 python-slugify==5.0.2 pytz==2021.1 PyYAML==5.4.1 pyzmq==22.1.0 qtconsole==5.1.0 QtPy==1.9.0 rdflib==5.0.0 regex==2021.4.4 requests==2.25.1 requests-unixsocket==0.2.0 rope==0.19.0 ruamel.yaml==0.16.10 scikit-learn==0.24.2 scipy==1.7.0 seaborn==0.11.1 Send2Trash==1.7.1 simplejson==3.17.2 six==1.16.0 sklearn==0.0 smmap==4.0.0 sniffio==1.2.0 snowballstemmer==2.1.0 sortedcontainers==2.4.0 soupsieve==2.2.1 Sphinx==3.5.4 sphinx-book-theme==0.1.0 sphinx-comments==0.0.3 sphinx-copybutton==0.3.3 sphinx-external-toc==0.2.2 sphinx-panels==0.5.2 sphinx-thebe==0.0.8 sphinx-togglebutton==0.2.3 sphinxcontrib-applehelp==1.0.2 sphinxcontrib-bibtex==2.2.1 sphinxcontrib-devhelp==1.0.2 sphinxcontrib-htmlhelp==2.0.0 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 SQLAlchemy==1.3.24 stats==0.1.2a0 statsmodels==0.12.2 synapseclient==2.3.1 tenacity==7.0.0 terminado==0.10.1 testpath==0.5.0 text-unidecode==1.3 threadpoolctl==2.1.0 tinycss2==1.1.0 toml==0.10.2 tornado==6.1 tqdm==4.61.1 traitlets==5.0.5 traits==6.2.0 typing-extensions==3.10.0.0 uc-micro-py==1.0.1 ujson==4.0.2 urllib3==1.26.6 virtualenv==20.4.3 wcwidth==0.2.5 webencodings==0.5.1 websocket-client==1.1.0 widgetsnbextension==3.5.1 wrapt==1.12.1 wurlitzer==2.1.0 wxPython==4.1.1 xlrd==2.0.1 yapf==0.31.0 zipp==3.4.1

sea-shunned commented 3 years ago

I can't reproduce this issue with that environment, so it may be specific to Mac...?

Does anyone else have a Mac that may be able to investigate this further? @LeonAksman @ayoung11 @pawij