抽象模型表示

抽象模型表示允许将转换和构建之间的关注点分开。转换涉及从将原始模型的源代码加载到内存中直到创建抽象模型表示所发生的任何事情。同样,构建将是抽象模型和模型源代码之间发生的一切,模型源代码是用与原始模型不同的编程语言编写的。这种方法可以轻松地将新代码包含到转换或构建过程中,而不会存在相互影响的风险。

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')[源代码]

常规组件的数据类。

参数:
  • subscripts (tuple) -- 长度为2的二元组,第一个参数是变量定义中的后缀列表,第二个参数是必须忽略的后缀列表(除外)。

  • ast (object) -- 组件表达的AbstractSyntaxTree

  • type (str (optional)) -- 组件类型。默认情况下为“辅助”。

  • subtype (str (optional)) -- 组件的子类型。默认情况下为“正常”。

dump(depth=None, indent='') str[源代码]

Dump the component to a printable version.

参数:
  • depth (int (optional)) -- 倾销输出中显示的深度级别数。默认为无,将转储所有内容。

  • indent (str (optional)) -- 用于较低级别对象的收件箱。默认为“”。

class pysd.translators.structures.abstract_model.AbstractUnchangeableConstant(subscripts: Tuple[List[str], List[List[str]]], ast: object, type: str = 'Constant', subtype: str = 'Unchangeable')[源代码]

不可更改的常数组件的数据类。这个类是AbstractElement的子类。

参数:
  • subscripts (tuple) -- 长度为2的二元组,第一个参数是变量定义中的后缀列表,第二个参数是必须忽略的后缀列表(除外)。

  • ast (object) -- 组件表达的AbstractSyntaxTree

  • type (str (optional)) -- 组件类型。默认情况下为“Constant”。

  • subtype (str (optional)) -- 组件的子类型。默认情况下“不可更改”。

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的子类。

参数:
  • subscripts (tuple) -- 长度为2的二元组,第一个参数是变量定义中的后缀列表,第二个参数是必须忽略的后缀列表(除外)。

  • ast (object) -- 组件表达的AbstractSyntaxTree

  • arguments (str (optional)) -- 要使用的参数的名称。默认情况下为“x”。

  • type (str (optional)) -- 组件类型。默认情况下为“卸载”。

  • subtype (str (optional)) -- 组件的子类型。默认情况下为“硬编码”。

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的子类。

参数:
  • subscripts (tuple) -- 长度为2的二元组,第一个参数是变量定义中的后缀列表,第二个参数是必须忽略的后缀列表(除外)。

  • ast (object) -- 组件表达的AbstractSyntaxTree

  • keyword (str or None (optional)) -- 数据对象关键字(“interpolate”、“hold_backward”、“look_forward”、“raw”)。默认为无。

  • type (str (optional)) -- 组件类型。默认情况下为“数据”。

  • subtype (str (optional)) -- 组件的子类型。默认情况下为“正常”。

dump(depth=None, indent='') str[源代码]

Dump the component to a printable version.

参数:
  • depth (int (optional)) -- 倾销输出中显示的深度级别数。默认为无,将转储所有内容。

  • indent (str (optional)) -- 用于较低级别对象的收件箱。默认为“”。

class pysd.translators.structures.abstract_model.AbstractElement(name: str, components: List[AbstractComponent], units: str = '', limits: tuple = (None, None), documentation: str = '')[源代码]

元素的数据类。

参数:
  • name (str) -- 元素的名称。

  • components (list) -- 定义此元素的AbstractComponents列表。

  • units (str (optional)) -- 元素的单位。默认情况下'。

  • limits (tuple (optional)) -- 元素的限制。(None默认情况下,无)。

  • units -- 元素的文档。默认情况下'。

dump(depth=None, indent='') str[源代码]

将元素转储为可打印版本。

参数:
  • depth (int (optional)) -- 倾销输出中显示的深度级别数。默认为无,将转储所有内容。

  • indent (str (optional)) -- 用于较低级别对象的收件箱。默认为“”。

class pysd.translators.structures.abstract_model.AbstractControlElement(name: str, components: List[AbstractComponent], units: str = '', limits: tuple = (None, None), documentation: str = '')[源代码]

控制元素的数据类。此类是AbstractElement的子类,并且具有相同的属性。

参数:
  • name (str) -- 元素的名称。

  • components (list) -- 定义此元素的AbstractComponents列表。

  • units (str (optional)) -- 元素的单位。默认情况下'。

  • limits (tuple (optional)) -- 元素的限制。(None默认情况下,无)。

  • units -- 元素的文档。默认情况下'。

class pysd.translators.structures.abstract_model.AbstractSubscriptRange(name: str, subscripts: list | str | dict, mapping: list)[源代码]

Dataclass for a subscript range.

参数:
  • name (str) -- 元素的名称。

  • subscripts (list or str or dict) -- 下标作为常规定义的字符串列表,str作为复制定义,作为GET XLS/DIRECT定义的字典。

  • mapping (list) -- 可以映射到的订阅范围列表。

dump(depth=None, indent='') str[源代码]

将脚注范围转储到可打印版本。

参数:
  • depth (int (optional)) -- 倾销输出中显示的深度级别数。默认为无,将转储所有内容。

  • indent (str (optional)) -- 用于较低级别对象的收件箱。默认为“”。

class pysd.translators.structures.abstract_model.AbstractConstraint(name: str, subscripts: list | str | dict, expression: str)[源代码]

约束的数据类

参数:
  • name (str) -- 约束变量的名称。

  • subscripts (list or str or dict) -- 下标作为常规定义的字符串列表,str作为复制定义,作为GET XLS/DIRECT定义的字典。

  • expression (str) -- 未分析的约束表达。

class pysd.translators.structures.abstract_model.AbstractTestInput(name: str, subscripts: list | str | dict, expression: str)[源代码]

测试输入的数据类

参数:
  • name (str) -- 测试输入变量的名称。

  • subscripts (list or str or dict) -- 下标作为常规定义的字符串列表,str作为复制定义,作为GET XLS/DIRECT定义的字典。

  • 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) -- 观点词典。给出任何级别分类的变量,以便按文件将它们拆分。

dump(depth=None, indent='') str[源代码]

将该部分转储为可打印版本。

参数:
  • depth (int (optional)) -- 倾销输出中显示的深度级别数。默认为无,将转储所有内容。

  • indent (str (optional)) -- 用于较低级别对象的收件箱。默认为“”。

class pysd.translators.structures.abstract_model.AbstractModel(original_path: Path, sections: Tuple[AbstractSection])[源代码]

模型的数据类。

参数:
  • original_path (pathlib.Path) -- 原始文件的路径。

  • sections (tuple) -- 模型中定义的AbstractSectionss的二元组。

dump(depth=None, indent='') str[源代码]

将模型转储为可打印版本。

参数:
  • depth (int (optional)) -- 倾销输出中显示的深度级别数。默认为无,将转储所有内容。

  • indent (str (optional)) -- 用于较低级别对象的收件箱。默认为“”。

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)[源代码]

算术结构的数据类。

参数:
  • operators (list) -- 在参数之间应用的运算符列表

  • arguments (list) -- 算术运算的参数。

class pysd.translators.structures.abstract_expressions.LogicStructure(operators: list, arguments: list)[源代码]

逻辑结构的数据类。

参数:
  • 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)[源代码]

元素引用结构的数据类。

参数:
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)[源代码]

分配可用结构的数据类。

参数:
class pysd.translators.structures.abstract_expressions.AllocateByPriorityStructure(request: AbstractSyntax, priority: AbstractSyntax, size: AbstractSyntax | int, width: AbstractSyntax | float, supply: AbstractSyntax | 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)[源代码]

查找结构的数据类。

参数:
  • x (tuple) -- 查找的x值列表。

  • y (tuple) -- 查找的y值列表。

  • x_limits (tuple) -- x的最小和最大值。

  • y_limits (tuple) -- y的最小和最大值。

  • 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.DataStructure[源代码]

空数据结构的数据类。

参数:

None

class pysd.translators.structures.abstract_expressions.GetLookupsStructure(file: str, tab: str, x_row_or_col: str, cell: str)[源代码]

获取查找结构的数据类。

参数:
  • file (str) -- 数据所在的文件路径。

  • tab (str) -- 读取数据的选项卡名称。如果文件类型不是电子表格,则将用作分隔符。

  • x_row_or_col (str) -- 指向定义插值系列数据的单元格或单元格范围名称的指针。

  • cell (str) -- 指向定义数据的单元格或单元格范围名称的指针。

class pysd.translators.structures.abstract_expressions.GetDataStructure(file: str, tab: str, time_row_or_col: str, cell: str)[源代码]

获取查找结构的数据类。

参数:
  • file (str) -- 数据所在的文件路径。

  • tab (str) -- 读取数据的选项卡名称。如果文件类型不是电子表格,则将用作分隔符。

  • time_row_or_col (str) -- 指向定义插值时间序列数据的单元格或单元格范围名称的指针。

  • cell (str) -- 指向定义数据的单元格或单元格范围名称的指针。

class pysd.translators.structures.abstract_expressions.GetConstantsStructure(file: str, tab: str, cell: str)[源代码]

获取查找结构的数据类。

参数:
  • file (str) -- 数据所在的文件路径。

  • tab (str) -- 读取数据的选项卡名称。如果文件类型不是电子表格,则将用作分隔符。

  • cell (str) -- 指向定义数据的单元格或单元格范围名称的指针。