{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.4.0"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84493,"databundleVersionId":9871156,"sourceType":"competition"},{"sourceId":9875610,"sourceType":"datasetVersion","datasetId":6062938}],"dockerImageVersionId":30749,"isInternetEnabled":false,"language":"r","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"library(arrow)\nlibrary(xgboost)\nlibrary(dplyr)\n\nlibrary(reticulate)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:23.826149Z","iopub.execute_input":"2024-11-11T17:49:23.827973Z","iopub.status.idle":"2024-11-11T17:49:23.846578Z","shell.execute_reply":"2024-11-11T17:49:23.844759Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Use reticulate to run pip directly for the .whl file\nreticulate::py_run_string(\"\nimport pip\npip.main(['install', '/kaggle/input/polarspackage/polars-1.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl'])\n\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:23.849557Z","iopub.execute_input":"2024-11-11T17:49:23.851163Z","iopub.status.idle":"2024-11-11T17:49:45.518288Z","shell.execute_reply":"2024-11-11T17:49:45.515756Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"os = import(\"os\")\npd = import(\"pandas\")\n\npl = import(\"polars\")\n\nimport_directory = \"/kaggle/input/jane-street-real-time-market-data-forecasting\"\n\nkaggle_evaluation <- import_from_path(\"kaggle_evaluation.jane_street_inference_server\", path = import_directory)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:45.522494Z","iopub.execute_input":"2024-11-11T17:49:45.524639Z","iopub.status.idle":"2024-11-11T17:49:45.554461Z","shell.execute_reply":"2024-11-11T17:49:45.552060Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"lags_r <- arrow::read_parquet(\"/kaggle/input/jane-street-real-time-market-data-forecasting/lags.parquet/date_id=0/part-0.parquet\")\nlags <- pl$DataFrame(r_to_py(lags_r))  # Convert to polars DataFrame\n\ntest_r <- arrow::read_parquet(\"/kaggle/input/jane-street-real-time-market-data-forecasting/test.parquet/date_id=0/part-0.parquet\")\ntest <- pl$DataFrame(r_to_py(test_r))  # Convert to polars DataFrame","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:45.559609Z","iopub.execute_input":"2024-11-11T17:49:45.561529Z","iopub.status.idle":"2024-11-11T17:49:45.725307Z","shell.execute_reply":"2024-11-11T17:49:45.722848Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define the Python function using reticulate's `py_run_string`\npy_run_string(\"\nimport polars as pl\n\nlags_ = None\n\ndef predict(test, lags):\n    global lags_\n    if lags is not None:\n        lags_ = lags\n\n    # Replace this section with your own predictions\n    predictions = test.select(\n        'row_id',\n        pl.lit(0.0).alias('responder_6'),\n    )\n\n    if isinstance(predictions, pl.DataFrame):\n        assert predictions.columns == ['row_id', 'responder_6']\n    elif isinstance(predictions, pd.DataFrame):\n        assert (predictions.columns == ['row_id', 'responder_6']).all()\n    else:\n        raise TypeError('The predict function must return a DataFrame')\n    # Confirm it has as many rows as the test data\n    assert len(predictions) == len(test)\n\n    return predictions\n\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:45.730483Z","iopub.execute_input":"2024-11-11T17:49:45.732279Z","iopub.status.idle":"2024-11-11T17:49:45.749686Z","shell.execute_reply":"2024-11-11T17:49:45.747420Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions <- py$predict(test, lags)\nprint(predictions)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:45.752863Z","iopub.execute_input":"2024-11-11T17:49:45.754521Z","iopub.status.idle":"2024-11-11T17:49:45.782812Z","shell.execute_reply":"2024-11-11T17:49:45.780721Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define the inference server with the predict function\ninference_server <- kaggle_evaluation$JSInferenceServer(py$predict)\n\n# Check the environment variable and decide which method to call\nif (Sys.getenv(\"KAGGLE_IS_COMPETITION_RERUN\") != \"\") {\n    inference_server$serve()\n} else {\n    inference_server$run_local_gateway(\n        list(\n            \"/kaggle/input/jane-street-real-time-market-data-forecasting/test.parquet\",\n            \"/kaggle/input/jane-street-real-time-market-data-forecasting/lags.parquet\"\n        )\n    )\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-11T17:49:45.785872Z","iopub.execute_input":"2024-11-11T17:49:45.787469Z","iopub.status.idle":"2024-11-11T17:49:45.953967Z","shell.execute_reply":"2024-11-11T17:49:45.951725Z"}},"outputs":[],"execution_count":null}]}