User Guide ========== This documentation covers installing MPilot, the process of creating and running MPilot models, and the process of using the ``mpilot`` command-line program. It also includes a reference of all built-in MPilot commands, including the EEMS commands, used to created fuzzy logic models. Installing MPilot ----------------- MPilot requires the `Python `_ programming language. You will also need a program called ``Pip``, which comes installed with all newer versions of Python. If you have an old version of Python, you may need to `install Pip `_ separately. Once you have Python and Pip, you can install MPilot by running the following command:: pip install mpilot If you plan to use NetCDF data in your MPilot models, you should install the NetCDF extra:: pip install mpilot[netcdf] .. note:: Installing MPilot with NetCDF will require the NetCDF C library to already be installed on your computer. Installing the NetCDF C library is out of the scope of this document, but you can find more information about doing this in the `NetCDF documentation`_. A Quick Example --------------- This example will help you understand the basics of creating and MPilot command file and running it using the `mpilot` command. In this example, we'll read two variables from a CSV file, apply a **Fuzzy Union**, and write the result to a new CSV file. First, create a CSV file called ``input.csv`` with two columns, ``A`` and ``B``:: A,B 10,5 8,2 7,3 5,10 2,8 When this data is loaded by MPilot, each column will be treated as a list of number. In other words:: A = [10, 8, 7, 5, 1] B = [5, 2, 3, 10, 8] Now, create the command file, called ``model.mpt``:: # Read A A = EEMSRead( InFileName = "input.csv", InFieldName = "A", DataType = "Integer" ) # Read B B = EEMSRead( InFileName = "input.csv", InFieldName = "B", DataType = "Integer" ) # Convert A and B to fuzzy A_Fz = CvtToFuzzy( InFieldName = A, TrueThreshold = 10, FalseThreshold = 2 ) B_Fz = CvtToFuzzy( InFieldName = B, TrueThreshold = 10, FalseThreshold = 2 ) # Combine A and B with fuzzy union Union = FuzzyUnion( InFieldNames = [A_Fz, B_Fz] ) # Write A, B, and the union to a new CSV Out = EEMSWrite( OutFileName = "output.csv", OutFieldNames = [A, B, Union] ) This model loads ``A`` and ``B``, and converts each array to fuzzy space, i.e., normalized values to between ``-1`` to ``+1``. The ``TrueThreshold`` and ``FalseThreshold`` parameters determine how this conversion is done. In this case, ``10`` will become ``1`` and ``2`` will become ``-1``. Values between ``2`` and ``10`` will be interpolated to values between ``-1`` and ``1``. The ``FuzzyUnion`` command produces the mean of the fuzzy values. Now we can run this model with:: mpilot eems-csv model.mpt This should run quickly, and produce a new file, ``output.csv``, which will contain the two input columns, ``A`` and ``B``, as well as the result column, ``Union``. The ``mpilot`` program ---------------------- ``mpilot`` is the command-line program used to run models. It is run with the ``library`` to use, and the path to the command file (model):: mpilot The ``library`` can be either ``eems-csv`` to use EEMS commands intended for use with CSV data, or ``eems-netcdf`` to use EEMS commands intended for use with NetCDF data. Run ``mpilot --help`` for a full list of options. Command File Syntax ------------------- MPilot models are expressed using the `.mpt` command file syntax. These files are easy to write and to understand. They consist of all the commands that make up the model. Each command follows the same structure:: = ( ) Parameters are different for each command and may require a specific type of data (e.g., a number, or an output from a previous command). Each parameter takes the form of `` = ``, and multiple parameters are separated by commas. Parameter Types --------------- These are the parameter types that may be used by MPilot commands. .. _param-string: String ^^^^^^ String parameters may be surrounded by quotes, or not. Strings not surrounded by quotes may not contain the following characters: ``#:,=-+()[]``:: # With quotes Param = "This is a string." # Without quotes Param = This is a string. .. _param-number: Number ^^^^^^ Numbers may be integer of decimal values:: # Integer Param = 12 # Decimal Param = 5.4 .. _param-boolean: Boolean ^^^^^^^ A boolean parameter may be ``true`` or ``false``:: Param = true Param = false .. _param-path: Path ^^^^ A path parameter is the same as a string, but must refer to a valid path. For some commands, the path must already exist (e.g., a read command) while for others it will be created (e.g., a write command):: Param = "C:\path\to\file.csv" .. _param-result: Result ^^^^^^ A result parameter refers to the output of another command:: A = CommandA() Out = Write(ResultParam = A) .. _param-list: List ^^^^ A list parameter contains any number of values of a specific type. For example, a list of strings, a list of numbers, or a list of results:: Param = [1, 2, 3, 4] .. _param-tuple: Tuple ^^^^^ A tuple parameter is similar to a list, but consists of any number of key/value pairs. Both the key and value are strings, and are separated by a colon ``:``:: Param = [Color:"Blue"] .. _param-data-type: Data Type ^^^^^^^^^ One of several possible data types, such as "Float" or "Integer", determined by the command:: Param = Float Built-In Command Libraries -------------------------- MPilot includes built-in commands, currently limited to those used for creating EEMS models. A full reference of built-in commands is at :doc:`libraries-ref`. .. toctree:: :hidden: :includehidden: libraries-ref .. _NetCDF documentation: https://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html