tensorflow/neural-structured-learning

AttributeError: module 'collections' has no attribute 'Mapping' - Python v3.10.4, nsl v1.3.1

klanderson opened this issue · 1 comments

I think this needs to be changed for Python 3.10 compatibility. There error I'm getting is from neural_structured_learning\keras\adversarial_regularization.py:236

File c:\Users\xxx\Anaconda3\envs\niq_model\lib\site-packages\neural_structured_learning\keras\adversarial_regularization.py:236, in _prepare_loss_fns(loss, output_names)
    [234](file:///c%3A/Users/xxx/Anaconda3/envs/niq_model/lib/site-packages/neural_structured_learning/keras/adversarial_regularization.py?line=233) """Converts `loss` to a list of per-output loss functions or objects."""
    [235](file:///c%3A/Users/xxx/Anaconda3/envs/niq_model/lib/site-packages/neural_structured_learning/keras/adversarial_regularization.py?line=234) # losses for multiple outputs indexed by name
--> [236](file:///c%3A/Users/xxx/Anaconda3/envs/niq_model/lib/site-packages/neural_structured_learning/keras/adversarial_regularization.py?line=235) if isinstance(loss, collections.Mapping):
    [237](file:///c%3A/Users/xxx/Anaconda3/envs/niq_model/lib/site-packages/neural_structured_learning/keras/adversarial_regularization.py?line=236)   for name in output_names:
    [238](file:///c%3A/Users/xxx/Anaconda3/envs/niq_model/lib/site-packages/neural_structured_learning/keras/adversarial_regularization.py?line=237)     if name not in loss:

Here is the Python 3.9 deprecation warning text:

Using or importing the ABCs
  from 'collections' instead of from 'collections.abc' is deprecated
  since Python 3.3, and in 3.10 it will stop working

Thanks for pointing out the issue! We will fix this in the next version. (PR is welcome!)