Hi,
let me start a new thread here. First a reminder to everybody that the 'extra.gfn' package is now an add-on so that the code base lives in git.

I propose the following updates / changes, and wanted to mention them here first:

1) Add the 'powerset' function as discussed in the other thread. Please speak up especially if you think another name would be better, because changing it later is difficult.

2) There's a little bug in the 'commute' function I think, or at least in the documentation related to non-square matrices. [commute(vec(B), rows(B))  without the other integer argument will fail if B is not square.] So I want to clarify the help text and add an input error check to the function.

3) Want to add an 'eliminate' function as a sister of 'commute', which returns the result of pre-multiplying with the elimination matrix. Haven't looked at whether post-multiplication would be wanted as well. Here's my code:
<hansl>
function matrix eliminate(const matrix vecA)
  # The input vecA is assumed to come from the
  # operation vec(A) on a square matrix, thus
  # rows(vecA) must be a square number.
  # Returns vech(A), which is the result of pre-
  # multiplying vec(A) with the "elimination"
  # matrix L_m.
  if cols(vecA) != 1
    funcerr "input must be a column vector"
  endif
  sqr = sqrt(rows(vecA) 
  if sqr != round(sqr)
    funcerr "input must have a square number of elements"
  endif
  return vech(mshape(vecA, sqr, sqr))
end function
</hansl>

4) Add a remark to the help text that (pre-)multiplication with the duplication matrix is as simple as doing:
vec(unvech(vechA))
where vechA is supposed to come from vech(A). The relevant input checks come for free from the unvech() function, hence no new function.

Comments and also suggestions for other new functions are welcome.

Thanks,
sven