(a, var, verbose=0)
| 279 | |
| 280 | |
| 281 | def getarrdims(a, var, verbose=0): |
| 282 | ret = {} |
| 283 | if isstring(var) and not isarray(var): |
| 284 | ret['size'] = getstrlength(var) |
| 285 | ret['rank'] = '0' |
| 286 | ret['dims'] = '' |
| 287 | elif isscalar(var): |
| 288 | ret['size'] = '1' |
| 289 | ret['rank'] = '0' |
| 290 | ret['dims'] = '' |
| 291 | elif isarray(var): |
| 292 | dim = copy.copy(var['dimension']) |
| 293 | ret['size'] = '*'.join(dim) |
| 294 | try: |
| 295 | ret['size'] = repr(eval(ret['size'])) |
| 296 | except Exception: |
| 297 | pass |
| 298 | ret['dims'] = ','.join(dim) |
| 299 | ret['rank'] = repr(len(dim)) |
| 300 | ret['rank*[-1]'] = repr(len(dim) * [-1])[1:-1] |
| 301 | for i in range(len(dim)): # solve dim for dependencies |
| 302 | v = [] |
| 303 | if dim[i] in depargs: |
| 304 | v = [dim[i]] |
| 305 | else: |
| 306 | for va in depargs: |
| 307 | if re.match(r'.*?\b%s\b.*' % va, dim[i]): |
| 308 | v.append(va) |
| 309 | for va in v: |
| 310 | if depargs.index(va) > depargs.index(a): |
| 311 | dim[i] = '*' |
| 312 | break |
| 313 | ret['setdims'], i = '', -1 |
| 314 | for d in dim: |
| 315 | i = i + 1 |
| 316 | if d not in ['*', ':', '(*)', '(:)']: |
| 317 | ret['setdims'] = '%s#varname#_Dims[%d]=%s,' % ( |
| 318 | ret['setdims'], i, d) |
| 319 | if ret['setdims']: |
| 320 | ret['setdims'] = ret['setdims'][:-1] |
| 321 | ret['cbsetdims'], i = '', -1 |
| 322 | for d in var['dimension']: |
| 323 | i = i + 1 |
| 324 | if d not in ['*', ':', '(*)', '(:)']: |
| 325 | ret['cbsetdims'] = '%s#varname#_Dims[%d]=%s,' % ( |
| 326 | ret['cbsetdims'], i, d) |
| 327 | elif isintent_in(var): |
| 328 | outmess('getarrdims:warning: assumed shape array, using 0 instead of %r\n' |
| 329 | % (d)) |
| 330 | ret['cbsetdims'] = '%s#varname#_Dims[%d]=%s,' % ( |
| 331 | ret['cbsetdims'], i, 0) |
| 332 | elif verbose: |
| 333 | errmess( |
| 334 | 'getarrdims: If in call-back function: array argument %s must have bounded dimensions: got %s\n' % (repr(a), repr(d))) |
| 335 | if ret['cbsetdims']: |
| 336 | ret['cbsetdims'] = ret['cbsetdims'][:-1] |
| 337 | # if not isintent_c(var): |
| 338 | # var['dimension'].reverse() |
no test coverage detected