""" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🧪 Test Script for Objectives Generator ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ هذا الملف لاختبار توليد الأهداف التعليمية باستخدام البيانات الفعلية. """ import json import sys import os # Add project root to path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from agents.analysis_phase.objectives import generate_objectives # ═══════════════════════════════════════════════════════════════════════ # 📊 Test Data - البيانات الفعلية من المستخدم # ═══════════════════════════════════════════════════════════════════════ METADATA = { 'topic': '(Design thinking) تقنيات التفكير التصميمي لحل المشكلات واتخاذ القرارات', 'domain': 'Multidisciplinary', 'content_type': 'Educational', 'audience': 'Professionals and Students', 'material_type': ['Conceptual', 'Procedural', 'Structural', 'Personal', 'Realistic'] } OUTLINES = { 'Metadata': [METADATA], 'main_concept': 'تقنيات التفكير التصميمي لحل المشكلات واتخاذ القرارات', 'related_concepts': ['Management', 'Technology', 'Aerospace', 'Psychologists', 'Entrepreneurs', 'Educational', 'Awareness'], 'units': [ { 'unit_number': 1, 'title': 'الفصل الأول: مفاهيم ومبادئ التفكير التصميمي', 'focus': 'يمنح المتعلمين فهماً متطوراً للمفاهيم الأساسية، تاريخ التفكير التصميمي، والنظرة المنهجية التي تُشكّل أساساً للتعامل مع المشكلات المعقدة.', 'axes': [ { 'axis_number': 1, 'title': 'تعريف المصطلحات الأساسية للتفكير التصميمي', 'purpose': 'تعريف المصطلحات الأساسية يساعد المتعلمين على بناء قاعدة معرفية ثابتة' }, { 'axis_number': 2, 'title': 'شرح تاريخ تطور منهج التفكير التصميمي', 'purpose': 'توضيح تاريخ تطور منهج التفكير التصميمي يعزز فهم السياق والتطبيق' }, { 'axis_number': 3, 'title': 'أمثلة تطبيقية للمبادئ التصميمية', 'purpose': 'عرض أمثلة عملية يربط المبادئ بالواقع وتطبيقاتهم' }, { 'axis_number': 4, 'title': 'تحليل مكونات العملية التصميمية في مشروع عملي', 'purpose': 'تحليل مكونات العملية في مشروع عملي يطوّر مهارات التفكير النقدي' }, { 'axis_number': 5, 'title': 'ابتكار نموذج تصميمي لحل مشكلة محددة', 'purpose': 'ابتكار نموذج تصميمي لحل مشكلة محدد يعزز الابتكار والإبداع' } ] }, { 'unit_number': 2, 'title': 'الفصل الثاني: العملية الميدانية لتقنيات التفكير التصميمي', 'focus': 'يُدرّس المتعلمين الخطوات العملية (التعاطي، التحديد، الإبداع، النمذجة، والاختبار) مع تطبيق تمارين تجريبية تُبنى مهارات تنفيذية مباشرة.', 'axes': [ { 'axis_number': 1, 'title': 'دراسة خطوات العملية الميدانية', 'purpose': 'تذكر خطوات العملية الميدانية الأساسية يعزز التتبع السلس للعملية' }, { 'axis_number': 2, 'title': 'شرح مفصل لمراحل التعاطي والتحديد', 'purpose': 'شرح مفصل لمراحل التعاطي والتحديد يوضح كل خطوة من العملية' }, { 'axis_number': 3, 'title': 'تنفيذ تمرين تعاطي لحالة واقعية', 'purpose': 'تنفيذ تمرين تعاطي لحالة واقعية يربط النظرية بالتطبيق' }, { 'axis_number': 4, 'title': 'تحليل نتائج المرحلة الإبداعية للنماذج', 'purpose': 'تحليل نتائج المرحلة الإبداعية للنماذج يوضح نقاط القوة والضعف' }, { 'axis_number': 5, 'title': 'ابتكار حل نهائي بعد اختبار النموذج', 'purpose': 'ابتكار حل نهائي بعد اختبار النموذج يعزز التعلم العملي' } ] }, { 'unit_number': 3, 'title': 'الفصل الثالث: تطبيقات التفكير التصميمي في الإدارة، التقنية، الفضاء، علم النفس وريادة الأعمال', 'focus': 'يُظهر كيف يمكن دمج التفكير التصميمي في مجالات متعددة، مقدمًا دراسات حالة واقعية تُثبت فاعليته في تحسين العمليات واتخاذ القرارات الفعالة.', 'axes': [ { 'axis_number': 1, 'title': 'تحديد مجالات تطبيق التفكير التصميمي', 'purpose': 'تحديد مجالات تطبيق التفكير التصميمي يحدد الفضاءات التي يمكن توظيفها' }, { 'axis_number': 2, 'title': 'شرح دور التفكير التصميمي في الإدارة', 'purpose': 'شرح دور التفكير التصميمي في الإدارة يوضح كيف يحسّن العمليات' }, { 'axis_number': 3, 'title': 'تطبيق التفكير التصميمي على قضية إدارية', 'purpose': 'تطبيق التفكير التصميمي على قضية إدارية يختبر فعالية التكتيكات' }, { 'axis_number': 4, 'title': 'تحليل فاعلية التطبيقات في مجال الفضاء', 'purpose': 'تحليل فاعلية التطبيقات في مجال الفضاء يقيّم إمكانيات الابتكار' }, { 'axis_number': 5, 'title': 'ابتكار مبادرة تصميمية لربط علم النفس وريادة الأعمال', 'purpose': 'ابتكار مبادرة تصميمية لربط علم النفس وريادة الأعمال يدمج المنهجية' } ] }, { 'unit_number': 4, 'title': 'الفصل الرابع: التنفيذ والتقييم – التنمية الشخصية والوعي المجتمعي', 'focus': 'يشجع المتعلمين على تنفيذ حلول مُصممة بفعّالية، قياس أثرها، وتعزيز الوعي الذاتي والمجتمعي، مع توجيه لمهارات القيادة والتفكير النقدي.', 'axes': [ { 'axis_number': 1, 'title': 'مراجعة مفاهيم تنفيذ الحلول المبدعة', 'purpose': 'تذكير بمفاهيم تنفيذ الحلول المبدعة يحقق وضوح الرؤية' }, { 'axis_number': 2, 'title': 'شرح تقنيات قياس أثر الحلول التحليلية', 'purpose': 'شرح تقنيات قياس أثر الحلول التحليلية يقدّم إطار للتقييم' }, { 'axis_number': 3, 'title': 'استخدام أدوات قياس تقييم حل مشروعك', 'purpose': 'استخدام أدوات قياس تقييم حل مشروعك يَمكّن المتعلمين من التحليل' }, { 'axis_number': 4, 'title': 'تحليل مؤشرات الأداء والتأثير المجتمعي', 'purpose': 'تحليل مؤشرات الأداء والتأثير المجتمعي يحدد الفاعلية والتأثير' }, { 'axis_number': 5, 'title': 'ابتكار استراتيجية قيادة لتعزيز الوعي الذاتي', 'purpose': 'ابتكار استراتيجية قيادة لتعزيز الوعي الذاتي يثمر إمكانية القيادة' } ] } ] } # ═══════════════════════════════════════════════════════════════════════ # 🧪 Test Function # ═══════════════════════════════════════════════════════════════════════ def test_objectives_generator(): """ اختبار توليد الأهداف التعليمية. """ print("━" * 80) print("🚀 Starting Objectives Generation Test") print("━" * 80) print() # Print input summary print("📊 Input Data:") print(f" • Topic: {METADATA['topic']}") print(f" • Domain: {METADATA['domain']}") print(f" • Content Type: {METADATA['content_type']}") print(f" • Audience: {METADATA['audience']}") print(f" • Material Type: {', '.join(METADATA['material_type'])}") print(f" • Units: {len(OUTLINES['units'])}") # Count total axes total_axes = sum(len(unit['axes']) for unit in OUTLINES['units']) print(f" • Total Axes: {total_axes}") print() # Generate objectives print("⏳ Generating objectives...") print("━" * 80) print() try: result = generate_objectives( topic=METADATA['topic'], domain=METADATA['domain'], content_type=METADATA['content_type'], audience=METADATA['audience'], material_type=METADATA['material_type'], outlines=OUTLINES ) print() print("━" * 80) print("✅ Objectives Generated Successfully!") print("━" * 80) print() # Print results summary objectives = result.get('objectives', []) print(f"📈 Results Summary:") print(f" • Total Objectives Generated: {len(objectives)}") print(f" • Expected (Total Axes): {total_axes}") print(f" • Match: {'✅ YES' if len(objectives) == total_axes else '❌ NO'}") print() # Analyze verb diversity verbs_used = [obj['objective'].split()[1] for obj in objectives if len(obj['objective'].split()) > 1] unique_verbs = len(set(verbs_used)) diversity_rate = (unique_verbs / len(verbs_used)) * 100 if verbs_used else 0 print(f"📊 Verb Diversity:") print(f" • Total Verbs Used: {len(verbs_used)}") print(f" • Unique Verbs: {unique_verbs}") print(f" • Diversity Rate: {diversity_rate:.1f}%") print(f" • Target: 70-80%") print(f" • Status: {'✅ PASS' if diversity_rate >= 70 else '⚠️ NEEDS IMPROVEMENT'}") print() # Analyze domain distribution domain_counts = { 'Cognitive': sum(1 for obj in objectives if 'Cognitive' in obj['level']), 'Affective': sum(1 for obj in objectives if 'Affective' in obj['level']), 'Psychomotor': sum(1 for obj in objectives if 'Psychomotor' in obj['level']) } total_objs = len(objectives) print(f"📊 Domain Distribution:") for domain, count in domain_counts.items(): percentage = (count / total_objs) * 100 if total_objs > 0 else 0 print(f" • {domain}: {count} ({percentage:.1f}%)") print() # Print first few objectives as examples print("📝 Sample Objectives (First 3):") print("━" * 80) for i, obj in enumerate(objectives[:3], 1): print(f"\n{i}. Unit: {obj['unit']}") print(f" Axis: {obj['axis']}") print(f" Level: {obj['level']}") print(f" Verbs: {', '.join(obj['verbs'])}") print(f" Objective: {obj['objective']}") print() print("━" * 80) # Save to file output_file = 'objectives_output.json' with open(output_file, 'w', encoding='utf-8') as f: json.dump(result, f, ensure_ascii=False, indent=2) print(f"💾 Full output saved to: {output_file}") print() return result except Exception as e: print() print("━" * 80) print("❌ Error During Generation") print("━" * 80) print(f"Error: {str(e)}") print() import traceback traceback.print_exc() return None # ═══════════════════════════════════════════════════════════════════════ # 🎯 Main Execution # ═══════════════════════════════════════════════════════════════════════ if __name__ == "__main__": test_objectives_generator()