Input File
**********

class InputFile(program: str, text_input: str = '', string_leafs: bool = False, lowercase: bool = False)

   Class representing a key and block based text input file as used in
   the Amsterdam Modeling Suite.

   class EntryCategory(value)

      Enum representing the category of an entry in an InputFile.

      Values:
         * Block: the entry is a block containing keys and other
           blocks

         * Key: the entry is a key with a value

   class EntryType(value)

      Enum representing the type of an entry in an InputFile.

      Values:
         * FixedBlock: the entry is a block containing defined keys
           and other blocks

         * FreeBlock: the entry is a free block that is read as a list
           of strings representing the lines

         * EngineBlock: the entry is a free block that ends with
           "EndEngine"

         * InputBlock: the entry is a free block that ends with
           "EndInput"

         * StringKey: the entry is a key of type string

         * MultipleChoiceKey: the entry is a multiple-choice key

         * LogicalKey: the entry is a key of type logical

         * IntegerKey: the entry is a key of type integer

         * IntegerListKey: the entry is a key of type integer_list

         * RealKey: the entry is a key of type float

         * RealListKey: the entry is a key of type float_list

   get(query: str) -> int | float | bool | str | List[int] | List[float] | List[str]

      Returns the value of a key or free block. The return type
      depends on the type of the accessed key.

   get_category(query: str) -> EntryCategory

      Returns the category of an entry as defined in the JSON
      definition for the program.

   get_entries_in_order(query: str) -> List[str]

      Returns the entries of an ordered fixed block in the order they
      occurred in the input.

   get_freeblock(query: str) -> List[str]

      Returns the contents of a free block as a list of lines.

   get_header(query: str) -> str

      Returns the header of a block as a string. If a block does not
      have a header, an empty string is returned.

   get_int(query: str) -> int

      Returns the value of an integer key.

   get_int_list(query: str) -> List[int]

      Returns the value of an integer_list key.

   get_json() -> str

      Returns the JSON representation of the input file as a string.

   get_logical(query: str) -> bool

      Returns the value of a logical key.

   get_real(query: str) -> float

      Returns the value of a float key.

   get_real_list(query: str) -> List[float]

      Returns the value of a float_list key.

   get_string(query: str) -> str

      Returns the value of a string or multiple choice key.

   get_type(query: str) -> EntryType

      Returns the type of an entry as defined in the JSON definition
      for the program.

   is_defined(query: str) -> bool

      Checks if an entry is defined in the JSON definition for the
      program.

   is_ordered(query: str) -> bool

      Checks if a fixed block is declared order sensitive in the JSON
      definition for the program.

   is_present(query: str) -> bool

      Checks if an entry is present in the input.

   is_unique(query: str) -> bool

      Check whether an entry is declared unique or recurring in the
      keywords definition file.

   number_of_entries(query: str) -> int

      Returns the number of occurrances of a non-unique entry.

   read(text_input: str, string_leafs: bool = False, lowercase: bool = False) -> None

      Read more text input for the program. This is faster than
      constructing a new InputFile from scratch, as it will not reread
      the JSON definitions.

   property program: str

      The name of the program that this instance is reading input for.

class InputError

   Error thrown for issues with the input reading, e.g. reading non-
   existing keywords.
