Ask Your Question

# Revision history [back]

### TypeError: unhashable type: 'list' in constructing poset

I have the following code to generate a post in which the order is given by the refinement.

sage: elms = M sage: def fcn(A, B): ....: if len(A) != len(B)+1: ....: return False ....: for a in A: ....: if not any(set(a).issubset(b) for b in B): ....: return False ....: return True sage: Poset((elms, fcn), cover_relations=True)

I usually work with sets and my input M is usually a set partition and the program works good.

Now, I am working with multisets (like [0,1,1,2,2,2,2]) and multi partitions (like [,[1,2],[1,2],[2,2]). By a multi-partition, I mean a partition in which each part is a multiset and parts can be repeated in a partition. So basically it is a list of lists. We cannot implement this using sets. So I have code to generate all such partitions in sage using lists.

Now, the set of all multi partitions (which is implements as a list) of a multiset (which is also implemented as list) has to be fed as an input to the above code to generate the poset. But the above code throws the error "TypeError: unhashable type: 'list'". How to overcome this issue? Kindly help me with this . Thank you.

### TypeError: unhashable type: 'list' in constructing poset

I have the following code to generate a post in which the order is given by the refinement.

sage: elms = M M

sage: def fcn(A, B): B):

....: if len(A) != len(B)+1: len(B)+1:

....: return False False

....: for a in A: A:

....: if not any(set(a).issubset(b) for b in B): B):

....: return False False

....: return True True

sage: Poset((elms, fcn), cover_relations=True)

I usually work with sets and my input M is usually a set partition and the program works good.

Now, I am working with multisets (like [0,1,1,2,2,2,2]) and multi partitions (like [,[1,2],[1,2],[2,2]). By a multi-partition, I mean a partition in which each part is a multiset and parts can be repeated in a partition. So basically it is a list of lists. We cannot implement this using sets. So I have code to generate all such partitions in sage using lists.

Now, the set of all multi partitions (which is implements as a list) of a multiset (which is also implemented as list) has to be fed as an input to the above code to generate the poset. But the above code throws the error "TypeError: unhashable type: 'list'". How to overcome this issue? Kindly help me with this . Thank you. 3 None

### TypeError: unhashable type: 'list' in constructing poset

I have the following code to generate a post in which the order is given by the refinement.

sage: elms = M M
sage: def fcn(A, B): B):
....:     if len(A) != len(B)+1: len(B) + 1:
....:         return False False
....:     for a in A: A:
....:         if not any(set(a).issubset(b) for b in B): B):
....:             return False False
....:     return True True
sage: Poset((elms, fcn), cover_relations=True)cover_relations=True)


I usually work with sets and my input M is usually a set partition and the program works good.

Now, I am working with multisets (like [0,1,1,2,2,2,2]) and multi partitions (like [,[1,2],[1,2],[2,2]). By a multi-partition, I mean a partition in which each part is a multiset and parts can be repeated in a partition. So basically it is a list of lists. We cannot implement this using sets. So I have code to generate all such partitions in sage using lists.

Now, the set of all multi partitions (which is implements as a list) of a multiset (which is also implemented as list) has to be fed as an input to the above code to generate the poset. But the above code throws the error "TypeError:

TypeError: unhashable type: 'list'". 'list'


How to overcome this issue? Kindly help me with this . this. Thank you.

### TypeError: unhashable type: 'list' in constructing poset

I have the following code to generate all multiset partitions of a given multiset (list).

k0 = 2
k1 = 1
k2 = 1
#k3 = 1
l = k0+k1+k2 #+k3

L = [ ]
for i in range(k0) :
L.append(0)
for i in range(k1) :
L.append(1)
for i in range(k2) :
L.append(2)
print L
#L = [0,1,2,3]
LL = list(range(len(L)))
print LL
P = SetPartitions(LL)
P = list(P)

J = []
for p in P :
J.append([])
aa = P.index(p)
for i in p :
J[aa].append(list(i))
#print J

JJ =[]
for j in J :
JJ.append([])
bb = J.index(j)
for i in j :
JJ[bb].append([])
aa = j.index(i)
for k in i :
#print aa
JJ[bb][aa].append(L[k])
print JJ


The above code gives me the following output

[0, 0, 1, 2]
[0, 1, 2, 3]
[[[0, 0, 1, 2]], [, [0, 1, 2]], [[0, 1, 2], ], [[0, 0, 2], ], [[0, 0, 1], ], [[0, 0], [1, 2]], [[0, 1], [0, 2]], [[0, 2], [0, 1]], [, , [1, 2]], [, [0, 2], ], [, [0, 1], ], [[0, 2], , ], [[0, 1], , ], [[0, 0], , ], [, , , ]]


I have the following code to generate a post out of JJ in which the order is given by the refinement.

sage: elms = M
JJ
sage: def fcn(A, B):
....:     if len(A) != len(B) + 1:
....:         return False
....:     for a in A:
....:         if not any(set(a).issubset(b) for b in B):
....:             return False
....:     return True
sage: Poset((elms, fcn), cover_relations=True)


I usually work with sets and my input M JJ is usually a set partition and the program works good.well.

Now, I am working with multisets (like [0,1,1,2,2,2,2]) and multi partitions (like [,[1,2],[1,2],[2,2]). By a multi-partition, I mean a partition in which each part is a multiset and parts can be repeated in a partition. So basically it is a list of lists. We cannot implement this using sets. So I have code to generate all such partitions in sage using lists.

Now, the set of all multi partitions (which is implements as a list) of a multiset (which is also implemented as a list) has to be fed as an input to the above code to generate the poset. But the above code throws the error

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-42-993ec557f50c> in <module>()
7             return False
8     return True
----> 9 Poset((elms, fcn), cover_relations=True)

/Applications/SageMath-8.1.app/Contents/Resources/sage/local/lib/python2.7/site-packages/sage/combinat/posets/posets.pyc in Poset(data, element_labels, cover_relations, linear_extension, category, facade, key)
674                         raise TypeError("not a list of relations")
675             D = DiGraph()
--> 676             D.add_vertices(elements)
677             D.add_edges(relations, loops=False)
678         elif len(data) > 2:

/Applications/SageMath-8.1.app/Contents/Resources/sage/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in add_vertices(self, vertices)
9602
9603         """
-> 9604         return self._backend.add_vertices(vertices)
9605
9606     def delete_vertex(self, vertex, in_order=False):

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.add_vertices (build/cythonized/sage/graphs/base/c_graph.c:14020)()
1504         for v in vertices:
1505             if v is not None:
-> 1506                 self.add_vertex(v)
1507             else:
1508                 nones += 1

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.add_vertex (build/cythonized/sage/graphs/base/c_graph.c:13856)()
1454             retval = name
1455
-> 1456         self.check_labelled_vertex(name,
1457                      (self._directed and
1458                       self._cg_rev is not None)) # this will add the vertex

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.check_labelled_vertex (build/cythonized/sage/graphs/base/c_graph.c:12310)()
1153         cdef CGraph G_rev = self._cg_rev
1154
-> 1155         cdef int u_int = self.get_vertex(u)
1156         if u_int != -1:
1157             if not bitset_in(G.active_vertices, u_int):

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.get_vertex (build/cythonized/sage/graphs/base/c_graph.c:11902)()
1120         cdef CGraph G = self._cg
1121         cdef long u_long
-> 1122         if u in vertex_ints:
1123             return vertex_ints[u]
1124         try:

TypeError: unhashable type: 'list'


How to overcome this issue? Kindly help me with this. Thank you.

### TypeError: unhashable type: 'list' in constructing poset

I have the following code to generate all multiset partitions of a given multiset (list).

k0 = 2
k1 = 1
k2 = 1
#k3 = 1
l = k0+k1+k2 #+k3

L = [ ]
for i in range(k0) :
L.append(0)
for i in range(k1) :
L.append(1)
for i in range(k2) :
L.append(2)
print L
#L = [0,1,2,3]
LL = list(range(len(L)))
print LL
P = SetPartitions(LL)
P = list(P)

J = []
for p in P :
J.append([])
aa = P.index(p)
for i in p :
J[aa].append(list(i))
#print J

JJ =[]
for j in J :
JJ.append([])
bb = J.index(j)
for i in j :
JJ[bb].append([])
aa = j.index(i)
for k in i :
#print aa
JJ[bb][aa].append(L[k])
print JJ


The above code gives me the following output

[0, 0, 1, 2]
[0, 1, 2, 3]
[[[0, 0, 1, 2]], [, [0, 1, 2]], [[0, 1, 2], ], [[0, 0, 2], ], [[0, 0, 1], ], [[0, 0], [1, 2]], [[0, 1], [0, 2]], [[0, 2], [0, 1]], [, , [1, 2]], [, [0, 2], ], [, [0, 1], ], [[0, 2], , ], [[0, 1], , ], [[0, 0], , ], [, , , ]]


I have the following code to generate a post poset out of JJ in which the order is given by the refinement.

sage: elms = JJ
sage: def fcn(A, B):
....:     if len(A) != len(B) + 1:
....:         return False
....:     for a in A:
....:         if not any(set(a).issubset(b) for b in B):
....:             return False
....:     return True
sage: Poset((elms, fcn), cover_relations=True)


I usually work with sets and my input JJ is usually a set partition and the program works well.

Now, I am working with multisets (like [0,1,1,2,2,2,2]) and multi partitions (like [,[1,2],[1,2],[2,2]). By a multi-partition, I mean a partition in which each part is a multiset and parts can be repeated in a partition. So basically it is a list of lists. We cannot implement this using sets. So I have code to generate all such partitions in sage using lists.

Now, the set of all multi partitions (which is implements as a list) of a multiset (which is also implemented as a list) has to be fed as an input to the above code to generate the poset. But the above code throws the error

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-42-993ec557f50c> in <module>()
7             return False
8     return True
----> 9 Poset((elms, fcn), cover_relations=True)

/Applications/SageMath-8.1.app/Contents/Resources/sage/local/lib/python2.7/site-packages/sage/combinat/posets/posets.pyc in Poset(data, element_labels, cover_relations, linear_extension, category, facade, key)
674                         raise TypeError("not a list of relations")
675             D = DiGraph()
--> 676             D.add_vertices(elements)
677             D.add_edges(relations, loops=False)
678         elif len(data) > 2:

/Applications/SageMath-8.1.app/Contents/Resources/sage/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in add_vertices(self, vertices)
9602
9603         """
-> 9604         return self._backend.add_vertices(vertices)
9605
9606     def delete_vertex(self, vertex, in_order=False):

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.add_vertices (build/cythonized/sage/graphs/base/c_graph.c:14020)()
1504         for v in vertices:
1505             if v is not None:
-> 1506                 self.add_vertex(v)
1507             else:
1508                 nones += 1

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.add_vertex (build/cythonized/sage/graphs/base/c_graph.c:13856)()
1454             retval = name
1455
-> 1456         self.check_labelled_vertex(name,
1457                      (self._directed and
1458                       self._cg_rev is not None)) # this will add the vertex

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.check_labelled_vertex (build/cythonized/sage/graphs/base/c_graph.c:12310)()
1153         cdef CGraph G_rev = self._cg_rev
1154
-> 1155         cdef int u_int = self.get_vertex(u)
1156         if u_int != -1:
1157             if not bitset_in(G.active_vertices, u_int):

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.get_vertex (build/cythonized/sage/graphs/base/c_graph.c:11902)()
1120         cdef CGraph G = self._cg
1121         cdef long u_long
-> 1122         if u in vertex_ints:
1123             return vertex_ints[u]
1124         try:

TypeError: unhashable type: 'list'


How to overcome this issue? Kindly help me with this. Thank you.

### TypeError: unhashable type: 'list' in constructing poset

I have the following code to generate all multiset partitions of a given multiset (list).

k0 = 2
k1 = 1
k2 = 1
#k3 = 1
l = k0+k1+k2 #+k3

L = [ ]
for i in range(k0) :
L.append(0)
for i in range(k1) :
L.append(1)
for i in range(k2) :
L.append(2)
print L
#L = [0,1,2,3]
LL = list(range(len(L)))
print LL
P = SetPartitions(LL)
P = list(P)

J = []
for p in P :
J.append([])
aa = P.index(p)
for i in p :
J[aa].append(list(i))
#print J

JJ =[]
for j in J :
JJ.append([])
bb = J.index(j)
for i in j :
JJ[bb].append([])
aa = j.index(i)
for k in i :
#print aa
JJ[bb][aa].append(L[k])
print JJ


The above code gives me the following output

[0, 0, 1, 2]
[0, 1, 2, 3]
[[[0, 0, 1, 2]], [, [0, 1, 2]], [[0, 1, 2], ], [[0, 0, 2], ], [[0, 0, 1], ], [[0, 0], [1, 2]], [[0, 1], [0, 2]], [[0, 2], [0, 1]], [, , [1, 2]], [, [0, 2], ], [, [0, 1], ], [[0, 2], , ], [[0, 1], , ], [[0, 0], , ], [, , , ]]


I have the following code to generate a poset out of JJ in which the order is given by the refinement.

sage: elms = JJ
sage: def fcn(A, B):
....:     if len(A) != len(B) + 1:
....:         return False
....:     for a in A:
....:         if not any(set(a).issubset(b) for b in B):
....:             return False
....:     return True
sage: Poset((elms, fcn), cover_relations=True)


I usually work with sets and my input JJ is usually a set partition and the program works well.

Now, I am working with multisets (like [0,1,1,2,2,2,2]) and multi partitions (like [,[1,2],[1,2],[2,2]). By a multi-partition, I mean a partition in which each part is a multiset and parts can be repeated in a partition. So basically it is a list of lists. We cannot implement this using sets. So I have code codes given above to generate all such partitions in sage using lists.

Now, the set of all multi partitions JJ (which is implements as a list) of a multiset (which is also implemented as a list) has to be fed as an input to the above code to generate the poset. But the above code throws the error

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-42-993ec557f50c> in <module>()
7             return False
8     return True
----> 9 Poset((elms, fcn), cover_relations=True)

/Applications/SageMath-8.1.app/Contents/Resources/sage/local/lib/python2.7/site-packages/sage/combinat/posets/posets.pyc in Poset(data, element_labels, cover_relations, linear_extension, category, facade, key)
674                         raise TypeError("not a list of relations")
675             D = DiGraph()
--> 676             D.add_vertices(elements)
677             D.add_edges(relations, loops=False)
678         elif len(data) > 2:

/Applications/SageMath-8.1.app/Contents/Resources/sage/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in add_vertices(self, vertices)
9602
9603         """
-> 9604         return self._backend.add_vertices(vertices)
9605
9606     def delete_vertex(self, vertex, in_order=False):

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.add_vertices (build/cythonized/sage/graphs/base/c_graph.c:14020)()
1504         for v in vertices:
1505             if v is not None:
-> 1506                 self.add_vertex(v)
1507             else:
1508                 nones += 1

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.add_vertex (build/cythonized/sage/graphs/base/c_graph.c:13856)()
1454             retval = name
1455
-> 1456         self.check_labelled_vertex(name,
1457                      (self._directed and
1458                       self._cg_rev is not None)) # this will add the vertex

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.check_labelled_vertex (build/cythonized/sage/graphs/base/c_graph.c:12310)()
1153         cdef CGraph G_rev = self._cg_rev
1154
-> 1155         cdef int u_int = self.get_vertex(u)
1156         if u_int != -1:
1157             if not bitset_in(G.active_vertices, u_int):

/Applications/SageMath-8.1.app/Contents/Resources/sage/src/sage/graphs/base/c_graph.pyx in sage.graphs.base.c_graph.CGraphBackend.get_vertex (build/cythonized/sage/graphs/base/c_graph.c:11902)()
1120         cdef CGraph G = self._cg
1121         cdef long u_long
-> 1122         if u in vertex_ints:
1123             return vertex_ints[u]
1124         try:

TypeError: unhashable type: 'list'


How to overcome this issue? Kindly help me with this. Thank you.