taschini / pyinterval

PyInterval — Interval arithmetic in Python
http://pyinterval.readthedocs.io
Other
83 stars 25 forks source link

copy interval error #5

Closed ozzzp closed 8 years ago

ozzzp commented 8 years ago

I need to copy/deepcopy a interval with the module copy, but it's always error:

k = interval([-3, -2], [0, 1]) A=copy.copy(k) Traceback (most recent call last): File "", line 1, in File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 96, in copy return _reconstruct(x, rv, 0) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 329, in _reconstruct y = callable(args) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 93, in newobj return cls.new(cls, args) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 101, in new return cls.union(process(x) for x in args) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 181, in union return cls._canonical(c for i in intervals for c in i) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 158, in _canonical components = [c for c in components if c.inf <= c.sup] File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 181, in return cls._canonical(c for i in intervals for c in i) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 101, in return cls.union(process(x) for x in args) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 100, in process raise cls.ComponentError("Invalid interval component: " + repr(x)) ComponentError: Invalid interval component: ((-3.0, -2.0), (0.0, 1.0))

for deepcopy:

k = interval([-3, -2], [0, 1]) A=copy.copy(k) Traceback (most recent call last): File "", line 1, in File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 96, in copy return _reconstruct(x, rv, 0) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 329, in _reconstruct y = callable(args) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 93, in newobj return cls.new(cls, _args) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 101, in new return cls.union(process(x) for x in args) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 181, in union return cls._canonical(c for i in intervals for c in i) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 158, in _canonical components = [c for c in components if c.inf <= c.sup] File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 181, in return cls._canonical(c for i in intervals for c in i) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 101, in return cls.union(process(x) for x in args) File "/usr/local/lib/python2.7/site-packages/interval/init.py", line 100, in process raise cls.ComponentError("Invalid interval component: " + repr(x)) ComponentError: Invalid interval component: ((-3.0, -2.0), (0.0, 1.0)) k = interval([-3, -2], [0, 1]) A=copy.deepcopy(k) Traceback (most recent call last): File "", line 1, in File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 328, in _reconstruct args = deepcopy(args, memo) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 237, in _deepcopy_tuple y.append(deepcopy(a, memo)) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 163, in deepcopy y = copier(x, memo) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 237, in _deepcopy_tuple y.append(deepcopy(a, memo)) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 190, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 329, in _reconstruct y = callable(_args) File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 93, in newobj return cls.new(cls, args) TypeError: new() takes exactly 3 arguments (2 given)

also it cannot be copied by module pickle. Any ideas?

taschini commented 8 years ago

I'll have a look.

taschini commented 8 years ago

I just released version 1.1.1 that fixes this issues. Now pickling, shallow copy and deep copy all work.

ozzzp commented 8 years ago

Interesting, the cause is just lack of the getnewargs method which I've never met before. Learning!

taschini commented 8 years ago

Can you confirm that it is now working for you?

ozzzp commented 8 years ago

Yes, I have tested. Now it works