Function data

Defines models for cost functions

class infrasys.function_data.XYCoords(x: float, y: float)

Named tuple used to define (x,y) coordinates.

Create new instance of XYCoords(x, y)

x: float

Alias for field number 0

y: float

Alias for field number 1

pydantic model infrasys.function_data.FunctionData

BaseClass of FunctionData

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Show JSON schema
{
   "title": "FunctionData",
   "description": "BaseClass of FunctionData",
   "type": "object",
   "properties": {
      "uuid": {
         "format": "uuid",
         "title": "Uuid",
         "type": "string"
      }
   },
   "additionalProperties": false
}

Config:
  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • arbitrary_types_allowed: bool = True

  • populate_by_name: bool = True

Fields:

pydantic model infrasys.function_data.LinearFunctionData

Data representation for linear cost function.

Used to represent linear cost functions of the form

\[f(x) = mx + c,\]

where \(m\) is the proportional term and \(c\) is the constant term.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Show JSON schema
{
   "title": "LinearFunctionData",
   "description": "Data representation for linear cost function.\n\nUsed to represent linear cost functions of the form\n\n.. math:: f(x) = mx + c,\n\nwhere :math:`m` is the proportional term and :math:`c` is the constant term.",
   "type": "object",
   "properties": {
      "uuid": {
         "format": "uuid",
         "title": "Uuid",
         "type": "string"
      },
      "proportional_term": {
         "description": "the proportional term in the represented function.",
         "title": "Proportional Term",
         "type": "number"
      },
      "constant_term": {
         "description": "the constant term in the represented function.",
         "title": "Constant Term",
         "type": "number"
      }
   },
   "additionalProperties": false,
   "required": [
      "proportional_term",
      "constant_term"
   ]
}

Config:
  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • arbitrary_types_allowed: bool = True

  • populate_by_name: bool = True

Fields:
field constant_term: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='the constant term in the represented function.')] [Required]

the constant term in the represented function.

field proportional_term: Annotated[Quantity | float, FieldInfo(annotation=NoneType, required=True, description='the proportional term in the represented function.')] [Required]

the proportional term in the represented function.

pydantic model infrasys.function_data.QuadraticFunctionData

Data representation for quadratic cost function.

Used to represent quadratic of cost functions of the form

\[f(x) = ax^2 + bx + c,\]

where \(a\) is the quadratic term, \(b\) is the proportional term and \(c\) is the constant term.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Show JSON schema
{
   "title": "QuadraticFunctionData",
   "description": "Data representation for quadratic cost function.\n\nUsed to represent quadratic of cost functions of the form\n\n.. math:: f(x) = ax^2 + bx + c,\n\nwhere :math:`a` is the quadratic term, :math:`b` is the proportional term and :math:`c` is the\nconstant term.",
   "type": "object",
   "properties": {
      "uuid": {
         "format": "uuid",
         "title": "Uuid",
         "type": "string"
      },
      "quadratic_term": {
         "description": "the quadratic term in the represented function.",
         "title": "Quadratic Term",
         "type": "number"
      },
      "proportional_term": {
         "description": "the proportional term in the represented function.",
         "title": "Proportional Term",
         "type": "number"
      },
      "constant_term": {
         "description": "the constant term in the represented function.",
         "title": "Constant Term",
         "type": "number"
      }
   },
   "additionalProperties": false,
   "required": [
      "quadratic_term",
      "proportional_term",
      "constant_term"
   ]
}

Config:
  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • arbitrary_types_allowed: bool = True

  • populate_by_name: bool = True

Fields:
field constant_term: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='the constant term in the represented function.')] [Required]

the constant term in the represented function.

field proportional_term: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='the proportional term in the represented function.')] [Required]

the proportional term in the represented function.

field quadratic_term: Annotated[float, FieldInfo(annotation=NoneType, required=True, description='the quadratic term in the represented function.')] [Required]

the quadratic term in the represented function.

infrasys.function_data.validate_piecewise_linear_x(points: List[XYCoords]) List[XYCoords]

Validates the x data for PiecewiseLinearData class

X data is checked to ensure there is at least two values of x, which is the minimum required to generate a cost curve, and is given in ascending order (e.g. [1, 2, 3], not [1, 3, 2]).

Parameters:

points (List[XYCoords]) – List of named tuples of (x,y) coordinates for cost function

Returns:

points – List of (x,y) data for cost function after successful validation.

Return type:

List[XYCoords]

infrasys.function_data.validate_piecewise_step_x(x_coords: List[float]) List[float]

Validates the x data for PiecewiseStepData class

X data is checked to ensure there is at least two values of x, which is the minimum required to generate a cost curve, and is given in ascending order (e.g. [1, 2, 3], not [1, 3, 2]).

Parameters:

x_coords (List[float]) – List of x data for cost function.

Returns:

x_coords – List of x data for cost function after successful validation.

Return type:

List[float]

pydantic model infrasys.function_data.PiecewiseLinearData

Data representation for piecewise linear cost function.

Used to represent linear data as a series of points: two points define one segment, three points define two segments, etc. The curve starts at the first point given, not the origin. Principally used for the representation of cost functions where the points store quantities (x, y), such as (MW, USD/h).

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Show JSON schema
{
   "title": "PiecewiseLinearData",
   "description": "Data representation for piecewise linear cost function.\n\nUsed to represent linear data as a series of points: two points define one segment, three\npoints define two segments, etc. The curve starts at the first point given, not the origin.\nPrincipally used for the representation of cost functions where the points store quantities (x,\ny), such as (MW, USD/h).",
   "type": "object",
   "properties": {
      "uuid": {
         "format": "uuid",
         "title": "Uuid",
         "type": "string"
      },
      "points": {
         "description": "list of (x,y) points that define the function.",
         "items": {
            "$ref": "#/$defs/XYCoords"
         },
         "title": "Points",
         "type": "array"
      }
   },
   "$defs": {
      "XYCoords": {
         "maxItems": 2,
         "minItems": 2,
         "prefixItems": [
            {
               "title": "X",
               "type": "number"
            },
            {
               "title": "Y",
               "type": "number"
            }
         ],
         "type": "array"
      }
   },
   "additionalProperties": false,
   "required": [
      "points"
   ]
}

Config:
  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • arbitrary_types_allowed: bool = True

  • populate_by_name: bool = True

Fields:
field points: Annotated[List[XYCoords], AfterValidator(func=validate_piecewise_linear_x), FieldInfo(annotation=NoneType, required=True, description='list of (x,y) points that define the function.')] [Required]

list of (x,y) points that define the function.

Constraints:
  • func = <function validate_piecewise_linear_x at 0x7fe27d2a93a0>

pydantic model infrasys.function_data.PiecewiseStepData

Data representation for piecewise step cost function.

Used to represent a step function as a series of endpoint x-coordinates and segment y-coordinates: two x-coordinates and one y-coordinate defines a single segment, three x-coordinates and two y-coordinates define two segments, etc.

This can be useful to represent the derivative of a PiecewiseLinearData, where the y-coordinates of this step function represent the slopes of that piecewise linear function. Principally used for the representation of cost functions where the points store quantities (x, \(dy/dx\)), such as (MW, USD/MWh).

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Show JSON schema
{
   "title": "PiecewiseStepData",
   "description": "Data representation for piecewise step cost function.\n\nUsed to represent a step function as a series of endpoint x-coordinates and segment\ny-coordinates: two x-coordinates and one y-coordinate defines a single segment, three\nx-coordinates and two y-coordinates define two segments, etc.\n\nThis can be useful to represent the derivative of a :class:`PiecewiseLinearData`, where the\ny-coordinates of this step function represent the slopes of that piecewise linear function.\nPrincipally used for the representation of cost functions where the points store quantities (x,\n:math:`dy/dx`), such as (MW, USD/MWh).",
   "type": "object",
   "properties": {
      "uuid": {
         "format": "uuid",
         "title": "Uuid",
         "type": "string"
      },
      "x_coords": {
         "description": "the x-coordinates of the endpoints of the segments.",
         "items": {
            "type": "number"
         },
         "title": "X Coords",
         "type": "array"
      },
      "y_coords": {
         "description": "The y-coordinates of the segments: `y_coords[1]` is the y-value between `x_coords[0]` and `x_coords[1]`, etc. Must have one fewer elements than `x_coords`.",
         "items": {
            "type": "number"
         },
         "title": "Y Coords",
         "type": "array"
      }
   },
   "additionalProperties": false,
   "required": [
      "x_coords",
      "y_coords"
   ]
}

Config:
  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • arbitrary_types_allowed: bool = True

  • populate_by_name: bool = True

Fields:
Validators:
field x_coords: Annotated[List[float], FieldInfo(annotation=NoneType, required=True, description='the x-coordinates of the endpoints of the segments.')] [Required]

the x-coordinates of the endpoints of the segments.

Validated by:
field y_coords: Annotated[List[float], FieldInfo(annotation=NoneType, required=True, description='The y-coordinates of the segments: `y_coords[1]` is the y-value between `x_coords[0]` and `x_coords[1]`, etc. Must have one fewer elements than `x_coords`.')] [Required]

The y-coordinates of the segments: y_coords[1] is the y-value between x_coords[0] and x_coords[1], etc. Must have one fewer elements than x_coords.

Validated by:
validator validate_piecewise_xy  »  all fields

Method to validate the x and y data for PiecewiseStepData class

Model validator used to validate given data for the PiecewiseStepData. Calls validate_piecewise_step_x to check if x_coords is valid, then checks if the length of y_coords is exactly one less than x_coords, which is necessary to define the cost functions correctly.