# Bug in SmithDecomposition?

While trying to calculate the SmithDecomposition of an integer 293x329 matrix with less than 3000 non-zero elements in the range -4 to 3 several errors occur, none of them which seem to make any sense at all:

In[254]:= SmithDecomposition[tmat]

During evaluation of In[254]:= Part::partw: Part 296 of {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,<<245>>} does not exist.

During evaluation of In[254]:= Drop::drop: Cannot drop positions 1 through 296 in {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,<<245>>}.

During evaluation of In[254]:= Part::partw: Part 297 of {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,<<245>>} does not exist.

During evaluation of In[254]:= Part::partw: Part 298 of {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,<<245>>} does not exist.

During evaluation of In[254]:= General::stop: Further output of Part::partw will be suppressed during this calculation.

During evaluation of In[254]:= HermiteDecomposition::latm: Matrix contains an entry that is not rational.

During evaluation of In[254]:= Set::shape: Lists {SystemSmithDecompositionDumptmpu$$84833,SystemSmithDecompositionDumphnf$$84833} and HermiteDecomposition[{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<279>>},{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<279>>},{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<279>>},<<46>>,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,<<279>>},<<2546>>}] are not the same shape.

During evaluation of In[254]:= HermiteDecomposition::latm: Matrix contains an entry that is not rational.

During evaluation of In[254]:= Set::shape: Lists {SystemSmithDecompositionDumptmpv$$84833,SystemSmithDecompositionDumphnf$$84833} and HermiteDecomposition[{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<2546>>},{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<2546>>},{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<2546>>},<<46>>,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,<<2546>>},<<279>>}] are not the same shape.

During evaluation of In[254]:= HermiteDecomposition::latm: Matrix contains an entry that is not rational.

During evaluation of In[254]:= General::stop: Further output of HermiteDecomposition::latm will be suppressed during this calculation.

During evaluation of In[254]:= Set::shape: Lists {SystemSmithDecompositionDumptmpu$$84833,SystemSmithDecompositionDumphnf$$84833} and HermiteDecomposition[{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<2546>>},{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<2546>>},{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<<2546>>},<<46>>,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,<<2546>>},<<279>>}] are not the same shape.

During evaluation of In[254]:= General::stop: Further output of Set::shape will be suppressed during this calculation.

Out[254]= \$Aborted


I checked that all elements of the matrix are integers and interestingly the HermiteDecomposition does work. Trying to calculate the SmithDecomposition of the Hermite upper diagonal form results in the same error though.

Does anybody know what is going on?

The matrix in compressed form (use Uncompress to get the actual matrix) is the following

"1:eJztXcnO5LYRHi+XwE+RS24BWtRGHX00kFPyBE6QAeYQOJhxDnkXP2y6xarB/3d/\
bPFjiWxKzqXF1kLWzmJxqT/+/Ze/fvz+w4cPX364/vzt3z9//vLPHz9//vm/X/5w/f/\
jf3795V8///rpHx+/vb1ye+8vn778+tN314Jb+vXau+XT9fLh43dvX/n0ze3Wu68+/\
umbt3XcXrisv93663+6vd3168VdwkX+Deul78JlCpd5vQzhzWFcL6MLF/\
kX3pzCd1P4N4d/c3hzDrX48M/LvwCLX9bLMqx4dpdOrvp/DNfOyXUO1yvs4SrvOx+\
ufaBXN8jzQf6PUt8k9c1TuHr5L+07ac914blzoT3Xh/rd0MlVno9LuM7ynpf3lvC/\
7wIcfR++64fwfj8GfPpJrnNov/fC7yXUP1xCPYPAM0g9g+A1SD3DOMpV3p/lPR/+\
j0LP0YX3x17uy/fjFOofBY5RvxM4pktobxI4Jqln6kO70xjwnIS+\
k9B3WgIcs9B17kL9s3w/Cz6z8G0e5L7QaR4DPedZ7nt534f6Z61/Ce/7S3jPd/\
Jf8PTCLz92cpX/Aq8XvP0s3wkf/RLqW0QuF+HnIvUvbpCr/\
Bc5WYZRrvJf5GSZ5XvBY1nk/xX+\
71d5v3gpdHqnv0jhKntScFoYpDDqy1f5WQs3RQoFp3f0q27UO6O01c36std3rnz/\
PuiZFtxFC3qnl0bdKGC4WWp2yxgKfSc194pFP+\
ijUQuTFuZJC7MUvBSGi7Q1OC0o7oO2PszSxOClMF4EntENWpC2RiXmOAnKo9c7i7w8dfJo\
0kZvYh4Kk5Bu0kYnL8BPSrq5E+Bvwh0Ko1Q4T/pICX4T5LXgFWZ/EVB9J215ZYF3+\
nIv9Xglglca3iR3LSydPFoUi2XotaB3Jr0zS6OL10dLaN1duosWRin0emeYpTDpI6+\
PRBJcd5F3uk4LTgu9FoS8V+\
vrpCAS5TqvBeHOVR47LQiEzumdXguDFsavhUUKwgLnZi14LSxS6C8CT6+\
4904LvYDRD18LAkY/\
akHU6loQIvReXh6Ey1cABR4VbDf08vIw6J1J6hmUGsOsjxTmQdk0KllU+J0K/\
1VNtaAVjor7KNLiJtF3N3Xy+aRsmnq9IyrsplEfKTEnBUzVwU3Kr1lrvtn+UFC+zyo/\
s1Y4qyDNs36upJu1Qq8V+k4LvdTsBy2IkXFeFPbKZGnCK+m8snsRI+\
MWZcqiErUoERYVraX/\
ekdfVmFblD6LSt0iJvda0EfKgmX6ekcrVFCX2X387Ye3zt3NhXvv3HXgnru7FxyR+\
zfD3R7eHeDdEd11+O4E4MJtEXBF2ppBWxiDujTwAC7m+wV8j+h6j38r/L7Hn2/rvtY4v+\
9ptQ5zLkSl98CuFWAa7o/B2lhdtcWAQTJiXSTIeA/\
XehOCVYq28FWqMahkGF2zPibaubUxCME9G3kIMLpIPBzUskKMdHaNTGeku9fIEC1BNzEAh\
cDCmlPKUEArjiUB8zHdUGCW427ktV35ChjWsjJM7619WX9PsPVm3T4nXZR6u6+\
YbsH6us5ies/\
bW7zFEMUFr17HOfAuwvc6ljHTBjMCyzOsF1vXBzKEeHUhhAkGF0P4npkrwkinTo0wsrp7I\
FwKCdSnDRjcgyGBATuH6KEudEC95akRRgb9LN0H6i8H9OpZEEb95YCEzE3Y5YZGAHoYHuO\
LMUv3YQfYu3uslviu2a98GHCHu3AsEGEadLofxpU0caAnMEMV9lCiPaPuDHlxhKCQfx0Jv\
9Ri28oK6KNQrGAMER7E2cMyaWRY14BAwDDCFBJ2cLGFhEhAgz5jfxMbf2Y4bUZ4B5EmiAP\
1fcbWH4s0JBllc9KJzhl6zAq7JWIYlMaKZ11FejBphEQvxkzMtmYZVJcV0NDPGLB7VoRVe\
MkVcKbXbp8sliisLCQMcimLUQvhJ6YXe71WhCvzEgpkxHXHqNldd7tpsPAy7i+\
OUKSxjaUEHdtjexDCQpx1lXApp7emSE91HZqqkxQFTFlc/\
CeIsIcdm5mQbZABrYiYsOS0YPbSI2gT1GEioDSlRaTCXgPoH9R1bgsNyakYRLq7OUFfohj\
JsGLjOEjViEcp8hIxuLrkJexmzPWvayEJohPRtmaJzsk007HZQ5zprJiJOGDD5gVrhSVIS\
hMSxyJb6NrsQ+qqhMRxS2LAFRmjMkGtUuEr+\
0whcscjUoYH8GUUM0IyGACbcQTNzmEmCtEsL4noYBNGFgXAsIGrK5BY9LA3bRc9Jm5Tapm\
iWfSwL1yLaysI2DNsgT+\
FugSCP9hBiDgTdrehVBjDHqe1TuFg4jQx0mhhZocgJDPHXMrxsJtIAmHGn28hwmIfYZYJA\
WDUmlBBc4Sl0MAIh9fN5r+yAmFwmZkD+7qj9Jlcj2dyMbiFpjQocUJOlYceHAzQ+\
1Jr9Zl9QJaFs+vJROkxrbqL7jDFiq0yJHZeMkjgPv/\
1q1aLDbfMq0sxuFSYyrztj1oNhUwDpG5syQPBH9wY7uuYXdJ4mAElmohWVJ63RqsYFhzDw\
BO2EF88zm9hvtU+\
9LYPf8osG1xwZOP1MwG14x37r0hhWHG7212wg8CsG2emDfZ3TQMWdh8f0wy3hgdWxJCcUL\
fugntMRn5LBfjTesyABe4y627hx1RnsIB9MbRRe0i1fQP865eSdpf0cWOsc8LUKbV5vNb4\
LGBRZkF4uX4IYgGHjpUldQcsMGS4Bntr6RO3e7TW7vpMrFkYCzzmLzXkSIsrBchwHCzd1+\
jgMV948enRrBw+9aWDdCiHcU1bgvc+\
d1ADzo0x7N9KYVzgsJAVC1jv8bCAMBwOC9hvnkSH4KgD9pDnxjh9I8bx+kJkETvcQ+\
ITNLD/ALWFWnUbWVtkjcBxR2iU2qJOxMTg3Yj0tbA8fIdVzQyHfk8HDgR5MO/\
RiCwcrLtdwL5zo0z0luIFPEr03LrZgBbW1beH017Pr2+1Jk330kJi4UNlX4OhDoNx+\
iyMXXY6eKhvbGFJ3fW39j195nkReLJwG0sjzdTBcyj4KGRqoVG7K3DLzI13+\
DTlw0kJHBfig5MPJw+1FhwGmpl3zpi2XK0w4KOTm7DrDWgsPpO5Aa+C89fNS7TsHjQ+\
7PnUHvTr/RKOQ5gXDYxYqRX9mJINRJN2GLGmz0nEeEx48SfRQjuHGPrildHn0KFCy3+\
pbaR2DTAfctVEj16qb2EoSczuRE7XrDtSI9bO2A9/\
b3fUgU9TP8lMJhybwuPUO3w++Sno0EWOF2/BypU6BYmxiPbtZXZfLi1J4xP7Gzl1/\
Mw8tp9/1QLfWvDBS0Xda50OGShJ7LmnDsoptRmZwc3up7YrJczsQynZwd5rKdmp6pnjw+\
FP3TO0EN9pYO8kPvn+1JyvuzOvKjfhsf4dPic/\
st7oaEf2lOIQQ3Xi2KzIoXx2Hap5SmTlY1arHSYXuNlu7NVuEZlIQykrZ47IEikOOH2zzy\
gwo9D9T5UM1LHbHYIO5rOz2jhrtcxMW4ezPRyu5z1af0zQ99T9cQuerr0/\
LnXSTrv9cbM9L0wvgS1BZ8+\
g8P941FNemEcd7cajIlJy5qgEE49qYVaD4SZxODB1NjyzW6mBfUmleshIjokza8vRNABTv\
QUNOJqs23eIt+BVlFqbxFDSPEoqdio5gwXWllKpS1sYCUNvO3J+\
H34X860UzVqICmNtgadYRM5zhOdVQFnvmGQIlXteu1TbT1g0Wy4mc0ITq8+\
ZWJt9v3ShqBpO9XC4OIw92mxev74D3wqtdcf5MU6iWYQ9K6ZDDUT+\
D6dDdSPTdh0i4tVN9P7NjlCIxC9t5HUrtceG2KuBNbbuDvEdUsr87nb2R3LKtDD7W3N02+\
G0NIeTnapjf5xdp13ZiViNBs6HKdVvUpYAn/lSRqo7JnlQZW+l1FoqzAtzZBpnBDrcWp/\
X2zOG6i6S++fMI9Z2eXHmdeY14wQOZ2c6iVTXpWS7s+D2OWyGDma/utmxk8MZrU5xroTD+\
bNOceaAw1m1KI+/\
1JxlKflN73kdzg3WBHXq0qHuDH8DGONMZOfgJs5Pdmpu2qOh6XtsIpYLZ83B+dSKQZa+\
TszhHGm416u8Nv/1K/ZdJE/bsXp/fPKSwxnkDpcRCGKBc8WdBLdjZeByOKdbu/\
Di7G2Hkx0oJbgPOAluuG85mq2G2kLkdMPrJx3u3+\
pSJ5IX3Dy6xf0b9q7qxlao9WdQfnEfQHmOVjqU2/\
NqX8sKcWNy20VoVmpe2i4P6fsDYvTF1hOP/\
bE8lJISJq8ytr8QN5wFDMegK++jev2pRy6SPwv3LemrDFwk6xPjvTYQU8CZnHaYU2vhJK6\
6O9LK7PhzkexXpTj0e9vz6nD+rIj1PFjEEGfKKtX7R+\
wkXoVUyj4UOu2n2N5fyAuc0SrirTBzwnaf1j47yXg2xA7mYvsOGhj740xZkRloxkYRkXSc\
j6qynBE6hLM+nWLuK4axOYqCc/Tg2ZLK+\
WZa8CfN8ktFBKp6mfbcNA2suKu8m2aH3ZfmlZJMJpzKuwPPu4PZMTl6Gqa6OSpcaL+\
ew3mCWqDv0db/wvxDbfTSzUofzs5EnVxTZj+ki+RWMufyPdw+bGIcEMlVVJObLpJ3pwW+\
VR2TRbLm2OnQwr6v9Piki2TYqSqThXZfukh2GzuPmfjD62PQLpIJp2ovgleMRjK14N4/\
vZ8vdTKbg7lIOHjretCFdt7g7CuH83+b3XXIZF852r7xquetOCrzSSnbV8oaMfOxB9vbN+\
HzH6yZOUrNrjucoYSK8TewMw/\
n9jjcyk5IdZxzgfLwakpULMcq9uWIPuBgIzWODtgvKbUekditZJ7Ld5HcCK9fnxqTHUyHU\
usfzCsdIif6M6tvmh0BRk7TbyHKah+3mH3EBuaE28085SKn0+PVpXVXpRH+\
GT7pd4d8VHVP8sQ+TANeW6kdJ/h02XbziO2wrgL36GXW0LewysDBs/4iXjw8Ua+\
cn4qtBpR1aoyDNRavjyqFG9YszGN4F55TFrEE8BytHaQPnipVWbvheUwRDYBnFkV0CJ4BV\
HlMBs/q4eqFHILn5ERGgPDUmB6eocLuJPzth7d3b+904Pfb6++f7y8bL2fXFf1+q/\
kdH0QfU2BTmKA/m63Fa9irHor1GyTM5/\
kuYsDziaL1PpxPJFuOFh2onld82RoNMrRlJ7OzJYl7GmVe+\
N0mtVxarS7bUrlkeIy4si88v+Xe4u02YYtxq09j6vtm4mCktCxvDe/\
pvtUmJa6JHV2acrp3l7cv0NKSoUA51XCmJwe2XQn8/\
EIZ3UdVjnNvU082cdinyiRaP1GD5zrLSSrTjEPNxO1zDDRjY+\
4Zgx5gKknGLdEwSkBqA4kd03M671QxZbSp55nokVzYtKp7Qp7YMm96ckx/\
jsilmYNNCxGVTKCHqR3HVj2UiOxDh3yl5pDm5cUqm7tqHacPOdqT+ulmp1mMLmYUM+\
F7NsbY0K4NCm+\
PJAhVg2OYeJsGo7fbCxkmxvxltmDurI8GxS//qfV5hjU2vrtlnfKEqel6jvVla9Sj6slA/\
rnp2Ha5NpQr2ts+qxlA0EffS3Vbn8N276M+fIPhKEGQLUMFe+\
MqNHiGQo6gZxjuTVuepCEIm8Q6057ndAYUNvlGLx+\
0R22ws3DXl81fGvFIVaYcs5JoUHJUJkcNzJTYbNuKNodIYaFNnBeziGOOqjKSw9SSQcAgK\
VHKvR1o4uh0RCpgKBrI/3sI4jA/\
QMPaymilFAQkizI6sk3xNUO4P5wFJSsN9y27t7N8cYZmA45Hke3jFHysuAeP0EQ0ovNDa/\
HK4tDeTVHH6ZmG6KZmpdH7SdMZVjJuYzL0JyYW3OwrJTBpYhOT0dpiExWIfLEx6+\
cx7K3JtsWFPIN2qOkUoDcd8xe5Cs8b3cTwseczsHJbsPKFjRKzjfoZNHepNg3tRMYnMoFo\
hlsk8XT8lt5QHtUMhi4f+zhjKmHN2eACkkVgy6jak7FaTh/\
GG6Esp8v6SSKYVtSJmpl1Q6QAZYhhfseRpnvR+\
hPW2e1oSko0ajdcOUgZG3gmBDninabflOJtNsYZakYk3qHQ6yVqPVMrfVsd8EmxL7iX6TV\
QywyJQcqYt/HIETDkSSiAs4pU5/\
H6Cup88no8cyp4ajW3BXSnJ4kWNlU54qK9STzGYqeJT455eK7pyVNcacDyYrPbnqLnoO28\
jShGrrz1fmaxSm3OqDVZmGQBmm+\
xkpQmg173W3s2bEQ2TIw5ePs8ddlLmoRn7HmBtOM33YAPdw/\
uGJpjrHkKWVFdWXPdOVqyJVj5diutMep5Ri2J+mPFPLt+K/\
5pnxjf3VT7iA1M2beWaNlSlOap7uzTTqJWpVGFI8SGmU01ErwxZmQvn2Q7GYps1ieLf77d\
41Aw1J0hq49dFNc5gcUnibXJZXvVRbbs7SSanEnkmZS8ZTwKz86bzp+/u/fXLcIRrfV/\
RR/rPg=="


# Update

According to the customer service the bug should be resolved in the current release of version 12.0 (and was already resolved for 12.1):

Hello Gert Vercleyen,

In September 2019 you reported an issue with Mathematica wherein SmithDecomposition problem with rank deficient case. We believe that the issue has been resolved in the current 12.0 release of Mathematica.

Thank you for your report and we look forward to a continued, productive relationship with you.

• Hm. With the matrix that you posted in compressed form, I cannot reproduce the problem (running version 12). – Henrik Schumacher Jun 5 '19 at 21:06
• Works here too... maybe try restarting kernel to rule out lingering definitions. – bill s Jun 5 '19 at 23:21

## 1 Answer

You have run into a bug in SmithDecomposition, but the example you've posted doesn't trigger it.

First, the bug. It only occurs in very rare corner cases, so much so that if you sit there and feed random matrices to SmithDecomposition you'll never see it fail. This presumably explains how it got through testing. The effect of the bug is that SmithDecomposition prints the error messages you described, then hangs indefinitely in a busy loop.

Your example matrix however works fine for me, so I'm guessing you pasted the wrong one or it got corrupted somehow. The simplest matrix I know of which triggers the bug is the following, which is a 12x12 integer matrix:

"1:eJxTTMoPSuNhYGAoZgESPpnFJai8zP9AkAnkMGAl8MqimQQWFwYRIPHMDyCtAiAWB1y\
X\\
NIj4AjcTrO4HkIvNJBuQshIQMRXEZQGxguFaz/\\
wDspJArPsgMSEQkY3DTUogghdE3AYpYwOxPsFN0gIRT0HcjyAC7DpcbtoH1JZ5E+\\
izzFygRGbObyDL5wfMpG9AAzLbgNoyk74BWdY/\\
gcRsZuxuEgIRCiBiI8jCQhArBx5OfiDiCUjiJYiYCOIewXQTlePuMEjDLhABthocMG5wXa\
\\
ogwgJEXIOr24UjnE4AnZ358DmQMAaFzgs+\\
oNhFCZhJFsC4yIwEhkBmPig8U0DqeJ9hN0lwMTdDZubhlf8zOw6H/8+\\
MjxFhyPz4UpkBSXbtpk6GzAXLu4AxI332f6armB5W38U6rfif+\\
eBSGNA4q7MMmVLpCf8ze7V+/IPI7k32/p/5oTzlf2Ylrz5j5q11X/9nxi6xwWrSk/LpQN+\
\\
ZRTJkzmicxpC588nv/5nP5B2gblJaFcuQ+Vpk8v/MKzzVQIOt3v/PbPk19z8AJZFAWg=="


I reported this bug almost a year ago, and the developers responded fairly quickly. However, it doesn't look like it will actually be fixed until next release. If you really need this function to work properly, then this answer lists some possible replacements. Alternatively, here's a hacky workaround:

SmithDecomposition[{{0}}];
Unprotect[SmithDecomposition];
Clear[SmithDecomposition];
SmithDecomposition[mat_] :=
Module[{uu, dd, vv, diags, col = 0, tmpu, tmpv, ord},
{uu, dd, vv} = SystemSmithDecompositionDumpdiagonalize[mat];
diags = Select[Diagonal[dd], # != 0 &];
While[col + 1 < Length[diags],
col++;
If[SystemSmithDecompositionDumpdivides[diags[[col]],
GCD[Sequence @@ Drop[diags, col]]], Continue[]];
vv = Transpose[vv];
Do[
dd[[j, col]] = diags[[j]];
vv[[col]] += vv[[j]]
, {j, col + 1, Length[diags]}
];
vv = Transpose[vv];
{tmpu, dd, tmpv} = SystemSmithDecompositionDumpdiagonalize[dd];
uu = tmpu.uu;
vv = vv.tmpv;
diags = Select[Diagonal[dd], # != 0 &];
];
ord = OrderingBy[Diagonal[dd], # /. (0 -> Infinity) &];
If[! OrderedQ[ord], {uu, dd, vv} = {uu[[ord]], DiagonalMatrix[Diagonal[dd][[ord]]], vv[[;; , ord]]}];
{uu, dd, vv}
]
Protect[SmithDecomposition];


This is the internal code, extracted with this method, and empirically and badly tweaked to make it work.

• I have reported the bug as well and there's a big chance it will be fixed by next release. The matrix I posted triggered it on my computer at that time but meanwhile I have found many other examples that trigger it. It seems that most of the cases for which I needed it (e.g. finding cocycles of groups) consisted matrices of which the decomposition is very hard compared to the general case... – Gert Feb 22 at 15:29