Data models

Simulation input models

pydantic model pydss.simulation_input_models.SnapshotTimePointSelectionConfigModel[source]

Defines the user inputs for auto-selecting snapshot time points.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for auto-selecting snapshot time points.",
   "type": "object",
   "properties": {
      "mode": {
         "allOf": [
            {
               "$ref": "#/$defs/SnapshotTimePointSelectionMode"
            }
         ],
         "default": "none",
         "description": "Mode",
         "title": "mode"
      },
      "start_time": {
         "default": "2020-01-01T00:00:00",
         "description": "Start time in the load shape profiles",
         "format": "date-time",
         "title": "start_time",
         "type": "string"
      },
      "search_duration_min": {
         "default": 1440.0,
         "description": "Duration in minutes to search in the load shape profiles",
         "title": "search_duration_min",
         "type": "number"
      }
   },
   "$defs": {
      "SnapshotTimePointSelectionMode": {
         "description": "Defines methods by which snapshot time points can be calculated.",
         "enum": [
            "max_pv_load_ratio",
            "max_load",
            "daytime_min_load",
            "pv_minus_load",
            "none"
         ],
         "title": "SnapshotTimePointSelectionMode",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field mode: NONE: 'none'>, title='mode', description='Mode')] = SnapshotTimePointSelectionMode.NONE

Mode

field search_duration_min: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=1440.0, title='search_duration_min', description='Duration in minutes to search in the load shape profiles')] = 1440.0

Duration in minutes to search in the load shape profiles

field start_time: Annotated[datetime, FieldInfo(annotation=NoneType, required=False, default=datetime.datetime(2020, 1, 1, 0, 0), title='start_time', description='Start time in the load shape profiles')] = datetime.datetime(2020, 1, 1, 0, 0)

Start time in the load shape profiles

Validated by:
validator double  »  start_time[source]
pydantic model pydss.simulation_input_models.ScenarioPostProcessModel[source]

Defines user inputs for a scenario post-process script.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines user inputs for a scenario post-process script.",
   "type": "object",
   "properties": {
      "script": {
         "default": "",
         "description": "Post-process script",
         "title": "script",
         "type": "string"
      },
      "config_file": {
         "description": "Post-process config file",
         "title": "config_file",
         "type": "string"
      }
   },
   "additionalProperties": false,
   "required": [
      "config_file"
   ]
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field config_file: Annotated[str, FieldInfo(annotation=NoneType, required=True, title='config_file', description='Post-process config file')] [Required]

Post-process config file

field script: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='', title='script', description='Post-process script')] = ''

Post-process script

pydantic model pydss.simulation_input_models.ScenarioModel[source]

Defines the user inputs for a scenario.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for a scenario.",
   "type": "object",
   "properties": {
      "name": {
         "description": "Name of scenario",
         "title": "name",
         "type": "string"
      },
      "post_process_infos": {
         "default": [],
         "description": "Post-process script descriptors",
         "items": {
            "$ref": "#/$defs/ScenarioPostProcessModel"
         },
         "title": "post_process_infos",
         "type": "array"
      },
      "snapshot_time_point_selection_config": {
         "allOf": [
            {
               "$ref": "#/$defs/SnapshotTimePointSelectionConfigModel"
            }
         ],
         "default": {
            "mode": "none",
            "start_time": "2020-01-01T00:00:00",
            "search_duration_min": 1440.0
         },
         "description": "Descriptor for auto-selecting snapshot time points",
         "title": "snapshot_time_point_selection_config"
      }
   },
   "$defs": {
      "ScenarioPostProcessModel": {
         "additionalProperties": false,
         "description": "Defines user inputs for a scenario post-process script.",
         "properties": {
            "script": {
               "default": "",
               "description": "Post-process script",
               "title": "script",
               "type": "string"
            },
            "config_file": {
               "description": "Post-process config file",
               "title": "config_file",
               "type": "string"
            }
         },
         "required": [
            "config_file"
         ],
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SnapshotTimePointSelectionConfigModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for auto-selecting snapshot time points.",
         "properties": {
            "mode": {
               "allOf": [
                  {
                     "$ref": "#/$defs/SnapshotTimePointSelectionMode"
                  }
               ],
               "default": "none",
               "description": "Mode",
               "title": "mode"
            },
            "start_time": {
               "default": "2020-01-01T00:00:00",
               "description": "Start time in the load shape profiles",
               "format": "date-time",
               "title": "start_time",
               "type": "string"
            },
            "search_duration_min": {
               "default": 1440.0,
               "description": "Duration in minutes to search in the load shape profiles",
               "title": "search_duration_min",
               "type": "number"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SnapshotTimePointSelectionMode": {
         "description": "Defines methods by which snapshot time points can be calculated.",
         "enum": [
            "max_pv_load_ratio",
            "max_load",
            "daytime_min_load",
            "pv_minus_load",
            "none"
         ],
         "title": "SnapshotTimePointSelectionMode",
         "type": "string"
      }
   },
   "additionalProperties": false,
   "required": [
      "name"
   ]
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field name: Annotated[str, FieldInfo(annotation=NoneType, required=True, title='name', description='Name of scenario')] [Required]

Name of scenario

field post_process_infos: Annotated[List[ScenarioPostProcessModel], FieldInfo(annotation=NoneType, required=False, default=[], title='post_process_infos', description='Post-process script descriptors')] = []

Post-process script descriptors

field snapshot_time_point_selection_config: 0), title='snapshot_time_point_selection_config', description='Descriptor for auto-selecting snapshot time points')] = SnapshotTimePointSelectionConfigModel(mode=<SnapshotTimePointSelectionMode.NONE: 'none'>, start_time=datetime.datetime(2020, 1, 1, 0, 0), search_duration_min=1440.0)

Descriptor for auto-selecting snapshot time points

pydantic model pydss.simulation_input_models.ProjectModel[source]

Defines the user inputs for the project.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the project.",
   "type": "object",
   "properties": {
      "Project Path": {
         "anyOf": [
            {
               "format": "path",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "Base path of project. Join with 'active_project' to get full path",
         "title": "project_path"
      },
      "Active Project": {
         "anyOf": [
            {
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "Active project name. Join with 'project_path' to get full path",
         "title": "active_project"
      },
      "active_project_path": {
         "anyOf": [
            {
               "format": "path",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "Path to project. Auto-generated.",
         "title": "active_project_path"
      },
      "Scenarios": {
         "anyOf": [
            {
               "items": {
                  "$ref": "#/$defs/ScenarioModel"
               },
               "type": "array"
            },
            {
               "type": "null"
            }
         ],
         "default": [],
         "description": "List of scenarios",
         "title": "scenarios"
      },
      "Active Scenario": {
         "anyOf": [
            {
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "",
         "description": "Name of active scenario",
         "title": "active_scenario"
      },
      "Start time": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2020-01-01T00:00:00",
         "description": "Start time of simulation",
         "title": "start_time"
      },
      "simulation_duration_min": {
         "anyOf": [
            {
               "type": "number"
            },
            {
               "type": "null"
            }
         ],
         "default": 1440.0,
         "description": "Simulation duration in minutes.",
         "title": "simulation_duration_min"
      },
      "Step resolution (sec)": {
         "anyOf": [
            {
               "type": "number"
            },
            {
               "type": "null"
            }
         ],
         "default": 900.0,
         "description": "Time step resolution in seconds",
         "title": "step_resolution_sec"
      },
      "Loadshape start time": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2020-01-01 00:00:00.0",
         "description": "Start time of loadshape profiles",
         "title": "loadshape_start_time"
      },
      "Simulation range": {
         "anyOf": [
            {
               "$ref": "#/$defs/SimulationRangeModel"
            },
            {
               "type": "null"
            }
         ],
         "default": {
            "start": "00:00:00",
            "end": "23:59:59"
         },
         "description": "Restrict control algorithms and data collection to these hours. Useful for skipping night when simulating PV Systems.",
         "title": "simulation_range"
      },
      "Simulation Type": {
         "allOf": [
            {
               "$ref": "#/$defs/SimulationType"
            }
         ],
         "default": "qsts",
         "description": "Type of simulation to run.",
         "title": "simulation_type"
      },
      "Control mode": {
         "allOf": [
            {
               "$ref": "#/$defs/ControlMode"
            }
         ],
         "default": "Static",
         "description": "Simulation control mode",
         "title": "control_mode"
      },
      "Max Control Iterations": {
         "default": 50,
         "description": "Maximum outer loop control iterations",
         "title": "max_control_iterations",
         "type": "integer"
      },
      "Convergence error percent threshold": {
         "default": 0.0,
         "description": "Convergence error threshold as a percent",
         "title": "convergence_error_percent_threshold",
         "type": "number"
      },
      "Error tolerance": {
         "default": 0.001,
         "description": "Error tolerance in per unit",
         "title": "error_tolerance",
         "type": "number"
      },
      "Max error tolerance": {
         "default": 0.0,
         "description": "Abort simulation if a convergence error exceeds this value.",
         "title": "max_error_tolerance",
         "type": "number"
      },
      "Skip export on convergence error": {
         "default": true,
         "description": "Do not export data at a time point if there is a convergence error.",
         "title": "skip_export_on_convergence_error",
         "type": "boolean"
      },
      "DSS File": {
         "default": "Master.dss",
         "description": "OpenDSS master filename",
         "title": "dss_file",
         "type": "string"
      },
      "DSS File Absolute Path": {
         "default": false,
         "description": "Set to true if 'dss_file' is an absolute path.",
         "title": "dss_file_absolute_path",
         "type": "boolean"
      },
      "Disable pydss controllers": {
         "default": false,
         "description": "Allows disabling of the control algorithms",
         "title": "disable_pydss_controllers",
         "type": "boolean"
      },
      "Use Controller Registry": {
         "default": false,
         "description": "Use local controller registry.",
         "title": "use_controller_registry",
         "type": "boolean"
      }
   },
   "$defs": {
      "ControlMode": {
         "description": "Supported control modes",
         "enum": [
            "Static",
            "Time"
         ],
         "title": "ControlMode",
         "type": "string"
      },
      "ScenarioModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for a scenario.",
         "properties": {
            "name": {
               "description": "Name of scenario",
               "title": "name",
               "type": "string"
            },
            "post_process_infos": {
               "default": [],
               "description": "Post-process script descriptors",
               "items": {
                  "$ref": "#/$defs/ScenarioPostProcessModel"
               },
               "title": "post_process_infos",
               "type": "array"
            },
            "snapshot_time_point_selection_config": {
               "allOf": [
                  {
                     "$ref": "#/$defs/SnapshotTimePointSelectionConfigModel"
                  }
               ],
               "default": {
                  "mode": "none",
                  "start_time": "2020-01-01T00:00:00",
                  "search_duration_min": 1440.0
               },
               "description": "Descriptor for auto-selecting snapshot time points",
               "title": "snapshot_time_point_selection_config"
            }
         },
         "required": [
            "name"
         ],
         "title": "InputsBaseModel",
         "type": "object"
      },
      "ScenarioPostProcessModel": {
         "additionalProperties": false,
         "description": "Defines user inputs for a scenario post-process script.",
         "properties": {
            "script": {
               "default": "",
               "description": "Post-process script",
               "title": "script",
               "type": "string"
            },
            "config_file": {
               "description": "Post-process config file",
               "title": "config_file",
               "type": "string"
            }
         },
         "required": [
            "config_file"
         ],
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SimulationRangeModel": {
         "additionalProperties": false,
         "description": "Governs time range when control algorithms can run in a simulation. Does not affect\nsimulation times.",
         "properties": {
            "start": {
               "default": "00:00:00",
               "description": "Time to start running control algorithms each day.",
               "title": "start",
               "type": "string"
            },
            "end": {
               "default": "23:59:59",
               "description": "Time to stop running control algorithms each day.",
               "title": "end",
               "type": "string"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SimulationType": {
         "description": "Supported simulation types",
         "enum": [
            "dynamic",
            "qsts",
            "snapshot"
         ],
         "title": "SimulationType",
         "type": "string"
      },
      "SnapshotTimePointSelectionConfigModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for auto-selecting snapshot time points.",
         "properties": {
            "mode": {
               "allOf": [
                  {
                     "$ref": "#/$defs/SnapshotTimePointSelectionMode"
                  }
               ],
               "default": "none",
               "description": "Mode",
               "title": "mode"
            },
            "start_time": {
               "default": "2020-01-01T00:00:00",
               "description": "Start time in the load shape profiles",
               "format": "date-time",
               "title": "start_time",
               "type": "string"
            },
            "search_duration_min": {
               "default": 1440.0,
               "description": "Duration in minutes to search in the load shape profiles",
               "title": "search_duration_min",
               "type": "number"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SnapshotTimePointSelectionMode": {
         "description": "Defines methods by which snapshot time points can be calculated.",
         "enum": [
            "max_pv_load_ratio",
            "max_load",
            "daytime_min_load",
            "pv_minus_load",
            "none"
         ],
         "title": "SnapshotTimePointSelectionMode",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field active_project: Annotated[str | None, FieldInfo(annotation=NoneType, required=False, alias='Active Project', alias_priority=2, title='active_project', description="Active project name. Join with 'project_path' to get full path")] = None (alias 'Active Project')

Active project name. Join with ‘project_path’ to get full path

Validated by:
field active_project_path: Annotated[Path | None, FieldInfo(annotation=NoneType, required=False, title='active_project_path', description='Path to project. Auto-generated.')] = None

Path to project. Auto-generated.

Validated by:
field active_scenario: Annotated[str | None, FieldInfo(annotation=NoneType, required=False, default='', alias='Active Scenario', alias_priority=2, title='active_scenario', description='Name of active scenario')] = '' (alias 'Active Scenario')

Name of active scenario

Validated by:
field control_mode: STATIC: 'Static'>, alias='Control mode', alias_priority=2, title='control_mode', description='Simulation control mode')] = ControlMode.STATIC (alias 'Control mode')

Simulation control mode

Validated by:
field convergence_error_percent_threshold: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=0.0, alias='Convergence error percent threshold', alias_priority=2, title='convergence_error_percent_threshold', description='Convergence error threshold as a percent')] = 0.0 (alias 'Convergence error percent threshold')

Convergence error threshold as a percent

Validated by:
field disable_pydss_controllers: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Disable pydss controllers', alias_priority=2, title='disable_pydss_controllers', description='Allows disabling of the control algorithms')] = False (alias 'Disable pydss controllers')

Allows disabling of the control algorithms

Validated by:
field dss_file: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Master.dss', alias='DSS File', alias_priority=2, title='dss_file', description='OpenDSS master filename')] = 'Master.dss' (alias 'DSS File')

OpenDSS master filename

Validated by:
field dss_file_absolute_path: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='DSS File Absolute Path', alias_priority=2, title='dss_file_absolute_path', description="Set to true if 'dss_file' is an absolute path.")] = False (alias 'DSS File Absolute Path')

Set to true if ‘dss_file’ is an absolute path.

Validated by:
field error_tolerance: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=0.001, alias='Error tolerance', alias_priority=2, title='error_tolerance', description='Error tolerance in per unit')] = 0.001 (alias 'Error tolerance')

Error tolerance in per unit

Validated by:
field loadshape_start_time: Annotated[datetime | None, FieldInfo(annotation=NoneType, required=False, default='2020-01-01 00:00:00.0', alias='Loadshape start time', alias_priority=2, title='loadshape_start_time', description='Start time of loadshape profiles')] = '2020-01-01 00:00:00.0' (alias 'Loadshape start time')

Start time of loadshape profiles

Validated by:
field max_control_iterations: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=50, alias='Max Control Iterations', alias_priority=2, title='max_control_iterations', description='Maximum outer loop control iterations')] = 50 (alias 'Max Control Iterations')

Maximum outer loop control iterations

Validated by:
field max_error_tolerance: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=0.0, alias='Max error tolerance', alias_priority=2, title='max_error_tolerance', description='Abort simulation if a convergence error exceeds this value.')] = 0.0 (alias 'Max error tolerance')

Abort simulation if a convergence error exceeds this value.

Validated by:
field project_path: Annotated[Path | None, FieldInfo(annotation=NoneType, required=False, alias='Project Path', alias_priority=2, title='project_path', description="Base path of project. Join with 'active_project' to get full path")] = None (alias 'Project Path')

Base path of project. Join with ‘active_project’ to get full path

Validated by:
field scenarios: Annotated[List[ScenarioModel] | None, FieldInfo(annotation=NoneType, required=False, default=[], alias='Scenarios', alias_priority=2, title='scenarios', description='List of scenarios')] = [] (alias 'Scenarios')

List of scenarios

Validated by:
field simulation_duration_min: Annotated[float | None, FieldInfo(annotation=NoneType, required=False, default=1440.0, title='simulation_duration_min', description='Simulation duration in minutes.')] = 1440.0

Simulation duration in minutes.

Validated by:
field simulation_range: Annotated[SimulationRangeModel | None, FieldInfo(annotation=NoneType, required=False, default=SimulationRangeModel(start='00:00:00', end='23:59:59'), alias='Simulation range', alias_priority=2, title='simulation_range', description='Restrict control algorithms and data collection to these hours. Useful for skipping night when simulating PV Systems.')] = SimulationRangeModel(start='00:00:00', end='23:59:59') (alias 'Simulation range')

Restrict control algorithms and data collection to these hours. Useful for skipping night when simulating PV Systems.

Validated by:
field simulation_type: ')] = SimulationType.QSTS (alias 'Simulation Type')

Type of simulation to run.

Validated by:
field skip_export_on_convergence_error: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, alias='Skip export on convergence error', alias_priority=2, title='skip_export_on_convergence_error', description='Do not export data at a time point if there is a convergence error.')] = True (alias 'Skip export on convergence error')

Do not export data at a time point if there is a convergence error.

Validated by:
field start_time: Annotated[datetime | None, FieldInfo(annotation=NoneType, required=False, default=datetime.datetime(2020, 1, 1, 0, 0), alias='Start time', alias_priority=2, title='start_time', description='Start time of simulation')] = datetime.datetime(2020, 1, 1, 0, 0) (alias 'Start time')

Start time of simulation

Validated by:
field step_resolution_sec: Annotated[float | None, FieldInfo(annotation=NoneType, required=False, default=900.0, alias='Step resolution (sec)', alias_priority=2, title='step_resolution_sec', description='Time step resolution in seconds')] = 900.0 (alias 'Step resolution (sec)')

Time step resolution in seconds

Validated by:
field use_controller_registry: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Use Controller Registry', alias_priority=2, title='use_controller_registry', description='Use local controller registry.')] = False (alias 'Use Controller Registry')

Use local controller registry.

Validated by:
validator assign_active_project_path  »  all fields[source]
validator check_active_project  »  all fields[source]
validator check_project_path  »  project_path[source]
validator check_scenarios  »  all fields[source]
dict(*args, **kwargs)[source]
validator double  »  start_time, loadshape_start_time[source]
validator pre_process  »  all fields[source]
pydantic model pydss.simulation_input_models.ExportsModel[source]

Defines the user inputs for defining data exports.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for defining data exports.",
   "type": "object",
   "properties": {
      "Log Results": {
         "default": false,
         "description": "Set to true to export circuit element values at each time point.",
         "title": "export_results",
         "type": "boolean"
      },
      "Export Elements": {
         "default": true,
         "description": "Set to true to export static information for all circuit elements.",
         "title": "export_elements",
         "type": "boolean"
      },
      "Export Element Types": {
         "default": [],
         "description": "Restrict 'export_elements' to these element types. Default is all types",
         "items": {},
         "title": "export_element_types",
         "type": "array"
      },
      "Export Data Tables": {
         "default": true,
         "description": "Set to true to export circuit element data in tabular files. While it does duplicate data, it provides a way to preserve a human-readable dataset that does not require pydss to interpret.",
         "title": "export_data_tables",
         "type": "boolean"
      },
      "Export PV Profiles": {
         "default": false,
         "description": "Set to true to export PV profiles to tabular files.",
         "title": "export_pv_profiles",
         "type": "boolean"
      },
      "Export Data In Memory": {
         "default": false,
         "description": "Set to true to keep circuit element data in memory rather than periodically flushing to an HDF5 file. This can be faster but will consume more memory.",
         "title": "export_data_in_memory",
         "type": "boolean"
      },
      "Export Node Names By Type": {
         "default": false,
         "description": "Set to true to export node names by primary/secondary type to a file.",
         "title": "export_node_names_by_type",
         "type": "boolean"
      },
      "Export Event Log": {
         "default": true,
         "description": "Set to true to export the OpenDSS event log.",
         "title": "export_event_log",
         "type": "boolean"
      },
      "Export Format": {
         "allOf": [
            {
               "$ref": "#/$defs/FileFormat"
            }
         ],
         "default": "h5",
         "description": "Controls the file format used if export_data_tables is true.",
         "title": "export_format"
      },
      "Export Compression": {
         "default": false,
         "description": "Set to true to compress data exported with 'export_data_tables'.",
         "title": "export_compression",
         "type": "boolean"
      },
      "HDF Max Chunk Bytes": {
         "default": 1048576,
         "description": "The chunk size in bytes to use for exported data in the HDF5 data store. The value is passed to the h5py package. Refer to http://docs.h5py.org/en/stable/high/dataset.html#chunked-storage for more information.",
         "title": "hdf_max_chunk_bytes",
         "type": "integer"
      }
   },
   "$defs": {
      "FileFormat": {
         "description": "Supported file formats",
         "enum": [
            "csv",
            "h5"
         ],
         "title": "FileFormat",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field export_compression: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Export Compression', alias_priority=2, title='export_compression', description="Set to true to compress data exported with 'export_data_tables'.")] = False (alias 'Export Compression')

Set to true to compress data exported with ‘export_data_tables’.

Validated by:
field export_data_in_memory: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Export Data In Memory', alias_priority=2, title='export_data_in_memory', description='Set to true to keep circuit element data in memory rather than periodically flushing to an HDF5 file. This can be faster but will consume more memory.')] = False (alias 'Export Data In Memory')

Set to true to keep circuit element data in memory rather than periodically flushing to an HDF5 file. This can be faster but will consume more memory.

Validated by:
field export_data_tables: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, alias='Export Data Tables', alias_priority=2, title='export_data_tables', description='Set to true to export circuit element data in tabular files. While it does duplicate data, it provides a way to preserve a human-readable dataset that does not require pydss to interpret.')] = True (alias 'Export Data Tables')

Set to true to export circuit element data in tabular files. While it does duplicate data, it provides a way to preserve a human-readable dataset that does not require pydss to interpret.

Validated by:
field export_element_types: Annotated[list, FieldInfo(annotation=NoneType, required=False, default=[], alias='Export Element Types', alias_priority=2, title='export_element_types', description="Restrict 'export_elements' to these element types. Default is all types")] = [] (alias 'Export Element Types')

Restrict ‘export_elements’ to these element types. Default is all types

Validated by:
field export_elements: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, alias='Export Elements', alias_priority=2, title='export_elements', description='Set to true to export static information for all circuit elements.')] = True (alias 'Export Elements')

Set to true to export static information for all circuit elements.

Validated by:
field export_event_log: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, alias='Export Event Log', alias_priority=2, title='export_event_log', description='Set to true to export the OpenDSS event log.')] = True (alias 'Export Event Log')

Set to true to export the OpenDSS event log.

Validated by:
field export_format: ')] = FileFormat.HDF5 (alias 'Export Format')

Controls the file format used if export_data_tables is true.

Validated by:
field export_node_names_by_type: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Export Node Names By Type', alias_priority=2, title='export_node_names_by_type', description='Set to true to export node names by primary/secondary type to a file.')] = False (alias 'Export Node Names By Type')

Set to true to export node names by primary/secondary type to a file.

Validated by:
field export_pv_profiles: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Export PV Profiles', alias_priority=2, title='export_pv_profiles', description='Set to true to export PV profiles to tabular files.')] = False (alias 'Export PV Profiles')

Set to true to export PV profiles to tabular files.

Validated by:
field export_results: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Log Results', alias_priority=2, title='export_results', description='Set to true to export circuit element values at each time point.')] = False (alias 'Log Results')

Set to true to export circuit element values at each time point.

Validated by:
field hdf_max_chunk_bytes: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=1048576, alias='HDF Max Chunk Bytes', alias_priority=2, title='hdf_max_chunk_bytes', description='The chunk size in bytes to use for exported data in the HDF5 data store. The value is passed to the h5py package. Refer to http://docs.h5py.org/en/stable/high/dataset.html#chunked-storage for more information.')] = 1048576 (alias 'HDF Max Chunk Bytes')

The chunk size in bytes to use for exported data in the HDF5 data store. The value is passed to the h5py package. Refer to http://docs.h5py.org/en/stable/high/dataset.html#chunked-storage for more information.

Validated by:
validator check_hdf_max_chunk_bytes  »  hdf_max_chunk_bytes[source]
validator pre_process  »  all fields[source]
pydantic model pydss.simulation_input_models.FrequencyModel[source]

Defines the user inputs for defining frequency parameters.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for defining frequency parameters.",
   "type": "object",
   "properties": {
      "Enable frequency sweep": {
         "default": false,
         "description": "Enable harmonic sweep. Works with only 'Static' and 'QSTS' simulation modes.",
         "title": "enable_frequency_sweep",
         "type": "boolean"
      },
      "Fundamental frequency": {
         "default": 60.0,
         "description": "Fundamental system frequeny in Hertz",
         "title": "fundamental_frequency",
         "type": "number"
      },
      "Start frequency": {
         "default": 1.0,
         "description": "Start system frequeny in Hertz",
         "title": "start_frequency",
         "type": "number"
      },
      "End frequency": {
         "default": 15.0,
         "description": "End system frequeny in Hertz",
         "title": "end_frequency",
         "type": "number"
      },
      "frequency increment": {
         "default": 2.0,
         "description": "As multiple of fundamental",
         "title": "frequency_increment",
         "type": "number"
      },
      "Neglect shunt admittance": {
         "default": false,
         "description": "Neglect shunt addmittance for frequency sweep",
         "title": "neglect_shunt_admittance",
         "type": "boolean"
      },
      "Percentage load in series": {
         "default": 50.0,
         "description": "Percent of load that is series RL for Harmonic studies",
         "title": "percentage_load_in_series",
         "type": "number"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field enable_frequency_sweep: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Enable frequency sweep', alias_priority=2, title='enable_frequency_sweep', description="Enable harmonic sweep. Works with only 'Static' and 'QSTS' simulation modes.")] = False (alias 'Enable frequency sweep')

Enable harmonic sweep. Works with only ‘Static’ and ‘QSTS’ simulation modes.

Validated by:
field end_frequency: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=15.0, alias='End frequency', alias_priority=2, title='end_frequency', description='End system frequeny in Hertz')] = 15.0 (alias 'End frequency')

End system frequeny in Hertz

Validated by:
field frequency_increment: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=2.0, alias='frequency increment', alias_priority=2, title='frequency_increment', description='As multiple of fundamental')] = 2.0 (alias 'frequency increment')

As multiple of fundamental

Validated by:
field fundamental_frequency: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=60.0, alias='Fundamental frequency', alias_priority=2, title='fundamental_frequency', description='Fundamental system frequeny in Hertz')] = 60.0 (alias 'Fundamental frequency')

Fundamental system frequeny in Hertz

Validated by:
field neglect_shunt_admittance: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Neglect shunt admittance', alias_priority=2, title='neglect_shunt_admittance', description='Neglect shunt addmittance for frequency sweep')] = False (alias 'Neglect shunt admittance')

Neglect shunt addmittance for frequency sweep

Validated by:
field percentage_load_in_series: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=50.0, alias='Percentage load in series', alias_priority=2, title='percentage_load_in_series', description='Percent of load that is series RL for Harmonic studies')] = 50.0 (alias 'Percentage load in series')

Percent of load that is series RL for Harmonic studies

Validated by:
field start_frequency: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=1.0, alias='Start frequency', alias_priority=2, title='start_frequency', description='Start system frequeny in Hertz')] = 1.0 (alias 'Start frequency')

Start system frequeny in Hertz

Validated by:
validator check_end_frequency  »  all fields[source]
validator check_fundamental_frequency  »  fundamental_frequency[source]
validator check_percentage_load_in_series  »  percentage_load_in_series[source]
pydantic model pydss.simulation_input_models.HelicsModel[source]

Defines the user inputs for HELICS.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for HELICS.",
   "type": "object",
   "properties": {
      "Co-simulation Mode": {
         "default": false,
         "description": "Set to true to enable the HELICS interface for co-simulation.",
         "title": "co_simulation_mode",
         "type": "boolean"
      },
      "Iterative Mode": {
         "default": false,
         "description": "Iterative mode",
         "title": "iterative_mode",
         "type": "boolean"
      },
      "Error tolerance": {
         "default": 0.0001,
         "description": "Error tolerance",
         "title": "error_tolerance",
         "type": "number"
      },
      "Max co-iterations": {
         "default": 15,
         "description": "Max number of co-simulation iterations",
         "title": "max_co_iterations",
         "type": "integer"
      },
      "Broker": {
         "default": "mainbroker",
         "description": "Broker name",
         "title": "broker",
         "type": "string"
      },
      "Broker port": {
         "default": 0,
         "description": "Broker port",
         "title": "broker_port",
         "type": "integer"
      },
      "Federate name": {
         "default": "pydss",
         "description": "Name of the federate",
         "title": "federate_name",
         "type": "string"
      },
      "Time delta": {
         "default": 0.01,
         "description": "The property controlling the minimum time delta for a federate.",
         "title": "time_delta",
         "type": "number"
      },
      "Core type": {
         "default": "zmq",
         "description": "Core type to be use for communication",
         "title": "core_type",
         "type": "string"
      },
      "Uninterruptible": {
         "default": true,
         "description": "Can the federate be interrupted",
         "title": "uninterruptible",
         "type": "boolean"
      },
      "Helics logging level": {
         "default": 5,
         "description": "Logging level for the federate. Refer to HELICS documentation.",
         "title": "logging_level",
         "type": "integer"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field broker: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='mainbroker', alias='Broker', alias_priority=2, title='broker', description='Broker name')] = 'mainbroker' (alias 'Broker')

Broker name

field broker_port: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=0, alias='Broker port', alias_priority=2, title='broker_port', description='Broker port')] = 0 (alias 'Broker port')

Broker port

field co_simulation_mode: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Co-simulation Mode', alias_priority=2, title='co_simulation_mode', description='Set to true to enable the HELICS interface for co-simulation.')] = False (alias 'Co-simulation Mode')

Set to true to enable the HELICS interface for co-simulation.

field core_type: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='zmq', alias='Core type', alias_priority=2, title='core_type', description='Core type to be use for communication')] = 'zmq' (alias 'Core type')

Core type to be use for communication

field error_tolerance: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=0.0001, alias='Error tolerance', alias_priority=2, title='error_tolerance', description='Error tolerance')] = 0.0001 (alias 'Error tolerance')

Error tolerance

field federate_name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='pydss', alias='Federate name', alias_priority=2, title='federate_name', description='Name of the federate')] = 'pydss' (alias 'Federate name')

Name of the federate

field iterative_mode: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Iterative Mode', alias_priority=2, title='iterative_mode', description='Iterative mode')] = False (alias 'Iterative Mode')

Iterative mode

field logging_level: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=5, alias='Helics logging level', alias_priority=2, title='logging_level', description='Logging level for the federate. Refer to HELICS documentation.')] = 5 (alias 'Helics logging level')

Logging level for the federate. Refer to HELICS documentation.

Validated by:
field max_co_iterations: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=15, alias='Max co-iterations', alias_priority=2, title='max_co_iterations', description='Max number of co-simulation iterations')] = 15 (alias 'Max co-iterations')

Max number of co-simulation iterations

Validated by:
field time_delta: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=0.01, alias='Time delta', alias_priority=2, title='time_delta', description='The property controlling the minimum time delta for a federate.')] = 0.01 (alias 'Time delta')

The property controlling the minimum time delta for a federate.

field uninterruptible: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, alias='Uninterruptible', alias_priority=2, title='uninterruptible', description='Can the federate be interrupted')] = True (alias 'Uninterruptible')

Can the federate be interrupted

validator check_logging_level  »  logging_level[source]
validator check_max_co_iterations  »  max_co_iterations[source]
pydantic model pydss.simulation_input_models.LoggingModel[source]

Defines the user inputs for controlling logging.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for controlling logging.",
   "type": "object",
   "properties": {
      "Logging Level": {
         "anyOf": [
            {
               "$ref": "#/$defs/LoggingLevel"
            },
            {
               "type": "null"
            }
         ],
         "default": "info",
         "description": "Pydss minimum logging level",
         "title": "logging_level"
      },
      "Display on screen": {
         "anyOf": [
            {
               "type": "boolean"
            },
            {
               "type": "null"
            }
         ],
         "default": true,
         "description": "Set to true to enable console logging.",
         "title": "enable_console"
      },
      "Log to external file": {
         "anyOf": [
            {
               "type": "boolean"
            },
            {
               "type": "null"
            }
         ],
         "default": true,
         "description": "Set to true to enable logging to a file.",
         "title": "enable_file"
      },
      "Clear old log file": {
         "anyOf": [
            {
               "type": "boolean"
            },
            {
               "type": "null"
            }
         ],
         "default": false,
         "description": "Set to true to clear and overwrite any existing log files.",
         "title": "clear_old_log_file"
      },
      "Log time step updates": {
         "anyOf": [
            {
               "type": "boolean"
            },
            {
               "type": "null"
            }
         ],
         "default": true,
         "description": "Set to true to log each completed time step.",
         "title": "log_time_step_updates"
      }
   },
   "$defs": {
      "LoggingLevel": {
         "description": "Supported logging levels",
         "enum": [
            "debug",
            "info",
            "warning",
            "error"
         ],
         "title": "LoggingLevel",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field clear_old_log_file: Annotated[bool | None, FieldInfo(annotation=NoneType, required=False, default=False, alias='Clear old log file', alias_priority=2, title='clear_old_log_file', description='Set to true to clear and overwrite any existing log files.')] = False (alias 'Clear old log file')

Set to true to clear and overwrite any existing log files.

Validated by:
field enable_console: Annotated[bool | None, FieldInfo(annotation=NoneType, required=False, default=True, alias='Display on screen', alias_priority=2, title='enable_console', description='Set to true to enable console logging.')] = True (alias 'Display on screen')

Set to true to enable console logging.

Validated by:
field enable_file: Annotated[bool | None, FieldInfo(annotation=NoneType, required=False, default=True, alias='Log to external file', alias_priority=2, title='enable_file', description='Set to true to enable logging to a file.')] = True (alias 'Log to external file')

Set to true to enable logging to a file.

Validated by:
field log_time_step_updates: Annotated[bool | None, FieldInfo(annotation=NoneType, required=False, default=True, alias='Log time step updates', alias_priority=2, title='log_time_step_updates', description='Set to true to log each completed time step.')] = True (alias 'Log time step updates')

Set to true to log each completed time step.

Validated by:
field logging_level: INFO: 'info'>, alias='Logging Level', alias_priority=2, title='logging_level', description='Pydss minimum logging level')] = LoggingLevel.INFO (alias 'Logging Level')

Pydss minimum logging level

Validated by:
validator pre_process  »  all fields[source]
pydantic model pydss.simulation_input_models.MonteCarloModel[source]

Defines the user inputs for Monte Carlo simulations.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for Monte Carlo simulations.",
   "type": "object",
   "properties": {
      "Number of Monte Carlo scenarios": {
         "default": -1,
         "description": "Number of Monte Carlo scenarios",
         "title": "num_scenarios",
         "type": "integer"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field num_scenarios: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=-1, alias='Number of Monte Carlo scenarios', alias_priority=2, title='num_scenarios', description='Number of Monte Carlo scenarios')] = -1 (alias 'Number of Monte Carlo scenarios')

Number of Monte Carlo scenarios

pydantic model pydss.simulation_input_models.ProfilesModel[source]

Defines user inputs for the Profile Manager.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines user inputs for the Profile Manager.",
   "type": "object",
   "properties": {
      "Use profile manager": {
         "default": false,
         "description": "Set to true to enable the Profile Manager.",
         "title": "use_profile_manager",
         "type": "boolean"
      },
      "source_type": {
         "anyOf": [
            {
               "$ref": "#/$defs/FileFormat"
            },
            {
               "type": "null"
            }
         ],
         "default": "h5",
         "description": "File format for source data",
         "title": "source_type"
      },
      "source": {
         "default": "Profiles_backup.hdf5",
         "description": "File containing source data",
         "title": "source",
         "type": "string"
      },
      "Profile mapping": {
         "default": "",
         "description": "Profile mapping",
         "title": "profile_mapping",
         "type": "string"
      },
      "is_relative_path": {
         "default": true,
         "description": "Source file path is relative",
         "title": "is_relative_path",
         "type": "boolean"
      },
      "settings": {
         "default": {},
         "description": "Profiles settings",
         "title": "settings",
         "type": "object"
      }
   },
   "$defs": {
      "FileFormat": {
         "description": "Supported file formats",
         "enum": [
            "csv",
            "h5"
         ],
         "title": "FileFormat",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field is_relative_path: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, title='is_relative_path', description='Source file path is relative')] = True

Source file path is relative

Validated by:
field profile_mapping: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='', alias='Profile mapping', alias_priority=2, title='profile_mapping', description='Profile mapping')] = '' (alias 'Profile mapping')

Profile mapping

Validated by:
field settings: Dict, FieldInfo(annotation=NoneType, required=False, default={}, title='settings', description='Profiles settings')] = {}

Profiles settings

Validated by:
field source: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Profiles_backup.hdf5', title='source', description='File containing source data')] = 'Profiles_backup.hdf5'

File containing source data

Validated by:
field source_type: FileFormat | None = FileFormat.HDF5

File format for source data

Validated by:
field use_profile_manager: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, alias='Use profile manager', alias_priority=2, title='use_profile_manager', description='Set to true to enable the Profile Manager.')] = False (alias 'Use profile manager')

Set to true to enable the Profile Manager.

Validated by:
validator pre_process  »  all fields[source]
pydantic model pydss.simulation_input_models.ReportBaseModel[source]

Defines the base model for all report-specific user inputs.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the base model for all report-specific user inputs.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field enabled: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, title='enabled', description='Set to true to enable the report')] = False

Set to true to enable the report

field scenarios: Annotated[List[str], FieldInfo(annotation=NoneType, required=False, default=[], title='scenarios', description='Scenarios to which the report applies. Default is all scenarios.')] = []

Scenarios to which the report applies. Default is all scenarios.

field store_all_time_points: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=False, title='store_all_time_points', description='Set to true to store data for all time points. If false, store aggregated metrics in memory.')] = False

Set to true to store data for all time points. If false, store aggregated metrics in memory.

pydantic model pydss.simulation_input_models.CapacitorStateChangeCountReportModel[source]

Defines the user inputs for the Capacitor State Change Counts report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the Capacitor State Change Counts report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "Capacitor State Change Counts",
         "description": "Report name",
         "title": "name",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Capacitor State Change Counts', title='name', description='Report name')] = 'Capacitor State Change Counts'

Report name

pydantic model pydss.simulation_input_models.FeederLossesReportModel[source]

Defines the user inputs for the Feeder Losses report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the Feeder Losses report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "Feeder Losses",
         "description": "Report name",
         "title": "name",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Feeder Losses', title='name', description='Report name')] = 'Feeder Losses'

Report name

pydantic model pydss.simulation_input_models.FeederLossesReportModel[source]

Defines the user inputs for the Feeder Losses report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the Feeder Losses report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "Feeder Losses",
         "description": "Report name",
         "title": "name",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field enabled: Annotated[bool, Field(title='enabled', description='Set to true to enable the report', default=False)] = False

Set to true to enable the report

field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Feeder Losses', title='name', description='Report name')] = 'Feeder Losses'

Report name

field scenarios: Annotated[List[str], Field(title='scenarios', description='Scenarios to which the report applies. Default is all scenarios.', default=[])] = []

Scenarios to which the report applies. Default is all scenarios.

field store_all_time_points: Annotated[bool, Field(title='store_all_time_points', description='Set to true to store data for all time points. If false, store aggregated metrics in memory.', default=False)] = False

Set to true to store data for all time points. If false, store aggregated metrics in memory.

pydantic model pydss.simulation_input_models.PvClippingReportModel[source]

Defines the user inputs for the PV Clipping report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the PV Clipping report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "PV Clipping",
         "description": "Report name",
         "title": "name",
         "type": "string"
      },
      "diff_tolerance_percent_pmpp": {
         "default": 1.0,
         "description": "TBD",
         "title": "diff_tolerance_percent_pmpp",
         "type": "number"
      },
      "denominator_tolerance_percent_pmpp": {
         "default": 1.0,
         "description": "TBD",
         "title": "denominator_tolerance_percent_pmpp",
         "type": "number"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field denominator_tolerance_percent_pmpp: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=1.0, title='denominator_tolerance_percent_pmpp', description='TBD')] = 1.0

TBD

field diff_tolerance_percent_pmpp: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=1.0, title='diff_tolerance_percent_pmpp', description='TBD')] = 1.0

TBD

field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='PV Clipping', title='name', description='Report name')] = 'PV Clipping'

Report name

pydantic model pydss.simulation_input_models.PvCurtailmentReportModel[source]

Defines the user inputs for the PV Curtailment report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the PV Curtailment report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "PV Curtailment",
         "description": "Report name",
         "title": "name",
         "type": "string"
      },
      "diff_tolerance_percent_pmpp": {
         "default": 1.0,
         "description": "TBD",
         "title": "diff_tolerance_percent_pmpp",
         "type": "number"
      },
      "denominator_tolerance_percent_pmpp": {
         "default": 1.0,
         "description": "TBD",
         "title": "denominator_tolerance_percent_pmpp",
         "type": "number"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field denominator_tolerance_percent_pmpp: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=1.0, title='denominator_tolerance_percent_pmpp', description='TBD')] = 1.0

TBD

field diff_tolerance_percent_pmpp: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=1.0, title='diff_tolerance_percent_pmpp', description='TBD')] = 1.0

TBD

field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='PV Curtailment', title='name', description='Report name')] = 'PV Curtailment'

Report name

pydantic model pydss.simulation_input_models.RegControlTapNumberChangeCountsReportModel[source]

Defines the user inputs for the RegControl Tap Number Change Counts report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the RegControl Tap Number Change Counts report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "RegControl Tap Number Change Counts",
         "description": "Report name",
         "title": "name",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='RegControl Tap Number Change Counts', title='name', description='Report name')] = 'RegControl Tap Number Change Counts'

Report name

pydantic model pydss.simulation_input_models.ThermalMetricsReportModel[source]

Defines the user inputs for the Thermal Metrics report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the Thermal Metrics report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "Thermal Metrics",
         "description": "Report name",
         "title": "name",
         "type": "string"
      },
      "transformer_window_size_hours": {
         "default": 2,
         "description": "Transformer window size hours",
         "title": "transformer_window_size_hours",
         "type": "integer"
      },
      "transformer_loading_percent_threshold": {
         "default": 150,
         "description": "Transformer loading percent threshold",
         "title": "transformer_loading_percent_threshold",
         "type": "integer"
      },
      "transformer_loading_percent_moving_average_threshold": {
         "default": 120,
         "description": "Transformer loading percent moving average threshold",
         "title": "transformer_loading_percent_moving_average_threshold",
         "type": "integer"
      },
      "line_window_size_hours": {
         "default": 1,
         "description": "Line window size hours",
         "title": "line_window_size_hours",
         "type": "integer"
      },
      "line_loading_percent_threshold": {
         "default": 120,
         "description": "Line loading percent threshold",
         "title": "line_loading_percent_threshold",
         "type": "integer"
      },
      "line_loading_percent_moving_average_threshold": {
         "default": 100,
         "description": "Line loading percent moving average threshold",
         "title": "line_loading_percent_moving_average_threshold",
         "type": "integer"
      },
      "store_per_element_data": {
         "default": true,
         "description": "Set to true to store metrics for each line and transformer.",
         "title": "store_per_element_data",
         "type": "boolean"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field line_loading_percent_moving_average_threshold: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=100, title='line_loading_percent_moving_average_threshold', description='Line loading percent moving average threshold')] = 100

Line loading percent moving average threshold

field line_loading_percent_threshold: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=120, title='line_loading_percent_threshold', description='Line loading percent threshold')] = 120

Line loading percent threshold

field line_window_size_hours: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=1, title='line_window_size_hours', description='Line window size hours')] = 1

Line window size hours

field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Thermal Metrics', title='name', description='Report name')] = 'Thermal Metrics'

Report name

field store_per_element_data: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, title='store_per_element_data', description='Set to true to store metrics for each line and transformer.')] = True

Set to true to store metrics for each line and transformer.

field transformer_loading_percent_moving_average_threshold: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=120, title='transformer_loading_percent_moving_average_threshold', description='Transformer loading percent moving average threshold')] = 120

Transformer loading percent moving average threshold

field transformer_loading_percent_threshold: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=150, title='transformer_loading_percent_threshold', description='Transformer loading percent threshold')] = 150

Transformer loading percent threshold

field transformer_window_size_hours: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=2, title='transformer_window_size_hours', description='Transformer window size hours')] = 2

Transformer window size hours

pydantic model pydss.simulation_input_models.VoltageMetricsReportModel[source]

Defines the user inputs for the Voltage Metrics report.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for the Voltage Metrics report.",
   "type": "object",
   "properties": {
      "enabled": {
         "default": false,
         "description": "Set to true to enable the report",
         "title": "enabled",
         "type": "boolean"
      },
      "scenarios": {
         "default": [],
         "description": "Scenarios to which the report applies. Default is all scenarios.",
         "items": {
            "type": "string"
         },
         "title": "scenarios",
         "type": "array"
      },
      "store_all_time_points": {
         "default": false,
         "description": "Set to true to store data for all time points. If false, store aggregated metrics in memory.",
         "title": "store_all_time_points",
         "type": "boolean"
      },
      "name": {
         "default": "Voltage Metrics",
         "description": "Report name",
         "title": "name",
         "type": "string"
      },
      "window_size_minutes": {
         "default": 60,
         "description": "Window size minutes",
         "title": "window_size_minutes",
         "type": "integer"
      },
      "range_a_limits": {
         "default": [
            0.95,
            1.05
         ],
         "description": "ANSI Range A voltage limits",
         "items": {},
         "title": "range_a_limits",
         "type": "array"
      },
      "range_b_limits": {
         "default": [
            0.9,
            1.0583
         ],
         "description": "ANSI Range B voltage limits",
         "items": {},
         "title": "range_b_limits",
         "type": "array"
      },
      "store_per_element_data": {
         "default": true,
         "description": "Set to true to store metrics for each node.",
         "title": "store_per_element_data",
         "type": "boolean"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field name: Annotated[str, FieldInfo(annotation=NoneType, required=False, default='Voltage Metrics', title='name', description='Report name')] = 'Voltage Metrics'

Report name

field range_a_limits: Annotated[List, FieldInfo(annotation=NoneType, required=False, default=[0.95, 1.05], title='range_a_limits', description='ANSI Range A voltage limits')] = [0.95, 1.05]

ANSI Range A voltage limits

field range_b_limits: Annotated[List, FieldInfo(annotation=NoneType, required=False, default=[0.9, 1.0583], title='range_b_limits', description='ANSI Range B voltage limits')] = [0.9, 1.0583]

ANSI Range B voltage limits

field store_per_element_data: Annotated[bool, FieldInfo(annotation=NoneType, required=False, default=True, title='store_per_element_data', description='Set to true to store metrics for each node.')] = True

Set to true to store metrics for each node.

field window_size_minutes: Annotated[int, FieldInfo(annotation=NoneType, required=False, default=60, title='window_size_minutes', description='Window size minutes')] = 60

Window size minutes

pydantic model pydss.simulation_input_models.ReportsModel[source]

Defines the user inputs for reports.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines the user inputs for reports.",
   "type": "object",
   "properties": {
      "Format": {
         "allOf": [
            {
               "$ref": "#/$defs/FileFormat"
            }
         ],
         "default": "h5",
         "description": "Controls the file format.",
         "title": "format"
      },
      "Granularity": {
         "allOf": [
            {
               "$ref": "#/$defs/ReportGranularity"
            }
         ],
         "default": "per_element_per_time_point",
         "description": "Specifies the granularity on which data is collected.",
         "title": "granularity"
      },
      "Types": {
         "default": [],
         "description": "Reports to collect.",
         "items": {},
         "title": "types",
         "type": "array"
      }
   },
   "$defs": {
      "FileFormat": {
         "description": "Supported file formats",
         "enum": [
            "csv",
            "h5"
         ],
         "title": "FileFormat",
         "type": "string"
      },
      "ReportGranularity": {
         "description": "Specifies the granularity on which data is collected.",
         "enum": [
            "per_element_per_time_point",
            "per_element_total",
            "all_elements_per_time_point",
            "all_elements_total"
         ],
         "title": "ReportGranularity",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
Validators:
field format: ')] = FileFormat.HDF5 (alias 'Format')

Controls the file format.

field granularity: ')] = ReportGranularity.PER_ELEMENT_PER_TIME_POINT (alias 'Granularity')

Specifies the granularity on which data is collected.

field types: Annotated[List[Any], FieldInfo(annotation=NoneType, required=False, default=[], alias='Types', alias_priority=2, title='types', description='Reports to collect.')] = [] (alias 'Types')

Reports to collect.

Validated by:
validator check_types  »  types[source]
pydantic model pydss.simulation_input_models.SimulationSettingsModel[source]

Defines user inputs for a simulation.

Show JSON schema
{
   "title": "InputsBaseModel",
   "description": "Defines user inputs for a simulation.",
   "type": "object",
   "properties": {
      "Project": {
         "allOf": [
            {
               "$ref": "#/$defs/ProjectModel"
            }
         ],
         "description": "Project settings",
         "title": "project"
      },
      "Exports": {
         "allOf": [
            {
               "$ref": "#/$defs/ExportsModel"
            }
         ],
         "default": {
            "Log Results": false,
            "Export Elements": true,
            "Export Element Types": [],
            "Export Data Tables": true,
            "Export PV Profiles": false,
            "Export Data In Memory": false,
            "Export Node Names By Type": false,
            "Export Event Log": true,
            "Export Format": "h5",
            "Export Compression": false,
            "HDF Max Chunk Bytes": 1048576
         },
         "description": "Exports settings",
         "title": "exports"
      },
      "Frequency": {
         "allOf": [
            {
               "$ref": "#/$defs/FrequencyModel"
            }
         ],
         "default": {
            "Enable frequency sweep": false,
            "Fundamental frequency": 60.0,
            "Start frequency": 1.0,
            "End frequency": 15.0,
            "frequency increment": 2.0,
            "Neglect shunt admittance": false,
            "Percentage load in series": 50.0
         },
         "description": "Frequency settings",
         "title": "frequency"
      },
      "Helics": {
         "allOf": [
            {
               "$ref": "#/$defs/HelicsModel"
            }
         ],
         "default": {
            "Co-simulation Mode": false,
            "Iterative Mode": false,
            "Error tolerance": 0.0001,
            "Max co-iterations": 15,
            "Broker": "mainbroker",
            "Broker port": 0,
            "Federate name": "pydss",
            "Time delta": 0.01,
            "Core type": "zmq",
            "Uninterruptible": true,
            "Helics logging level": 5
         },
         "description": "HELICS settings",
         "title": "helics"
      },
      "Logging": {
         "allOf": [
            {
               "$ref": "#/$defs/LoggingModel"
            }
         ],
         "default": {
            "Logging Level": "info",
            "Display on screen": true,
            "Log to external file": true,
            "Clear old log file": false,
            "Log time step updates": true
         },
         "description": "Logging settings",
         "title": "logging"
      },
      "MonteCarlo": {
         "allOf": [
            {
               "$ref": "#/$defs/MonteCarloModel"
            }
         ],
         "default": {
            "Number of Monte Carlo scenarios": -1
         },
         "description": "Monte Carlo settings",
         "title": "monte_carlo"
      },
      "Profiles": {
         "allOf": [
            {
               "$ref": "#/$defs/ProfilesModel"
            }
         ],
         "default": {
            "Use profile manager": false,
            "source_type": "h5",
            "source": "Profiles_backup.hdf5",
            "Profile mapping": "",
            "is_relative_path": true,
            "settings": {}
         },
         "description": "Profiles settings",
         "title": "profiles"
      },
      "Reports": {
         "allOf": [
            {
               "$ref": "#/$defs/ReportsModel"
            }
         ],
         "default": {
            "Format": "h5",
            "Granularity": "per_element_per_time_point",
            "Types": []
         },
         "description": "Reports settings",
         "title": "reports"
      }
   },
   "$defs": {
      "ControlMode": {
         "description": "Supported control modes",
         "enum": [
            "Static",
            "Time"
         ],
         "title": "ControlMode",
         "type": "string"
      },
      "ExportsModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for defining data exports.",
         "properties": {
            "Log Results": {
               "default": false,
               "description": "Set to true to export circuit element values at each time point.",
               "title": "export_results",
               "type": "boolean"
            },
            "Export Elements": {
               "default": true,
               "description": "Set to true to export static information for all circuit elements.",
               "title": "export_elements",
               "type": "boolean"
            },
            "Export Element Types": {
               "default": [],
               "description": "Restrict 'export_elements' to these element types. Default is all types",
               "items": {},
               "title": "export_element_types",
               "type": "array"
            },
            "Export Data Tables": {
               "default": true,
               "description": "Set to true to export circuit element data in tabular files. While it does duplicate data, it provides a way to preserve a human-readable dataset that does not require pydss to interpret.",
               "title": "export_data_tables",
               "type": "boolean"
            },
            "Export PV Profiles": {
               "default": false,
               "description": "Set to true to export PV profiles to tabular files.",
               "title": "export_pv_profiles",
               "type": "boolean"
            },
            "Export Data In Memory": {
               "default": false,
               "description": "Set to true to keep circuit element data in memory rather than periodically flushing to an HDF5 file. This can be faster but will consume more memory.",
               "title": "export_data_in_memory",
               "type": "boolean"
            },
            "Export Node Names By Type": {
               "default": false,
               "description": "Set to true to export node names by primary/secondary type to a file.",
               "title": "export_node_names_by_type",
               "type": "boolean"
            },
            "Export Event Log": {
               "default": true,
               "description": "Set to true to export the OpenDSS event log.",
               "title": "export_event_log",
               "type": "boolean"
            },
            "Export Format": {
               "allOf": [
                  {
                     "$ref": "#/$defs/FileFormat"
                  }
               ],
               "default": "h5",
               "description": "Controls the file format used if export_data_tables is true.",
               "title": "export_format"
            },
            "Export Compression": {
               "default": false,
               "description": "Set to true to compress data exported with 'export_data_tables'.",
               "title": "export_compression",
               "type": "boolean"
            },
            "HDF Max Chunk Bytes": {
               "default": 1048576,
               "description": "The chunk size in bytes to use for exported data in the HDF5 data store. The value is passed to the h5py package. Refer to http://docs.h5py.org/en/stable/high/dataset.html#chunked-storage for more information.",
               "title": "hdf_max_chunk_bytes",
               "type": "integer"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "FileFormat": {
         "description": "Supported file formats",
         "enum": [
            "csv",
            "h5"
         ],
         "title": "FileFormat",
         "type": "string"
      },
      "FrequencyModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for defining frequency parameters.",
         "properties": {
            "Enable frequency sweep": {
               "default": false,
               "description": "Enable harmonic sweep. Works with only 'Static' and 'QSTS' simulation modes.",
               "title": "enable_frequency_sweep",
               "type": "boolean"
            },
            "Fundamental frequency": {
               "default": 60.0,
               "description": "Fundamental system frequeny in Hertz",
               "title": "fundamental_frequency",
               "type": "number"
            },
            "Start frequency": {
               "default": 1.0,
               "description": "Start system frequeny in Hertz",
               "title": "start_frequency",
               "type": "number"
            },
            "End frequency": {
               "default": 15.0,
               "description": "End system frequeny in Hertz",
               "title": "end_frequency",
               "type": "number"
            },
            "frequency increment": {
               "default": 2.0,
               "description": "As multiple of fundamental",
               "title": "frequency_increment",
               "type": "number"
            },
            "Neglect shunt admittance": {
               "default": false,
               "description": "Neglect shunt addmittance for frequency sweep",
               "title": "neglect_shunt_admittance",
               "type": "boolean"
            },
            "Percentage load in series": {
               "default": 50.0,
               "description": "Percent of load that is series RL for Harmonic studies",
               "title": "percentage_load_in_series",
               "type": "number"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "HelicsModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for HELICS.",
         "properties": {
            "Co-simulation Mode": {
               "default": false,
               "description": "Set to true to enable the HELICS interface for co-simulation.",
               "title": "co_simulation_mode",
               "type": "boolean"
            },
            "Iterative Mode": {
               "default": false,
               "description": "Iterative mode",
               "title": "iterative_mode",
               "type": "boolean"
            },
            "Error tolerance": {
               "default": 0.0001,
               "description": "Error tolerance",
               "title": "error_tolerance",
               "type": "number"
            },
            "Max co-iterations": {
               "default": 15,
               "description": "Max number of co-simulation iterations",
               "title": "max_co_iterations",
               "type": "integer"
            },
            "Broker": {
               "default": "mainbroker",
               "description": "Broker name",
               "title": "broker",
               "type": "string"
            },
            "Broker port": {
               "default": 0,
               "description": "Broker port",
               "title": "broker_port",
               "type": "integer"
            },
            "Federate name": {
               "default": "pydss",
               "description": "Name of the federate",
               "title": "federate_name",
               "type": "string"
            },
            "Time delta": {
               "default": 0.01,
               "description": "The property controlling the minimum time delta for a federate.",
               "title": "time_delta",
               "type": "number"
            },
            "Core type": {
               "default": "zmq",
               "description": "Core type to be use for communication",
               "title": "core_type",
               "type": "string"
            },
            "Uninterruptible": {
               "default": true,
               "description": "Can the federate be interrupted",
               "title": "uninterruptible",
               "type": "boolean"
            },
            "Helics logging level": {
               "default": 5,
               "description": "Logging level for the federate. Refer to HELICS documentation.",
               "title": "logging_level",
               "type": "integer"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "LoggingLevel": {
         "description": "Supported logging levels",
         "enum": [
            "debug",
            "info",
            "warning",
            "error"
         ],
         "title": "LoggingLevel",
         "type": "string"
      },
      "LoggingModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for controlling logging.",
         "properties": {
            "Logging Level": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/LoggingLevel"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": "info",
               "description": "Pydss minimum logging level",
               "title": "logging_level"
            },
            "Display on screen": {
               "anyOf": [
                  {
                     "type": "boolean"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": true,
               "description": "Set to true to enable console logging.",
               "title": "enable_console"
            },
            "Log to external file": {
               "anyOf": [
                  {
                     "type": "boolean"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": true,
               "description": "Set to true to enable logging to a file.",
               "title": "enable_file"
            },
            "Clear old log file": {
               "anyOf": [
                  {
                     "type": "boolean"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": false,
               "description": "Set to true to clear and overwrite any existing log files.",
               "title": "clear_old_log_file"
            },
            "Log time step updates": {
               "anyOf": [
                  {
                     "type": "boolean"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": true,
               "description": "Set to true to log each completed time step.",
               "title": "log_time_step_updates"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "MonteCarloModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for Monte Carlo simulations.",
         "properties": {
            "Number of Monte Carlo scenarios": {
               "default": -1,
               "description": "Number of Monte Carlo scenarios",
               "title": "num_scenarios",
               "type": "integer"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "ProfilesModel": {
         "additionalProperties": false,
         "description": "Defines user inputs for the Profile Manager.",
         "properties": {
            "Use profile manager": {
               "default": false,
               "description": "Set to true to enable the Profile Manager.",
               "title": "use_profile_manager",
               "type": "boolean"
            },
            "source_type": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/FileFormat"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": "h5",
               "description": "File format for source data",
               "title": "source_type"
            },
            "source": {
               "default": "Profiles_backup.hdf5",
               "description": "File containing source data",
               "title": "source",
               "type": "string"
            },
            "Profile mapping": {
               "default": "",
               "description": "Profile mapping",
               "title": "profile_mapping",
               "type": "string"
            },
            "is_relative_path": {
               "default": true,
               "description": "Source file path is relative",
               "title": "is_relative_path",
               "type": "boolean"
            },
            "settings": {
               "default": {},
               "description": "Profiles settings",
               "title": "settings",
               "type": "object"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "ProjectModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for the project.",
         "properties": {
            "Project Path": {
               "anyOf": [
                  {
                     "format": "path",
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Base path of project. Join with 'active_project' to get full path",
               "title": "project_path"
            },
            "Active Project": {
               "anyOf": [
                  {
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Active project name. Join with 'project_path' to get full path",
               "title": "active_project"
            },
            "active_project_path": {
               "anyOf": [
                  {
                     "format": "path",
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Path to project. Auto-generated.",
               "title": "active_project_path"
            },
            "Scenarios": {
               "anyOf": [
                  {
                     "items": {
                        "$ref": "#/$defs/ScenarioModel"
                     },
                     "type": "array"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": [],
               "description": "List of scenarios",
               "title": "scenarios"
            },
            "Active Scenario": {
               "anyOf": [
                  {
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": "",
               "description": "Name of active scenario",
               "title": "active_scenario"
            },
            "Start time": {
               "anyOf": [
                  {
                     "format": "date-time",
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": "2020-01-01T00:00:00",
               "description": "Start time of simulation",
               "title": "start_time"
            },
            "simulation_duration_min": {
               "anyOf": [
                  {
                     "type": "number"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": 1440.0,
               "description": "Simulation duration in minutes.",
               "title": "simulation_duration_min"
            },
            "Step resolution (sec)": {
               "anyOf": [
                  {
                     "type": "number"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": 900.0,
               "description": "Time step resolution in seconds",
               "title": "step_resolution_sec"
            },
            "Loadshape start time": {
               "anyOf": [
                  {
                     "format": "date-time",
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": "2020-01-01 00:00:00.0",
               "description": "Start time of loadshape profiles",
               "title": "loadshape_start_time"
            },
            "Simulation range": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/SimulationRangeModel"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": {
                  "start": "00:00:00",
                  "end": "23:59:59"
               },
               "description": "Restrict control algorithms and data collection to these hours. Useful for skipping night when simulating PV Systems.",
               "title": "simulation_range"
            },
            "Simulation Type": {
               "allOf": [
                  {
                     "$ref": "#/$defs/SimulationType"
                  }
               ],
               "default": "qsts",
               "description": "Type of simulation to run.",
               "title": "simulation_type"
            },
            "Control mode": {
               "allOf": [
                  {
                     "$ref": "#/$defs/ControlMode"
                  }
               ],
               "default": "Static",
               "description": "Simulation control mode",
               "title": "control_mode"
            },
            "Max Control Iterations": {
               "default": 50,
               "description": "Maximum outer loop control iterations",
               "title": "max_control_iterations",
               "type": "integer"
            },
            "Convergence error percent threshold": {
               "default": 0.0,
               "description": "Convergence error threshold as a percent",
               "title": "convergence_error_percent_threshold",
               "type": "number"
            },
            "Error tolerance": {
               "default": 0.001,
               "description": "Error tolerance in per unit",
               "title": "error_tolerance",
               "type": "number"
            },
            "Max error tolerance": {
               "default": 0.0,
               "description": "Abort simulation if a convergence error exceeds this value.",
               "title": "max_error_tolerance",
               "type": "number"
            },
            "Skip export on convergence error": {
               "default": true,
               "description": "Do not export data at a time point if there is a convergence error.",
               "title": "skip_export_on_convergence_error",
               "type": "boolean"
            },
            "DSS File": {
               "default": "Master.dss",
               "description": "OpenDSS master filename",
               "title": "dss_file",
               "type": "string"
            },
            "DSS File Absolute Path": {
               "default": false,
               "description": "Set to true if 'dss_file' is an absolute path.",
               "title": "dss_file_absolute_path",
               "type": "boolean"
            },
            "Disable pydss controllers": {
               "default": false,
               "description": "Allows disabling of the control algorithms",
               "title": "disable_pydss_controllers",
               "type": "boolean"
            },
            "Use Controller Registry": {
               "default": false,
               "description": "Use local controller registry.",
               "title": "use_controller_registry",
               "type": "boolean"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "ReportGranularity": {
         "description": "Specifies the granularity on which data is collected.",
         "enum": [
            "per_element_per_time_point",
            "per_element_total",
            "all_elements_per_time_point",
            "all_elements_total"
         ],
         "title": "ReportGranularity",
         "type": "string"
      },
      "ReportsModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for reports.",
         "properties": {
            "Format": {
               "allOf": [
                  {
                     "$ref": "#/$defs/FileFormat"
                  }
               ],
               "default": "h5",
               "description": "Controls the file format.",
               "title": "format"
            },
            "Granularity": {
               "allOf": [
                  {
                     "$ref": "#/$defs/ReportGranularity"
                  }
               ],
               "default": "per_element_per_time_point",
               "description": "Specifies the granularity on which data is collected.",
               "title": "granularity"
            },
            "Types": {
               "default": [],
               "description": "Reports to collect.",
               "items": {},
               "title": "types",
               "type": "array"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "ScenarioModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for a scenario.",
         "properties": {
            "name": {
               "description": "Name of scenario",
               "title": "name",
               "type": "string"
            },
            "post_process_infos": {
               "default": [],
               "description": "Post-process script descriptors",
               "items": {
                  "$ref": "#/$defs/ScenarioPostProcessModel"
               },
               "title": "post_process_infos",
               "type": "array"
            },
            "snapshot_time_point_selection_config": {
               "allOf": [
                  {
                     "$ref": "#/$defs/SnapshotTimePointSelectionConfigModel"
                  }
               ],
               "default": {
                  "mode": "none",
                  "start_time": "2020-01-01T00:00:00",
                  "search_duration_min": 1440.0
               },
               "description": "Descriptor for auto-selecting snapshot time points",
               "title": "snapshot_time_point_selection_config"
            }
         },
         "required": [
            "name"
         ],
         "title": "InputsBaseModel",
         "type": "object"
      },
      "ScenarioPostProcessModel": {
         "additionalProperties": false,
         "description": "Defines user inputs for a scenario post-process script.",
         "properties": {
            "script": {
               "default": "",
               "description": "Post-process script",
               "title": "script",
               "type": "string"
            },
            "config_file": {
               "description": "Post-process config file",
               "title": "config_file",
               "type": "string"
            }
         },
         "required": [
            "config_file"
         ],
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SimulationRangeModel": {
         "additionalProperties": false,
         "description": "Governs time range when control algorithms can run in a simulation. Does not affect\nsimulation times.",
         "properties": {
            "start": {
               "default": "00:00:00",
               "description": "Time to start running control algorithms each day.",
               "title": "start",
               "type": "string"
            },
            "end": {
               "default": "23:59:59",
               "description": "Time to stop running control algorithms each day.",
               "title": "end",
               "type": "string"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SimulationType": {
         "description": "Supported simulation types",
         "enum": [
            "dynamic",
            "qsts",
            "snapshot"
         ],
         "title": "SimulationType",
         "type": "string"
      },
      "SnapshotTimePointSelectionConfigModel": {
         "additionalProperties": false,
         "description": "Defines the user inputs for auto-selecting snapshot time points.",
         "properties": {
            "mode": {
               "allOf": [
                  {
                     "$ref": "#/$defs/SnapshotTimePointSelectionMode"
                  }
               ],
               "default": "none",
               "description": "Mode",
               "title": "mode"
            },
            "start_time": {
               "default": "2020-01-01T00:00:00",
               "description": "Start time in the load shape profiles",
               "format": "date-time",
               "title": "start_time",
               "type": "string"
            },
            "search_duration_min": {
               "default": 1440.0,
               "description": "Duration in minutes to search in the load shape profiles",
               "title": "search_duration_min",
               "type": "number"
            }
         },
         "title": "InputsBaseModel",
         "type": "object"
      },
      "SnapshotTimePointSelectionMode": {
         "description": "Defines methods by which snapshot time points can be calculated.",
         "enum": [
            "max_pv_load_ratio",
            "max_load",
            "daytime_min_load",
            "pv_minus_load",
            "none"
         ],
         "title": "SnapshotTimePointSelectionMode",
         "type": "string"
      }
   },
   "additionalProperties": false,
   "required": [
      "Project"
   ]
}

Config:
  • title: str = InputsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field exports: HDF5: 'h5'>, export_compression=False, hdf_max_chunk_bytes=1048576), alias='Exports', alias_priority=2, title='exports', description='Exports settings')] = ExportsModel(export_results=False, export_elements=True, export_element_types=[], export_data_tables=True, export_pv_profiles=False, export_data_in_memory=False, export_node_names_by_type=False, export_event_log=True, export_format=<FileFormat.HDF5: 'h5'>, export_compression=False, hdf_max_chunk_bytes=1048576) (alias 'Exports')

Exports settings

field frequency: Annotated[FrequencyModel, FieldInfo(annotation=NoneType, required=False, default=FrequencyModel(enable_frequency_sweep=False, fundamental_frequency=60.0, start_frequency=1.0, end_frequency=15.0, frequency_increment=2.0, neglect_shunt_admittance=False, percentage_load_in_series=50.0), alias='Frequency', alias_priority=2, title='frequency', description='Frequency settings')] = FrequencyModel(enable_frequency_sweep=False, fundamental_frequency=60.0, start_frequency=1.0, end_frequency=15.0, frequency_increment=2.0, neglect_shunt_admittance=False, percentage_load_in_series=50.0) (alias 'Frequency')

Frequency settings

field helics: Annotated[HelicsModel, FieldInfo(annotation=NoneType, required=False, default=HelicsModel(co_simulation_mode=False, iterative_mode=False, error_tolerance=0.0001, max_co_iterations=15, broker='mainbroker', broker_port=0, federate_name='pydss', time_delta=0.01, core_type='zmq', uninterruptible=True, logging_level=5), alias='Helics', alias_priority=2, title='helics', description='HELICS settings')] = HelicsModel(co_simulation_mode=False, iterative_mode=False, error_tolerance=0.0001, max_co_iterations=15, broker='mainbroker', broker_port=0, federate_name='pydss', time_delta=0.01, core_type='zmq', uninterruptible=True, logging_level=5) (alias 'Helics')

HELICS settings

field logging: INFO: 'info'>, enable_console=True, enable_file=True, clear_old_log_file=False, log_time_step_updates=True), alias='Logging', alias_priority=2, title='logging', description='Logging settings')] = LoggingModel(logging_level=<LoggingLevel.INFO: 'info'>, enable_console=True, enable_file=True, clear_old_log_file=False, log_time_step_updates=True) (alias 'Logging')

Logging settings

field monte_carlo: Annotated[MonteCarloModel, FieldInfo(annotation=NoneType, required=False, default=MonteCarloModel(num_scenarios=-1), alias='MonteCarlo', alias_priority=2, title='monte_carlo', description='Monte Carlo settings')] = MonteCarloModel(num_scenarios=-1) (alias 'MonteCarlo')

Monte Carlo settings

field profiles: hdf5', profile_mapping='', is_relative_path=True, settings={}), alias='Profiles', alias_priority=2, title='profiles', description='Profiles settings')] = ProfilesModel(use_profile_manager=False, source_type=<FileFormat.HDF5: 'h5'>, source='Profiles_backup.hdf5', profile_mapping='', is_relative_path=True, settings={}) (alias 'Profiles')

Profiles settings

field project: Annotated[ProjectModel, FieldInfo(annotation=NoneType, required=True, alias='Project', alias_priority=2, title='project', description='Project settings')] [Required] (alias 'Project')

Project settings

field reports: PER_ELEMENT_PER_TIME_POINT: 'per_element_per_time_point'>, types=[]), alias='Reports', alias_priority=2, title='reports', description='Reports settings')] = ReportsModel(format=<FileFormat.HDF5: 'h5'>, granularity=<ReportGranularity.PER_ELEMENT_PER_TIME_POINT: 'per_element_per_time_point'>, types=[]) (alias 'Reports')

Reports settings

Scenario setup models

pydantic model pydss.controllers.ControllerBaseModel[source]

Show JSON schema
{
   "title": "ControllerBaseModel",
   "type": "object",
   "properties": {},
   "additionalProperties": false
}

Config:
  • title: str = ControllerBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

abstract static get_controller_class()[source]

Return the pydss controller class for the model.

abstract static get_element_class()[source]

Return the OpenDSS element class for the controller.

pydantic model pydss.controllers.PvControllerModel[source]

Show JSON schema
{
   "title": "ControllerBaseModel",
   "type": "object",
   "properties": {
      "Control1": {
         "description": "Algorithm to run in the first control loop",
         "title": "Control1",
         "type": "string"
      },
      "Control2": {
         "anyOf": [
            {
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "description": "Algorithm to run in the second control loop",
         "title": "Control1"
      },
      "Control3": {
         "anyOf": [
            {
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "description": "Algorithm to run in the third control loop",
         "title": "Control3"
      },
      "pf": {
         "description": "Power factor for the PV system",
         "title": "pf",
         "type": "integer"
      },
      "pfMin": {
         "description": "Minimum allowable power factor for the PV system. Applied only if enable_pf_limit is set.",
         "title": "pfMin",
         "type": "number"
      },
      "pfMax": {
         "description": "Maximum allowable power factor for the PV system. Applied only if enable_pf_limit is set.",
         "title": "pfMax",
         "type": "number"
      },
      "Pmin": {
         "description": "TODO",
         "title": "Pmin",
         "type": "number"
      },
      "Pmax": {
         "description": "TODO",
         "title": "Pmax",
         "type": "number"
      },
      "uMin": {
         "description": "Per unit voltage value at which inverter produces maximum vars. (volt / var algorithm).",
         "title": "uMin",
         "type": "number"
      },
      "uDbMin": {
         "description": "Lower bound for the voltage deadband [per unit]. Inverter will not produce or consume vars within these bands (volt / var algorithm).",
         "title": "uDbMin",
         "type": "number"
      },
      "uDbMax": {
         "description": "Upper bound for the voltage deadband [per unit]. Inverter will not produce or consume vars within these bands (volt / var algorithm).",
         "title": "uDbMax",
         "type": "number"
      },
      "uMax": {
         "description": "Per unit voltage value at which inverter consumes maximum vars (volt / var algorithm).",
         "title": "uMax",
         "type": "number"
      },
      "QlimPU": {
         "description": "Inverter reactive power limit [per unit] for the volt / var algorithm.",
         "title": "QlimPU",
         "type": "number"
      },
      "PFlim": {
         "description": "Inverter power factor limit. Applied only if enable_pf_limit is set.",
         "title": "PFlim",
         "type": "number"
      },
      "Enable PF limit": {
         "description": "Flag to enable / disable power factor limits on the inverter",
         "title": "EnablePFLimit",
         "type": "boolean"
      },
      "uMinC": {
         "description": "Lower voltage bound [per unit] for the volt / watt algorithm",
         "title": "uMinC",
         "type": "number"
      },
      "uMaxC": {
         "description": "Upper voltage bound [per unit] for the volt / watt algorithm",
         "title": "uMaxC",
         "type": "number"
      },
      "PminVW": {
         "description": "Lower bound for the inveter active power output for the volt / watt algorithm",
         "title": "PminVW",
         "type": "number"
      },
      "VWtype": {
         "description": "volt / watt algorithm to be implemented on rated or available power",
         "title": "VWtype",
         "type": "string"
      },
      "%PCutin": {
         "description": "Percentage cut-in power -- Percentage of kVA rating of inverter. When the inverter is OFF, the power from the array must be greater than this for the inverter to turn on.",
         "title": "PCutin",
         "type": "number"
      },
      "%PCutout": {
         "description": "Percentage cut-out power -- Percentage of kVA rating of inverter. When the inverter is ON, the inverter turns OFF when the power from the array drops below this value.",
         "title": "%PCutout",
         "type": "number"
      },
      "Efficiency": {
         "description": "Efficieny of the inverter system",
         "title": "Efficiency",
         "type": "number"
      },
      "Priority": {
         "description": "Set export priority for active power or reactive power",
         "title": "Priority",
         "type": "string"
      },
      "DampCoef": {
         "description": "Damping cooefficient for the convergence algorithm",
         "title": "DampCoef",
         "type": "number"
      }
   },
   "additionalProperties": false,
   "required": [
      "Control1",
      "Control2",
      "Control3",
      "pf",
      "pfMin",
      "pfMax",
      "Pmin",
      "Pmax",
      "uMin",
      "uDbMin",
      "uDbMax",
      "uMax",
      "QlimPU",
      "PFlim",
      "Enable PF limit",
      "uMinC",
      "uMaxC",
      "PminVW",
      "VWtype",
      "%PCutin",
      "%PCutout",
      "Efficiency",
      "Priority",
      "DampCoef"
   ]
}

Config:
  • title: str = ControllerBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • populate_by_name: bool = True

Fields:
field control1: Annotated[str, FieldInfo(annotation=NoneType, required=True, alias='Control1', alias_priority=2, title='Control1', description='Algorithm to run in the first control loop')] [Required] (alias 'Control1')

Algorithm to run in the first control loop

field control2: str | None [Required] (alias 'Control2')

Algorithm to run in the second control loop

field control3: str | None [Required] (alias 'Control3')

Algorithm to run in the third control loop

field damp_coef: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='DampCoef', alias_priority=2, title='DampCoef', description='Damping cooefficient for the convergence algorithm')] [Required] (alias 'DampCoef')

Damping cooefficient for the convergence algorithm

field efficiency: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='Efficiency', alias_priority=2, title='Efficiency', description='Efficieny of the inverter system')] [Required] (alias 'Efficiency')

Efficieny of the inverter system

field enable_pf_limit: Annotated[bool, FieldInfo(annotation=NoneType, required=True, alias='Enable PF limit', alias_priority=2, title='EnablePFLimit', description='Flag to enable / disable power factor limits on the inverter')] [Required] (alias 'Enable PF limit')

Flag to enable / disable power factor limits on the inverter

field p_max: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='Pmax', alias_priority=2, title='Pmax', description='TODO')] [Required] (alias 'Pmax')

TODO

field p_min: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='Pmin', alias_priority=2, title='Pmin', description='TODO')] [Required] (alias 'Pmin')

TODO

field p_min_vw: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='PminVW', alias_priority=2, title='PminVW', description='Lower bound for the inveter active power output for the volt / watt algorithm')] [Required] (alias 'PminVW')

Lower bound for the inveter active power output for the volt / watt algorithm

field percent_p_cutin: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='%PCutin', alias_priority=2, title='PCutin', description='Percentage cut-in power -- Percentage of kVA rating of inverter. When the inverter is OFF, the power from the array must be greater than this for the inverter to turn on.')] [Required] (alias '%PCutin')

Percentage cut-in power – Percentage of kVA rating of inverter. When the inverter is OFF, the power from the array must be greater than this for the inverter to turn on.

field percent_p_cutout: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='%PCutout', alias_priority=2, title='%PCutout', description='Percentage cut-out power -- Percentage of kVA rating of inverter. When the inverter is ON, the inverter turns OFF when the power from the array drops below this value.')] [Required] (alias '%PCutout')

Percentage cut-out power – Percentage of kVA rating of inverter. When the inverter is ON, the inverter turns OFF when the power from the array drops below this value.

field pf: int [Required]

Power factor for the PV system

field pf_lim: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='PFlim', alias_priority=2, title='PFlim', description='Inverter power factor limit. Applied only if enable_pf_limit is set.')] [Required] (alias 'PFlim')

Inverter power factor limit. Applied only if enable_pf_limit is set.

field pf_max: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='pfMax', alias_priority=2, title='pfMax', description='Maximum allowable power factor for the PV system. Applied only if enable_pf_limit is set.')] [Required] (alias 'pfMax')

Maximum allowable power factor for the PV system. Applied only if enable_pf_limit is set.

field pf_min: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='pfMin', alias_priority=2, title='pfMin', description='Minimum allowable power factor for the PV system. Applied only if enable_pf_limit is set.')] [Required] (alias 'pfMin')

Minimum allowable power factor for the PV system. Applied only if enable_pf_limit is set.

field priority: Annotated[str, FieldInfo(annotation=NoneType, required=True, alias='Priority', alias_priority=2, title='Priority', description='Set export priority for active power or reactive power')] [Required] (alias 'Priority')

Set export priority for active power or reactive power

field q_lim_pu: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='QlimPU', alias_priority=2, title='QlimPU', description='Inverter reactive power limit [per unit] for the volt / var algorithm.')] [Required] (alias 'QlimPU')

Inverter reactive power limit [per unit] for the volt / var algorithm.

field u_db_max: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='uDbMax', alias_priority=2, title='uDbMax', description='Upper bound for the voltage deadband [per unit]. Inverter will not produce or consume vars within these bands (volt / var algorithm).')] [Required] (alias 'uDbMax')

Upper bound for the voltage deadband [per unit]. Inverter will not produce or consume vars within these bands (volt / var algorithm).

field u_db_min: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='uDbMin', alias_priority=2, title='uDbMin', description='Lower bound for the voltage deadband [per unit]. Inverter will not produce or consume vars within these bands (volt / var algorithm).')] [Required] (alias 'uDbMin')

Lower bound for the voltage deadband [per unit]. Inverter will not produce or consume vars within these bands (volt / var algorithm).

field u_max: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='uMax', alias_priority=2, title='uMax', description='Per unit voltage value at which inverter consumes maximum vars (volt / var algorithm).')] [Required] (alias 'uMax')

Per unit voltage value at which inverter consumes maximum vars (volt / var algorithm).

field u_max_c: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='uMaxC', alias_priority=2, title='uMaxC', description='Upper voltage bound [per unit] for the volt / watt algorithm')] [Required] (alias 'uMaxC')

Upper voltage bound [per unit] for the volt / watt algorithm

field u_min: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='uMin', alias_priority=2, title='uMin', description='Per unit voltage value at which inverter produces maximum vars. (volt / var algorithm).')] [Required] (alias 'uMin')

Per unit voltage value at which inverter produces maximum vars. (volt / var algorithm).

field u_min_c: Annotated[float, FieldInfo(annotation=NoneType, required=True, alias='uMinC', alias_priority=2, title='uMinC', description='Lower voltage bound [per unit] for the volt / watt algorithm')] [Required] (alias 'uMinC')

Lower voltage bound [per unit] for the volt / watt algorithm

field vw_type: Annotated[str, FieldInfo(annotation=NoneType, required=True, alias='VWtype', alias_priority=2, title='VWtype', description='volt / watt algorithm to be implemented on rated or available power')] [Required] (alias 'VWtype')

volt / watt algorithm to be implemented on rated or available power

static get_controller_class()[source]

Return the pydss controller class for the model.

static get_element_class()[source]

Return the OpenDSS element class for the controller.

Thermal metrics models

pydantic model pydss.thermal_metrics.ThermalMetricsBaseModel[source]

Show JSON schema
{
   "title": "ThermalMetricsBaseModel",
   "type": "object",
   "properties": {},
   "additionalProperties": false
}

Config:
  • title: str = ThermalMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

pydantic model pydss.thermal_metrics.ThermalMetricsModel[source]

Show JSON schema
{
   "title": "ThermalMetricsBaseModel",
   "type": "object",
   "properties": {
      "max_instantaneous_loadings_pct": {
         "additionalProperties": {
            "type": "number"
         },
         "default": {},
         "description": "maximum instantaneous loading percent for each element",
         "title": "max_instantaneous_loadings_pct",
         "type": "object"
      },
      "max_instantaneous_loading_pct": {
         "default": 120,
         "description": "maximum instantaneous loading percent overall",
         "title": "max_instantaneous_loading_pct",
         "type": "number"
      },
      "max_moving_average_loadings_pct": {
         "additionalProperties": {
            "type": "number"
         },
         "default": {},
         "description": "maximum moving average loading percent for each element",
         "title": "max_moving_average_loadings_pct",
         "type": "object"
      },
      "max_moving_average_loading_pct": {
         "default": 100,
         "description": "maximum moving average loading percent overall",
         "title": "max_moving_average_loading_pct",
         "type": "number"
      },
      "window_size_hours": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "window size used to calculate the moving average",
         "title": "window_size_hours"
      },
      "num_time_points_with_instantaneous_violations": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "number of time points where the instantaneous threshold was violated",
         "title": "num_time_points_with_instantaneous_violations"
      },
      "num_time_points_with_moving_average_violations": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "number of time points where the moving average threshold was violated",
         "title": "num_time_points_with_moving_average_violations"
      },
      "instantaneous_threshold": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "instantaneous threshold",
         "title": "instantaneous_threshold"
      },
      "moving_average_threshold": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "moving average threshold",
         "title": "moving_average_threshold"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = ThermalMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field instantaneous_threshold: Annotated[int | None, FieldInfo(annotation=NoneType, required=False, title='instantaneous_threshold', description='instantaneous threshold')] = None

instantaneous threshold

field max_instantaneous_loading_pct: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=120, title='max_instantaneous_loading_pct', description='maximum instantaneous loading percent overall')] = 120

maximum instantaneous loading percent overall

field max_instantaneous_loadings_pct: Dict[str, float], FieldInfo(annotation=NoneType, required=False, default={}, title='max_instantaneous_loadings_pct', description='maximum instantaneous loading percent for each element')] = {}

maximum instantaneous loading percent for each element

field max_moving_average_loading_pct: Annotated[float, FieldInfo(annotation=NoneType, required=False, default=100, title='max_moving_average_loading_pct', description='maximum moving average loading percent overall')] = 100

maximum moving average loading percent overall

field max_moving_average_loadings_pct: Dict[str, float], FieldInfo(annotation=NoneType, required=False, default={}, title='max_moving_average_loadings_pct', description='maximum moving average loading percent for each element')] = {}

maximum moving average loading percent for each element

field moving_average_threshold: Annotated[int | None, FieldInfo(annotation=NoneType, required=False, title='moving_average_threshold', description='moving average threshold')] = None

moving average threshold

field num_time_points_with_instantaneous_violations: Annotated[int | None, FieldInfo(annotation=NoneType, required=False, title='num_time_points_with_instantaneous_violations', description='number of time points where the instantaneous threshold was violated')] = None

number of time points where the instantaneous threshold was violated

field num_time_points_with_moving_average_violations: Annotated[int | None, FieldInfo(annotation=NoneType, required=False, title='num_time_points_with_moving_average_violations', description='number of time points where the moving average threshold was violated')] = None

number of time points where the moving average threshold was violated

field window_size_hours: Annotated[int | None, FieldInfo(annotation=NoneType, required=False, title='window_size_hours', description='window size used to calculate the moving average')] = None

window size used to calculate the moving average

pydantic model pydss.thermal_metrics.ThermalMetricsSummaryModel[source]

Show JSON schema
{
   "title": "ThermalMetricsBaseModel",
   "type": "object",
   "properties": {
      "line_loadings": {
         "allOf": [
            {
               "$ref": "#/$defs/ThermalMetricsModel"
            }
         ],
         "description": "line loading metrics",
         "title": "line_loadings"
      },
      "transformer_loadings": {
         "anyOf": [
            {
               "$ref": "#/$defs/ThermalMetricsModel"
            },
            {
               "type": "null"
            }
         ],
         "description": "transformer loading metrics",
         "title": "transformer_loadings"
      }
   },
   "$defs": {
      "ThermalMetricsModel": {
         "additionalProperties": false,
         "properties": {
            "max_instantaneous_loadings_pct": {
               "additionalProperties": {
                  "type": "number"
               },
               "default": {},
               "description": "maximum instantaneous loading percent for each element",
               "title": "max_instantaneous_loadings_pct",
               "type": "object"
            },
            "max_instantaneous_loading_pct": {
               "default": 120,
               "description": "maximum instantaneous loading percent overall",
               "title": "max_instantaneous_loading_pct",
               "type": "number"
            },
            "max_moving_average_loadings_pct": {
               "additionalProperties": {
                  "type": "number"
               },
               "default": {},
               "description": "maximum moving average loading percent for each element",
               "title": "max_moving_average_loadings_pct",
               "type": "object"
            },
            "max_moving_average_loading_pct": {
               "default": 100,
               "description": "maximum moving average loading percent overall",
               "title": "max_moving_average_loading_pct",
               "type": "number"
            },
            "window_size_hours": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "window size used to calculate the moving average",
               "title": "window_size_hours"
            },
            "num_time_points_with_instantaneous_violations": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "number of time points where the instantaneous threshold was violated",
               "title": "num_time_points_with_instantaneous_violations"
            },
            "num_time_points_with_moving_average_violations": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "number of time points where the moving average threshold was violated",
               "title": "num_time_points_with_moving_average_violations"
            },
            "instantaneous_threshold": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "instantaneous threshold",
               "title": "instantaneous_threshold"
            },
            "moving_average_threshold": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "moving average threshold",
               "title": "moving_average_threshold"
            }
         },
         "title": "ThermalMetricsBaseModel",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "line_loadings",
      "transformer_loadings"
   ]
}

Config:
  • title: str = ThermalMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field line_loadings: Annotated[ThermalMetricsModel, FieldInfo(annotation=NoneType, required=True, title='line_loadings', description='line loading metrics')] [Required]

line loading metrics

field transformer_loadings: Annotated[ThermalMetricsModel | None, FieldInfo(annotation=NoneType, required=True, title='transformer_loadings', description='transformer loading metrics')] [Required]

transformer loading metrics

pydantic model pydss.thermal_metrics.SimulationThermalMetricsModel[source]

Show JSON schema
{
   "title": "ThermalMetricsBaseModel",
   "type": "object",
   "properties": {
      "scenarios": {
         "additionalProperties": {
            "$ref": "#/$defs/ThermalMetricsSummaryModel"
         },
         "description": "thermal metrics by pydss scenario name",
         "title": "scenarios",
         "type": "object"
      }
   },
   "$defs": {
      "ThermalMetricsModel": {
         "additionalProperties": false,
         "properties": {
            "max_instantaneous_loadings_pct": {
               "additionalProperties": {
                  "type": "number"
               },
               "default": {},
               "description": "maximum instantaneous loading percent for each element",
               "title": "max_instantaneous_loadings_pct",
               "type": "object"
            },
            "max_instantaneous_loading_pct": {
               "default": 120,
               "description": "maximum instantaneous loading percent overall",
               "title": "max_instantaneous_loading_pct",
               "type": "number"
            },
            "max_moving_average_loadings_pct": {
               "additionalProperties": {
                  "type": "number"
               },
               "default": {},
               "description": "maximum moving average loading percent for each element",
               "title": "max_moving_average_loadings_pct",
               "type": "object"
            },
            "max_moving_average_loading_pct": {
               "default": 100,
               "description": "maximum moving average loading percent overall",
               "title": "max_moving_average_loading_pct",
               "type": "number"
            },
            "window_size_hours": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "window size used to calculate the moving average",
               "title": "window_size_hours"
            },
            "num_time_points_with_instantaneous_violations": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "number of time points where the instantaneous threshold was violated",
               "title": "num_time_points_with_instantaneous_violations"
            },
            "num_time_points_with_moving_average_violations": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "number of time points where the moving average threshold was violated",
               "title": "num_time_points_with_moving_average_violations"
            },
            "instantaneous_threshold": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "instantaneous threshold",
               "title": "instantaneous_threshold"
            },
            "moving_average_threshold": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "moving average threshold",
               "title": "moving_average_threshold"
            }
         },
         "title": "ThermalMetricsBaseModel",
         "type": "object"
      },
      "ThermalMetricsSummaryModel": {
         "additionalProperties": false,
         "properties": {
            "line_loadings": {
               "allOf": [
                  {
                     "$ref": "#/$defs/ThermalMetricsModel"
                  }
               ],
               "description": "line loading metrics",
               "title": "line_loadings"
            },
            "transformer_loadings": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/ThermalMetricsModel"
                  },
                  {
                     "type": "null"
                  }
               ],
               "description": "transformer loading metrics",
               "title": "transformer_loadings"
            }
         },
         "required": [
            "line_loadings",
            "transformer_loadings"
         ],
         "title": "ThermalMetricsBaseModel",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "scenarios"
   ]
}

Config:
  • title: str = ThermalMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field scenarios: Annotated[Dict[str, ThermalMetricsSummaryModel], FieldInfo(annotation=NoneType, required=True, title='scenarios', description='thermal metrics by pydss scenario name')] [Required]

thermal metrics by pydss scenario name

Voltage metrics models

pydantic model pydss.node_voltage_metrics.VoltageMetricsBaseModel[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {},
   "additionalProperties": false
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

pydantic model pydss.node_voltage_metrics.VoltageMetric1[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "time_points": {
         "default": null,
         "description": "time points that contain voltages between ANSI A and ANSI B thresholds",
         "items": {
            "format": "date-time",
            "type": "string"
         },
         "title": "time_points",
         "type": "array"
      },
      "duration": {
         "default": null,
         "description": "amount of time where metric 1 existed (len(time_points) * resolution)",
         "format": "duration",
         "title": "duration",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field duration: Annotated[timedelta, FieldInfo(annotation=NoneType, required=False, title='duration', description='amount of time where metric 1 existed (len(time_points) * resolution)')] = None

amount of time where metric 1 existed (len(time_points) * resolution)

field time_points: Annotated[List[datetime], FieldInfo(annotation=NoneType, required=False, title='time_points', description='time points that contain voltages between ANSI A and ANSI B thresholds')] = None

time points that contain voltages between ANSI A and ANSI B thresholds

pydantic model pydss.node_voltage_metrics.VoltageMetric2[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "duration": {
         "description": "amount of time where a node experienced ANSI A violations",
         "format": "duration",
         "title": "duration",
         "type": "string"
      },
      "duration_percentage": {
         "description": "percentage of overall time",
         "title": "duration_percentage",
         "type": "number"
      }
   },
   "additionalProperties": false,
   "required": [
      "duration",
      "duration_percentage"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field duration: Annotated[timedelta, FieldInfo(annotation=NoneType, required=True, title='duration', description='amount of time where a node experienced ANSI A violations')] [Required]

amount of time where a node experienced ANSI A violations

field duration_percentage: Annotated[float, FieldInfo(annotation=NoneType, required=True, title='duration_percentage', description='percentage of overall time')] [Required]

percentage of overall time

pydantic model pydss.node_voltage_metrics.VoltageMetric3[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "time_points": {
         "description": "time points where moving average voltages violated ANSI A thresholds",
         "items": {
            "format": "date-time",
            "type": "string"
         },
         "title": "time_points",
         "type": "array"
      },
      "duration": {
         "description": "amount of time where metric 3 existed (len(time_points) * resolution)",
         "format": "duration",
         "title": "duration",
         "type": "string"
      }
   },
   "additionalProperties": false,
   "required": [
      "time_points",
      "duration"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field duration: Annotated[timedelta, FieldInfo(annotation=NoneType, required=True, title='duration', description='amount of time where metric 3 existed (len(time_points) * resolution)')] [Required]

amount of time where metric 3 existed (len(time_points) * resolution)

field time_points: Annotated[List[datetime], FieldInfo(annotation=NoneType, required=True, title='time_points', description='time points where moving average voltages violated ANSI A thresholds')] [Required]

time points where moving average voltages violated ANSI A thresholds

pydantic model pydss.node_voltage_metrics.VoltageMetric4[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "percent_node_ansi_a_violations": {
         "description": "percent of nodes with ANSI A violations at time points. Excludes time points with no violations. Inner list is [timestamp, percent].",
         "items": {
            "items": {},
            "type": "array"
         },
         "title": "percent_node_ansi_a_violations",
         "type": "array"
      }
   },
   "additionalProperties": false,
   "required": [
      "percent_node_ansi_a_violations"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field percent_node_ansi_a_violations: Annotated[List[List], FieldInfo(annotation=NoneType, required=True, title='percent_node_ansi_a_violations', description='percent of nodes with ANSI A violations at time points. Excludes time points with no violations. Inner list is [timestamp, percent].')] [Required]

percent of nodes with ANSI A violations at time points. Excludes time points with no violations. Inner list is [timestamp, percent].

pydantic model pydss.node_voltage_metrics.VoltageMetric5[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "min_voltages": {
         "description": "Mapping of node name to minimum voltage",
         "title": "min_voltage_by_node",
         "type": "object"
      },
      "max_voltages": {
         "description": "Mapping of node name to maximum voltage",
         "title": "max_voltage_by_node",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "min_voltages",
      "max_voltages"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field max_voltages: Annotated[Dict, FieldInfo(annotation=NoneType, required=True, title='max_voltage_by_node', description='Mapping of node name to maximum voltage')] [Required]

Mapping of node name to maximum voltage

field min_voltages: Annotated[Dict, FieldInfo(annotation=NoneType, required=True, title='min_voltage_by_node', description='Mapping of node name to minimum voltage')] [Required]

Mapping of node name to minimum voltage

pydantic model pydss.node_voltage_metrics.VoltageMetric5[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "min_voltages": {
         "description": "Mapping of node name to minimum voltage",
         "title": "min_voltage_by_node",
         "type": "object"
      },
      "max_voltages": {
         "description": "Mapping of node name to maximum voltage",
         "title": "max_voltage_by_node",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "min_voltages",
      "max_voltages"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field max_voltages: Annotated[Dict, FieldInfo(annotation=NoneType, required=True, title='max_voltage_by_node', description='Mapping of node name to maximum voltage')] [Required]

Mapping of node name to maximum voltage

field min_voltages: Annotated[Dict, FieldInfo(annotation=NoneType, required=True, title='min_voltage_by_node', description='Mapping of node name to minimum voltage')] [Required]

Mapping of node name to minimum voltage

pydantic model pydss.node_voltage_metrics.VoltageMetricsSummaryModel[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "voltage_duration_between_ansi_a_and_b_minutes": {
         "description": "time in minutes that contain voltages between ANSI A and ANSI B thresholds",
         "title": "voltage_duration_between_ansi_a_and_b_minutes",
         "type": "integer"
      },
      "max_per_node_voltage_duration_outside_ansi_a_minutes": {
         "description": "maximum time in minutes that a node was outside ANSI A thresholds",
         "title": "max_per_node_voltage_duration_outside_ansi_a_minutes",
         "type": "number"
      },
      "moving_average_voltage_duration_outside_ansi_a_minutes": {
         "description": "time in minutes the moving average voltage was outside ANSI A",
         "title": "moving_average_voltage_duration_outside_ansi_a_minutes",
         "type": "number"
      },
      "moving_window_minutes": {
         "description": "window size in minutes for moving average metrics",
         "title": "moving_window_minutes",
         "type": "integer"
      },
      "max_voltage": {
         "description": "maximum voltage seen on any node",
         "title": "max_voltage",
         "type": "number"
      },
      "min_voltage": {
         "description": "minimum voltage seen on any node",
         "title": "min_voltage",
         "type": "number"
      },
      "num_nodes_always_inside_ansi_a": {
         "description": "number of nodes always inside ANSI A thresholds",
         "title": "num_nodes_always_inside_ansi_a",
         "type": "integer"
      },
      "num_nodes_any_outside_ansi_a_always_inside_ansi_b": {
         "description": "number of nodes with some ANSI A violations but no ANSI B violations",
         "title": "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
         "type": "integer"
      },
      "num_nodes_any_outside_ansi_b": {
         "description": "number of nodes with some ANSI B violations",
         "title": "num_nodes_always_outside_ansi_b",
         "type": "integer"
      },
      "num_time_points_with_ansi_b_violations": {
         "description": "number of time points with ANSI B violations",
         "title": "num_time_points_with_ansi_b_violations",
         "type": "integer"
      },
      "total_num_time_points": {
         "description": "number of time points in the simulation",
         "title": "total_num_time_points",
         "type": "integer"
      },
      "total_simulation_duration": {
         "description": "total length of time of the simulation",
         "format": "duration",
         "title": "total_simulation_duration",
         "type": "string"
      }
   },
   "additionalProperties": false,
   "required": [
      "voltage_duration_between_ansi_a_and_b_minutes",
      "max_per_node_voltage_duration_outside_ansi_a_minutes",
      "moving_average_voltage_duration_outside_ansi_a_minutes",
      "moving_window_minutes",
      "max_voltage",
      "min_voltage",
      "num_nodes_always_inside_ansi_a",
      "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
      "num_nodes_any_outside_ansi_b",
      "num_time_points_with_ansi_b_violations",
      "total_num_time_points",
      "total_simulation_duration"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field max_per_node_voltage_duration_outside_ansi_a_minutes: Annotated[float, FieldInfo(annotation=NoneType, required=True, title='max_per_node_voltage_duration_outside_ansi_a_minutes', description='maximum time in minutes that a node was outside ANSI A thresholds')] [Required]

maximum time in minutes that a node was outside ANSI A thresholds

field max_voltage: Annotated[float, FieldInfo(annotation=NoneType, required=True, title='max_voltage', description='maximum voltage seen on any node')] [Required]

maximum voltage seen on any node

field min_voltage: Annotated[float, FieldInfo(annotation=NoneType, required=True, title='min_voltage', description='minimum voltage seen on any node')] [Required]

minimum voltage seen on any node

field moving_average_voltage_duration_outside_ansi_a_minutes: Annotated[float, FieldInfo(annotation=NoneType, required=True, title='moving_average_voltage_duration_outside_ansi_a_minutes', description='time in minutes the moving average voltage was outside ANSI A')] [Required]

time in minutes the moving average voltage was outside ANSI A

field moving_window_minutes: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='moving_window_minutes', description='window size in minutes for moving average metrics')] [Required]

window size in minutes for moving average metrics

field num_nodes_always_inside_ansi_a: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='num_nodes_always_inside_ansi_a', description='number of nodes always inside ANSI A thresholds')] [Required]

number of nodes always inside ANSI A thresholds

field num_nodes_any_outside_ansi_a_always_inside_ansi_b: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='num_nodes_any_outside_ansi_a_always_inside_ansi_b', description='number of nodes with some ANSI A violations but no ANSI B violations')] [Required]

number of nodes with some ANSI A violations but no ANSI B violations

field num_nodes_any_outside_ansi_b: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='num_nodes_always_outside_ansi_b', description='number of nodes with some ANSI B violations')] [Required]

number of nodes with some ANSI B violations

field num_time_points_with_ansi_b_violations: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='num_time_points_with_ansi_b_violations', description='number of time points with ANSI B violations')] [Required]

number of time points with ANSI B violations

field total_num_time_points: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='total_num_time_points', description='number of time points in the simulation')] [Required]

number of time points in the simulation

field total_simulation_duration: Annotated[timedelta, FieldInfo(annotation=NoneType, required=True, title='total_simulation_duration', description='total length of time of the simulation')] [Required]

total length of time of the simulation

field voltage_duration_between_ansi_a_and_b_minutes: Annotated[int, FieldInfo(annotation=NoneType, required=True, title='voltage_duration_between_ansi_a_and_b_minutes', description='time in minutes that contain voltages between ANSI A and ANSI B thresholds')] [Required]

time in minutes that contain voltages between ANSI A and ANSI B thresholds

pydantic model pydss.node_voltage_metrics.VoltageMetricsModel[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "metric_1": {
         "allOf": [
            {
               "$ref": "#/$defs/VoltageMetric1"
            }
         ],
         "description": "metric 1",
         "title": "metric_1"
      },
      "metric_2": {
         "additionalProperties": {
            "$ref": "#/$defs/VoltageMetric2"
         },
         "description": "metric 2",
         "title": "metric_2",
         "type": "object"
      },
      "metric_3": {
         "allOf": [
            {
               "$ref": "#/$defs/VoltageMetric3"
            }
         ],
         "description": "metric 3",
         "title": "metric_3"
      },
      "metric_4": {
         "allOf": [
            {
               "$ref": "#/$defs/VoltageMetric4"
            }
         ],
         "description": "metric 4",
         "title": "metric_4"
      },
      "metric_5": {
         "allOf": [
            {
               "$ref": "#/$defs/VoltageMetric5"
            }
         ],
         "description": "metric 5",
         "title": "metric_5"
      },
      "metric_6": {
         "allOf": [
            {
               "$ref": "#/$defs/VoltageMetric6"
            }
         ],
         "description": "metric 6",
         "title": "metric_6"
      },
      "summary": {
         "anyOf": [
            {
               "$ref": "#/$defs/VoltageMetricsSummaryModel"
            },
            {
               "type": "null"
            }
         ],
         "description": "summary of metrics",
         "title": "summary"
      }
   },
   "$defs": {
      "VoltageMetric1": {
         "additionalProperties": false,
         "properties": {
            "time_points": {
               "default": null,
               "description": "time points that contain voltages between ANSI A and ANSI B thresholds",
               "items": {
                  "format": "date-time",
                  "type": "string"
               },
               "title": "time_points",
               "type": "array"
            },
            "duration": {
               "default": null,
               "description": "amount of time where metric 1 existed (len(time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric2": {
         "additionalProperties": false,
         "properties": {
            "duration": {
               "description": "amount of time where a node experienced ANSI A violations",
               "format": "duration",
               "title": "duration",
               "type": "string"
            },
            "duration_percentage": {
               "description": "percentage of overall time",
               "title": "duration_percentage",
               "type": "number"
            }
         },
         "required": [
            "duration",
            "duration_percentage"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric3": {
         "additionalProperties": false,
         "properties": {
            "time_points": {
               "description": "time points where moving average voltages violated ANSI A thresholds",
               "items": {
                  "format": "date-time",
                  "type": "string"
               },
               "title": "time_points",
               "type": "array"
            },
            "duration": {
               "description": "amount of time where metric 3 existed (len(time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "required": [
            "time_points",
            "duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric4": {
         "additionalProperties": false,
         "properties": {
            "percent_node_ansi_a_violations": {
               "description": "percent of nodes with ANSI A violations at time points. Excludes time points with no violations. Inner list is [timestamp, percent].",
               "items": {
                  "items": {},
                  "type": "array"
               },
               "title": "percent_node_ansi_a_violations",
               "type": "array"
            }
         },
         "required": [
            "percent_node_ansi_a_violations"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric5": {
         "additionalProperties": false,
         "properties": {
            "min_voltages": {
               "description": "Mapping of node name to minimum voltage",
               "title": "min_voltage_by_node",
               "type": "object"
            },
            "max_voltages": {
               "description": "Mapping of node name to maximum voltage",
               "title": "max_voltage_by_node",
               "type": "object"
            }
         },
         "required": [
            "min_voltages",
            "max_voltages"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric6": {
         "additionalProperties": false,
         "properties": {
            "num_time_points": {
               "description": "number of time points that violate ANSI B thresholds",
               "title": "num_time_points",
               "type": "integer"
            },
            "percent_time_points": {
               "description": "percentage of time points that violate ANSI B thresholds",
               "title": "percent_time_points",
               "type": "number"
            },
            "duration": {
               "description": "amount of time where metric 6 existed (len(num_time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "required": [
            "num_time_points",
            "percent_time_points",
            "duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetricsSummaryModel": {
         "additionalProperties": false,
         "properties": {
            "voltage_duration_between_ansi_a_and_b_minutes": {
               "description": "time in minutes that contain voltages between ANSI A and ANSI B thresholds",
               "title": "voltage_duration_between_ansi_a_and_b_minutes",
               "type": "integer"
            },
            "max_per_node_voltage_duration_outside_ansi_a_minutes": {
               "description": "maximum time in minutes that a node was outside ANSI A thresholds",
               "title": "max_per_node_voltage_duration_outside_ansi_a_minutes",
               "type": "number"
            },
            "moving_average_voltage_duration_outside_ansi_a_minutes": {
               "description": "time in minutes the moving average voltage was outside ANSI A",
               "title": "moving_average_voltage_duration_outside_ansi_a_minutes",
               "type": "number"
            },
            "moving_window_minutes": {
               "description": "window size in minutes for moving average metrics",
               "title": "moving_window_minutes",
               "type": "integer"
            },
            "max_voltage": {
               "description": "maximum voltage seen on any node",
               "title": "max_voltage",
               "type": "number"
            },
            "min_voltage": {
               "description": "minimum voltage seen on any node",
               "title": "min_voltage",
               "type": "number"
            },
            "num_nodes_always_inside_ansi_a": {
               "description": "number of nodes always inside ANSI A thresholds",
               "title": "num_nodes_always_inside_ansi_a",
               "type": "integer"
            },
            "num_nodes_any_outside_ansi_a_always_inside_ansi_b": {
               "description": "number of nodes with some ANSI A violations but no ANSI B violations",
               "title": "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
               "type": "integer"
            },
            "num_nodes_any_outside_ansi_b": {
               "description": "number of nodes with some ANSI B violations",
               "title": "num_nodes_always_outside_ansi_b",
               "type": "integer"
            },
            "num_time_points_with_ansi_b_violations": {
               "description": "number of time points with ANSI B violations",
               "title": "num_time_points_with_ansi_b_violations",
               "type": "integer"
            },
            "total_num_time_points": {
               "description": "number of time points in the simulation",
               "title": "total_num_time_points",
               "type": "integer"
            },
            "total_simulation_duration": {
               "description": "total length of time of the simulation",
               "format": "duration",
               "title": "total_simulation_duration",
               "type": "string"
            }
         },
         "required": [
            "voltage_duration_between_ansi_a_and_b_minutes",
            "max_per_node_voltage_duration_outside_ansi_a_minutes",
            "moving_average_voltage_duration_outside_ansi_a_minutes",
            "moving_window_minutes",
            "max_voltage",
            "min_voltage",
            "num_nodes_always_inside_ansi_a",
            "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
            "num_nodes_any_outside_ansi_b",
            "num_time_points_with_ansi_b_violations",
            "total_num_time_points",
            "total_simulation_duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "metric_1",
      "metric_2",
      "metric_3",
      "metric_4",
      "metric_5",
      "metric_6",
      "summary"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field metric_1: Annotated[VoltageMetric1, FieldInfo(annotation=NoneType, required=True, title='metric_1', description='metric 1')] [Required]

metric 1

field metric_2: Annotated[Dict[str, VoltageMetric2], FieldInfo(annotation=NoneType, required=True, title='metric_2', description='metric 2')] [Required]

metric 2

field metric_3: Annotated[VoltageMetric3, FieldInfo(annotation=NoneType, required=True, title='metric_3', description='metric 3')] [Required]

metric 3

field metric_4: Annotated[VoltageMetric4, FieldInfo(annotation=NoneType, required=True, title='metric_4', description='metric 4')] [Required]

metric 4

field metric_5: Annotated[VoltageMetric5, FieldInfo(annotation=NoneType, required=True, title='metric_5', description='metric 5')] [Required]

metric 5

field metric_6: Annotated[VoltageMetric6, FieldInfo(annotation=NoneType, required=True, title='metric_6', description='metric 6')] [Required]

metric 6

field summary: Annotated[VoltageMetricsSummaryModel | None, FieldInfo(annotation=NoneType, required=True, title='summary', description='summary of metrics')] [Required]

summary of metrics

pydantic model pydss.node_voltage_metrics.VoltageMetricsByBusTypeModel[source]

Metrics separated by bus type

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "description": "Metrics separated by bus type",
   "type": "object",
   "properties": {
      "primaries": {
         "allOf": [
            {
               "$ref": "#/$defs/VoltageMetricsModel"
            }
         ],
         "description": "metrics for primary buses",
         "title": "primaries"
      },
      "secondaries": {
         "anyOf": [
            {
               "$ref": "#/$defs/VoltageMetricsModel"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "metrics for secondary buses",
         "title": "secondaries"
      }
   },
   "$defs": {
      "VoltageMetric1": {
         "additionalProperties": false,
         "properties": {
            "time_points": {
               "default": null,
               "description": "time points that contain voltages between ANSI A and ANSI B thresholds",
               "items": {
                  "format": "date-time",
                  "type": "string"
               },
               "title": "time_points",
               "type": "array"
            },
            "duration": {
               "default": null,
               "description": "amount of time where metric 1 existed (len(time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric2": {
         "additionalProperties": false,
         "properties": {
            "duration": {
               "description": "amount of time where a node experienced ANSI A violations",
               "format": "duration",
               "title": "duration",
               "type": "string"
            },
            "duration_percentage": {
               "description": "percentage of overall time",
               "title": "duration_percentage",
               "type": "number"
            }
         },
         "required": [
            "duration",
            "duration_percentage"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric3": {
         "additionalProperties": false,
         "properties": {
            "time_points": {
               "description": "time points where moving average voltages violated ANSI A thresholds",
               "items": {
                  "format": "date-time",
                  "type": "string"
               },
               "title": "time_points",
               "type": "array"
            },
            "duration": {
               "description": "amount of time where metric 3 existed (len(time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "required": [
            "time_points",
            "duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric4": {
         "additionalProperties": false,
         "properties": {
            "percent_node_ansi_a_violations": {
               "description": "percent of nodes with ANSI A violations at time points. Excludes time points with no violations. Inner list is [timestamp, percent].",
               "items": {
                  "items": {},
                  "type": "array"
               },
               "title": "percent_node_ansi_a_violations",
               "type": "array"
            }
         },
         "required": [
            "percent_node_ansi_a_violations"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric5": {
         "additionalProperties": false,
         "properties": {
            "min_voltages": {
               "description": "Mapping of node name to minimum voltage",
               "title": "min_voltage_by_node",
               "type": "object"
            },
            "max_voltages": {
               "description": "Mapping of node name to maximum voltage",
               "title": "max_voltage_by_node",
               "type": "object"
            }
         },
         "required": [
            "min_voltages",
            "max_voltages"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric6": {
         "additionalProperties": false,
         "properties": {
            "num_time_points": {
               "description": "number of time points that violate ANSI B thresholds",
               "title": "num_time_points",
               "type": "integer"
            },
            "percent_time_points": {
               "description": "percentage of time points that violate ANSI B thresholds",
               "title": "percent_time_points",
               "type": "number"
            },
            "duration": {
               "description": "amount of time where metric 6 existed (len(num_time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "required": [
            "num_time_points",
            "percent_time_points",
            "duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetricsModel": {
         "additionalProperties": false,
         "properties": {
            "metric_1": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric1"
                  }
               ],
               "description": "metric 1",
               "title": "metric_1"
            },
            "metric_2": {
               "additionalProperties": {
                  "$ref": "#/$defs/VoltageMetric2"
               },
               "description": "metric 2",
               "title": "metric_2",
               "type": "object"
            },
            "metric_3": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric3"
                  }
               ],
               "description": "metric 3",
               "title": "metric_3"
            },
            "metric_4": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric4"
                  }
               ],
               "description": "metric 4",
               "title": "metric_4"
            },
            "metric_5": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric5"
                  }
               ],
               "description": "metric 5",
               "title": "metric_5"
            },
            "metric_6": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric6"
                  }
               ],
               "description": "metric 6",
               "title": "metric_6"
            },
            "summary": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/VoltageMetricsSummaryModel"
                  },
                  {
                     "type": "null"
                  }
               ],
               "description": "summary of metrics",
               "title": "summary"
            }
         },
         "required": [
            "metric_1",
            "metric_2",
            "metric_3",
            "metric_4",
            "metric_5",
            "metric_6",
            "summary"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetricsSummaryModel": {
         "additionalProperties": false,
         "properties": {
            "voltage_duration_between_ansi_a_and_b_minutes": {
               "description": "time in minutes that contain voltages between ANSI A and ANSI B thresholds",
               "title": "voltage_duration_between_ansi_a_and_b_minutes",
               "type": "integer"
            },
            "max_per_node_voltage_duration_outside_ansi_a_minutes": {
               "description": "maximum time in minutes that a node was outside ANSI A thresholds",
               "title": "max_per_node_voltage_duration_outside_ansi_a_minutes",
               "type": "number"
            },
            "moving_average_voltage_duration_outside_ansi_a_minutes": {
               "description": "time in minutes the moving average voltage was outside ANSI A",
               "title": "moving_average_voltage_duration_outside_ansi_a_minutes",
               "type": "number"
            },
            "moving_window_minutes": {
               "description": "window size in minutes for moving average metrics",
               "title": "moving_window_minutes",
               "type": "integer"
            },
            "max_voltage": {
               "description": "maximum voltage seen on any node",
               "title": "max_voltage",
               "type": "number"
            },
            "min_voltage": {
               "description": "minimum voltage seen on any node",
               "title": "min_voltage",
               "type": "number"
            },
            "num_nodes_always_inside_ansi_a": {
               "description": "number of nodes always inside ANSI A thresholds",
               "title": "num_nodes_always_inside_ansi_a",
               "type": "integer"
            },
            "num_nodes_any_outside_ansi_a_always_inside_ansi_b": {
               "description": "number of nodes with some ANSI A violations but no ANSI B violations",
               "title": "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
               "type": "integer"
            },
            "num_nodes_any_outside_ansi_b": {
               "description": "number of nodes with some ANSI B violations",
               "title": "num_nodes_always_outside_ansi_b",
               "type": "integer"
            },
            "num_time_points_with_ansi_b_violations": {
               "description": "number of time points with ANSI B violations",
               "title": "num_time_points_with_ansi_b_violations",
               "type": "integer"
            },
            "total_num_time_points": {
               "description": "number of time points in the simulation",
               "title": "total_num_time_points",
               "type": "integer"
            },
            "total_simulation_duration": {
               "description": "total length of time of the simulation",
               "format": "duration",
               "title": "total_simulation_duration",
               "type": "string"
            }
         },
         "required": [
            "voltage_duration_between_ansi_a_and_b_minutes",
            "max_per_node_voltage_duration_outside_ansi_a_minutes",
            "moving_average_voltage_duration_outside_ansi_a_minutes",
            "moving_window_minutes",
            "max_voltage",
            "min_voltage",
            "num_nodes_always_inside_ansi_a",
            "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
            "num_nodes_any_outside_ansi_b",
            "num_time_points_with_ansi_b_violations",
            "total_num_time_points",
            "total_simulation_duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "primaries"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field primaries: Annotated[VoltageMetricsModel, FieldInfo(annotation=NoneType, required=True, title='primaries', description='metrics for primary buses')] [Required]

metrics for primary buses

field secondaries: Annotated[VoltageMetricsModel | None, FieldInfo(annotation=NoneType, required=False, title='secondaries', description='metrics for secondary buses')] = None

metrics for secondary buses

pydantic model pydss.node_voltage_metrics.SimulationVoltageMetricsModel[source]

Show JSON schema
{
   "title": "VoltageMetricsBaseModel",
   "type": "object",
   "properties": {
      "scenarios": {
         "additionalProperties": {
            "$ref": "#/$defs/VoltageMetricsByBusTypeModel"
         },
         "description": "voltage metrics by pydss scenario name",
         "title": "scenarios",
         "type": "object"
      }
   },
   "$defs": {
      "VoltageMetric1": {
         "additionalProperties": false,
         "properties": {
            "time_points": {
               "default": null,
               "description": "time points that contain voltages between ANSI A and ANSI B thresholds",
               "items": {
                  "format": "date-time",
                  "type": "string"
               },
               "title": "time_points",
               "type": "array"
            },
            "duration": {
               "default": null,
               "description": "amount of time where metric 1 existed (len(time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric2": {
         "additionalProperties": false,
         "properties": {
            "duration": {
               "description": "amount of time where a node experienced ANSI A violations",
               "format": "duration",
               "title": "duration",
               "type": "string"
            },
            "duration_percentage": {
               "description": "percentage of overall time",
               "title": "duration_percentage",
               "type": "number"
            }
         },
         "required": [
            "duration",
            "duration_percentage"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric3": {
         "additionalProperties": false,
         "properties": {
            "time_points": {
               "description": "time points where moving average voltages violated ANSI A thresholds",
               "items": {
                  "format": "date-time",
                  "type": "string"
               },
               "title": "time_points",
               "type": "array"
            },
            "duration": {
               "description": "amount of time where metric 3 existed (len(time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "required": [
            "time_points",
            "duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric4": {
         "additionalProperties": false,
         "properties": {
            "percent_node_ansi_a_violations": {
               "description": "percent of nodes with ANSI A violations at time points. Excludes time points with no violations. Inner list is [timestamp, percent].",
               "items": {
                  "items": {},
                  "type": "array"
               },
               "title": "percent_node_ansi_a_violations",
               "type": "array"
            }
         },
         "required": [
            "percent_node_ansi_a_violations"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric5": {
         "additionalProperties": false,
         "properties": {
            "min_voltages": {
               "description": "Mapping of node name to minimum voltage",
               "title": "min_voltage_by_node",
               "type": "object"
            },
            "max_voltages": {
               "description": "Mapping of node name to maximum voltage",
               "title": "max_voltage_by_node",
               "type": "object"
            }
         },
         "required": [
            "min_voltages",
            "max_voltages"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetric6": {
         "additionalProperties": false,
         "properties": {
            "num_time_points": {
               "description": "number of time points that violate ANSI B thresholds",
               "title": "num_time_points",
               "type": "integer"
            },
            "percent_time_points": {
               "description": "percentage of time points that violate ANSI B thresholds",
               "title": "percent_time_points",
               "type": "number"
            },
            "duration": {
               "description": "amount of time where metric 6 existed (len(num_time_points) * resolution)",
               "format": "duration",
               "title": "duration",
               "type": "string"
            }
         },
         "required": [
            "num_time_points",
            "percent_time_points",
            "duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetricsByBusTypeModel": {
         "additionalProperties": false,
         "description": "Metrics separated by bus type",
         "properties": {
            "primaries": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetricsModel"
                  }
               ],
               "description": "metrics for primary buses",
               "title": "primaries"
            },
            "secondaries": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/VoltageMetricsModel"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "metrics for secondary buses",
               "title": "secondaries"
            }
         },
         "required": [
            "primaries"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetricsModel": {
         "additionalProperties": false,
         "properties": {
            "metric_1": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric1"
                  }
               ],
               "description": "metric 1",
               "title": "metric_1"
            },
            "metric_2": {
               "additionalProperties": {
                  "$ref": "#/$defs/VoltageMetric2"
               },
               "description": "metric 2",
               "title": "metric_2",
               "type": "object"
            },
            "metric_3": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric3"
                  }
               ],
               "description": "metric 3",
               "title": "metric_3"
            },
            "metric_4": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric4"
                  }
               ],
               "description": "metric 4",
               "title": "metric_4"
            },
            "metric_5": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric5"
                  }
               ],
               "description": "metric 5",
               "title": "metric_5"
            },
            "metric_6": {
               "allOf": [
                  {
                     "$ref": "#/$defs/VoltageMetric6"
                  }
               ],
               "description": "metric 6",
               "title": "metric_6"
            },
            "summary": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/VoltageMetricsSummaryModel"
                  },
                  {
                     "type": "null"
                  }
               ],
               "description": "summary of metrics",
               "title": "summary"
            }
         },
         "required": [
            "metric_1",
            "metric_2",
            "metric_3",
            "metric_4",
            "metric_5",
            "metric_6",
            "summary"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      },
      "VoltageMetricsSummaryModel": {
         "additionalProperties": false,
         "properties": {
            "voltage_duration_between_ansi_a_and_b_minutes": {
               "description": "time in minutes that contain voltages between ANSI A and ANSI B thresholds",
               "title": "voltage_duration_between_ansi_a_and_b_minutes",
               "type": "integer"
            },
            "max_per_node_voltage_duration_outside_ansi_a_minutes": {
               "description": "maximum time in minutes that a node was outside ANSI A thresholds",
               "title": "max_per_node_voltage_duration_outside_ansi_a_minutes",
               "type": "number"
            },
            "moving_average_voltage_duration_outside_ansi_a_minutes": {
               "description": "time in minutes the moving average voltage was outside ANSI A",
               "title": "moving_average_voltage_duration_outside_ansi_a_minutes",
               "type": "number"
            },
            "moving_window_minutes": {
               "description": "window size in minutes for moving average metrics",
               "title": "moving_window_minutes",
               "type": "integer"
            },
            "max_voltage": {
               "description": "maximum voltage seen on any node",
               "title": "max_voltage",
               "type": "number"
            },
            "min_voltage": {
               "description": "minimum voltage seen on any node",
               "title": "min_voltage",
               "type": "number"
            },
            "num_nodes_always_inside_ansi_a": {
               "description": "number of nodes always inside ANSI A thresholds",
               "title": "num_nodes_always_inside_ansi_a",
               "type": "integer"
            },
            "num_nodes_any_outside_ansi_a_always_inside_ansi_b": {
               "description": "number of nodes with some ANSI A violations but no ANSI B violations",
               "title": "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
               "type": "integer"
            },
            "num_nodes_any_outside_ansi_b": {
               "description": "number of nodes with some ANSI B violations",
               "title": "num_nodes_always_outside_ansi_b",
               "type": "integer"
            },
            "num_time_points_with_ansi_b_violations": {
               "description": "number of time points with ANSI B violations",
               "title": "num_time_points_with_ansi_b_violations",
               "type": "integer"
            },
            "total_num_time_points": {
               "description": "number of time points in the simulation",
               "title": "total_num_time_points",
               "type": "integer"
            },
            "total_simulation_duration": {
               "description": "total length of time of the simulation",
               "format": "duration",
               "title": "total_simulation_duration",
               "type": "string"
            }
         },
         "required": [
            "voltage_duration_between_ansi_a_and_b_minutes",
            "max_per_node_voltage_duration_outside_ansi_a_minutes",
            "moving_average_voltage_duration_outside_ansi_a_minutes",
            "moving_window_minutes",
            "max_voltage",
            "min_voltage",
            "num_nodes_always_inside_ansi_a",
            "num_nodes_any_outside_ansi_a_always_inside_ansi_b",
            "num_nodes_any_outside_ansi_b",
            "num_time_points_with_ansi_b_violations",
            "total_num_time_points",
            "total_simulation_duration"
         ],
         "title": "VoltageMetricsBaseModel",
         "type": "object"
      }
   },
   "additionalProperties": false,
   "required": [
      "scenarios"
   ]
}

Config:
  • title: str = VoltageMetricsBaseModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field scenarios: Annotated[Dict[str, VoltageMetricsByBusTypeModel], FieldInfo(annotation=NoneType, required=True, title='scenarios', description='voltage metrics by pydss scenario name')] [Required]

voltage metrics by pydss scenario name

Feeder metrics models

pydantic model pydss.reports.feeder_losses.FeederLossesMetricsModel[source]

Data model for metrics describing feeder losses

Show JSON schema
{
   "title": "FeederLossesMetricsModel",
   "description": "Data model for metrics describing feeder losses",
   "type": "object",
   "properties": {
      "total_losses_kwh": {
         "default": null,
         "description": "Total losses in the circuit",
         "title": "total_losses_kwh",
         "type": "number"
      },
      "line_losses_kwh": {
         "default": null,
         "description": "Total line losses",
         "title": "line_losses_kwh",
         "type": "number"
      },
      "transformer_losses_kwh": {
         "default": null,
         "description": "Total transformer losses",
         "title": "transformer_losses_kwh",
         "type": "number"
      },
      "total_load_demand_kwh": {
         "default": null,
         "description": "Total power output of loads",
         "title": "total_load_demand_kwh",
         "type": "number"
      }
   },
   "additionalProperties": false
}

Config:
  • title: str = FeederLossesMetricsModel

  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

Fields:
field line_losses_kwh: Annotated[float, FieldInfo(annotation=NoneType, required=False, title='line_losses_kwh', description='Total line losses')] = None

Total line losses

field total_load_demand_kwh: Annotated[float, FieldInfo(annotation=NoneType, required=False, title='total_load_demand_kwh', description='Total power output of loads')] = None

Total power output of loads

field total_losses_kwh: Annotated[float, FieldInfo(annotation=NoneType, required=False, title='total_losses_kwh', description='Total losses in the circuit')] = None

Total losses in the circuit

field transformer_losses_kwh: Annotated[float, FieldInfo(annotation=NoneType, required=False, title='transformer_losses_kwh', description='Total transformer losses')] = None

Total transformer losses

pydantic model pydss.reports.feeder_losses.SimulationFeederLossesMetricsModel[source]

Show JSON schema
{
   "title": "SimulationFeederLossesMetricsModel",
   "type": "object",
   "properties": {
      "scenarios": {
         "additionalProperties": {
            "$ref": "#/$defs/FeederLossesMetricsModel"
         },
         "description": "Feeder losses by pydss scenario name",
         "title": "scenarios",
         "type": "object"
      }
   },
   "$defs": {
      "FeederLossesMetricsModel": {
         "additionalProperties": false,
         "description": "Data model for metrics describing feeder losses",
         "properties": {
            "total_losses_kwh": {
               "default": null,
               "description": "Total losses in the circuit",
               "title": "total_losses_kwh",
               "type": "number"
            },
            "line_losses_kwh": {
               "default": null,
               "description": "Total line losses",
               "title": "line_losses_kwh",
               "type": "number"
            },
            "transformer_losses_kwh": {
               "default": null,
               "description": "Total transformer losses",
               "title": "transformer_losses_kwh",
               "type": "number"
            },
            "total_load_demand_kwh": {
               "default": null,
               "description": "Total power output of loads",
               "title": "total_load_demand_kwh",
               "type": "number"
            }
         },
         "title": "FeederLossesMetricsModel",
         "type": "object"
      }
   },
   "required": [
      "scenarios"
   ]
}

Fields:
field scenarios: Dict[str, FeederLossesMetricsModel] [Required]

Feeder losses by pydss scenario name

HELICS interface models

pydantic model pydss.helics_interface.Subscription[source]

Show JSON schema
{
   "title": "Subscription",
   "type": "object",
   "properties": {
      "model": {
         "title": "Model",
         "type": "string"
      },
      "property": {
         "title": "Property",
         "type": "string"
      },
      "id": {
         "title": "Id",
         "type": "string"
      },
      "unit": {
         "anyOf": [
            {
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Unit"
      },
      "subscribe": {
         "default": true,
         "title": "Subscribe",
         "type": "boolean"
      },
      "data_type": {
         "$ref": "#/$defs/DataType"
      },
      "multiplier": {
         "default": 1.0,
         "title": "Multiplier",
         "type": "number"
      },
      "object": {
         "default": null,
         "title": "Object"
      },
      "states": {
         "default": [
            0.0,
            0.0,
            0.0,
            0.0,
            0.0
         ],
         "items": {
            "anyOf": [
               {
                  "type": "number"
               },
               {
                  "type": "integer"
               },
               {
                  "type": "boolean"
               }
            ]
         },
         "title": "States",
         "type": "array"
      },
      "sub": {
         "default": null,
         "title": "Sub"
      }
   },
   "$defs": {
      "DataType": {
         "enum": [
            "double",
            "vector",
            "string",
            "boolean",
            "integer"
         ],
         "title": "DataType",
         "type": "string"
      }
   },
   "required": [
      "model",
      "property",
      "id",
      "data_type"
   ]
}

Config:
  • arbitrary_types_allowed: bool = True

Fields:
field data_type: DataType [Required]
field id: str [Required]
field model: str [Required]
field multiplier: float = 1.0
field object: Any = None
field property: str [Required]
field states: List[float | int | bool] = [0.0, 0.0, 0.0, 0.0, 0.0]
field sub: Any = None
field subscribe: bool = True
field unit: str | None = None
pydantic model pydss.helics_interface.Publication[source]

Show JSON schema
{
   "title": "Publication",
   "type": "object",
   "properties": {
      "model": {
         "title": "Model",
         "type": "string"
      },
      "property": {
         "title": "Property",
         "type": "string"
      },
      "id": {
         "title": "Id",
         "type": "string"
      },
      "object": {
         "default": null,
         "title": "Object"
      },
      "pub": {
         "default": null,
         "title": "Pub"
      },
      "data_type": {
         "$ref": "#/$defs/DataType"
      }
   },
   "$defs": {
      "DataType": {
         "enum": [
            "double",
            "vector",
            "string",
            "boolean",
            "integer"
         ],
         "title": "DataType",
         "type": "string"
      }
   },
   "required": [
      "model",
      "property",
      "id",
      "data_type"
   ]
}

Fields:
field data_type: DataType [Required]
field id: str [Required]
field model: str [Required]
field object: Any = None
field property: str [Required]
field pub: Any = None
pydantic model pydss.helics_interface.Subscriptions[source]

Show JSON schema
{
   "title": "Subscriptions",
   "type": "object",
   "properties": {
      "federate": {
         "default": null,
         "title": "Federate"
      },
      "opendss_models": {
         "title": "Opendss Models",
         "type": "object"
      },
      "subscriptions": {
         "items": {
            "$ref": "#/$defs/Subscription"
         },
         "title": "Subscriptions",
         "type": "array"
      }
   },
   "$defs": {
      "DataType": {
         "enum": [
            "double",
            "vector",
            "string",
            "boolean",
            "integer"
         ],
         "title": "DataType",
         "type": "string"
      },
      "Subscription": {
         "properties": {
            "model": {
               "title": "Model",
               "type": "string"
            },
            "property": {
               "title": "Property",
               "type": "string"
            },
            "id": {
               "title": "Id",
               "type": "string"
            },
            "unit": {
               "anyOf": [
                  {
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "title": "Unit"
            },
            "subscribe": {
               "default": true,
               "title": "Subscribe",
               "type": "boolean"
            },
            "data_type": {
               "$ref": "#/$defs/DataType"
            },
            "multiplier": {
               "default": 1.0,
               "title": "Multiplier",
               "type": "number"
            },
            "object": {
               "default": null,
               "title": "Object"
            },
            "states": {
               "default": [
                  0.0,
                  0.0,
                  0.0,
                  0.0,
                  0.0
               ],
               "items": {
                  "anyOf": [
                     {
                        "type": "number"
                     },
                     {
                        "type": "integer"
                     },
                     {
                        "type": "boolean"
                     }
                  ]
               },
               "title": "States",
               "type": "array"
            },
            "sub": {
               "default": null,
               "title": "Sub"
            }
         },
         "required": [
            "model",
            "property",
            "id",
            "data_type"
         ],
         "title": "Subscription",
         "type": "object"
      }
   },
   "required": [
      "opendss_models",
      "subscriptions"
   ]
}

Fields:
Validators:
field federate: Any = None
Validated by:
field opendss_models: Dict [Required]
Validated by:
field subscriptions: List[Subscription] [Required]
Validated by:
validator is_in_opendss_model  »  all fields[source]
pydantic model pydss.helics_interface.Publications[source]

Show JSON schema
{
   "title": "Publications",
   "type": "object",
   "properties": {
      "federate": {
         "default": null,
         "title": "Federate"
      },
      "federate_name": {
         "title": "Federate Name",
         "type": "string"
      },
      "opendss_models": {
         "title": "Opendss Models",
         "type": "object"
      },
      "publications": {
         "default": [],
         "items": {
            "$ref": "#/$defs/Publication"
         },
         "title": "Publications",
         "type": "array"
      },
      "legacy_input": {
         "default": {},
         "title": "Legacy Input",
         "type": "object"
      },
      "input": {
         "default": {},
         "title": "Input",
         "type": "object"
      }
   },
   "$defs": {
      "DataType": {
         "enum": [
            "double",
            "vector",
            "string",
            "boolean",
            "integer"
         ],
         "title": "DataType",
         "type": "string"
      },
      "Publication": {
         "properties": {
            "model": {
               "title": "Model",
               "type": "string"
            },
            "property": {
               "title": "Property",
               "type": "string"
            },
            "id": {
               "title": "Id",
               "type": "string"
            },
            "object": {
               "default": null,
               "title": "Object"
            },
            "pub": {
               "default": null,
               "title": "Pub"
            },
            "data_type": {
               "$ref": "#/$defs/DataType"
            }
         },
         "required": [
            "model",
            "property",
            "id",
            "data_type"
         ],
         "title": "Publication",
         "type": "object"
      }
   },
   "required": [
      "federate_name",
      "opendss_models"
   ]
}

Fields:
Validators:
field federate: Any = None
Validated by:
field federate_name: str [Required]
Validated by:
field input: Dict = {}
Validated by:
field legacy_input: Dict = {}
Validated by:
field opendss_models: Dict [Required]
Validated by:
field publications: List[Publication] = []
Validated by:
validator build_from_export  »  all fields[source]
validator build_from_legacy  »  all fields[source]