Started a new branch for testing a new design pattern, wherein sparse matrices are composed of a graph and some extra data, rather than inheriting behavior from an abstract class.
Little more work on graph data type. At the very least, this should be incorporated into the master branch and every sparse matrix type should consist of a graph + extra data, even if the old design pattern is being kept.
Added some provisions to increment or decrement the maximum degree of a graph when inserting or deleting an edge respectively. Also changed csr_graph to cs_graph since it can be both compressed sparse row or column.
Added a module for sparse graphs in the coordinate format
Hell with it, I'm nuking the whole thing and I'll copy over stuff from the master branch as need be.
Wrote and tested integer linked list data type, will write graph data type next which uses this next
Added a linked-list graph format along with some incomplete tests
Got rid of unnecessary implicit nones and took out unused variables that were causing warnings
Added some new linked list and graph operations and consolidated graph tests into a single file in the test/ directory.
Added a CSR matrix data type which uses cs_graph.
Fixed a bug in cs_graph and forgot to make ll_graph increment or decrement the number of edges when inserting or deleting edges.
Fixed some errors in the CSR matrix procedures and added matrix tests into the make test target
Added a test for matvec in the matrix_tests
Renamed some stuff. Also added a routine to convert graphs from one type to another. How should this be done for matrices? Could be a problem if val array has to be rearranged.
Started adding a C wrapper to graph data types, and I think I have the added level of indirection worked out. Need to make sure all data structures are associated ASAP; if at some point they are not, the garbage collector probably comes and sweeps them away before the next function call. For example when getting a c void pointer to a graph you have to allocate the graph to a concrete type right away.
Some changes to makefiles
Some basic graph operations now work with C
Changed cgraph_to_fgraph to a function instead of a subroutine
Added a function to find multiple edges of a graph at once
Added a meshes module so that I can start doing some non-trivial examples. Also moved graph conversion routine to a dedicated conversions module, which will also handle matrix format conversions later.