ondrolexa / apsg

Structural geology package for Python
https://apsg.readthedocs.io
Other
102 stars 27 forks source link

Cluster class error #5

Closed et2010 closed 6 years ago

et2010 commented 6 years ago

Hi, Ondrej

I can't run following example from the tutorial:

g1 = Group.randn_lin(mean=Lin(45, 30))
g2 = Group.randn_lin(mean=Lin(320, 56))
g3 = Group.randn_lin(mean=Lin(150, 40))
g = g1 + g2 + g3
cl = Cluster(g)   # <==== error
cl.dendrogram(no_labels=True)

traceback:

AttributeError                            Traceback (most recent call last)
<ipython-input-14-90e135d9136a> in <module>()
----> 1 import codecs, os;__pyfile = codecs.open('''/tmp/py32407pTR''', encoding='''utf-8''');__code = __pyfile.read().encode('''utf-8''');__pyfile.close();os.remove('''/tmp/py32407pTR''');exec(compile(__code, '''/home/jw/work/apsg_tutorial.py''', 'exec'));

/home/jw/work/apsg_tutorial.py in <module>()
----> 1 # APSG defines several new python classes to easily manage, analyze and
      2 # visualize orientation structural geology data.Base class Vec3 is derived from
      3 # numpy.array class and offers several new method which will be explained in
      4 # following examples
      5 

/home/jw/.virtualenvs/scienv/lib/python2.7/site-packages/apsg/core.pyc in __init__(self, d, **kwargs)
   2069     def __init__(self, d, **kwargs):
   2070         assert isinstance(d, Group), 'Only group could be clustered'
-> 2071         self.data = Group(d.copy())
   2072         self.maxclust = kwargs.get('maxclust', 2)
   2073         self.angle = kwargs.get('angle', None)

/home/jw/.virtualenvs/scienv/lib/python2.7/site-packages/apsg/core.pyc in copy(self)
    856 
    857     def copy(self):
--> 858         return Group(super(Group, self).copy(), self.name)
    859 
    860     @property

AttributeError: 'super' object has no attribute 'copy'

System

Linux Mint 18.3
Python 2.7.12

scipy==1.0.1
numpy==1.14.2
matplotlib==2.2.2
apsg==0.5.1
4e1e0603 commented 6 years ago

I think that this is a bug, because Group inherits from list class, so super(Group, self).copy() will fail, because there is no `copy() method for the list class.

ondrolexa commented 6 years ago

Yes, it is a bug, but only for Python 2.x as in Python 3 list has a copy method. Anyway, it is fixed in develop branch using deepcopy function.