:

أنت تعمل على حزمة بايثون تسمى `geo`، والتي توفر فئات ووظائف متنوعة للتعامل مع المواقع الجغرافية. إحدى الميزات الرئيسية لهذه الحزمة هي القدرة على تمثيل العناوين ومعالجتها.

يستورد مقتطف الكود المحدد وحدات متعددة من الحزمة `geo`. تشمل هذه الوحدات ما يلي:

1. `normdoc`: وحدة تحتوي على وظائف لتطبيع مستندات العناوين والتحقق من صحتها.
2. `addrobj`: وحدة نمطية تحدد فئة `AddrObj` لتمثيل كائنات العناوين.
3. `house`: وحدة تحتوي على فئتين: `House` و`HouseInt`. تمثل هذه الفئات أنواعًا مختلفة من المنازل أو الوحدات السكنية.
4. "المعلم": وحدة تحدد فئة "المعلم" لتمثيل المعالم.
5. `الغرفة`: وحدة توفر دروسًا لتمثيل الغرف داخل المنازل أو المباني الأخرى.
6. ``stead``: وحدة تحتوي على فئات لتمثيل قطع الأراضي أو العقارات.
7. "الحالة": وحدة تحدد رموز الحالة والتسميات المختلفة لاستخدامها في الحزمة "geo".

مهمتك هي إنشاء وحدة جديدة باسم "address_utils" ضمن الحزمة "geo". يجب أن تحتوي هذه الوحدة على دالة باسم "validate_address" تأخذ كائن "AddrObj" كمدخل وترجع "True" إذا كان العنوان صالحًا و"False" بخلاف ذلك.

لتنفيذ وظيفة `validate_address`، تحتاج إلى الاستفادة من الوظائف التي توفرها الوحدة `normdoc`. تتضمن الوحدة النمطية `normdoc` وظيفة تسمى `normalize_address` والتي تأخذ كائن `AddrObj` كمدخل وترجع نسخة تمت تسويتها من العنوان. يجب عليك استخدام هذه الوظيفة للتحقق من صحة العنوان.

اكتب تنفيذًا تفصيليًا لوحدة "address_utils"، بما في ذلك وظيفة "validate_address".
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}