{"id":6439,"date":"2020-10-25T14:51:55","date_gmt":"2020-10-25T18:51:55","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=6439"},"modified":"2020-12-26T10:00:39","modified_gmt":"2020-12-26T15:00:39","slug":"notes-on-cr-and-west0479","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2020\/10\/25\/notes-on-cr-and-west0479\/","title":{"rendered":"Notes on CR and west0479"},"content":{"rendered":"\r\n<div class=\"content\"><!--introduction--><p>My post a few days ago, <a href=\"htts:\/\/blogs.mathworks.com\/cleve\/2020\/10\/23\/gil-strang-and-the-cr-matrix-factorization\/\">Gil Strang and the CR Matrix Factorization<\/a>, generated a lot of email. Here is the resulting follow-up to that post.<\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#eaac535d-22a3-4484-b83c-6089b0a0085f\">CR via backslash<\/a><\/li><li><a href=\"#28ac686b-3b77-45eb-a9e8-f6526801c0ff\">CR explained<\/a><\/li><li><a href=\"#4c86b6bc-975d-4d4d-b46a-8918c1363e8c\"><tt>west0479<\/tt> explained<\/a><\/li><li><a href=\"#6657e310-c84b-44d3-8b5c-14dcb424d5a5\"><tt>west0479<\/tt> iterated<\/a><\/li><li><a href=\"#1d550ee2-9bfd-450e-bb24-1534ecbf5e80\"><tt>west0479<\/tt> inspires<\/a><\/li><\/ul><\/div><h4>CR via backslash<a name=\"eaac535d-22a3-4484-b83c-6089b0a0085f\"><\/a><\/h4><p>Suppose <tt>A<\/tt> is rank deficient and that its leading columns, C, reveals its rank.  Then the factorization<\/p><p><tt>C*R = A<\/tt><\/p><p>is a systen of linear, overdetermined equations for the elements of <tt>R<\/tt>. How do you solve such systems?  \"Divide\" both sides by <tt>C<\/tt>.<\/p><p><tt>R = C\\A<\/tt><\/p><p>Backslash will find the least squares solution to this overdetermined system.  If <tt>A<\/tt> actually does have such a factorization, the least squares solution will be an exact solution and the resulting <tt>R<\/tt> will be in what we could call the \" <i>canonical<\/i> reduced row echelon form\" of <tt>A<\/tt>.  It will have the zero rows deleted and the identity matrix in the leading rows and columns.<\/p><p>When the elements of <tt>A<\/tt> are integers, you can remove the roundoff fuzz and recover them with<\/p><p>round(C*R)<\/p><p>If you don't know the rank, you can use backslash in a loop.<\/p><pre class=\"codeinput\">    type <span class=\"string\">cr_backslash<\/span>\r\n<\/pre><pre class=\"codeoutput\">\r\nfunction [C,R] = cr_backslash(A)\r\n    for r = 1:size(A,2)\r\n        C = A(:,1:r);\r\n        R = C\\A;\r\n        if round(C*R) == A\r\n            break\r\n        end\r\n    end\r\nend\r\n \r\n<\/pre><p>Here's an example<\/p><pre class=\"codeinput\">   A = [ 0  3 12  6\r\n         1  2  9  7\r\n         2  1  6  8\r\n         3  0  3  9 ];\r\n\r\n   [C,R] = cr_backslash(A)\r\n\r\n   round(C*R)\r\n<\/pre><pre class=\"codeoutput\">\r\nC =\r\n\r\n     0     3\r\n     1     2\r\n     2     1\r\n     3     0\r\n\r\n\r\nR =\r\n\r\n    1.0000    0.0000    1.0000    3.0000\r\n    0.0000    1.0000    4.0000    2.0000\r\n\r\n\r\nans =\r\n\r\n     0     3    12     6\r\n     1     2     9     7\r\n     2     1     6     8\r\n     3     0     3     9\r\n\r\n<\/pre><p><tt>cr_backslash<\/tt> works on the magic squares.<\/p><pre class=\"codeinput\">    small_fig\r\n    <span class=\"keyword\">for<\/span> n = 1:31\r\n        M = magic(n);\r\n        [C,R] = cr_backslash(M);\r\n        r(n) = size(C,2);\r\n    <span class=\"keyword\">end<\/span>\r\n    bar(r)\r\n    title(<span class=\"string\">'rank(magic(n))'<\/span>)\r\n    xlabel(<span class=\"string\">'n'<\/span>)\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/cr_notes_01.png\" alt=\"\"> <h4>CR explained<a name=\"28ac686b-3b77-45eb-a9e8-f6526801c0ff\"><\/a><\/h4><p>Iain Duff suggested that I offer more explanation for the plots of C and R generated by magic squares.<\/p><p>Here is code for <tt>magic(n)<\/tt> when <tt>n<\/tt> is a multiple of four.<\/p><pre>  J = repmat([0 1 1 0],n\/4)\r\n  K = (J' == J)\r\n  A = reshape(1:n^2,n,n)';\r\n  B = A;\r\n  A(K) = 0\r\n  B(~K) = 0;\r\n  B = rot90(B,2)\r\n  M = A + B<\/pre><p>Here is the output when <tt>n = 8<\/tt> with zeros replaced by dots. The pattern in <tt>K<\/tt> is responsible for the patterns we will see in plots of <tt>C<\/tt> and <tt>R<\/tt>.<\/p><pre>J =<\/pre><pre>   .     1     1     .     .     1     1     .<\/pre><pre>K =<\/pre><pre>   1     .     .     1     1     .     .     1\r\n   .     1     1     .     .     1     1     .\r\n   .     1     1     .     .     1     1     .\r\n   1     .     .     1     1     .     .     1\r\n   1     .     .     1     1     .     .     1\r\n   .     1     1     .     .     1     1     .\r\n   .     1     1     .     .     1     1     .\r\n   1     .     .     1     1     .     .     1<\/pre><pre>A =\r\n   .     2     3     .     .     6     7     .\r\n   9     .     .    12    13     .     .    16\r\n  17     .     .    20    21     .     .    24\r\n   .    26    27     .     .    30    31     .\r\n   .    34    35     .     .    38    39     .\r\n  41     .     .    44    45     .     .    48\r\n  49     .     .    52    53     .     .    56\r\n   .    58    59     .     .    62    63     .<\/pre><pre>B =<\/pre><pre>  64     .     .    61    60     .     .    57\r\n   .    55    54     .     .    51    50     .\r\n   .    47    46     .     .    43    42     .\r\n  40     .     .    37    36     .     .    33\r\n  32     .     .    29    28     .     .    25\r\n   .    23    22     .     .    19    18     .\r\n   .    15    14     .     .    11    10     .\r\n   8     .     .     5     4     .     .     1<\/pre><pre>M =<\/pre><pre>  64     2     3    61    60     6     7    57\r\n   9    55    54    12    13    51    50    16\r\n  17    47    46    20    21    43    42    24\r\n  40    26    27    37    36    30    31    33\r\n  32    34    35    29    28    38    39    25\r\n  41    23    22    44    45    19    18    48\r\n  49    15    14    52    53    11    10    56\r\n   8    58    59     5     4    62    63     1<\/pre><p><tt>C<\/tt> is the first three columns of <tt>M<\/tt> and <tt>R<\/tt> is the canonical reduced row echelon form of <tt>M<\/tt>.<\/p><pre>C =<\/pre><pre>  64     2     3\r\n   9    55    54\r\n  17    47    46\r\n  40    26    27\r\n  32    34    35\r\n  41    23    22\r\n  49    15    14\r\n   8    58    59<\/pre><p>R =<\/p><pre>   1     0     0     1     1     0     0     1\r\n   0     1     0     3     4    -3    -4     7\r\n   0     0     1    -3    -4     4     5    -7<\/pre><p>Columns 2 and 3 of <tt>C<\/tt> differ by +1 or -1, so in <tt>plot(C)<\/tt> they are on top of each other in the dark blue. Column 1, in blue green, complements the other two columns.<\/p><p>Row 1 of <tt>R<\/tt> is just 0 or 1; it is the light blue in <tt>plot(R )<\/tt>, The other two rows of <tt>R<\/tt> complement each other.<\/p><p>Here are the plots when <tt>n = 24<\/tt>.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/magiccr.png\" alt=\"\"> <\/p><h4><tt>west0479<\/tt> explained<a name=\"4c86b6bc-975d-4d4d-b46a-8918c1363e8c\"><\/a><\/h4><p>Art Westerberg retired from Carnegie Mellon in 2003, but that does't stop him from explaining the chemical engineering going on in <tt>west0479<\/tt>.<\/p><p>West0479 is from a model of a distillation column. Such a device is a stack of repeated units called trays. The fingerprints of these trays are all over a spy plot of <tt>west0479<\/tt>. The modeling equations for a tray only reference variables within the tray.  To create a column, one \"connects\" the outflow and inflow of fluid and vapor from each tray to the tray above it and the one below it. This creates the equations that have just two nonzero coefficients, a +1 or -1 and a smaller value.<\/p><p><tt>rref<\/tt> is <i>not<\/i> a sparse solver; it just plows across the matrix. When its drop tolerance, <tt>tol<\/tt>, is larger than one, the connections are ignored, resulting in an echelon form that is sparser than the original, and a lousy approximation.  When <tt>tol<\/tt> is smaller than one, the vital connections are included, but the fill-in effectively connects each tray to all the other trays.  This also results in a poor approximation.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/spy0479s.png\" alt=\"\"> <\/p><h4><tt>west0479<\/tt> iterated<a name=\"6657e310-c84b-44d3-8b5c-14dcb424d5a5\"><\/a><\/h4><p>John Gilbert tells us that today systems of equations involving <tt>west0479<\/tt> are readily solved by direct methods, but the eleven orders of magnitude variation in the coefficients causes iterative methods to struggle.<\/p><h4><tt>west0479<\/tt> inspires<a name=\"1d550ee2-9bfd-450e-bb24-1534ecbf5e80\"><\/a><\/h4><p>Tim Davis is inspired by <tt>west0479<\/tt>. A \"favicon\" is a small icon for a website.  See the one in the upper left hand corner of this old web page: <a href=\"https:\/\/www.cise.ufl.edu\/research\/sparse\/matrices\/links.html\">Tim's Matrices<\/a>. Be sure to see <a href=\"http:\/\/yifanhu.net\/GALLERY\/GRAPHS\/GIF_SMALL\/HB@west0479.html\">Tim's Gallery<\/a>, the Horror Matrix at <a href=\"https:\/\/people.engr.tamu.edu\/davis\/Poetry\/home.html\">Tim's Poetry<\/a>, and <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2014\/03\/03\/music-sparse-matrices\">Cleve's Corner<\/a>.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_34ae481d950d4cc8a5553c025fe0f29e() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='34ae481d950d4cc8a5553c025fe0f29e ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 34ae481d950d4cc8a5553c025fe0f29e';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2020 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_34ae481d950d4cc8a5553c025fe0f29e()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2020a<br><\/p><\/div><!--\r\n34ae481d950d4cc8a5553c025fe0f29e ##### SOURCE BEGIN #####\r\n%% Notes on CR and west0479\r\n% My post a few days ago,\r\n% <htts:\/\/blogs.mathworks.com\/cleve\/2020\/10\/23\/gil-strang-and-the-cr-matrix-factorization\/\r\n% Gil Strang and the CR Matrix Factorization>, generated a lot of email.\r\n% Here is the resulting follow-up to that post.\r\n\r\n%% CR via backslash\r\n% Suppose |A| is rank deficient and that its leading columns, C, reveals\r\n% its rank.  Then the factorization\r\n%\r\n% |C*R = A|\r\n%\r\n% is a systen of linear, overdetermined equations for the elements of |R|.\r\n% How do you solve such systems?  \"Divide\" both sides by |C|.\r\n%\r\n% |R = C\\A|\r\n%\r\n% Backslash will find the least squares solution to this overdetermined\r\n% system.  If |A| actually does have such a factorization, the least\r\n% squares solution will be an exact solution and the resulting\r\n% |R| will be in what we could call the \" _canonical_ reduced row echelon\r\n% form\" of |A|.  It will have the zero rows\r\n% deleted and the identity matrix in the leading rows and columns.\r\n\r\n%%\r\n% When the elements of |A| are integers, you can remove the roundoff fuzz\r\n% and recover them with\r\n%\r\n% round(C*R)\r\n%\r\n\r\n%%\r\n% If you don't know the rank, you can use backslash in a loop.\r\n\r\n    type cr_backslash\r\n \r\n%%\r\n% Here's an example\r\n\r\n   A = [ 0  3 12  6\r\n         1  2  9  7\r\n         2  1  6  8\r\n         3  0  3  9 ];\r\n  \r\n   [C,R] = cr_backslash(A)\r\n   \r\n   round(C*R)\r\n\r\n    \r\n%%\r\n% |cr_backslash| works on the magic squares.\r\n\r\n    small_fig\r\n    for n = 1:31\r\n        M = magic(n);\r\n        [C,R] = cr_backslash(M);\r\n        r(n) = size(C,2);\r\n    end\r\n    bar(r)\r\n    title('rank(magic(n))')\r\n    xlabel('n')\r\n    \r\n\r\n%% CR explained\r\n% Iain Duff suggested that I offer more explanation for the\r\n% plots of C and R generated by magic squares.\r\n%\r\n% Here is code for |magic(n)| when |n| is a multiple of four.\r\n%\r\n%    J = repmat([0 1 1 0],n\/4)\r\n%    K = (J' == J)\r\n%    A = reshape(1:n^2,n,n)';\r\n%    B = A;\r\n%    A(K) = 0\r\n%    B(~K) = 0;\r\n%    B = rot90(B,2)\r\n%    M = A + B\r\n%\r\n% Here is the output when |n = 8| with zeros replaced by dots.\r\n% The pattern in |K| is responsible for the patterns we will see in plots\r\n% of |C| and |R|.\r\n%\r\n%  J =\r\n%\r\n%     .     1     1     .     .     1     1     .\r\n%\r\n%  K =\r\n%\r\n%     1     .     .     1     1     .     .     1\r\n%     .     1     1     .     .     1     1     .\r\n%     .     1     1     .     .     1     1     .\r\n%     1     .     .     1     1     .     .     1\r\n%     1     .     .     1     1     .     .     1\r\n%     .     1     1     .     .     1     1     .\r\n%     .     1     1     .     .     1     1     .\r\n%     1     .     .     1     1     .     .     1\r\n%\r\n%  A =\r\n%     .     2     3     .     .     6     7     .\r\n%     9     .     .    12    13     .     .    16\r\n%    17     .     .    20    21     .     .    24\r\n%     .    26    27     .     .    30    31     .\r\n%     .    34    35     .     .    38    39     .\r\n%    41     .     .    44    45     .     .    48\r\n%    49     .     .    52    53     .     .    56\r\n%     .    58    59     .     .    62    63     .\r\n%\r\n%  B =\r\n%\r\n%    64     .     .    61    60     .     .    57\r\n%     .    55    54     .     .    51    50     .\r\n%     .    47    46     .     .    43    42     .\r\n%    40     .     .    37    36     .     .    33\r\n%    32     .     .    29    28     .     .    25\r\n%     .    23    22     .     .    19    18     .\r\n%     .    15    14     .     .    11    10     .\r\n%     8     .     .     5     4     .     .     1\r\n%\r\n%  M =\r\n%\r\n%    64     2     3    61    60     6     7    57\r\n%     9    55    54    12    13    51    50    16\r\n%    17    47    46    20    21    43    42    24\r\n%    40    26    27    37    36    30    31    33\r\n%    32    34    35    29    28    38    39    25\r\n%    41    23    22    44    45    19    18    48\r\n%    49    15    14    52    53    11    10    56\r\n%     8    58    59     5     4    62    63     1\r\n%\r\n% |C| is the first three columns of |M| and\r\n% |R| is the canonical reduced row echelon form of |M|.\r\n%\r\n%  C =\r\n%\r\n%    64     2     3\r\n%     9    55    54\r\n%    17    47    46\r\n%    40    26    27\r\n%    32    34    35\r\n%    41    23    22\r\n%    49    15    14\r\n%     8    58    59\r\n%\r\n% R =\r\n%\r\n%     1     0     0     1     1     0     0     1\r\n%     0     1     0     3     4    -3    -4     7\r\n%     0     0     1    -3    -4     4     5    -7\r\n%\r\n% Columns 2 and 3 of |C| differ by +1 or -1, so in |plot(C)|\r\n% they are on top of each other in the dark blue.\r\n% Column 1, in blue green, complements the other two columns.\r\n%\r\n% Row 1 of |R| is just 0 or 1; it is the light blue in |plot(R )|,\r\n% The other two rows of |R| complement each other.\r\n%\r\n% Here are the plots when |n = 24|.\r\n%\r\n% <<magiccr.png>>\r\n \r\n%% |west0479| explained\r\n% Art Westerberg retired from Carnegie Mellon in 2003, but\r\n% that does't stop him from explaining the chemical\r\n% engineering going on in |west0479|. \r\n%\r\n% West0479 is from a model of a distillation column.  \r\n% Such a device is a stack of repeated units called trays.\r\n% The fingerprints of these trays are all over a spy plot of |west0479|.\r\n% The modeling equations for a tray only reference variables within the\r\n% tray.  To create a column, one \"connects\" the outflow and inflow of\r\n% fluid and vapor from each tray to the tray above it and the one below it.\r\n% This creates the equations that have just two nonzero coefficients,\r\n% a +1 or -1 and a smaller value.\r\n%\r\n% |rref| is _not_ a sparse solver; it just plows across the matrix.\r\n% When its drop tolerance, |tol|, is larger than one, the connections are\r\n% ignored, resulting in an echelon form that is sparser than the original,\r\n% and a lousy approximation.  When |tol| is smaller than one,\r\n% the vital connections are included, but the fill-in effectively connects\r\n% each tray to all the other trays.  This also results in a poor\r\n% approximation.\r\n%\r\n% <<spy0479s.png>>\r\n\r\n%% |west0479| iterated\r\n% John Gilbert tells us that today systems of equations involving\r\n% |west0479| are readily solved by direct methods, but the eleven\r\n% orders of magnitude variation in the coefficients causes iterative\r\n% methods to struggle.\r\n\r\n%% |west0479| inspires\r\n% Tim Davis is inspired by |west0479|.\r\n% A \"favicon\" is a small icon for a website.  See the one in the upper\r\n% left hand corner of this old web page:\r\n% <https:\/\/www.cise.ufl.edu\/research\/sparse\/matrices\/links.html\r\n% Tim's Matrices>. Be sure to see\r\n% <http:\/\/yifanhu.net\/GALLERY\/GRAPHS\/GIF_SMALL\/HB@west0479.html\r\n% Tim's Gallery>, the Horror Matrix at\r\n% <https:\/\/people.engr.tamu.edu\/davis\/Poetry\/home.html \r\n% Tim's Poetry>, and\r\n% <https:\/\/blogs.mathworks.com\/cleve\/2014\/03\/03\/music-sparse-matrices\r\n% Cleve's Corner>.\r\n\r\n##### SOURCE END ##### 34ae481d950d4cc8a5553c025fe0f29e\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/cr_notes_01.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--introduction--><p>My post a few days ago, <a href=\"htts:\/\/blogs.mathworks.com\/cleve\/2020\/10\/23\/gil-strang-and-the-cr-matrix-factorization\/\">Gil Strang and the CR Matrix Factorization<\/a>, generated a lot of email. Here is the resulting follow-up to that post.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2020\/10\/25\/notes-on-cr-and-west0479\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":6443,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,9,6,8],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/6439"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=6439"}],"version-history":[{"count":6,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/6439\/revisions"}],"predecessor-version":[{"id":6565,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/6439\/revisions\/6565"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/6443"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=6439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=6439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=6439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}