{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":118765,"databundleVersionId":15231210,"isSourceIdPinned":false,"sourceType":"competition"}],"dockerImageVersionId":31236,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\n# تحميل البيانات\ntest = pd.read_csv('/kaggle/input/stanford-rna-3d-folding-2/test_sequences.csv')\n\ndef build_top_tier_structure(sequence):\n    n = len(sequence)\n    coords = np.zeros((n, 3))\n    \n    # معايير الأوائل + فلسفة اللانهاية\n    radius = 11.5 \n    step_z = 3.34 \n    # الزاوية المعيارية للـ RNA (A-form)\n    twist_angle = 0.57 # حوالي 32.7 درجة\n    \n    for i in range(n):\n        # t هي الزاوية التي تعبر عن تدفق المعلومات الجينية\n        t = i * twist_angle\n        \n        # معادلة اللانهاية (The Infinity Fold) \n        # تضمن تقارب القواعد في مسار \"8\" لعمل الروابط الهيدروجينية\n        coords[i, 0] = radius * np.cos(t)\n        coords[i, 1] = radius * np.sin(2*t) / 1.5 # معامل الضغط (Compression)\n        \n        # النزول الحلزوني (Z-axis)\n        coords[i, 2] = -(i * step_z)\n        \n    return coords\n\nsubmission_data = []\n\nprint(\"Building structures like the pros...\")\n\nfor _, row in test.iterrows():\n    target_id = row['target_id']\n    seq = row['sequence']\n    \n    # إنشاء الهيكل الأساسي\n    base_coords = build_top_tier_structure(seq)\n    \n    for i in range(len(seq)):\n        res_dict = {'ID': f\"{target_id}_{i+1}\", 'resname': seq[i], 'resid': i+1}\n        \n        # توزيع الـ 40 عمود (5 نماذج)\n        # الأوائل كانوا بيعملوا \"تغيرات طفيفة\" بين النماذج لتقليل الخطأ\n        for m in range(1, 41):\n            model_noise = np.random.normal(0, 0.02) # نويز خفيف جداً للحيوية\n            res_dict[f'x_{m}'] = base_coords[i, 0] + model_noise\n            res_dict[f'y_{m}'] = base_coords[i, 1] + model_noise\n            res_dict[f'z_{m}'] = base_coords[i, 2] + model_noise\n            \n        submission_data.append(res_dict)\n\n# تحويل لـ DataFrame وحفظ الملف\nsub_df = pd.DataFrame(submission_data)\n\n# ترتيب الأعمدة حسب مواصفات كاجل الدقيقة\nfinal_cols = ['ID', 'resname', 'resid']\nfor i in range(1, 41):\n    final_cols.extend([f'x_{i}', f'y_{i}', f'z_{i}'])\n\nsub_df[final_cols].to_csv('submission.csv', index=False)\nprint(\"✅ Submission file 'submission.csv' generated successfully!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-12T18:17:29.092178Z","iopub.execute_input":"2026-01-12T18:17:29.092613Z","iopub.status.idle":"2026-01-12T18:17:32.527492Z","shell.execute_reply.started":"2026-01-12T18:17:29.092589Z","shell.execute_reply":"2026-01-12T18:17:32.526657Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\n# تحميل البيانات\ntest = pd.read_csv('/kaggle/input/stanford-rna-3d-folding-2/test_sequences.csv')\n\ndef generate_the_ultimate_fold(sequence, stoich):\n    n = len(sequence)\n    coords = np.zeros((n, 3))\n    \n    # 1. الثوابت الذهبية (مستخرجة من تحليلك للـ Train)\n    step_z = 5.67 \n    c_x, c_y = 6.84, -3.20\n    start_z = 52.88 \n    radius = 13.5\n    \n    # 2. التردد الانسيابي (مبني على زاوية الانحناء 23.89 التي قنصتها)\n    # المعادلة: التردد = (الزاوية بالراديان) * معامل التوافق الهيكلي\n    frequency = np.radians(23.89) * 1.125 \n    \n    # 3. معالجة تعدد السلاسل (Stoichiometry)\n    try:\n        # استخراج الرقم من صيغ مثل A:1 أو U:8\n        num_strands = int(stoich.split(':')[-1]) if ':' in stoich else 1\n    except:\n        num_strands = 1\n\n    for i in range(n):\n        # اللف للشمال (Chirality) + توزيع السلاسل (Phase Offset)\n        phase_offset = (i % num_strands) * (2 * np.pi / num_strands)\n        t = -(i * frequency) + phase_offset\n        \n        # 4. معادلة اللانهاية (Lissajous Curve) المطورة هندسياً\n        coords[i, 0] = c_x + (radius * np.cos(t))\n        coords[i, 1] = c_y + (radius * np.sin(2*t) / 1.75) \n        coords[i, 2] = start_z - (i * (step_z / num_strands))\n            \n    return coords\n\nsubmission_data = []\n\nprint(\"جاري صب 'الخلاصة' في القالب النهائي...\")\n\nfor _, row in test.iterrows():\n    target_id = row['target_id']\n    seq = row['sequence']\n    stoich = str(row['stoichiometry'])\n    \n    # توليد الهيكل الماستر\n    base_coords = generate_the_ultimate_fold(seq, stoich)\n    \n    for i in range(len(seq)):\n        res_dict = {'ID': f\"{target_id}_{i+1}\", 'resname': seq[i], 'resid': i+1}\n        \n        # 5. تطبيق قاعدة الـ Zero-Noise (التطابق التام كما في الـ Validation)\n        # هذا يضمن أقل RMSD ممكن لو كانت الحقيقة ثابتة\n        for m in range(1, 41):\n            res_dict[f'x_{m}'] = base_coords[i, 0]\n            res_dict[f'y_{m}'] = base_coords[i, 1]\n            res_dict[f'z_{m}'] = base_coords[i, 2]\n            \n        submission_data.append(res_dict)\n\n# الحفظ النهائي مع ترتيب الأعمدة الصحيح\nsub_df = pd.DataFrame(submission_data)\nsub_df.to_csv('submission.csv', index=False)\nprint(\"🏆 تمت المهمة بنجاح! النسخة الماستر جاهزة للاكتساح.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-12T18:30:53.238589Z","iopub.execute_input":"2026-01-12T18:30:53.238905Z","iopub.status.idle":"2026-01-12T18:30:55.641017Z","shell.execute_reply.started":"2026-01-12T18:30:53.238879Z","shell.execute_reply":"2026-01-12T18:30:55.640115Z"}},"outputs":[],"execution_count":null}]}