{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":94147,"databundleVersionId":11390004,"sourceType":"competition"},{"sourceId":266431,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":227954,"modelId":249728},{"sourceId":238914,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":204046,"modelId":225262}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"\nimport os\nimport gc\nimport torch\nimport sys\nfrom transformers import AutoModelForCausalLM, AutoTokenizer","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# moving files\n! cp /kaggle/input/deepseekcodingpatternpipeline/other/default/3/* /kaggle/working\nimport sys\nsys.path.append('/kaggle/working/DeepseekCodingPatternPipeline_v3.py')\nfrom DeepseekCodingPatternPipeline_v3 import DeepseekCodingPatternPipeline_v3","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"if __name__ == \"__main__\":\n    import torch\n    from IPython.display import display, Markdown, HTML\n\n    # Clear GPU memory to free up unused allocations.\n    torch.cuda.empty_cache()\n\n    # Define the model folder (adjust the path as needed)\n    model_folder = \"/kaggle/input/deepseek-r1/transformers/deepseek-r1-distill-qwen-7b/1\"\n    \n    # Instantiate the specialized pipeline.\n    # If your pipeline supports device selection, force CPU to avoid GPU OOM.\n    pipeline = DeepseekCodingPatternPipeline_v3(model_folder, device=\"cpu\")\n    \n    # The existing code to be optimized (as a multiline string).\n    existing_code = \"\"\"\nimport h5py\nimport numpy as np\nimport cudf\nimport cupy as cp\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\nfrom cuml.preprocessing import MinMaxScaler\nfrom cuml.ensemble import RandomForestRegressor\nfrom sklearn.multioutput import MultiOutputRegressor\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.model_selection import GridSearchCV, RandomizedSearchCV, KFold\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.isotonic import IsotonicRegression\n\nclass CellTypeGPUPipeline:\n    def __init__(self, h5_file_path):\n        self.h5_file_path = h5_file_path\n        self.train_spot_tables = {}\n        self.cell_type_columns = None\n\n    def load_train_data(self):\n        with h5py.File(self.h5_file_path, \"r\") as f:\n            train_spots = f[\"spots/Train\"]\n            for slide_name in train_spots.keys():\n                spot_array = np.array(train_spots[slide_name])\n                df = pd.DataFrame(spot_array)\n                self.train_spot_tables[slide_name] = df\n        print(\"Training data loaded (GPU version) successfully.\")\n\n    def prepare_training_set(self, slide_id='S_1'):\n        if slide_id not in self.train_spot_tables:\n            raise ValueError(f\"Slide {slide_id} not found in training data.\")\n        df = self.train_spot_tables[slide_id]\n        feature_cols = ['x', 'y']\n        target_cols = [col for col in df.columns if col not in feature_cols]\n        self.cell_type_columns = target_cols\n        X = df[feature_cols].astype('float32')\n        y = df[target_cols].astype('float32')\n        return X, y\n\n    def perform_eda(self, slide_id='S_1'):\n        if slide_id not in self.train_spot_tables:\n            raise ValueError(f\"Slide {slide_id} not found in training data.\")\n        df = self.train_spot_tables[slide_id]\n        print(\"Descriptive statistics for slide\", slide_id)\n        print(df.describe())\n        df[['x', 'y']].hist(bins=30, figsize=(12, 5))\n        plt.suptitle(\"Histograms of 'x' and 'y' features\")\n        plt.show()\n\ndef load_test_data(h5_file_path, slide_id):\n    with h5py.File(self.h5_file_path, \"r\") as f:\n        test_spots = f[\"spots/Test\"]\n        if slide_id not in test_spots:\n            raise ValueError(f\"Slide {slide_id} not found in test data.\")\n        spot_array = np.array(test_spots[slide_id])\n        df = pd.DataFrame(spot_array)\n    print(f\"Test data for slide {slide_id} loaded successfully.\")\n    return df\n\ndef create_submission(test_df, predictions, submission_filename, cell_type_columns):\n    pred_df = pd.DataFrame(predictions, columns=cell_type_columns, index=test_df.index)\n    pred_df.insert(0, 'ID', test_df.index)\n    pred_df.to_csv(submission_filename, index=False)\n    print(f\"Submission file '{submission_filename}' created!\")\n\ndef calibrate_model(best_model, X_train_np, y_train_np):\n    y_train_pred = best_model.predict(X_train_np)\n    n_targets = y_train_np.shape[1]\n    calibrators = []\n    for i in range(n_targets):\n        iso = IsotonicRegression(out_of_bounds='clip')\n        iso.fit(y_train_pred[:, i], y_train_np[:, i])\n        calibrators.append(iso)\n    return calibrators\n\ndef apply_calibration(predictions, calibrators):\n    n_targets = predictions.shape[1]\n    calibrated_preds = np.zeros_like(predictions)\n    for i in range(n_targets):\n        calibrated_preds[:, i] = calibrators[i].predict(predictions[:, i])\n    return calibrated_preds\n\nif __name__ == \"__main__\":\n    h5_file_path = \"/kaggle/input/el-hackathon-2025/elucidata_ai_challenge_data.h5\"\n    pipeline_obj = CellTypeGPUPipeline(h5_file_path)\n    pipeline_obj.load_train_data()\n    pipeline_obj.perform_eda(slide_id='S_1')\n    X_train, y_train = pipeline_obj.prepare_training_set(slide_id='S_1')\n    if hasattr(X_train, 'to_pandas'):\n        X_train_np = X_train.to_pandas().values\n    else:\n        X_train_np = X_train.values\n    if hasattr(y_train, 'to_pandas'):\n        y_train_np = y_train.to_pandas().values\n    else:\n        y_train_np = y_train.values\n    pipe = Pipeline([\n        ('scaler', MinMaxScaler()),\n        ('model', MultiOutputRegressor(RandomForestRegressor(random_state=42)))\n    ])\n    param_grid = {\n        'model__estimator__n_estimators': [50, 100, 200],\n        'model__estimator__max_depth': [None, 10, 20],\n        'model__estimator__min_samples_split': [2, 5, 10]\n    }\n    grid_search = GridSearchCV(pipe, param_grid, cv=5, scoring='neg_mean_squared_error', verbose=2)\n    grid_search.fit(X_train_np, y_train_np)\n    best_params_grid = grid_search.best_params_\n    best_score_grid = -grid_search.best_score_\n    print(\"Best parameters from GridSearchCV:\", best_params_grid)\n    print(\"Best CV MSE from GridSearchCV:\", best_score_grid)\n    random_search = RandomizedSearchCV(pipe, param_grid, cv=5, scoring='neg_mean_squared_error',\n                                         n_iter=5, random_state=42, verbose=2)\n    random_search.fit(X_train_np, y_train_np)\n    best_params_random = random_search.best_params_\n    best_score_random = -random_search.best_score_\n    print(\"Best parameters from RandomizedSearchCV:\", best_params_random)\n    print(\"Best CV MSE from RandomizedSearchCV:\", best_score_random)\n    best_model = grid_search.best_estimator_\n    calibrators = calibrate_model(best_model, X_train_np, y_train_np)\n    test_df = load_test_data(h5_file_path, slide_id='S_7')\n    X_test = test_df[['x', 'y']].astype('float32')\n    X_test_np = X_test.values\n    test_predictions = best_model.predict(X_test_np)\n    calibrated_predictions = apply_calibration(test_predictions, calibrators)\n    create_submission(test_df, calibrated_predictions, submission_filename=\"submission.csv\",\n                      cell_type_columns=pipeline_obj.cell_type_columns)\n\"\"\"\n    # Use a reduced max_new_tokens value (e.g. 512) to minimize memory usage during generation.\n    optimized_code = pipeline.optimize_code(existing_code, max_new_tokens=1024)\n    \n    display(Markdown(\"### Optimized Code (Markdown)\"))\n    display(Markdown(pipeline.format_markdown(optimized_code)))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}