
    /j                    2   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ h dZh dZh d	Z G d
 de          ZddZe G d d                      Ze G d d                      Ze G d d                      Ze G d d                      ZdS )u   Manifest 数据模型 + 准入校验规则。

三类实体(character/object/place),每个 = 公共 id + sim 字段 + 可选 art(视觉生成规格)。
校验失败抛 ManifestError——"准入"即"过校验才能进世界"。
    )annotations)	dataclassfield)normalize_mbti)Persona)PlaceWorldObject>   citytownplazaforestindoorseasidevillagesnow_mountain>   low top-downhigh top-downside>   runsitidletalkwalkworkc                      e Zd ZdZdS )ManifestErroru   准入校验失败。N)__name__
__module____qualname____doc__     2/root/genesis-world/src/genesis/manifest/schema.pyr   r      s        r"   r   condboolmsgstrreturnNonec                (    | st          |          d S )N)r   )r$   r&   s     r#   _requirer+      s"     !C   ! !r"   c                      e Zd ZU dZded<   dZded<   dZded<   d	Zded
<    ed           Z	ded<   dZ
ded<   ddZedd            ZdS )ArtSpecuG   素材生成规格(PixelLab 参数)。sprite_path 在生成后回填。r'   description@   intsizer   view   
directionsc                     dgS )Nr   r!   r!   r"   r#   <lambda>zArtSpec.<lambda>&   s    6( r"   default_factory	list[str]
animationsNz
str | Nonesprite_pathis_characterr%   r(   r)   c                  t          t          | j        o| j                                                  d           t          | j        dk    d| j                    t          | j        t          v d| j         dt           d           |rZt          | j        dv d| j                    t          | j	                  t          z
  }t          | d	| dt           d           d S d S )
Nu   art.description 不能为空r   u   art.size 必须 >0,得到 u   art.view 非法:   (允许 ))r3      u(   art.directions 必须是 4 或 8,得到 u   art.animations 含未知项 )r+   r%   r.   stripr1   r2   VIEWSr4   setr:   
ANIMATIONS)selfr<   bads      r#   validatezArtSpec.validate)   s    d&C4+;+A+A+C+CDDFdeeeQ HTY H HIIIe#%S	%S%S5%S%S%STTT 	YT_.0l[_[j0l0lmmmdo&&3CWWSWW*WWWXXXXX	Y 	Yr"   datadict | None'ArtSpec | None'c                z    |sd S d | j         D              | di fd|                                D             S )Nc                    h | ]}|S r!   r!   ).0fs     r#   	<setcomp>z$ArtSpec.from_dict.<locals>.<setcomp>6   s    555q555r"   c                $    i | ]\  }}|v 	||S r!   r!   )rM   kvknowns      r#   
<dictcomp>z%ArtSpec.from_dict.<locals>.<dictcomp>7   s$    BBBtq!qEzzazzzr"   r!   )__dataclass_fields__items)clsrH   rS   s     @r#   	from_dictzArtSpec.from_dict2   sY     	455C4555sCCBBBBtzz||BBBCCCr"   )r<   r%   r(   r)   )rH   rI   r(   rJ   )r   r   r   r    __annotations__r1   r2   r4   r   r:   r;   rG   classmethodrX   r!   r"   r#   r-   r-      s         QQDNNNNDJ!E2B2BCCCJCCCC"K""""Y Y Y Y D D D [D D Dr"   r-   c                     e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded	<   d
Zded<   dZded<    ee          Z	ded<    ee
          Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   ddZd dZdS )!CharacterManifest	characterr'   idnamer0   agembti
occupationstart_locationunspecifiedgender 	backstoryr7   r9   hobbieszdict[str, str]relationshipssecretroledriveknowsNArtSpec | Noneartr(   r)   c                   t          t          | j        o| j                                                  d           t          t          | j        o| j                                                  d| j         d           t          d| j        cxk     odk     nc d| j         d| j                    t          t          | j                                                  d| j         d           t          t          | j                                                  d| j         d           t          | j	                   | j
        r| j
                            d	
           d S d S )Nu   character.id 不能为空[   ] name 不能为空r      u   ] age 不合理:u   ] occupation 不能为空u   ] start_location 不能为空Tr<   )r+   r%   r^   rA   r_   r`   rb   rc   r   ra   ro   rG   rE   s    r#   rG   zCharacterManifest.validateM   sT   dg1$'--//224OPPPdi5DIOO$5$5668XDG8X8X8XYYYTX########%L%L%L$(%L%LMMMdo++--..0VDG0V0V0VWWWd)//11224^4^4^4^___ty!!!8 	1H400000	1 	1r"   r   c                    t          | j        | j        | j        | j        | j        | j        t          | j                  t          | j
                  | j        | j        | j                  S )N)r_   r`   ra   rb   re   rg   rh   ri   rj   rk   rl   )r   r_   r`   ra   rb   re   rg   listrh   dictri   rj   rk   rl   ru   s    r#   
to_personazCharacterManifest.to_personaW   sZ    tyT_;$.$t|BTBTt1224;TY*	
 
 
 	
r"   r(   r)   )r(   r   )r   r   r   kindrY   re   rg   r   rw   rh   rx   ri   rj   rk   rl   rm   ro   rG   ry   r!   r"   r#   r\   r\   :   s#        DGGGIIIHHHIIIOOOFIt444G4444$)E$$?$?$?M????FDNNNNEOOOOEOOOOC1 1 1 1
 
 
 
 
 
r"   r\   c                  h    e Zd ZU dZded<   ded<    ee          Zded<   dZd	ed
<   ddZ	ddZ
dS )ObjectManifestobjectr'   r^   r_   r7   r9   affordancesNrn   ro   r(   r)   c                L   t          t          | j        o| j                                                  d           t          t          | j        o| j                                                  d| j         d           | j        r| j                            d           d S d S )Nu   object.id 不能为空rq   rr   Frt   )r+   r%   r^   rA   r_   ro   rG   ru   s    r#   rG   zObjectManifest.validateh   s    dg1$'--//224LMMMdi5DIOO$5$5668XDG8X8X8XYYY8 	2H511111	2 	2r"   r	   c                R    t          | j        t          | j                            S )N)r_   r   )r	   r_   rw   r   ru   s    r#   to_world_objectzObjectManifest.to_world_objectn   s"    	tD<L7M7MNNNNr"   rz   )r(   r	   )r   r   r   r{   rY   r   rw   r   ro   rG   r   r!   r"   r#   r}   r}   `   s         DGGGIII"U4888K8888C2 2 2 2O O O O O Or"   r}   c                      e Zd ZU dZded<   ded<   dZded<   dZded<    ee	          Z	d
ed<    ee	          Z
d
ed<   dZded<   ddZddZdS )PlaceManifestplacer'   r^   r_   rf   r.   r   	geographyr7   r9   objectsadjacentNrn   ro   r(   r)   c           
        t          t          | j        o| j                                                  d           t          t          | j        o| j                                                  d| j         d           t          | j        t          v d| j         d| j         dt           d           | j        r| j                            d           d S d S )	Nu   place.id 不能为空rq   rr   u   ] geography 非法:r>   r?   Frt   )	r+   r%   r^   rA   r_   r   GEOGRAPHIESro   rG   ru   s    r#   rG   zPlaceManifest.validate}   s    dg1$'--//224KLLLdi5DIOO$5$5668XDG8X8X8XYYYNk)RRRDNRRKRRR	
 	
 	
 8 	2H511111	2 	2r"   object_lookupdict[str, ObjectManifest]r   c                d    fd| j         D             }t          | j        | j        |g           S )Nc                D    g | ]}|                                          S r!   )r   )rM   oidr   s     r#   
<listcomp>z*PlaceManifest.to_place.<locals>.<listcomp>   s*    MMMc"2244MMMr"   )r_   r.   r   r   )r   r   r_   r.   )rE   r   objss    ` r#   to_placezPlaceManifest.to_place   s;    MMMMMMM$)1A4Z\]]]]r"   rz   )r   r   r(   r   )r   r   r   r{   rY   r.   r   r   rw   r   r   ro   rG   r   r!   r"   r#   r   r   r   s         DGGGIIIKIt444G4444%555H5555C2 2 2 2^ ^ ^ ^ ^ ^r"   r   N)r$   r%   r&   r'   r(   r)   )r    
__future__r   dataclassesr   r   genesis.persona.mbtir   genesis.persona.personar   genesis.world.placer   r	   r   rB   rD   
ValueErrorr   r+   r-   r\   r}   r   r!   r"   r#   <module>r      s    # " " " " " ( ( ( ( ( ( ( ( / / / / / / + + + + + + 2 2 2 2 2 2 2 2 cbb111;;;
         J      ! ! ! !
 D D D D D D D D6 "
 "
 "
 "
 "
 "
 "
 "
J O O O O O O O O" ^ ^ ^ ^ ^ ^ ^ ^ ^ ^r"   