Expression Creation ============== QuarticSDK allows the users to create softtags which allows doing certain operations on existing tags This article explains how to create expressions using QuarticSDK BaseReckonExpression ---------------- BaseReckonExpression is a base class for all the Reckon Expressions that can be deployed to the Platform, which use the existing tags for new softtags output. Users must extend this class and implement the evaluate method to make the expression compatible to deploy in the Quartic AI Platform. BaseReckonExpression supports evaluating over longer time ranges with the use of with_window decorator. The available methods are as follows: .save ~~~~~ This is a private method used to save the model to the Quartic AI Platform. .. raw:: html
Warning: Do not override this method. .. raw:: html
- **client (mandatory)**: Refers to an instance of GraphqlClient - **output\_tag\_name (mandatory)**: Refers to a unique name for the evaluate results - **needs (mandatory)**: Refers to a list of tags that are used as inputs in evaluate method - **asset (mandatory)**: Asset id to be part saved in - **test\_df (mandatory)**: Refers to the test dataframe that validates the expression results and ensures compatibility with the Quartic AI Platform - **is\_streaming (mandatory)**: Refers to whether tag is streaming or not - **tag\_category (mandatory)**: Category of output tag .. raw:: html .evaluate ~~~~~~~~ The method has the following parameters for running the predictions of a ML model: - **input\_df (mandatory)**: Refers to the dataframe on which the expression will run .. raw:: html
Note:  1. Users must override this method to evaluate and run on the dataframe. 2. input\_df is expected to have tag IDs as the column names. .. raw:: html
Example ~~~~~~~ .. code:: python import pandas as pd from quartic_sdk.model import BaseReckonExpression from quartic_sdk import GraphqlClient import pandas as pd class ReckonExpression(BaseReckonExpression): def evaluate(self, input_df: pd.DataFrame) -> pd.Series: return input_df['5']*2 test_exp = ReckonExpression() test_df = pd.DataFrame([{'5': 10}]) api_client = GraphqlClient(url="serverUrl", username="user", password="password") test_exp.save(api_client, output_tag_name="softtag1_output", needs=["5"], asset=279, is_streaming=True, tag_category=1, test_df = test_df) .. raw:: html @BaseReckonExpression.with\_window ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The with\_window decorator enables evaluating expressions over longer time ranges. Users can decorate evaluate method with the @BaseReckonExpression.with_window, passing the window duration, once the expression is deployed the input\_df received by evaluate will contain the data for specified duration. The decorator has the following parameters: - **duration (mandatory)**: Refers to the window duration in seconds for which the data is required .. raw:: html
Example ~~~~~~~ .. code:: python import pandas as pd from quartic_sdk.model import BaseReckonExpression from quartic_sdk import GraphqlClient import pandas as pd class ReckonExpression(BaseReckonExpression): @BaseReckonExpression.with_window(duration=1800) def evaluate(self, input_df: pd.DataFrame) -> pd.Series: return input_df['5']*2 test_exp = ReckonExpression() test_df = pd.DataFrame([{'5': 10}]) api_client = GraphqlClient(url="serverUrl", username="user", password="password") test_exp.save(api_client, output_tag_name="softtag1_output", needs=["5"], asset=279, is_streaming=True, tag_category=1, test_df = test_df) .. raw:: html