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