Enkodery

W portalu mUQSA, enkodery są istotnym składnikiem całego przepływu pracy. Enkoder to funkcja, która przekształca zmienne wejściowe z technicznego formatu mUQSA na format, który może być użyty jako wejście do kodu symulacyjnego lub modelu, czyli rzeczywistej aplikacji. Funkcja enkodera zapewnia, że zmienne wejściowe są odpowiednio sformatowane, znajdują się w właściwym zakresie i są gotowe do przekazania do kodu symulacyjnego.

mUQSA udostępnia kilka predefiniowanych enkoderów, które mogą być używane indywidualnie lub też dołączone do scenariusza w formie złożonego, wieloetapowego enkodera. Dostarczone enkodery powinny być wystarczające, aby zaspokoić potrzeby większości przypadków użycia, ale na wypadek bardziej złożonych scenariuszy, mUQSA daje także użytkownikowi możliwość dołączenia niestandardowych koderów napisanych w języku Python.

Wbudowane enkodery

Generyczny enkoder

Generyczny enkoder to prosty enkoder przeznaczony do kodowania plików tekstowych. Generuje plik docelowy na podstawie dostarczonego szablonu tekstu, gdzie zastępuje wyrażenia wprowadzone w formacie $INPUT_VAR przez odpowiadającą wartość parametru INPUT_VAR zdefiniowanego w parametrach mUQSA.

Przyjmując zatem, że zdefiniowano dwa próbkowane parametry int: a i int: b oraz statyczny parametr string: s, szablon, który umieszcza te zmienne w pliku tekstowym JSON, może wyglądać następująco:

{"first": $a, "second": $b, "third": "$s"}

a następnie wynikowy plik po podstawieniu może wyglądać następująco:

{"first": 20, "second": 10, "third": "some_string"}

Enkoder Jinja

Jinja to popularny i potężny framework szablonowania. Koder oparty na Jinja jest odpowiedni do kodowania plików tekstowych w bardziej złożony sposób niż Generyczny Enkoder. Dzięki konstrukcjom Jinja2 możliwe jest stosowanie bardziej złożonych i nietrywialnych substytucji.

Poniższy przykład przedstawia prosty szablon Jinja dla dwóch próbkowanych parametrów wejściowych a i b, który używa warunkowego wyrażenia Jinja do wygenerowania końcowej zawartości:

{
    "first": {{a}},
    "second": {{b}},
{% if a > b  %}
    "third": true
{% else %}
    "third": false
{% endif %}
}

Plik wyjściowy może zatem wyglądać następująco:

{
    "first": 20,
    "second": 10,
    "third": true
}

Niestandardowy Enkoder

mUQSA obsługuje używanie niestandardowych enkoderów zapisanych w Pythonie. Niestandardowy enkoder powinien być dostarczony jako plik Pythona z klasą eksponującą konstruktor oraz metodę enkodowania o następujących sygnaturach:

class CustomEncoder:
    def __init__(self, template_filename, selector, generated_filename)
        pass

    def encode(self, params={}, target_dir='')
        pass

Metoda encode jest wywoływana przez bibliotekę EasyVVUQ i przekazuje parametr params. params zawiera wszystkie dane próbkowane, i to od twórcy niestandardowego enkodera zależy, jak te dane mogą być przekształcone w formę odpowiednią dla konkretnej aplikacji.

Aby uzskać lepszy wgląd w to, jak enkoder może być skonstruowany odsyłamy do dokumentacji EasyVVUQ Encoders Sources.

Multiencoder

Wiele enkoderów może być połączonych w pojedynczy Multiencoder. Kolejność wykonania takich połączonych koderów następuje z góry do dołu.