Skip to content

Commit b5d184b

Browse files
committed
WIP row_keys and column_keys
1 parent 485de3e commit b5d184b

File tree

2 files changed

+79
-30
lines changed

2 files changed

+79
-30
lines changed

src/sage/matrix/seymour_decomposition.pxd

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# sage_setup: distribution = sagemath-cmr
2-
from sage.libs.cmr.cmr cimport CMR_MATROID_DEC
2+
from sage.libs.cmr.cmr cimport CMR_MATROID_DEC, CMR_ELEMENT
33
from sage.structure.sage_object cimport SageObject
44

55

@@ -11,6 +11,9 @@ cdef class DecompositionNode(SageObject):
1111
cdef DecompositionNode _root # my CMR_MATROID_DEC is owned by this
1212

1313
cdef _set_dec(self, CMR_MATROID_DEC *dec, root)
14+
cdef _set_row_keys(self, row_keys):
15+
16+
# cdef _CMRelement_to_key(self, CMR_ELEMENT element)
1417

1518

1619
cdef create_DecompositionNode(CMR_MATROID_DEC *dec, root=?)

src/sage/matrix/seymour_decomposition.pyx

+75-29
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ from sage.structure.sage_object cimport SageObject
2323

2424
from .matrix_cmr_sparse cimport Matrix_cmr_chr_sparse, _sage_edge, _sage_graph
2525
from .matrix_space import MatrixSpace
26+
from .args cimport MatrixArgs
2627

2728

2829
cdef class DecompositionNode(SageObject):
@@ -40,6 +41,34 @@ cdef class DecompositionNode(SageObject):
4041
CMR_CALL(CMRmatroiddecFree(cmr, &self._dec))
4142
self._dec = dec
4243
self._root = root
44+
self._row_keys = None
45+
self._column_keys = None
46+
47+
cdef _set_row_keys(self, row_keys):
48+
# """
49+
# Set the row keys with consistency checking: if the
50+
# value was previously set, it must remain the same.
51+
# """
52+
# if self._row_keys is not None and self._row_keys != row_keys:
53+
# raise ValueError(f"inconsistent row keys: should be {self._row_keys} "
54+
# f"but got {row_keys}")
55+
# if row_keys is not None and self.nrows() != len(row_keys):
56+
# raise ValueError(f"inconsistent row keys: should be of cardinality {self.nrows()} "
57+
# f"but got {row_keys}")
58+
self._row_keys = row_keys
59+
60+
# def _set_column_keys(self, column_keys):
61+
# """
62+
# Set the column keys with consistency checking: if the
63+
# value was previously set, it must remain the same.
64+
# """
65+
# if self._column_keys is not None and self._column_keys != column_keys:
66+
# raise ValueError(f"inconsistent column keys: should be {self._column_keys} "
67+
# f"but got {column_keys}")
68+
# if column_keys is not None and self.ncols() != len(column_keys):
69+
# raise ValueError(f"inconsistent column keys: should be of cardinality {self.ncols()} "
70+
# f"but got {column_keys}")
71+
# self._column_keys = column_keys
4372

4473
def __dealloc__(self):
4574
self._set_dec(NULL, None)
@@ -90,24 +119,24 @@ cdef class DecompositionNode(SageObject):
90119
result._root = self._root or self
91120
return result
92121

93-
# def row_keys(self):
94-
# r"""
95-
# OUTPUT: a tuple or ``None``
96-
# """
97-
# return self._row_keys
122+
def row_keys(self):
123+
r"""
124+
OUTPUT: a tuple or ``None``
125+
"""
126+
return self._row_keys
98127

99-
# def column_keys(self):
100-
# r"""
101-
# OUTPUT: a tuple or ``None``
102-
# """
103-
# return self._column_keys
128+
def column_keys(self):
129+
r"""
130+
OUTPUT: a tuple or ``None``
131+
"""
132+
return self._column_keys
104133

105-
# @cached_method
106-
# def morphism(self):
107-
# r"""
134+
@cached_method
135+
def morphism(self):
136+
r"""
108137
109-
# """
110-
# return matrix(self.matrix(), row_keys=self.row_keys(), column_keys=self.column_keys())
138+
"""
139+
return MatrixArgs(self.matrix(), MatrixSpace(ZZ, self.row_keys(), self.column_keys()))
111140

112141

113142
@cached_method
@@ -284,22 +313,33 @@ cdef class DecompositionNode(SageObject):
284313
"""
285314
return CMRmatroiddecNumChildren(self._dec)
286315

316+
# cdef _CMRelement_to_key(self, CMR_ELEMENT element):
317+
# if not CMRelementIsValid(element):
318+
# raise ValueError('CMRelement index not valid')
319+
# if CMRelementIsRow(element):
320+
# return self.row_keys[CMRelementToRowIndex(element)]
321+
# else:
322+
# return self.column_keys[CMRelementToColumnIndex(element)]
323+
287324
def _create_child_node(self, index):
325+
return create_DecompositionNode(CMRmatroiddecChild(self._dec, index), root = self._root or self)
326+
# row_keys = self.row_keys()
327+
# column_keys = self.column_keys()
328+
# cdef CMR_MATROID_DEC *child_dec = CMRmatroiddecChild(self._dec, index)
329+
# cdef CMR_ELEMENT *parent_rows = CMRmatroiddecRowsParent(child_dec)
330+
# cdef CMR_ELEMENT *parent_columns = CMRmatroiddecColumnsParent(child_dec)
288331

289-
return create_DecompositionNode(CMRmatroiddecChild(self._dec, index),
290-
self._root or self)
291-
# row_keys = self.row_keys()
292-
# column_keys = self.column_keys()
293-
# if row_keys is not None and column_keys is not None:
294-
# cdef CMR_MATROID_DEC *child = CMRmatroiddecChild(self._dec, index)
295-
# cdef CMR_ELEMENT *parent_rows = CMRmatroiddecRowsParent(child)
296-
# cdef CMR_ELEMENT *parent_columns = CMRmatroiddecColumnsParent(child)
297-
# child_row_keys = tuple(row_keys[parent_rows[.....]])
332+
# child = create_DecompositionNode(child_dec, root = self._root or self)
298333

299-
# return create_DecompositionNode(,
300-
# self._root or self,
334+
# if row_keys is None or column_keys is None:
335+
# child_row_keys = tuple(self._CMRelement_to_key(parent_rows[i])
336+
# for i in range(child.nrows()))
337+
# child_column_keys = tuple(self._CMRelement_to_key(parent_columns[i])
338+
# for i in range(child.ncols()))
339+
# child._set_row_keys(child_row_keys)
340+
# child._set_column_keys(child_column_keys)
301341

302-
# )
342+
# return child
303343

304344

305345
@cached_method
@@ -600,6 +640,11 @@ cdef class TwoSumNode(SumNode):
600640

601641
cdef class ThreeSumNode(SumNode):
602642

643+
@cached_method
644+
def _children(self):
645+
return tuple(self._create_child_node(index)
646+
for index in range(self.nchildren()))
647+
603648
def is_distributed_ranks(self):
604649
r"""
605650
EXAMPLES::
@@ -825,6 +870,7 @@ cdef class SpecialLeafNode(DecompositionNode):
825870

826871

827872
cdef class PivotsNode(DecompositionNode):
873+
828874
def npivots(self):
829875
return CMRmatroiddecNumPivots(self._dec)
830876

@@ -905,8 +951,8 @@ cdef create_DecompositionNode(CMR_MATROID_DEC *dec, root=None, row_keys=None, co
905951
return None
906952
cdef DecompositionNode result = <DecompositionNode> _class(dec)()
907953
result._set_dec(dec, root)
908-
# result._row_keys = row_keys
909-
# result._column_keys = column_keys
954+
result._set_row_keys(row_keys)
955+
# result._set_column_keys(column_keys)
910956
return result
911957

912958

0 commit comments

Comments
 (0)