{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":6775,"databundleVersionId":46658,"sourceType":"competition"}],"dockerImageVersionId":31259,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"#!/usr/bin/env python3\n\"\"\"\nKaggle Submission Script for Passenger Screening Algorithm Challenge\nHandles authentication and submission to the competition\n\"\"\"\n\nimport os\nimport subprocess\nimport sys\n\ndef check_kaggle_auth():\n    \"\"\"Check if Kaggle authentication is set up\"\"\"\n    kaggle_json = os.path.expanduser(\"~/.kaggle/kaggle.json\")\n    if not os.path.exists(kaggle_json):\n        print(\"❌ Kaggle authentication not found!\")\n        print(\"Please set up Kaggle API credentials:\")\n        print(\"1. Go to https://kaggle.com/account\")\n        print(\"2. Click 'Create New Token' in API section\")\n        print(\"3. Download kaggle.json\")\n        print(\"4. Place it in ~/.kaggle/kaggle.json\")\n        print(\"5. Run: chmod 600 ~/.kaggle/kaggle.json\")\n        return False\n\n    # Check permissions\n    import stat\n    current_perms = os.stat(kaggle_json).st_mode\n    if current_perms & stat.S_IRGRP or current_perms & stat.S_IROTH:\n        print(\"⚠️  Fixing kaggle.json permissions...\")\n        os.chmod(kaggle_json, 0o600)\n\n    print(\"✅ Kaggle authentication found\")\n    return True\n\ndef test_kaggle_connection():\n    \"\"\"Test Kaggle CLI connection\"\"\"\n    try:\n        result = subprocess.run(['kaggle', 'competitions', 'list', '--csv'],\n                              capture_output=True, text=True, timeout=30)\n        if result.returncode == 0:\n            print(\"✅ Kaggle CLI working correctly\")\n            return True\n        else:\n            print(f\"❌ Kaggle CLI error: {result.stderr}\")\n            return False\n    except Exception as e:\n        print(f\"❌ Kaggle CLI test failed: {e}\")\n        return False\n\ndef check_competition_status():\n    \"\"\"Check if the competition is still accepting submissions\"\"\"\n    try:\n        result = subprocess.run(['kaggle', 'competitions', 'list', '-s', 'passenger-screening'],\n                              capture_output=True, text=True, timeout=30)\n        if 'Late Submission' in result.stdout:\n            print(\"✅ Competition appears to accept late submissions\")\n            return True\n        elif result.returncode == 0:\n            print(\"ℹ️  Competition status retrieved\")\n            return True\n        else:\n            print(f\"⚠️  Could not verify competition status: {result.stderr}\")\n            return True  # Try submission anyway\n    except Exception as e:\n        print(f\"⚠️  Could not check competition status: {e}\")\n        return True\n\ndef submit_solution(submission_file='submission.csv', message=\"Zone-specific probabilistic threat detection model\"):\n    \"\"\"Submit solution to the competition\"\"\"\n    if not os.path.exists(submission_file):\n        print(f\"❌ Submission file '{submission_file}' not found!\")\n        return False\n\n    print(f\"📤 Submitting {submission_file} to passenger-screening-algorithm-challenge...\")\n    print(f\"   Message: {message}\")\n\n    try:\n        cmd = [\n            'kaggle', 'competitions', 'submit',\n            'passenger-screening-algorithm-challenge',\n            '-f', submission_file,\n            '-m', message\n        ]\n\n        result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)\n\n        if result.returncode == 0:\n            print(\"✅ Submission successful!\")\n            print(result.stdout)\n\n            # Check submission status\n            check_submission_status()\n            return True\n        else:\n            print(\"❌ Submission failed!\")\n            print(\"Error output:\")\n            print(result.stderr)\n            return False\n\n    except subprocess.TimeoutExpired:\n        print(\"❌ Submission timed out (60 seconds)\")\n        return False\n    except Exception as e:\n        print(f\"❌ Submission error: {e}\")\n        return False\n\ndef check_submission_status():\n    \"\"\"Check the status of recent submissions\"\"\"\n    print(\"\\n📊 Checking submission status...\")\n\n    try:\n        result = subprocess.run(['kaggle', 'competitions', 'submissions', 'passenger-screening-algorithm-challenge'],\n                              capture_output=True, text=True, timeout=30)\n\n        if result.returncode == 0:\n            print(\"Recent submissions:\")\n            print(result.stdout)\n        else:\n            print(f\"Could not retrieve submission status: {result.stderr}\")\n    except Exception as e:\n        print(f\"Error checking submission status: {e}\")\n\ndef main():\n    \"\"\"Main submission workflow\"\"\"\n    print(\"🛡️  PASSENGER SCREENING CHALLENGE - KAGGLE SUBMISSION\")\n    print(\"=\" * 55)\n\n    # Check authentication\n    if not check_kaggle_auth():\n        return\n\n    # Test connection\n    if not test_kaggle_connection():\n        return\n\n    # Check competition status\n    check_competition_status()\n\n    # Check for submission file\n    submission_file = 'submission.csv'\n    if not os.path.exists(submission_file):\n        print(f\"❌ Submission file '{submission_file}' not found!\")\n        print(\"Please run the solution first to generate the submission file.\")\n        return\n\n    # Confirm submission\n    print(f\"\\n📋 Ready to submit: {submission_file}\")\n    response = input(\"Do you want to submit now? (y/N): \").lower().strip()\n\n    if response in ['y', 'yes']:\n        message = input(\"Enter submission message (or press Enter for default): \").strip()\n        if not message:\n            message = \"Zone-specific probabilistic threat detection model\"\n\n        # Submit\n        if submit_solution(submission_file, message):\n            print(\"\\n🎉 Submission completed successfully!\")\n            print(\"Check your Kaggle account for results when they're available.\")\n        else:\n            print(\"\\n❌ Submission failed. Check the error messages above.\")\n    else:\n        print(\"Submission cancelled.\")\n\nif __name__ == \"__main__\":\n    main()","metadata":{"_uuid":"b933cb92-23b5-4f18-9d8e-ec55a4d79fdd","_cell_guid":"bd23075f-c8c0-46ba-af82-daaa52778197","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2026-02-12T14:35:20.916714Z","iopub.execute_input":"2026-02-12T14:35:20.916941Z","iopub.status.idle":"2026-02-12T14:35:20.942773Z","shell.execute_reply.started":"2026-02-12T14:35:20.916915Z","shell.execute_reply":"2026-02-12T14:35:20.941618Z"}},"outputs":[],"execution_count":null}]}