抽象模型表示
抽象模型表示允许将转换和构建之间的关注点分开。转换涉及从将原始模型的源代码加载到内存中直到创建抽象模型表示所发生的任何事情。同样,构建将是抽象模型和模型源代码之间发生的一切,模型源代码是用与原始模型不同的编程语言编写的。这种方法可以轻松地将新代码包含到转换或构建过程中,而不会存在相互影响的风险。
的 AbstractModel
对象应尽可能多地保留原始模型中的信息。尽管输出代码中没有使用该信息,但对于其他未来的输出语言或对当前支持的输出的改进来说可能需要该信息。例如,目前不可更改的常数(==在Vensim中定义)在Python中被视为常规组件,但将来我们可能想要保护它们免受用户交互的影响。
这种表示的最低级别是 AbstractSyntax
树(AST)。这包括给定组件表达中的所有操作和调用。
主要抽象结构
主要抽象类为从组件级别到模型级别的信息提供结构。这些类是分层的AbstractElement将位于AbstractElement内部,AbstractElement位于AbstractSection内部,AbstractSection是AbstractModel的一部分。
- class pysd.translators.structures.abstract_model.AbstractComponent(subscripts: Tuple[List[str], List[List[str]]], ast: object, type: str = 'Auxiliary', subtype: str = 'Normal')[源代码]
常规组件的数据类。
- 参数:
- class pysd.translators.structures.abstract_model.AbstractUnchangeableConstant(subscripts: Tuple[List[str], List[List[str]]], ast: object, type: str = 'Constant', subtype: str = 'Unchangeable')[源代码]
不可更改的常数组件的数据类。这个类是AbstractElement的子类。
- class pysd.translators.structures.abstract_model.AbstractLookup(subscripts: Tuple[List[str], List[List[str]]], ast: object, type: str = 'Lookup', subtype: str = 'Hardcoded', arguments: str = 'x')[源代码]
查找组件的数据类。这个类是AbstractElement的子类。
- class pysd.translators.structures.abstract_model.AbstractData(subscripts: Tuple[List[str], List[List[str]]], ast: object, type: str = 'Data', subtype: str = 'Normal', keyword: str | None = None)[源代码]
数据组件的数据类。这个类是AbstractElement的子类。
- 参数:
- class pysd.translators.structures.abstract_model.AbstractElement(name: str, components: List[AbstractComponent], units: str = '', limits: tuple = (None, None), documentation: str = '')[源代码]
元素的数据类。
- 参数:
- class pysd.translators.structures.abstract_model.AbstractControlElement(name: str, components: List[AbstractComponent], units: str = '', limits: tuple = (None, None), documentation: str = '')[源代码]
控制元素的数据类。此类是AbstractElement的子类,并且具有相同的属性。
- class pysd.translators.structures.abstract_model.AbstractSubscriptRange(name: str, subscripts: list | str | dict, mapping: list)[源代码]
Dataclass for a subscript range.
- 参数:
- class pysd.translators.structures.abstract_model.AbstractConstraint(name: str, subscripts: list | str | dict, expression: str)[源代码]
约束的数据类
- class pysd.translators.structures.abstract_model.AbstractTestInput(name: str, subscripts: list | str | dict, expression: str)[源代码]
测试输入的数据类
- class pysd.translators.structures.abstract_model.AbstractSection(name: str, path: Path, type: str, params: List[str], returns: List[str], subscripts: Tuple[AbstractSubscriptRange], elements: Tuple[AbstractElement], constraints: Tuple[AbstractConstraint], test_inputs: Tuple[AbstractTestInput], split: bool, views_dict: dict | None)[源代码]
一个部分的数据类。
- 参数:
name (str) -- Section name. '__main__' for the main section or the macro name.
path (pathlib.Path) -- 部分路径。它应该是主要部分的模型名称和宏的干净宏名称。
section_type (str ('main' or 'macro')) -- 节类型。
params (list) -- 接受该部分的参数列表。对于主要部分,它将是一个空列表。
returns (list) -- 返回该部分的变量列表。对于主要部分,它将是一个空列表。
subscripts (tuple) -- 该部分中定义的AbstractSubwrittRanges组。
elements (tuple) -- 本节中定义的抽象元素组。
constraints (tuple) -- 节中定义的AbstractConstraints元组。
test_inputs (tuple) -- 本节中定义的TestInputs组。
split (bool) -- 如果split为True,则创建的部分将根据views_dict拆分变量。
views_dict (dict) -- 观点词典。给出任何级别分类的变量,以便按文件将它们拆分。
- class pysd.translators.structures.abstract_model.AbstractModel(original_path: Path, sections: Tuple[AbstractSection])[源代码]
模型的数据类。
- 参数:
original_path (pathlib.Path) -- 原始文件的路径。
sections (tuple) -- 模型中定义的AbstractSectionss的二元组。
AST的抽象结构
以下抽象结构用于构建抽象数据库树(AST)。一般来说,它们之间没有等级制度。例如,算术结构可以包含一个CallArchitecture,该CallArchitecture同时包含另一个算术结构。然而,由于源语言的限制,其中一些无法位于另一个结构中。例如,GetConstantsStructure不能是另一个结构的一部分,因为它必须出现在Vensim中的“=”符号之后,并且后面不能有任何其他东西。
- class pysd.translators.structures.abstract_expressions.AbstractSyntax[源代码]
一般类。所有抽象Synax结构都是该类别的孩子。用于打字。
- class pysd.translators.structures.abstract_expressions.ArithmeticStructure(operators: list, arguments: list)[源代码]
算术结构的数据类。
- class pysd.translators.structures.abstract_expressions.LogicStructure(operators: list, arguments: list)[源代码]
逻辑结构的数据类。
- class pysd.translators.structures.abstract_expressions.SubscriptsReferenceStructure(subscripts: tuple)[源代码]
脚注引用结构的数据类。
- 参数:
subscripts (tuple) -- 引用的脚注列表。
- class pysd.translators.structures.abstract_expressions.ReferenceStructure(reference: str, subscripts: SubscriptsReferenceStructure | None = None)[源代码]
元素引用结构的数据类。
- 参数:
reference (str) -- 被引用元素的名称。
subscripts (SubscriptsReferenceStructure or None) -- 引用中使用的订阅者。
- class pysd.translators.structures.abstract_expressions.CallStructure(function: ReferenceStructure, arguments: tuple)[源代码]
Dataclass for a call structure.
- 参数:
function (ReferenceStructure) -- 可调用的引用。
arguments (tuple) -- 用于调用该函数的参数列表。
- class pysd.translators.structures.abstract_expressions.GameStructure(expression: AbstractSyntax | float)[源代码]
游戏结构的数据类。
- 参数:
expression (AST) -- 游戏调用内部的表情。
- class pysd.translators.structures.abstract_expressions.AllocateAvailableStructure(request: AbstractSyntax, pp: AbstractSyntax, avail: AbstractSyntax | float)[源代码]
分配可用结构的数据类。
- 参数:
request (AbstractSyntax) -- 对请求变量的引用。
pp (AbstractSyntax) -- 对优先级变量的引用。
avail (AbstractSyntax or float) -- 总可用供应量。
- class pysd.translators.structures.abstract_expressions.AllocateByPriorityStructure(request: AbstractSyntax, priority: AbstractSyntax, size: AbstractSyntax | int, width: AbstractSyntax | float, supply: AbstractSyntax | float)[源代码]
按优先级分配结构的数据类。
- 参数:
request (AbstractSyntax) -- 对请求变量的引用。
priority (AbstractSyntax) -- 对优先级变量的引用。
size (AbstractSyntax or int) -- 最后一个维度的大小。
width (AbstractSyntax or float) -- 优先级之间的宽度。
supply (AbstractSyntax or float) -- 总供应量。
- class pysd.translators.structures.abstract_expressions.InitialStructure(initial: AbstractSyntax | float)[源代码]
初始结构的数据类。
- 参数:
initial (AST) -- 初始调用中的表达式。
- class pysd.translators.structures.abstract_expressions.IntegStructure(flow: AbstractSyntax | float, initial: AbstractSyntax | float, non_negative: bool | None = False)[源代码]
集成/股票结构的数据类。
- 参数:
flow (AST) -- 股票的流动。
initial (AST) -- 股票的初始价值。
non_negative (bool (optional)) -- 如果为True,则股票不能为负值。默认为假。
- class pysd.translators.structures.abstract_expressions.DelayStructure(input: AbstractSyntax | float, delay_time: AbstractSyntax | float, initial: AbstractSyntax | float, order: float)[源代码]
延迟结构的数据类。
- 参数:
input (AST) -- 延迟的输入。
delay_time (AST) -- The delay time value of the delay.
initial (AST) -- 延迟的初始值。
order (float) -- 延迟的顺序。
- class pysd.translators.structures.abstract_expressions.DelayNStructure(input: AbstractSyntax | float, delay_time: AbstractSyntax | float, initial: AbstractSyntax | float, order: AbstractSyntax | float)[源代码]
延迟n结构的数据类。
- 参数:
input (AST) -- 延迟的输入。
delay_time (AST) -- The delay time value of the delay.
initial (AST) -- 延迟的初始值。
order (float) -- 延迟的顺序。
- class pysd.translators.structures.abstract_expressions.DelayFixedStructure(input: AbstractSyntax | float, delay_time: AbstractSyntax | float, initial: AbstractSyntax | float)[源代码]
延迟固定结构的数据类。
- 参数:
input (AST) -- 延迟的输入。
delay_time (AST) -- The delay time value of the delay.
initial (AST) -- 延迟的初始值。
- class pysd.translators.structures.abstract_expressions.SmoothStructure(input: AbstractSyntax | float, smooth_time: AbstractSyntax | float, initial: AbstractSyntax | float, order: float)[源代码]
数据类,结构流畅。
- 参数:
input (AST) -- 流畅的输入。
delay_time (AST) -- 顺利的顺利时间价值。
initial (AST) -- 平滑的初始值。
order (float) -- 顺利的顺序。
- class pysd.translators.structures.abstract_expressions.SmoothNStructure(input: AbstractSyntax | float, smooth_time: AbstractSyntax | float, initial: AbstractSyntax | float, order: AbstractSyntax | float)[源代码]
数据类用于平滑n结构。
- 参数:
input (AST) -- 流畅的输入。
delay_time (AST) -- 顺利的顺利时间价值。
initial (AST) -- 平滑的初始值。
order (float) -- 顺利的顺序。
- class pysd.translators.structures.abstract_expressions.TrendStructure(input: AbstractSyntax | float, average_time: AbstractSyntax | float, initial_trend: AbstractSyntax | float)[源代码]
趋势结构的数据类。
- 参数:
input (AST) -- 趋势的输入。
average_time (AST) -- 趋势的平均时间值。
initial_trend (AST) -- 趋势的初始趋势值。
- class pysd.translators.structures.abstract_expressions.ForecastStructure(input: AbstractSyntax | float, average_time: AbstractSyntax | float, horizon: AbstractSyntax | float, initial_trend: AbstractSyntax | float)[源代码]
预测结构的数据类。
- 参数:
input (AST) -- 预测的输入。
averae_time (AST) -- 预测的平均时间值。
horizon (float) -- 预测的地平线值。
initial_trend (AST) -- 预测的初始趋势值。
- class pysd.translators.structures.abstract_expressions.SampleIfTrueStructure(condition: AbstractSyntax | float, input: AbstractSyntax | float, initial: AbstractSyntax | float)[源代码]
如果结构真实,则示例数据类。
- 参数:
condition (AST) -- 样本的条件(如果为真)
input (AST) -- 样本的输入如果为真。
initial (AST) -- 如果为真,则为样本的初始值。
- class pysd.translators.structures.abstract_expressions.LookupsStructure(x: tuple, y: tuple, x_limits: tuple, y_limits: tuple, type: str)[源代码]
查找结构的数据类。
- class pysd.translators.structures.abstract_expressions.InlineLookupsStructure(argument: AbstractSyntax | float, lookups: LookupsStructure)[源代码]
内联查找结构的数据类。
- 参数:
argument (AST) -- 内联查找的参数。
lookups (LookupStructure) -- Lookup的定义
- class pysd.translators.structures.abstract_expressions.GetLookupsStructure(file: str, tab: str, x_row_or_col: str, cell: str)[源代码]
获取查找结构的数据类。