{"action":"created","issue":{"url":"https://api.github.com/repos/JuliaLang/julia/issues/10117","labels_url":"https://api.github.com/repos/JuliaLang/julia/issues/10117/labels{/name}","comments_url":"https://api.github.com/repos/JuliaLang/julia/issues/10117/comments","events_url":"https://api.github.com/repos/JuliaLang/julia/issues/10117/events","html_url":"https://github.com/JuliaLang/julia/pull/10117","id":56928311,"number":10117,"title":"RFC: CHOLMOD makeover","user":{"login":"andreasnoack","id":505001,"avatar_url":"https://avatars.githubusercontent.com/u/505001?v=3","gravatar_id":"","url":"https://api.github.com/users/andreasnoack","html_url":"https://github.com/andreasnoack","followers_url":"https://api.github.com/users/andreasnoack/followers","following_url":"https://api.github.com/users/andreasnoack/following{/other_user}","gists_url":"https://api.github.com/users/andreasnoack/gists{/gist_id}","starred_url":"https://api.github.com/users/andreasnoack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andreasnoack/subscriptions","organizations_url":"https://api.github.com/users/andreasnoack/orgs","repos_url":"https://api.github.com/users/andreasnoack/repos","events_url":"https://api.github.com/users/andreasnoack/events{/privacy}","received_events_url":"https://api.github.com/users/andreasnoack/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/JuliaLang/julia/labels/sparse","name":"sparse","color":"fad8c7"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":32,"created_at":"2015-02-07T22:14:59Z","updated_at":"2015-02-09T17:49:16Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/JuliaLang/julia/pulls/10117","html_url":"https://github.com/JuliaLang/julia/pull/10117","diff_url":"https://github.com/JuliaLang/julia/pull/10117.diff","patch_url":"https://github.com/JuliaLang/julia/pull/10117.patch"},"body":"This was initiated as an attempt to fix #3295 and with the changes in this pr makes it possible to write\r\n```julia\r\n(99340,99340)\r\n\r\njulia> nnz(A)\r\n954163\r\n\r\njulia> b = ones(size(A, 1));\r\n\r\njulia> @time A\\b;\r\nelapsed time: 1.068284149 seconds (13 MB allocated)\r\n```\r\nwhich is comparable to MATLAB on my computer. MATLAB is a little faster, but their versions of the sparse solvers could use a different optimization library for the symbolic part and MATLAB also uses MKL.\r\n\r\nTo make this work, I had to wrap `cholmod_symmetry` which is an effective function for checking symmetry/Hermitianity of a matrix. The method had a tiny bug, which Tim Davis was kind enough to fix promptly, so I'm also bumping the SuiteSparse version.\r\n\r\nHowever, it ended up with quite a bit more:\r\n\r\n- Separate LDLt and LLt factorizations into `cholfact` and `ldltfact`.\r\n- Remove support for factorizing `AAt` when passing non-symmetric/Hermitian matrix\r\n- Let CHOLMOD handle memory allocation instead of Julia. Many CHOLMOD functions make changes to the allocated memory, so in the end it wasn't feasible to allocate the memory as Julia vectors.\r\n- Test coverage of CHOLMOD should now be almost 100 pct.\r\n- Renaming: `Cholmod` has been removed from most names as it is redundant in a module named `CHOLMOD`\r\n- Fix the method for reading to matrix market files to work for complex and all integer types. We might want to use this for an exported method to ease the import of MM files.\r\n- Use `Symmetric{Tv,SparseMatrixCSC{Tv,Ti}}` and `Hermitian{Tv,SparseMatrixCSC{Tv,Ti}}` for symmetric/Hermitian sparse matrices. This makes it possible to work with symmetric/Hermitian sparse matrices where only one triangle is stored as is the case for MM files.\r\n- `Triplet` type and methods have been removed as it they were unexported, untested, and the functionality is covered in native Julia\r\n- Add `show(Factor)` method that takes an `io` argument\r\n- Remove other untested and unused methods\r\n\r\nI'd like to hear what @dmbates has to say on these changes. I've might broken some functionality used down the stream (beyond the obvious from the name changes). Also cc: @ViralBShah, @tkelman, @acroy\r\n\r\nUPDATE: I forgot a couple of changes which are now added to the list"},"comment":{"url":"https://api.github.com/repos/JuliaLang/julia/issues/comments/73554874","html_url":"https://github.com/JuliaLang/julia/pull/10117#issuecomment-73554874","issue_url":"https://api.github.com/repos/JuliaLang/julia/issues/10117","id":73554874,"user":{"login":"dmbates","id":371258,"avatar_url":"https://avatars.githubusercontent.com/u/371258?v=3","gravatar_id":"","url":"https://api.github.com/users/dmbates","html_url":"https://github.com/dmbates","followers_url":"https://api.github.com/users/dmbates/followers","following_url":"https://api.github.com/users/dmbates/following{/other_user}","gists_url":"https://api.github.com/users/dmbates/gists{/gist_id}","starred_url":"https://api.github.com/users/dmbates/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmbates/subscriptions","organizations_url":"https://api.github.com/users/dmbates/orgs","repos_url":"https://api.github.com/users/dmbates/repos","events_url":"https://api.github.com/users/dmbates/events{/privacy}","received_events_url":"https://api.github.com/users/dmbates/received_events","type":"User","site_admin":false},"created_at":"2015-02-09T17:49:15Z","updated_at":"2015-02-09T17:49:15Z","body":"In the `update!` method for `Factor` the `is_ll` field is examined but `cm[common_final_ll]` is only set when `is_ll` is true.  I think it needs to be reset according to the `is_ll` field in either case doesn't it?  My recollection is rusty but I think the value of `common_final_ll` overrides the value in the Factor struct during an update operation.  In any case I can't see why the `cholmod_common` field would need to be reset in one case but not in the other."}}