@@ -5,17 +5,27 @@ function polyvecvar(::Type{PV}, prefix, idxset) where {PV}
55 [PV (" $(prefix * string (i)) " ) for i in idxset]
66end
77
8+ function polymatrixvar (:: Type{PV} , prefix, rowidxset, colidxset) where {PV}
9+ [PV (" $(prefix * string (i) * " _" * string (j)) " ) for i in rowidxset, j in colidxset]
10+ end
11+
812function buildpolyvar (:: Type{PV} , var) where {PV}
913 if isa (var, Symbol)
1014 :($ (esc (var)) = $ PV ($ " $var " ))
1115 else
1216 isa (var, Expr) || error (" Expected $var to be a variable name" )
1317 Base. Meta. isexpr (var, :ref ) || error (" Expected $var to be of the form varname[idxset]" )
14- length (var. args) == 2 || error (" Expected $var to have one index set " )
18+ ( 2 ≤ length (var. args) ≤ 3 ) || error (" Expected $var to have one or two index sets " )
1519 varname = var. args[1 ]
1620 prefix = string (var. args[1 ])
17- idxset = esc (var. args[2 ])
18- :($ (esc (varname)) = polyvecvar ($ PV, $ prefix, $ idxset))
21+ if length (var. args) == 2
22+ idxset = esc (var. args[2 ])
23+ :($ (esc (varname)) = polyvecvar ($ PV, $ prefix, $ idxset))
24+ else
25+ rowidxset = esc (var. args[2 ])
26+ colidxset = esc (var. args[3 ])
27+ :($ (esc (varname)) = polymatrixvar ($ PV, $ prefix, $ rowidxset, $ colidxset))
28+ end
1929 end
2030end
2131
0 commit comments