indexcall.py

来自「finite element library for mathematic ma」· Python 代码 · 共 77 行

PY
77
字号
"""This module provides a simple way of calling functions recursivelyon all indices associated with an element of the form algebra"""__author__ = "Anders Logg (logg@simula.no)"__date__ = "2004-10-13 -- 2007-02-06"__copyright__ = "Copyright (C) 2004-2007 Anders Logg"__license__  = "GNU GPL version 3 or any later version"# FFC language modulesimport algebraimport tokensimport indexdef index_call(object, foo, args = None):    "Call function foo recursively on all indices"    if isinstance(object, algebra.Form):        [index_call(m, foo, args) for m in object.monomials]    elif isinstance(object, algebra.Monomial):        [index_call(c, foo, args) for c in object.constants]        [index_call(w, foo, args) for w in object.coefficients]        [index_call(t, foo, args) for t in object.transforms]        [index_call(v, foo, args) for v in object.basisfunctions]    elif isinstance(object, tokens.Coefficient):        index_call(object.n0, foo, args)        index_call(object.n1, foo, args)        index_call(object.index, foo, args)    elif isinstance(object, tokens.Transform):        index_call(object.index0, foo, args)        index_call(object.index1, foo, args)    elif isinstance(object, algebra.BasisFunction):        index_call(object.index, foo, args)        [index_call(i, foo, args) for i in object.component]        [index_call(d, foo, args) for d in object.derivatives]    elif isinstance(object, tokens.Derivative):        index_call(object.index, foo, args)    elif isinstance(object, index.Index):        foo(object, args)    else:        raise "RuntimeError", "Don't know how to call index on " + str(object)def index_add(index, args):    "Add index to list if index is of given type"    indices = args[0]    type = args[1]    if index.type == type:        indices += [index]    returndef index_add_value(index, args):    "Add index number to list if index is of given type"    indices = args[0]    type = args[1]    if index.type == type:        indices += [index.index]    returndef index_modify(index, args):    "Modify index from one type to another"    indices = args[0]    from_type = args[1]    to_type = args[2]    if index.index in indices and index.type == from_type:        index.type = to_type    returndef index_reassign(index, args):    "Reassign index from old value to new value"    from_index = args[0]    to_index = args[1]    type = args[2]    increment = args[3]    if index.index == from_index and index.type == type:        index.index = to_index        increment[0] = 1    return

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?