Input Module¶
This section documents the input components of the Nextmv Python SDK.
input
¶
Module for handling input sources and data.
This module provides classes and functions for loading and handling input data in various formats for decision problems. It supports JSON, plain text, CSV, and CSV archive formats and can load data from standard input or files.
CLASS | DESCRIPTION |
---|---|
InputFormat |
Enum defining supported input data formats (JSON, TEXT, CSV, CSV_ARCHIVE). |
Input |
Container for input data with format specification and options. |
InputLoader |
Base class for loading inputs from various sources. |
LocalInputLoader |
Class for loading inputs from local files or stdin. |
FUNCTION | DESCRIPTION |
---|---|
load |
Load input data using a specified loader. |
Input
dataclass
¶
Input(
data: Union[
Union[dict[str, Any], Any],
str,
list[dict[str, Any]],
dict[str, list[dict[str, Any]]],
],
input_format: Optional[InputFormat] = JSON,
options: Optional[Options] = None,
)
Input for a decision problem.
You can import the Input
class directly from nextmv
:
PARAMETER | DESCRIPTION |
---|---|
|
The actual data.
TYPE:
|
|
Format of the input data. Default is
TYPE:
|
|
Options that the input was created with.
TYPE:
|
data
instance-attribute
¶
data: Union[
Union[dict[str, Any], Any],
str,
list[dict[str, Any]],
dict[str, list[dict[str, Any]]],
]
The actual data.
The data can be of various types, depending on the input format:
- For
JSON
:Union[dict[str, Any], Any]
- For
TEXT
:str
- For
CSV
:list[dict[str, Any]]
- For
CSV_ARCHIVE
:dict[str, list[dict[str, Any]]]
input_format
class-attribute
instance-attribute
¶
input_format: Optional[InputFormat] = JSON
Format of the input data.
Default is InputFormat.JSON
.
options
class-attribute
instance-attribute
¶
Options that the Input
was created with.
A copy of the options is made during initialization, ensuring the original options remain unchanged even if modified later.
to_dict
¶
Convert the input to a dictionary.
This method serializes the Input object to a dictionary format that can be easily converted to JSON or other serialization formats.
RETURNS | DESCRIPTION |
---|---|
dict[str, Any]
|
Examples:
>>> from nextmv.input import Input, InputFormat
>>> input_obj = Input(data={"key": "value"}, input_format=InputFormat.JSON)
>>> input_dict = input_obj.to_dict()
>>> print(input_dict)
{'data': {'key': 'value'}, 'input_format': 'json', 'options': None}
Source code in nextmv/nextmv/input.py
InputFormat
¶
Bases: str
, Enum
Format of an Input
.
You can import the InputFormat
class directly from nextmv
:
This enum specifies the supported formats for input data.
ATTRIBUTE | DESCRIPTION |
---|---|
JSON |
JSON format, utf-8 encoded.
TYPE:
|
TEXT |
Text format, utf-8 encoded.
TYPE:
|
CSV |
CSV format, utf-8 encoded.
TYPE:
|
CSV_ARCHIVE |
CSV archive format: multiple CSV files.
TYPE:
|
CSV_ARCHIVE
class-attribute
instance-attribute
¶
CSV archive format: multiple CSV files.
InputLoader
¶
Base class for loading inputs.
You can import the InputLoader
class directly from nextmv
:
This abstract class defines the interface for input loaders. Subclasses must
implement the load
method to provide concrete input loading functionality.
load
¶
load(
input_format: InputFormat = JSON,
options: Optional[Options] = None,
*args,
**kwargs,
) -> Input
Read the input data. This method should be implemented by subclasses.
PARAMETER | DESCRIPTION |
---|---|
|
Format of the input data. Default is
TYPE:
|
|
Options for loading the input data.
TYPE:
|
|
Additional positional arguments.
DEFAULT:
|
|
Additional keyword arguments.
DEFAULT:
|
RETURNS | DESCRIPTION |
---|---|
Input
|
The input data. |
RAISES | DESCRIPTION |
---|---|
NotImplementedError
|
If the method is not implemented. |
Source code in nextmv/nextmv/input.py
LocalInputLoader
¶
Bases: InputLoader
Class for loading local inputs.
You can import the LocalInputLoader
class directly from nextmv
:
This class can load input data from the local filesystem, by using stdin, a file, or a directory, where applicable. It supports various input formats like JSON, TEXT, CSV, and CSV archive.
Call the load
method to read the input data.
Examples:
>>> from nextmv.input import LocalInputLoader, InputFormat
>>> loader = LocalInputLoader()
>>> # Load JSON from stdin or file
>>> input_obj = loader.load(input_format=InputFormat.JSON, path="data.json")
>>> # Load CSV from a file
>>> input_obj = loader.load(input_format=InputFormat.CSV, path="data.csv")
FILE_READERS
class-attribute
instance-attribute
¶
Dictionary of functions to read from files.
Each key is an InputFormat, and each value is a function that reads from a file in that format.
STDIN_READERS
class-attribute
instance-attribute
¶
STDIN_READERS = {
JSON: lambda _: load(stdin),
TEXT: lambda _: rstrip("\n"),
CSV: lambda csv_configurations: list(
DictReader(stdin, **csv_configurations)
),
}
Dictionary of functions to read from standard input.
Each key is an InputFormat, and each value is a function that reads from standard input in that format.
load
¶
load(
input_format: Optional[InputFormat] = JSON,
options: Optional[Options] = None,
path: Optional[str] = None,
csv_configurations: Optional[dict[str, Any]] = None,
) -> Input
Load the input data. The input data can be in various formats. For
InputFormat.JSON
, InputFormat.TEXT
, and InputFormat.CSV
, the data
can be streamed from stdin or read from a file. When the path
argument is provided (and valid), the input data is read from the file
specified by path
, otherwise, it is streamed from stdin. For
InputFormat.CSV_ARCHIVE
, the input data is read from the directory
specified by path
. If the path
is not provided, the default
location input
is used. The directory should contain one or more
files, where each file in the directory is a CSV file.
The Input
that is returned contains the data
attribute. This data
can be of different types, depending on the provided input_format
:
InputFormat.JSON
: the data is adict[str, Any]
.InputFormat.TEXT
: the data is astr
.InputFormat.CSV
: the data is alist[dict[str, Any]]
.InputFormat.CSV_ARCHIVE
: the data is adict[str, list[dict[str, Any]]]
. Each key is the name of the CSV file, minus the.csv
extension.
PARAMETER | DESCRIPTION |
---|---|
|
Format of the input data. Default is
TYPE:
|
|
Options for loading the input data.
TYPE:
|
|
Path to the input data.
TYPE:
|
|
Configurations for loading CSV files. The default
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Input
|
The input data. |
RAISES | DESCRIPTION |
---|---|
ValueError
|
If the path is not a directory when working with CSV_ARCHIVE. |
Source code in nextmv/nextmv/input.py
load
¶
load(
input_format: Optional[InputFormat] = JSON,
options: Optional[Options] = None,
path: Optional[str] = None,
csv_configurations: Optional[dict[str, Any]] = None,
loader: Optional[InputLoader] = _LOCAL_INPUT_LOADER,
) -> Input
Load input data using the specified loader.
You can import the load
function directly from nextmv
:
This is a convenience function for loading an Input
object. By default,
it uses the LocalInputLoader
to load data from local sources.
The input data can be in various formats and can be loaded from different sources depending on the loader:
InputFormat.JSON
: the data is adict[str, Any]
InputFormat.TEXT
: the data is astr
InputFormat.CSV
: the data is alist[dict[str, Any]]
InputFormat.CSV_ARCHIVE
: the data is adict[str, list[dict[str, Any]]]
Each key is the name of the CSV file, minus the.csv
extension.
PARAMETER | DESCRIPTION |
---|---|
|
Format of the input data. Default is
TYPE:
|
|
Options for loading the input data.
TYPE:
|
|
Path to the input data. For file-based loaders: - If provided, reads from the specified file or directory - If None, typically reads from stdin (for JSON, TEXT, CSV) or uses a default directory (for CSV_ARCHIVE)
TYPE:
|
|
Configurations for loading CSV files. Custom kwargs for
Python's
TYPE:
|
|
The loader to use for loading the input data.
Default is an instance of
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Input
|
The loaded input data in an Input object. |
RAISES | DESCRIPTION |
---|---|
ValueError
|
If the path is invalid or data format is incorrect. |
Examples:
>>> from nextmv.input import load, InputFormat
>>> # Load JSON from stdin
>>> input_obj = load(input_format=InputFormat.JSON)
>>> # Load CSV from a file
>>> input_obj = load(input_format=InputFormat.CSV, path="data.csv")
>>> # Load CSV archive from a directory
>>> input_obj = load(input_format=InputFormat.CSV_ARCHIVE, path="input_dir")
Source code in nextmv/nextmv/input.py
load_local
¶
load_local(
input_format: Optional[InputFormat] = JSON,
options: Optional[Options] = None,
path: Optional[str] = None,
csv_configurations: Optional[dict[str, Any]] = None,
) -> Input
Warning
load_local
is deprecated, use load
instead.
Load input data from local sources.
This is a convenience function for instantiating a LocalInputLoader
and calling its load
method.
PARAMETER | DESCRIPTION |
---|---|
|
Format of the input data. Default is
TYPE:
|
|
Options for loading the input data.
TYPE:
|
|
Path to the input data.
TYPE:
|
|
Configurations for loading CSV files. Custom kwargs for
Python's
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Input
|
The loaded input data in an Input object. |
RAISES | DESCRIPTION |
---|---|
ValueError
|
If the path is invalid or data format is incorrect. |
See Also
load : The recommended function to use instead.