1function C = kronecker (arg1, arg2, arg3, arg4, arg5, arg6, arg7)
2%GRB.KRONECKER sparse Kronecker product.
3%
4%   C = GrB.kronecker (op, A, B, desc)
5%   C = GrB.kronecker (Cin, accum, op, A, B, desc)
6%   C = GrB.kronecker (Cin, M, op, A, B, desc)
7%   C = GrB.kronecker (Cin, M, accum, op, A, B, desc)
8%
9% GrB.kronecker computes the Kronecker product, T=kron(A,B), using the
10% given binary operator op, in place of the conventional '*' operator for
11% the MATLAB built-in kron.  See also C = kron (A,B), which uses the
12% default semiring operators if A and/or B are GrB matrices.
13%
14% T is then accumulated into C via C<#M,replace> = accum (C,T).
15%
16% See also kron, GrB/kron.
17
18% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
19% SPDX-License-Identifier: GPL-3.0-or-later
20
21if (isobject (arg1))
22    arg1 = arg1.opaque ;
23end
24
25if (isobject (arg2))
26    arg2 = arg2.opaque ;
27end
28
29if (isobject (arg3))
30    arg3 = arg3.opaque ;
31end
32
33if (nargin > 3 && isobject (arg4))
34    arg4 = arg4.opaque ;
35end
36
37if (nargin > 4 && isobject (arg5))
38    arg5 = arg5.opaque ;
39end
40
41if (nargin > 5 && isobject (arg6))
42    arg6 = arg6.opaque ;
43end
44
45switch (nargin)
46    case 3
47        [C, k] = gbkronecker (arg1, arg2, arg3) ;
48    case 4
49        [C, k] = gbkronecker (arg1, arg2, arg3, arg4) ;
50    case 5
51        [C, k] = gbkronecker (arg1, arg2, arg3, arg4, arg5) ;
52    case 6
53        [C, k] = gbkronecker (arg1, arg2, arg3, arg4, arg5, arg6) ;
54    case 7
55        [C, k] = gbkronecker (arg1, arg2, arg3, arg4, arg5, arg6, arg7) ;
56end
57
58if (k == 0)
59    C = GrB (C) ;
60end
61
62