# Adjunct of a matrix



Eval_adj = ->
	push(cadr(p1))
	Eval()
	adj()

adj = ->
	i = 0
	j = 0
	n = 0

	save()

	p1 = pop()

	if (istensor(p1) && p1.tensor.ndim == 2 && p1.tensor.dim[0] == p1.tensor.dim[1])
		doNothing = 1
	else
		stop("adj: square matrix expected")

	n = p1.tensor.dim[0]

	p2 = alloc_tensor(n * n)

	p2.tensor.ndim = 2
	p2.tensor.dim[0] = n
	p2.tensor.dim[1] = n

	for i in [0...n]
		for j in [0...n]
			cofactor(p1, n, i, j)
			p2.tensor.elem[n * j + i] = pop(); # transpose

	push(p2)

	restore()


