56549a9 | Gregory Jefferis | 09 December 2013, 10:45:38 UTC | Test as many amiramesh SkeltonGraph files as we can find on my machine! | 12 December 2013, 06:34:08 UTC |
41c24ba | Gregory Jefferis | 09 December 2013, 10:41:58 UTC | small fixes (inc docs/tests) for is.amiramesh and amiratype | 12 December 2013, 06:34:08 UTC |
5cfdb64 | Gregory Jefferis | 09 December 2013, 10:01:25 UTC | test functions to verify that amira neurons are still read correctly | 12 December 2013, 06:34:08 UTC |
32df63f | Gregory Jefferis | 09 December 2013, 09:50:03 UTC | new functions to test files for amiramesh / content | 12 December 2013, 06:34:08 UTC |
b4146b6 | Gregory Jefferis | 07 December 2013, 01:31:57 UTC | Teach ParseAM3DToNeuron to use either method to parse am3d neuron | 12 December 2013, 06:34:07 UTC |
0da436c | Gregory Jefferis | 07 December 2013, 01:22:22 UTC | ADD: CoreNeuronFromAmiraSkel() using igraph * this is functional but needs more testing | 12 December 2013, 06:34:07 UTC |
2e509b8 | Gregory Jefferis | 12 December 2013, 06:33:44 UTC | Add segmentgraph() to generate a simplified segment graph | 12 December 2013, 06:33:44 UTC |
6f62972 | Gregory Jefferis | 09 December 2013, 11:00:44 UTC | use first endpoint rather than first point when no origin specified * usually the first point is an endpoint but sometimes not and using an endpoint as the origin always makes more sense. * NB first means first in raw vertex id sequence | 09 December 2013, 11:00:44 UTC |
9c37090 | Gregory Jefferis | 09 December 2013, 10:17:58 UTC | Merge branch 'feature/igraph-subtrees' * feature/igraph-subtrees: Teach graph2seglist to cope with undirected graphs comprehensive tests for CoreNeuronFromGraph sort remaining subgraphs by descending length when origin specified Fix CoreNeuronFromGraph for subgraphs when origin specified Fix CoreNeuronFromGraph interpretation of origin Add additional comprehensive tests for graph2seglist Add test for trifurcation Fully implement CoreNeuronFromGraph for multiple subgraphs factor out graph.nodes and make endpoints functions FIX graph2seglist when no explicit origin specified and multiple subgraphs graph2seglist now returns a list with a single point for floating points Reimplement CoreNeuronFromGraph using graph2seglist Well-behaved graph2seglist() for fully-connected graphs Add neurongraph() functions designed to construct well-behaved graph change test neuron data to avoid overlapping points FIXMEs | 09 December 2013, 10:17:58 UTC |
27fd51b | Gregory Jefferis | 06 December 2013, 23:38:10 UTC | Teach graph2seglist to cope with undirected graphs * at the expense of not being able to check for cycles in those undirected graphs | 09 December 2013, 10:17:41 UTC |
06e9e2a | Gregory Jefferis | 06 December 2013, 19:54:19 UTC | comprehensive tests for CoreNeuronFromGraph | 09 December 2013, 10:17:41 UTC |
032fea4 | Gregory Jefferis | 06 December 2013, 19:54:01 UTC | sort remaining subgraphs by descending length when origin specified * so that we get an identical result to situation when no origin was specified | 09 December 2013, 10:17:41 UTC |
f9daa52 | Gregory Jefferis | 06 December 2013, 19:45:48 UTC | Fix CoreNeuronFromGraph for subgraphs when origin specified | 09 December 2013, 10:17:41 UTC |
2a05c29 | Gregory Jefferis | 06 December 2013, 19:33:26 UTC | Fix CoreNeuronFromGraph interpretation of origin | 09 December 2013, 10:17:41 UTC |
8cc9054 | Gregory Jefferis | 06 December 2013, 19:04:21 UTC | Add additional comprehensive tests for graph2seglist | 09 December 2013, 10:17:41 UTC |
c3b0202 | Gregory Jefferis | 06 December 2013, 18:27:36 UTC | Add test for trifurcation | 09 December 2013, 10:17:41 UTC |
35fc900 | Gregory Jefferis | 06 December 2013, 14:45:16 UTC | Fully implement CoreNeuronFromGraph for multiple subgraphs | 09 December 2013, 10:17:41 UTC |
50bfb78 | Gregory Jefferis | 06 December 2013, 14:04:03 UTC | factor out graph.nodes and make endpoints functions * add some more tests | 09 December 2013, 10:17:41 UTC |
4276be9 | Gregory Jefferis | 06 December 2013, 14:01:51 UTC | FIX graph2seglist when no explicit origin specified and multiple subgraphs * internally we need the raw vertex id but rootpoints returns the original vertex id by default. | 09 December 2013, 10:17:41 UTC |
ec1e007 | Gregory Jefferis | 06 December 2013, 13:42:39 UTC | graph2seglist now returns a list with a single point for floating points * also test for this behaviour | 09 December 2013, 10:17:40 UTC |
484c158 | Gregory Jefferis | 06 December 2013, 11:42:37 UTC | Reimplement CoreNeuronFromGraph using graph2seglist * still doesn't work for graphs with multiple subgraphs * also removed dfs parameter meaning that .... * RerootNeuron also had to be changed slightly | 09 December 2013, 10:17:40 UTC |
d4dbfe3 | Gregory Jefferis | 06 December 2013, 09:20:41 UTC | Well-behaved graph2seglist() for fully-connected graphs * and appropriate tests | 09 December 2013, 10:17:40 UTC |
fcea916 | Gregory Jefferis | 05 December 2013, 18:38:40 UTC | Add neurongraph() functions designed to construct well-behaved graph * also neurongraph.swc() | 09 December 2013, 10:17:40 UTC |
2147564 | Gregory Jefferis | 05 December 2013, 18:07:00 UTC | change test neuron data to avoid overlapping points | 09 December 2013, 10:17:40 UTC |
e7b34bf | Gregory Jefferis | 20 November 2013, 09:47:08 UTC | FIXMEs | 09 December 2013, 10:17:40 UTC |
1640de0 | Gregory Jefferis | 06 December 2013, 14:07:33 UTC | Add missing legacy test registration for dof2mat | 09 December 2013, 10:17:04 UTC |
51e19f0 | Gregory Jefferis | 05 December 2013, 19:47:17 UTC | fix small code duplication in read.zlib * readBin on raw data wasn't doing anything * and add test for decompression of raw vector | 09 December 2013, 10:17:04 UTC |
ad66193 | Gregory Jefferis | 09 December 2013, 10:15:39 UTC | Merge branch 'fix/cmtkaffinecompose' * fix/cmtkaffinecompose: (32 commits) Add test.CMTKRegFromAmira More cleanup in Affine.R Merge ComposeAffineFromIGSParams.named into ComposeAffineFromIGSParams More work to handle versions for CMTK registrations OBS: Remove incomplete FindTorstenFromAffine() fix bug in names introduced in ReadIGSRegistration Teach IGSTypedStream functions to handle versions Test for CMTK legacy decomposition Add option to Decompose legacy CMTK registrations Check CMTK version and omit some tests when <=2.4.0 Add tests including mirroring along x,y,z axes New round trip function starting (and finishing) with affine matrix Update direct tests of ComposeAffineFromIGSParams and DecomposeAffineToIGSParams minor code tidying in DecomposeAffineToIGSParams() Fix DecomposeAffineToIGSParams() - matches svn 5050 Fix ComposeAffineFromIGSParams.named - matches svn r5050 Use cmtk.dof2mat/mat2dof by default for tests Tidying up affine tests Add test for pure R Affine Decomposition Simple tests for cmtk.(mat2dof|dof2mat) ... | 09 December 2013, 10:15:39 UTC |
db414d7 | Gregory Jefferis | 04 December 2013, 21:15:01 UTC | Add test.CMTKRegFromAmira | 09 December 2013, 10:13:03 UTC |
ddf95fe | Gregory Jefferis | 04 December 2013, 20:58:03 UTC | More cleanup in Affine.R | 09 December 2013, 10:13:02 UTC |
a35004d | Gregory Jefferis | 04 December 2013, 20:37:56 UTC | Merge ComposeAffineFromIGSParams.named into ComposeAffineFromIGSParams * not much point in having these two separate functions | 09 December 2013, 10:13:02 UTC |
1003192 | Gregory Jefferis | 04 December 2013, 20:36:22 UTC | More work to handle versions for CMTK registrations * will always write registrations as v2.4 * should keep a version attribute when reading from registration file * will assume v2.4 when converting affine to params | 09 December 2013, 10:13:02 UTC |
5a18c05 | Gregory Jefferis | 04 December 2013, 20:17:41 UTC | OBS: Remove incomplete FindTorstenFromAffine() | 09 December 2013, 10:13:02 UTC |
48818fd | Gregory Jefferis | 02 December 2013, 22:10:51 UTC | fix bug in names introduced in ReadIGSRegistration * was overwriting names with mostattributes<- call | 09 December 2013, 10:13:02 UTC |
bd2c587 | Gregory Jefferis | 02 December 2013, 19:00:13 UTC | Teach IGSTypedStream functions to handle versions | 09 December 2013, 10:13:02 UTC |
003485c | Gregory Jefferis | 02 December 2013, 14:11:53 UTC | Test for CMTK legacy decomposition | 09 December 2013, 10:13:02 UTC |
7513e7d | Gregory Jefferis | 02 December 2013, 13:03:33 UTC | Add option to Decompose legacy CMTK registrations i.e. those marked as TYPEDSTREAM 1.1 | 09 December 2013, 10:13:02 UTC |
f2e9e76 | Gregory Jefferis | 02 December 2013, 11:05:24 UTC | Check CMTK version and omit some tests when <=2.4.0 * No point in giving a large number of failures when CMTK is not up to date | 09 December 2013, 10:13:02 UTC |
c8d6ac1 | Gregory Jefferis | 02 December 2013, 01:51:41 UTC | Add tests including mirroring along x,y,z axes | 09 December 2013, 10:13:01 UTC |
a526e78 | Gregory Jefferis | 02 December 2013, 01:51:21 UTC | New round trip function starting (and finishing) with affine matrix * this makes more sense because many different 15 dof sets can map onto a single homogeneous affine matrix * both because of different rotation centres (obvious) and for more subtle reasons like the equivalence of two flips to a rotation, or the equivalence of a -180 to +180 rotation | 09 December 2013, 10:13:01 UTC |
00cba79 | Gregory Jefferis | 02 December 2013, 01:48:51 UTC | Update direct tests of ComposeAffineFromIGSParams and DecomposeAffineToIGSParams Needed new _correct_ baseline date for shear cases | 09 December 2013, 10:13:01 UTC |
98e0c6d | Gregory Jefferis | 01 December 2013, 23:46:05 UTC | minor code tidying in DecomposeAffineToIGSParams() * no change in logic | 09 December 2013, 10:13:01 UTC |
ba19526 | Gregory Jefferis | 01 December 2013, 23:42:53 UTC | Fix DecomposeAffineToIGSParams() - matches svn 5050 * However, have noticed that this cannot cope with a flip on anything other than the X axis. | 09 December 2013, 10:13:01 UTC |
03a9855 | Gregory Jefferis | 01 December 2013, 17:25:33 UTC | Fix ComposeAffineFromIGSParams.named - matches svn r5050 * Also slightly harden the comparative unit test (which now passes) | 09 December 2013, 10:13:01 UTC |
218648f | Gregory Jefferis | 01 December 2013, 16:35:41 UTC | Use cmtk.dof2mat/mat2dof by default for tests * this now works with CMTK v2.4.0 svn >= 5050 | 09 December 2013, 10:13:01 UTC |
0ccd4f0 | Gregory Jefferis | 01 December 2013, 16:33:37 UTC | Tidying up affine tests | 09 December 2013, 10:13:01 UTC |
55620db | Gregory Jefferis | 01 December 2013, 16:33:00 UTC | Add test for pure R Affine Decomposition doesn't pass yet | 09 December 2013, 10:13:00 UTC |
e7ca0be | Gregory Jefferis | 01 December 2013, 16:19:50 UTC | Simple tests for cmtk.(mat2dof|dof2mat) * includes registration .list checked with dof2mat command line tool from CMTK 2.4.0svn | 09 December 2013, 10:13:00 UTC |
8b41140 | Gregory Jefferis | 01 December 2013, 16:13:28 UTC | Retire HomogenousAffineFromCMTKParams() * subsumed within cmtk.dof2mat | 09 December 2013, 10:13:00 UTC |
2aabff7 | Gregory Jefferis | 01 December 2013, 16:12:42 UTC | Doc HomogenousAffineFromCMTKParams() | 09 December 2013, 10:13:00 UTC |
85774c1 | Gregory Jefferis | 01 December 2013, 16:11:28 UTC | Make write.cmtkreg write version 2.4 TYPEDSTREAM by default | 09 December 2013, 10:13:00 UTC |
a1807d3 | Gregory Jefferis | 01 December 2013, 16:04:54 UTC | Teach cmtk.mat2dof to accept matrix input * also add version argument | 09 December 2013, 10:13:00 UTC |
ed3556c | Gregory Jefferis | 01 December 2013, 15:54:14 UTC | Add optional centre parameter to cmtk.mat2dof * also version | 09 December 2013, 10:13:00 UTC |
af930d5 | Gregory Jefferis | 29 November 2013, 22:38:46 UTC | Fix: cmtk.mat2dof() was not honouring transpose() | 09 December 2013, 10:13:00 UTC |
b0f6a7c | Gregory Jefferis | 25 November 2013, 09:33:02 UTC | Make sure cmtk.dof2mat returns matrix visibly | 09 December 2013, 10:12:59 UTC |
a040e85 | Gregory Jefferis | 25 November 2013, 00:03:21 UTC | New tests of CMTK/affine functions confirm problem in shear calculation * cmtk.dof2mat / cmtk.mat2dof round trips work with 9 dof affine transforms but not ones with shears. * the errors are consistent between my ComposeAffineFromIGSParams and DecomposeAffineToIGSParams functions and cmtk.dof2mat, cmtk.mat2dof * this suggests that the problem in handling shears has not gone away even in modern CMTK. | 09 December 2013, 10:12:59 UTC |
8bc673b | Gregory Jefferis | 24 November 2013, 23:16:15 UTC | Add new functions to use the CMTK floating image notation * early IGS registration files used model_study rather than floating_study. Since this gave the registration in the forward direction model->template this resulted in an implicit inversion by CMTK tools that normally need the reverse registration used for volume reformatting. | 09 December 2013, 10:12:59 UTC |
9261fda | Gregory Jefferis | 24 November 2013, 11:47:09 UTC | HomogenousAffineFromCMTK -> HomogenousAffineFromCMTKParams * ie input and output in memory (even if it uses a temporary file with dof2mat) | 09 December 2013, 10:12:59 UTC |
8d3f2d5 | Gregory Jefferis | 24 November 2013, 11:45:29 UTC | Add cmtk.dof2mat and cmtk.mat2dof to wrap cmtk commandline tools | 09 December 2013, 10:12:59 UTC |
807aac6 | Gregory Jefferis | 23 November 2013, 15:27:17 UTC | fix path to run runitAffine | 09 December 2013, 10:12:59 UTC |
b82a87c | Gregory Jefferis | 01 December 2013, 12:39:59 UTC | Minor adjustments to runitGeneralImageProcessing.R | 09 December 2013, 10:11:35 UTC |
2f23c10 | Gregory Jefferis | 01 December 2013, 12:07:48 UTC | Fix handling of Entropy column for cmtk statistics v>=2.3.1 * also simplify reading of table * improve docs | 09 December 2013, 10:11:35 UTC |
48db1ee | Gregory Jefferis | 09 December 2013, 10:08:50 UTC | Merge branch 'fix/hxzip' * fix/hxzip: Stop tracking java Read|WriteHxZipData class Allow runAllTests to be called as script Replace DecodeHxZip and EncodeHxZip with read.zlib and write.zlib Faster test for reading hxzip data Make new implementation of hxzip decoding the default New in memory, base R zlib compression/decompression Add round trip test for Amira hxzip data | 09 December 2013, 10:08:50 UTC |
8c67ca8 | Gregory Jefferis | 29 November 2013, 01:42:32 UTC | Stop tracking java Read|WriteHxZipData class * obsolete now that I have a base R way of doing this | 29 November 2013, 01:42:32 UTC |
ebe315e | Gregory Jefferis | 29 November 2013, 01:40:02 UTC | Allow runAllTests to be called as script | 29 November 2013, 01:40:02 UTC |
9734edd | Gregory Jefferis | 28 November 2013, 17:09:16 UTC | Replace DecodeHxZip and EncodeHxZip with read.zlib and write.zlib * these functions depend solely on base R (i.e. not java code) | 28 November 2013, 17:09:16 UTC |
81da154 | Gregory Jefferis | 28 November 2013, 09:56:51 UTC | Faster test for reading hxzip data * tabulate is _much_ faster than table | 28 November 2013, 09:56:51 UTC |
86601b9 | Gregory Jefferis | 28 November 2013, 09:56:29 UTC | Make new implementation of hxzip decoding the default | 28 November 2013, 09:56:29 UTC |
18c99f2 | Gregory Jefferis | 28 November 2013, 09:47:23 UTC | New in memory, base R zlib compression/decompression | 28 November 2013, 09:47:23 UTC |
0e83de6 | Gregory Jefferis | 28 November 2013, 09:46:10 UTC | Add round trip test for Amira hxzip data * fails for existing java based implementation | 28 November 2013, 09:46:10 UTC |
841b16e | Gregory Jefferis | 20 November 2013, 22:10:00 UTC | Fix (+test) for long standing bug in DirectPotentialSynapses * apply was being used with the expectation that it would return a list. This was not the case when segswithin returned the same number of segments from b for each segment in matrix a * the code assumed that matrix a had rownames It is still not exactly beautiful code, but it should now work for the corner cases that I can envisage. | 20 November 2013, 22:10:00 UTC |
8ac4c29 | Gregory Jefferis | 20 November 2013, 11:31:06 UTC | Fix bug in is.nrrd and add tests * when trusting suffix | 20 November 2013, 11:31:06 UTC |
7d08306 | Gregory Jefferis | 20 November 2013, 11:10:42 UTC | Docs for Read3DDensityFromNrrd This includes changes from an outdated branch 'roxygen' | 20 November 2013, 11:10:42 UTC |
0c28654 | Gregory Jefferis | 19 November 2013, 21:45:08 UTC | check rootpoints will return 2 roots | 19 November 2013, 21:45:08 UTC |
2b57cbb | Gregory Jefferis | 19 November 2013, 21:19:39 UTC | fix (and test) for rootpoints.neuron * barfed when the neuron _didn't_ have multiple trees | 19 November 2013, 21:19:39 UTC |
7f069c6 | Gregory Jefferis | 19 November 2013, 21:18:54 UTC | doc: correct definition of prune in as.igraph.neuron | 19 November 2013, 21:18:54 UTC |
03b149d | Gregory Jefferis | 19 November 2013, 21:13:09 UTC | By default rootpoints now excludes isolated points | 19 November 2013, 21:13:09 UTC |
856cc02 | Gregory Jefferis | 19 November 2013, 19:08:01 UTC | Docs for rootpoints | 19 November 2013, 19:24:31 UTC |
2dd50df | Gregory Jefferis | 19 November 2013, 19:02:46 UTC | Add branchpoints.default() & rootpoints.default() * this means that you only need to define an as.igraph method for a new class and you will get branchpoints and rootpoints for free. | 19 November 2013, 19:24:01 UTC |
e76ea62 | Gregory Jefferis | 19 November 2013, 19:00:08 UTC | Make sure rootpoints/branchpoints come back as plain integers * vertex sequences have funny subscripting rules vs[1] is not the first vertex in the sequence but actually vertex 1 iff it is present in vs and empty otherwise | 19 November 2013, 19:00:08 UTC |
dd62e17 | Gregory Jefferis | 19 November 2013, 17:46:59 UTC | git:ignore rstudio files | 19 November 2013, 17:46:59 UTC |
b6e96fc | Ashley Manton | 15 November 2013, 09:03:39 UTC | skipRedraw argument for plot3d.neuronlist | 19 November 2013, 03:20:57 UTC |
4934068 | Ashley Manton | 19 November 2013, 03:19:42 UTC | Fix WithAllPoints and WithLine in plot3d.neuron | 19 November 2013, 03:19:42 UTC |
f8cb9dd | Ashley Manton | 15 November 2013, 17:48:18 UTC | fix a spurious warning in xyzmatriz<- | 15 November 2013, 17:48:18 UTC |
d01628d | Gregory Jefferis | 14 November 2013, 00:38:32 UTC | Merge branch 'directedgraph' * directedgraph: (29 commits) New function to make an igraph from a neuron type edgeless Missing doc Fix remaining tests for Longair data by providing correct point sequence Fix one of the tests for Longair tracing data - now that ParseSWC gives sensible ordering defensively change degree -> igraph::degree Quick test for CoreNeuronFromGraph Add equivalence test with real neuron for two as.igraph methods Tests for new as.igraph functionality SWC2Neuron will now use a DFS normalised SegList starting from root ADD CoreNeuronFromSWC() to parse SWC data using igraph intermediate functional versions of as.igraph.(neuron|igraph|swc) methods to get root and branchpoints for neurons and (directed) igraphs More consistent set of (Double)EdgeListFrom(Neuron|SWC) functions SegListFromFullGraph -> CoreNeuronFromGraph Teach RerootNeuron to cope with directed graphs Teach SegListFromFullGraph to cope with directed graphs use degree rather than neighborhood.size Add proper tests for RerootNeuron and for new as.igraph.neuron Fix bug introduced by minor refactoring of RerootNeuron Code tidying in GraphTheory.R ... | 14 November 2013, 00:38:32 UTC |
d648999 | Gregory Jefferis | 13 November 2013, 18:34:03 UTC | New function to make an igraph from a neuron type edgeless * by default pruning vertices that were added implicitly but do not actually exist * ie if you have connections 1->3 3->4 etc and point #2 does not exist * igraph will make an unconnected point 2 in this circ. | 14 November 2013, 00:37:05 UTC |
b3047bd | Gregory Jefferis | 05 November 2013, 16:06:56 UTC | Missing doc | 14 November 2013, 00:37:05 UTC |
06771cf | Gregory Jefferis | 27 October 2013, 22:50:30 UTC | Fix remaining tests for Longair data by providing correct point sequence | 14 November 2013, 00:37:05 UTC |
b22e84a | Gregory Jefferis | 26 October 2013, 19:52:38 UTC | Fix one of the tests for Longair tracing data - now that ParseSWC gives sensible ordering | 14 November 2013, 00:37:05 UTC |
c95c7eb | Gregory Jefferis | 25 October 2013, 22:13:42 UTC | defensively change degree -> igraph::degree * masked by graph:degree * obviously won't be a problem in a package | 14 November 2013, 00:37:05 UTC |
1aba055 | Gregory Jefferis | 25 October 2013, 21:56:08 UTC | Quick test for CoreNeuronFromGraph | 14 November 2013, 00:37:05 UTC |
549ffca | Gregory Jefferis | 25 October 2013, 21:55:53 UTC | Add equivalence test with real neuron for two as.igraph methods | 14 November 2013, 00:37:05 UTC |
4890c5b | Gregory Jefferis | 25 October 2013, 21:47:53 UTC | Tests for new as.igraph functionality | 14 November 2013, 00:37:05 UTC |
9e0ca72 | Gregory Jefferis | 25 October 2013, 21:47:36 UTC | SWC2Neuron will now use a DFS normalised SegList starting from root * uses CoreNeuronFromSWC | 14 November 2013, 00:36:57 UTC |
f6bb78e | Gregory Jefferis | 25 October 2013, 21:38:34 UTC | ADD CoreNeuronFromSWC() to parse SWC data using igraph intermediate * nb this does not produce same result as ParseSWC which actually produces the reverse of the segment list one would expect | 14 November 2013, 00:36:57 UTC |
756e720 | Gregory Jefferis | 25 October 2013, 21:36:33 UTC | functional versions of as.igraph.(neuron|igraph|swc) * these make directed graphs by default | 14 November 2013, 00:36:57 UTC |
a44f380 | Gregory Jefferis | 25 October 2013, 21:34:31 UTC | methods to get root and branchpoints for neurons and (directed) igraphs | 14 November 2013, 00:36:57 UTC |
b523da1 | Gregory Jefferis | 25 October 2013, 21:29:12 UTC | More consistent set of (Double)EdgeListFrom(Neuron|SWC) functions | 14 November 2013, 00:36:57 UTC |
707f87a | Gregory Jefferis | 25 October 2013, 20:44:28 UTC | SegListFromFullGraph -> CoreNeuronFromGraph | 14 November 2013, 00:36:57 UTC |
76e9976 | Gregory Jefferis | 25 October 2013, 20:43:29 UTC | Teach RerootNeuron to cope with directed graphs | 14 November 2013, 00:36:57 UTC |