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.