def diag(v, k=<NUM_LIT:0>):
v = asarray(v)<EOL>s = v.shape<EOL>if len(s) == <NUM_LIT:1>:<EOL><INDENT>n = s[<NUM_LIT:0>]+abs(k)<EOL>res = zeros((n, n), v.dtype)<EOL>if k >= <NUM_LIT:0>:<EOL><INDENT>i = k<EOL><DEDENT>else:<EOL><INDENT>i = (-k) * n<EOL><DEDENT>res[:n-k].flat[i::n+<NUM_LIT:1>] = v<EOL>return res<EOL><DEDENT>elif len(s) == <NUM_LIT:2>:<EOL><INDENT>return v.diagonal(k)<EOL><DEDENT>else:<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>
Extract a diagonal or construct a diagonal array.

See the more detailed documentation for ``numpy.diagonal`` if you use this
function to extract a diagonal and wish to write to the resulting array;
whether it returns a copy or a view depends on what version of numpy you
are using.

Parameters
----------
v : array_like
    If `v` is a 2-D array, return a copy of its `k`-th diagonal.
    If `v` is a 1-D array, return a 2-D array with `v` on the `k`-th
    diagonal.
k : int, optional
    Diagonal in question. The default is 0. Use `k>0` for diagonals
    above the main diagonal, and `k<0` for diagonals below the main
    diagonal.

Returns
-------
out : ndarray
    The extracted diagonal or constructed diagonal array.

See Also
--------
diagonal : Return specified diagonals.
diagflat : Create a 2-D array with the flattened input as a diagonal.
trace : Sum along diagonals.
triu : Upper triangle of an array.
tril : Lower triangle of an array.

Examples
--------
>>> x = np.arange(9).reshape((3,3))
>>> x
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

>>> np.diag(x)
array([0, 4, 8])
>>> np.diag(x, k=1)
array([1, 5])
>>> np.diag(x, k=-1)
array([3, 7])

>>> np.diag(np.diag(x))
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 8]])