Ë
    :vžjÖƒ  ã                   ó†   — d dl Z d dlZddlmZ ddlmZmZmZmZ ddddd	d
ddœZ	 ej                  d«      Z G d„ de«      Zy)é    Né   )ÚJsonSchemaDefinitionException)ÚVALIDATION_EXCEPTIONSÚCodeGeneratorÚenforce_listÚrepr_defaultÚNoneTypeÚboolzint, float, DecimalÚintÚstrzlist, tupleÚdict)ÚnullÚbooleanÚnumberÚintegerÚstringÚarrayÚobjectz	(?<!\\)\$c                   óî   ‡ — e Zd ZdddddddœZdi d	d	d	d	fˆ fd
„	Zeˆ fd„«       Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Zd!„ Zd"„ Zd#„ Zd$„ Zd%„ Z ˆ xZ!S )&ÚCodeGeneratorDraft04zk^\d{4}-[01]\d-[0-3]\d(t|T)[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:[+-][0-2]\d:[0-5]\d|[+-][0-2]\d[0-5]\d|z|Z)\Zz.^(?!.*\.\..*@)[^@.][^@]*(?<!\.)@[^@]+\.[^@]+\Zzv^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]{0,61}[A-Za-z0-9])\Zzd^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\ZaÞ  ^(?:(?:[0-9A-Fa-f]{1,4}:){6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|::(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(?:(?:[0-9A-Fa-f]{1,4}:){,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(?:(?:[0-9A-Fa-f]{1,4}:){,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(?:(?:[0-9A-Fa-f]{1,4}:){,4}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(?:(?:[0-9A-Fa-f]{1,4}:){,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){,6}[0-9A-Fa-f]{1,4})?::)\Zz^\w+:(\/?\/?)[^\s]+\Z)z	date-timeÚemailÚhostnameÚipv4Úipv6ÚuriNTc                 ó  •— t         ‰| �  ||||«       || _        || _        || _        | j
                  j                  d| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd	| j                  fd
| j                   fd| j"                  fd| j$                  fd| j&                  fd| j(                  fd| j*                  fd| j,                  fd| j.                  fd| j0                  fd| j2                  fd| j4                  fd| j6                  fd| j8                  fd| j:                  fd| j<                  ff«       d| _        y )NÚtypeÚenumÚallOfÚanyOfÚoneOfÚnotÚ	minLengthÚ	maxLengthÚpatternÚformatÚminimumÚmaximumÚ
multipleOfÚminItemsÚmaxItemsÚuniqueItemsÚitemsÚminPropertiesÚmaxPropertiesÚrequiredÚdependenciesÚ
propertiesÚpatternPropertiesÚadditionalPropertiesr   ) ÚsuperÚ__init__Ú_custom_formatsÚ_use_formatsÚ_use_defaultÚ_json_keywords_to_functionÚupdateÚgenerate_typeÚgenerate_enumÚgenerate_all_ofÚgenerate_any_ofÚgenerate_one_ofÚgenerate_notÚgenerate_min_lengthÚgenerate_max_lengthÚgenerate_patternÚgenerate_formatÚgenerate_minimumÚgenerate_maximumÚgenerate_multiple_ofÚgenerate_min_itemsÚgenerate_max_itemsÚgenerate_unique_itemsÚgenerate_itemsÚgenerate_min_propertiesÚgenerate_max_propertiesÚgenerate_requiredÚgenerate_dependenciesÚgenerate_propertiesÚgenerate_pattern_propertiesÚgenerate_additional_propertiesÚ_any_or_one_of_count)	ÚselfÚ
definitionÚresolverÚformatsÚuse_defaultÚuse_formatsÚdetailed_exceptionsÚ	fast_failÚ	__class__s	           €úg/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/fastjsonschema/draft04.pyr6   zCodeGeneratorDraft04.__init__%   s¢  ø€ Ü‰Ñ˜ XÐ/BÀIÔNØ&ˆÔØ'ˆÔØ'ˆÔØ×'Ñ'×.Ñ.Ø�T×'Ñ'Ð(Ø�T×'Ñ'Ð(Ø�d×*Ñ*Ð+Ø�d×*Ñ*Ð+Ø�d×*Ñ*Ð+Ø�D×%Ñ%Ð&Ø˜$×2Ñ2Ð3Ø˜$×2Ñ2Ð3Ø˜×-Ñ-Ð.Ø�t×+Ñ+Ð,Ø˜×-Ñ-Ð.Ø˜×-Ñ-Ð.Ø˜4×4Ñ4Ð5Ø˜×0Ñ0Ð1Ø˜×0Ñ0Ð1Ø˜D×6Ñ6Ð7Ø�d×)Ñ)Ð*Ø˜d×:Ñ:Ð;Ø˜d×:Ñ:Ð;Ø˜×/Ñ/Ð0à˜T×7Ñ7Ð8Ø˜4×3Ñ3Ð4Ø  $×"BÑ"BÐCØ# T×%HÑ%HÐIð30
ô 	ð6 %&ˆÕ!ó    c                 ó:   •— t         ‰| �  }| j                  |d<   |S )NÚcustom_formats)r5   Úglobal_stater7   )rU   Úresr]   s     €r^   rb   z!CodeGeneratorDraft04.global_stateG   s#   ø€ ä‰gÑ"ˆØ $× 4Ñ 4ˆÐÑØˆ
r_   c                 óŠ  — t        | j                  d   «      }	 dj                  d„ |D «       «      }d}d|v sd|v r d	|vrd
j                  | j                  ¬«      }| j                  d||«      5  | j                  ddj                  |«      d¬«       ddd«       y# t        $ r}t	        d«      |‚d}~ww xY w# 1 sw Y   yxY w)z²
        Validation of type. Can be one type or list of types.

        .. code-block:: python

            {'type': 'string'}
            {'type': ['string', 'number']}
        r   z, c              3   ó.   K  — | ]  }t         |   –— Œ y ­w©N)ÚJSON_TYPE_TO_PYTHON_TYPE)Ú.0Úts     r^   Ú	<genexpr>z5CodeGeneratorDraft04.generate_type.<locals>.<genexpr>X   s   è ø€ Ð$PÉ%ÀQÔ%=¸aÕ%@É%ùs   ‚zUnknown typeNÚ r   r   r   z  or isinstance({variable}, bool))Úvariablez&if not isinstance({variable}, ({})){}:ú{name} must be {}ú or ©Úrule)	r   Ú_definitionÚjoinÚKeyErrorr   r&   Ú	_variableÚlÚexc)rU   ÚtypesÚpython_typesrv   Úextras        r^   r<   z"CodeGeneratorDraft04.generate_typeM   sÈ   € ô ˜T×-Ñ-¨fÑ5Ó6ˆð	IØŸ9™9Ñ$PÉ%Ó$PÓPˆLð ˆØ˜Ñ ¨eÑ!3¸È%Ñ9OØ6×=Ñ=ÀtÇ~Á~Ð=ÓVˆEà�V‰VÐ<¸lÈEÕRØ�H‰HÐ(¨&¯+©+°eÓ*<À6ˆHÔJ÷ SÐRøô ò 	IÜ/°Ó?ÀSÐHûð	Iú÷ SÐRús#   šB Á/$B9Â	B6Â%B1Â1B6Â9Cc                 óÆ  ‡ — ‰ j                   d   }t        |t        t        f«      st	        d«      ‚dj                  ˆ fd„|D «       «      }|r?‰ j                  d|«      5  ‰ j                  d‰ j                  |«      d¬«       ddd«       y‰ j                  d	«      5  ‰ j                  d‰ j                  |«      d¬«       ddd«       y# 1 sw Y   yxY w# 1 sw Y   yxY w)
z¨
        Means that only value specified in the enum is valid.

        .. code-block:: python

            {
                'enum': ['a', 'b'],
            }
        r   zenum must be an arrayrn   c              3   óV   •K  — | ]   }‰j                  ‰j                  |«      –— Œ" y ­wrf   )Ú_enum_value_matchesrt   )rh   ÚvaluerU   s     €r^   rj   z5CodeGeneratorDraft04.generate_enum.<locals>.<genexpr>p   s&   øè ø€ Ð`Ñ[_ÐRW˜d×6Ñ6°t·~±~Àu×MÑ[_ùs   ƒ&)zif not ({}):z{name} must be one of {}ro   Nzif True:)	rq   Ú
isinstanceÚlistÚtupler   rr   ru   rv   Úe)rU   r   Úmatchess   `  r^   r=   z"CodeGeneratorDraft04.generate_enumc   s»   ø€ ð ×Ñ Ñ'ˆÜ˜$¤¤u Ô.Ü/Ð0GÓHÐHØ—+‘+Ó`Ñ[_Ó`Ó`ˆÙØ—‘˜¨Õ0Ø—‘Ð3°T·V±V¸D³\È�ÔO÷ 1Ð0ð —‘˜
Õ#Ø—‘Ð3°T·V±V¸D³\È�ÔO÷ $Ð#÷ 1Ð0ú÷ $Ð#ús   Á $CÂ$CÃCÃC c                 óD  ‡ ‡— t        |t        «      rdj                  ‰t        |«      ¬«      S t        |t        t
        f«      r,t        |t        «      sdj                  ‰t        |«      ¬«      S |€dj                  ‰¬«      S t        |t        «      rdj                  ‰t        |«      ¬«      S t        |t        «      rZ|sdj                  ‰¬«      S dj                  ˆ ˆfd	„|j                  «       D «       «      }d
j                  ‰t        |«      |¬«      S t        |t        t        f«      rU|sdj                  ‰¬«      S dj                  ˆ ˆfd„t        |«      D «       «      }dj                  ‰t        |«      |¬«      S dj                  ‰t        |«      ¬«      S )Nz*isinstance({var}, bool) and {var} is {val})ÚvarÚvalzRisinstance({var}, (int, float)) and not isinstance({var}, bool) and {var} == {val}z{var} is None)r„   z)isinstance({var}, str) and {var} == {val}z%isinstance({var}, dict) and not {var}z and c              3   óŽ   •K  — | ]<  \  }}d j                  |‰‰j                  dj                  ‰|¬«      |«      ¬«      –— Œ> y­w)z{key!r} in {var} and {match}z{var}[{key!r}])r„   Úkey)r‡   r„   ÚmatchN)r&   r|   )rh   r‡   ÚitemrU   r„   s      €€r^   rj   z;CodeGeneratorDraft04._enum_value_matches.<locals>.<genexpr>†   sZ   øè ø€ ð &ñ "/‘I�C˜ð /×5Ñ5ØØØ×2Ñ2Ð3C×3JÑ3JÈsÐX[Ð3JÓ3\Ð^bÓcð 6÷ ñ
 "/ùs   ƒAAz=isinstance({var}, dict) and len({var}) == {size} and {checks})r„   ÚsizeÚchecksz.isinstance({var}, (list, tuple)) and not {var}c              3   ój   •K  — | ]*  \  }}‰j                  d j                  ‰|¬«      |«      –— Œ, y­w)z{var}[{index}])r„   ÚindexN)r|   r&   )rh   r�   r‰   rU   r„   s      €€r^   rj   z;CodeGeneratorDraft04._enum_value_matches.<locals>.<genexpr>”   s=   øè ø€ ð 'á#3‘K�E˜4ð ×(Ñ(Ð)9×)@Ñ)@ÀSÐPUÐ)@Ó)VÐX\×]Ù#3ùs   ƒ03zFisinstance({var}, (list, tuple)) and len({var}) == {size} and {checks}z{var} == {val})r~   r
   r&   Úreprr   Úfloatr   r   rr   r-   Úlenr   r€   Ú	enumerate)rU   r„   r}   Ú
key_checksÚitem_checkss   ``   r^   r|   z(CodeGeneratorDraft04._enum_value_matchesx   s“  ù€ Ü�eœTÔ"Ø?×FÑFÈ3ÔTXÐY^ÓT_ÐFÓ`Ð`Ü�eœc¤5˜\Ô*´:¸eÄTÔ3Jàdß‰f˜¤$ u£+ˆfÓ.ð/ð ˆ=Ø"×)Ñ)¨cÐ)Ó2Ð2Ü�eœSÔ!Ø>×EÑEÈ#ÔSWÐX]ÓS^ÐEÓ_Ð_Ü�eœTÔ"ÙØ>×EÑEÈ#ÐEÓNÐNØ Ÿ™ô &ð "'§¡¤ó&ó ˆJð S×YÑYØœc %›j°ð Zó ð ô �eœd¤E˜]Ô+ÙØG×NÑNÐSVÐNÓWÐWØ!Ÿ,™,ô 'ä#,¨UÔ#3ó'ó ˆKð \×bÑbØœc %›j°ð có ð ð  ×&Ñ&¨3´D¸³KÐ&Ó@Ð@r_   c                 ó~   — | j                   d   D ]+  }| j                  || j                  | j                  d¬«       Œ- y)a’  
        Means that value have to be valid by all of those definitions. It's like put it in
        one big definition.

        .. code-block:: python

            {
                'allOf': [
                    {'type': 'number'},
                    {'minimum': 5},
                ],
            }

        Valid values for this definition are 5, 6, 7, ... but not 4 or 'abc' for example.
        r   T©Úclear_variablesN)rq   Úgenerate_func_code_blockrt   Ú_variable_name)rU   Údefinition_items     r^   r>   z$CodeGeneratorDraft04.generate_all_of�   s;   € ð   $×/Ñ/°Ô8ˆOØ×)Ñ)¨/¸4¿>¹>È4×K^ÑK^ÐptÐ)Õuñ  9r_   c           
      óœ  — | xj                   dz  c_         | j                   }| j                  d|¬«       | j                  d   D ]¦  }| j                  d|d¬«      5  | j                  dd¬	«      5  | j                  «       5  | j	                  || j
                  | j                  d
¬«       ddd«       | j                  d|¬«       ddd«       | j                  dt        «       ddd«       Œ¨ | j                  d|d¬«      5  | j                  dd¬«       ddd«       y# 1 sw Y   ŒuxY w# 1 sw Y   ŒfxY w# 1 sw Y   ŒûxY w# 1 sw Y   yxY w)a¯  
        Means that value have to be valid by any of those definitions. It can also be valid
        by all of them.

        .. code-block:: python

            {
                'anyOf': [
                    {'type': 'number', 'minimum': 10},
                    {'type': 'number', 'maximum': 5},
                ],
            }

        Valid values for this definition are 3, 4, 5, 10, 11, ... but not 8 for example.
        r   z"{variable}_any_of_count{count} = 0©Úcountr    z&if not {variable}_any_of_count{count}:F©rœ   Úoptimizeútry:©rž   Tr•   Nz#{variable}_any_of_count{count} += 1úexcept {}: passz,{name} cannot be validated by any definitionro   ©	rT   ru   rq   Útrial_validationr—   rt   r˜   r   rv   )rU   rœ   r™   s      r^   r?   z$CodeGeneratorDraft04.generate_any_of°   s,  € ð  	×!Ò! QÑ&Õ!Ø×)Ñ)ˆØ�‰Ð3¸5ˆÔAØ#×/Ñ/°Ô8ˆOà—‘Ð@ÈÐX]�Õ^Ø—V‘V˜F¨U�VÕ3Ø×.Ñ.Õ0Ø×5Ñ5°oÀtÇ~Á~ÐW[×WjÑWjð  }AÐ5ô  B÷ 1à—F‘FÐ@È�FÔN÷ 4ð —‘Ð(Ô*?Ô@÷ _Ð^ð  9ð �V‰VÐ<ÀEÐTYˆVÕZØ�H‰HÐCÈ'ˆHÔR÷ [ÐZ÷ 1Ð0ú÷ 4Ð3ú÷ _Ð^ú÷ [ÐZúsH   ÁD6Á/D*Â *D	Â*D*ÃD6ÄEÄD'Ä#D*Ä*D3Ä/D6Ä6D?	ÅEc           
      ó¢  — | xj                   dz  c_         | j                   }| j                  d|¬«       | j                  d   D ]¦  }| j                  d|d¬«      5  | j                  dd¬	«      5  | j                  «       5  | j	                  || j
                  | j                  d
¬«       ddd«       | j                  d|¬«       ddd«       | j                  dt        «       ddd«       Œ¨ | j                  d|¬«      5  d}| j                  d||d¬«       ddd«       y# 1 sw Y   ŒxxY w# 1 sw Y   ŒixY w# 1 sw Y   ŒþxY w# 1 sw Y   yxY w)a·  
        Means that value have to be valid by only one of those definitions. It can't be valid
        by two or more of them.

        .. code-block:: python

            {
                'oneOf': [
                    {'type': 'number', 'multipleOf': 3},
                    {'type': 'number', 'multipleOf': 5},
                ],
            }

        Valid values for this definition are 3, 5, 6, ... but not 15 for example.
        r   z"{variable}_one_of_count{count} = 0r›   r!   z&if {variable}_one_of_count{count} < 2:Fr�   rŸ   r    Tr•   Nz#{variable}_one_of_count{count} += 1r¡   z'if {variable}_one_of_count{count} != 1:z9" (" + str({variable}_one_of_count{}) + " matches found)"z.{name} must be valid exactly by one definition)Úappend_to_msgrp   r¢   )rU   rœ   r™   Údynamics       r^   r@   z$CodeGeneratorDraft04.generate_one_ofÏ   s4  € ð  	×!Ò! QÑ&Õ!Ø×)Ñ)ˆØ�‰Ð3¸5ˆÔAØ#×/Ñ/°Ô8ˆOà—‘Ð@ÈÐX]�Õ^Ø—V‘V˜F¨U�VÕ3Ø×.Ñ.Õ0Ø×5Ñ5°oÀtÇ~Á~ÐW[×WjÑWjð  }AÐ5ô  B÷ 1à—F‘FÐ@È�FÔN÷ 4ð —‘Ð(Ô*?Ô@÷ _Ð^ð  9ð �V‰VÐ=ÀUˆVÕKØQˆGØ�H‰HÐEÀuÐ\cÐjqˆHÔr÷ LÐK÷ 1Ð0ú÷ 4Ð3ú÷ _Ð^ú÷ LÐKúsH   ÁD9Á/D-Â *D!	Â*D-ÃD9Ä EÄ!D*Ä&D-Ä-D6Ä2D9Ä9E	ÅEc                 óŽ  — | j                   d   }|du r| j                  dd¬«       y|du ry|s| j                  dd¬«       y| j                  dd¬	«      5  t        | j                  «      }| j                  «       5  | j                  || j                  | j                  d¬
«       ddd«       t        | j                  «      |k(  r| j                  d«       ddd«       | j                  dt        «       | j                  d«      5  | j                  dd¬«       ddd«       y# 1 sw Y   Œ~xY w# 1 sw Y   ŒYxY w# 1 sw Y   yxY w)aT  
        Means that value have not to be valid by this definition.

        .. code-block:: python

            {'not': {'type': 'null'}}

        Valid values for this definition are 'hello', 42, {} ... but not None.

        Since draft 06 definition can be boolean. False means nothing, True
        means everything is invalid.
        r"   Tú{name} must not be therero   FNz-{name} must NOT match a disallowed definitionrŸ   r    r•   Úpassr¡   zelse:)
rq   rv   ru   r�   Ú_coder£   r—   rt   r˜   r   )rU   Únot_definitionÚcode_lens      r^   rA   z!CodeGeneratorDraft04.generate_notï   s  € ð ×)Ñ)¨%Ñ0ˆØ˜TÑ!Ø�H‰HÐ/°eˆHÕ<Ø˜uÑ$ØÙØ�H‰HÐDÈ5ˆHÕQà—‘˜¨�Õ/Ü˜tŸz™z›?�Ø×*Ñ*Õ,Ø×1Ñ1°.À$Ç.Á.ÐRV×ReÑReÐw{Ð1Ô|÷ -ä�t—z‘z“? hÒ.Ø—F‘F˜6”N÷ 0ð �F‰FÐ$Ô&;Ô<Ø—‘˜•Ø—‘ÐHÈu�ÔU÷ !�÷ -Ð,ú÷ 0Ð/ú÷ !�ús0   Á&D/Á<*D#Â&1D/ÄD;Ä#D,	Ä(D/Ä/D8Ä;Ec                 ó>  — | j                  d«      5  | j                  «        t        | j                  d   t        t
        f«      st        d«      ‚| j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Núif isinstance({variable}, str):r#   zminLength must be a numberz if {variable}_len < {minLength}:z={name} must be longer than or equal to {minLength} charactersro   ©ru   Úcreate_variable_with_lengthr~   rq   r   r�   r   rv   ©rU   s    r^   rB   z(CodeGeneratorDraft04.generate_min_length  s~   € Ø�V‰VÐ5Õ6Ø×,Ñ,Ô.Ü˜d×.Ñ.¨{Ñ;¼cÄ5¸\ÔJÜ3Ð4PÓQÐQØ—‘Ð:Õ;Ø—‘ÐXÐ_j�Ôk÷ <÷	 7Ð6÷ <Ð;ú÷	 7Ð6úó$   ’ABÁ"BÁ6BÂB	ÂBÂBc                 ó>  — | j                  d«      5  | j                  «        t        | j                  d   t        t
        f«      st        d«      ‚| j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr®   r$   zmaxLength must be a numberz if {variable}_len > {maxLength}:z>{name} must be shorter than or equal to {maxLength} charactersro   r¯   r±   s    r^   rC   z(CodeGeneratorDraft04.generate_max_length  s~   € Ø�V‰VÐ5Õ6Ø×,Ñ,Ô.Ü˜d×.Ñ.¨{Ñ;¼cÄ5¸\ÔJÜ3Ð4PÓQÐQØ—‘Ð:Õ;Ø—‘ÐYÐ`k�Ôl÷ <÷	 7Ð6÷ <Ð;ú÷	 7Ð6úr²   c                 óª  — | j                  d«      5  | j                  d   }|j                  dd«      j                  dd«      }t        j	                  d|«      }t        j                  |«      | j                  |<   | j                  dt        |«      «      5  | j                  d	|d¬
«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr®   r%   Ú\z\\Ú"z\"z\\Zz-if not REGEX_PATTERNS[{}].search({variable}):z{name} must match pattern {}ro   )
ru   rq   ÚreplaceÚDOLLAR_FINDERÚsubÚreÚcompileÚ_compile_regexpsrŽ   rv   )rU   r%   Úsafe_patternÚend_of_string_fixed_patterns       r^   rD   z%CodeGeneratorDraft04.generate_pattern  s°   € Ø�V‰VÐ5Õ6Ø×&Ñ& yÑ1ˆGØ"Ÿ?™?¨4°Ó8×@Ñ@ÀÀeÓLˆLÜ*7×*;Ñ*;¸FÀGÓ*LÐ'Ü-/¯Z©ZÐ8SÓ-TˆD×!Ñ! 'Ñ*Ø—‘ÐGÌÈgËÕWØ—‘Ð7¸ÈI�ÔV÷ X÷ 7Ð6÷
 XÐWú÷ 7Ð6ús$   ’BC	ÂB=Â,C	Â=C	ÃC	Ã	Cc                 ó2  — | j                   sy| j                  d   }|| j                  vr|| j                  vr|dk7  ry| j	                  d«      5  || j                  v rf| j                  |   }t        |t        «      r| j                  ||dz   |«       nË| j	                  d|«      5  | j                  d|d¬«       ddd«       n›|| j                  v r&| j                  |   }| j                  ||dz   |«       ng|dk(  rbd	g| _	        | j	                  d
d¬«      5  | j	                  d«       ddd«       | j	                  d«      5  | j                  dd¬«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒKxY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)zô
        Means that value have to be in specified format. For example date, email or other.

        .. code-block:: python

            {'format': 'email'}

        Valid value for this definition is user@example.com but not @username
        Nr&   Úregexr®   Ú_re_patternz(if not custom_formats["{}"]({variable}):rm   ro   z	import rerŸ   Fr    zre.compile({variable})zexcept Exception:z{name} must be a valid regex)
r8   rq   r7   ÚFORMAT_REGEXSru   r~   r   Ú_generate_formatrv   Ú_extra_imports_lines)rU   Úformat_Úcustom_formatÚformat_regexs       r^   rE   z$CodeGeneratorDraft04.generate_format'  su  € ð × Ò ØØ×"Ñ" 8Ñ,ˆØ˜$×.Ñ.Ñ.°7À$×BTÑBTÑ3TÐY`ÐdkÒYkØØ�V‰VÐ5Õ6à˜$×.Ñ.Ñ.Ø $× 4Ñ 4°WÑ =�Ü˜m¬SÔ1Ø×)Ñ)¨'°7¸]Ñ3JÈMÕZàŸ™Ð JÈGÕTØŸ™Ð!4°gÀH˜ÔM÷ UÐTà˜D×.Ñ.Ñ.Ø#×1Ñ1°'Ñ:�Ø×%Ñ% g¨w¸Ñ/FÈÕUà˜GÒ#Ø-8¨M�Ô)Ø—V‘V˜F¨U�VÕ3Ø—F‘FÐ3Ô4÷ 4à—V‘VÐ/Õ0Ø—H‘HÐ;À(�HÔK÷ 1÷# 7Ð6÷ UÐTú÷ 4Ð3úç0Ð0ú÷# 7Ð6úsV   ÁAFÂ'E)Â<AFÄE5Ä+FÅFÅFÅ)E2	Å.FÅ5E>	Å:FÆF
	ÆFÆFc                 ó   — | j                   d   |k(  r`|| j                  vr"t        j                  |«      | j                  |<   | j	                  d|«      5  | j                  d|d¬«       d d d «       y y # 1 sw Y   y xY w)Nr&   z.if not REGEX_PATTERNS["{}"].match({variable}):rm   ro   )rq   r¼   rº   r»   ru   rv   )rU   Úformat_nameÚregexp_nameÚregexps       r^   rÃ   z%CodeGeneratorDraft04._generate_formatK  sv   € Ø×Ñ˜HÑ%¨Ò4Ø $×"7Ñ"7Ñ7Ü57·Z±ZÀÓ5G�×%Ñ% kÑ2Ø—‘ÐHÈ+ÕVØ—‘Ð,¨kÀ�ÔI÷ WÐVð 5÷ WÐVús   ÁA4Á4A=c                 óè  — | j                  d«      5  t        | j                  d   t        t        t
        j                  f«      st        d«      ‚| j                  j                  dd«      r.| j                  d«      5  | j                  dd¬«       d d d «       n-| j                  d	«      5  | j                  d
d¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nú1if isinstance({variable}, (int, float, Decimal)):r'   zminimum must be a numberÚexclusiveMinimumFzif {variable} <= {minimum}:z${name} must be bigger than {minimum}ro   zif {variable} < {minimum}:z0{name} must be bigger than or equal to {minimum}©
ru   r~   rq   r   r�   ÚdecimalÚDecimalr   Úgetrv   r±   s    r^   rF   z%CodeGeneratorDraft04.generate_minimumR  sÃ   € Ø�V‰VÐGÕHÜ˜d×.Ñ.¨yÑ9¼CÄÌÏÉÐ;XÔYÜ3Ð4NÓOÐOØ×Ñ×#Ñ#Ð$6¸Ô>Ø—V‘VÐ9Õ:Ø—H‘HÐCÈ)�HÔT÷ ;Ð:ð —V‘VÐ8Õ9Ø—H‘HÐOÐV_�HÔ`÷ :÷ IÐH÷ ;Ð:ú÷ :Ð9ú÷ IÐHúó<   ’A+C(Á=CÂC(Â+CÂ?C(ÃC	ÃC(ÃC%	Ã!C(Ã(C1c                 óè  — | j                  d«      5  t        | j                  d   t        t        t
        j                  f«      st        d«      ‚| j                  j                  dd«      r.| j                  d«      5  | j                  dd¬«       d d d «       n-| j                  d	«      5  | j                  d
d¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÍ   r(   zmaximum must be a numberÚexclusiveMaximumFzif {variable} >= {maximum}:z%{name} must be smaller than {maximum}ro   zif {variable} > {maximum}:z1{name} must be smaller than or equal to {maximum}rÏ   r±   s    r^   rG   z%CodeGeneratorDraft04.generate_maximum]  sÃ   € Ø�V‰VÐGÕHÜ˜d×.Ñ.¨yÑ9¼CÄÌÏÉÐ;XÔYÜ3Ð4NÓOÐOØ×Ñ×#Ñ#Ð$6¸Ô>Ø—V‘VÐ9Õ:Ø—H‘HÐDÈ9�HÔU÷ ;Ð:ð —V‘VÐ8Õ9Ø—H‘HÐPÐW`�HÔa÷ :÷ IÐH÷ ;Ð:ú÷ :Ð9ú÷ IÐHúrÓ   c                 ó.  — | j                  d«      5  t        | j                  d   t        t        t
        j                  f«      st        d«      ‚t        | j                  d   t        «      r| j                  d«       n| j                  d«       | j                  d«      5  | j                  dd¬«       d d d «       | j                  d	«      5  | j                  d
d¬«       d d d «       d d d «       y # 1 sw Y   Œ?xY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÍ   r)   zmultipleOf must be a numberzBquotient = Decimal(repr({variable})) / Decimal(repr({multipleOf}))z$quotient = {variable} / {multipleOf}zif int(quotient) != quotient:z'{name} must be multiple of {multipleOf}ro   z-if {variable} / {multipleOf} == float("inf"):zinifinity reached)	ru   r~   rq   r   r�   rÐ   rÑ   r   rv   r±   s    r^   rH   z)CodeGeneratorDraft04.generate_multiple_ofh  sÛ   € Ø�V‰VÐGÕHÜ˜d×.Ñ.¨|Ñ<¼sÄEÌ7Ï?É?Ð>[Ô\Ü3Ð4QÓRÐRô ˜$×*Ñ*¨<Ñ8¼%Ô@Ø—‘Ð[Õ\à—‘Ð=Ô>Ø—‘Ð7Õ8Ø—‘ÐBÈ�ÔV÷ 9ð —‘ÐGÕHØ—‘Ð,°<�Ô@÷ I÷ IÐH÷ 9Ð8ú÷ IÐHú÷ IÐHús<   ’BDÂ!C3Â5DÃC?Ã"DÃ3C<	Ã8DÃ?D	ÄDÄDc                 ó^  — | j                  «        | j                  d«      5  t        | j                  d   t        t
        f«      st        d«      ‚| j                  «        | j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Núif {variable}_is_list:r*   zminItems must be a numberzif {variable}_len < {minItems}:z-{name} must contain at least {minItems} itemsro   ©	Úcreate_variable_is_listru   r~   rq   r   r�   r   r°   rv   r±   s    r^   rI   z'CodeGeneratorDraft04.generate_min_itemsx  s‰   € Ø×$Ñ$Ô&Ø�V‰VÐ,Õ-Ü˜d×.Ñ.¨zÑ:¼SÄ%¸LÔIÜ3Ð4OÓPÐPØ×,Ñ,Ô.Ø—‘Ð9Õ:Ø—‘ÐHÈz�ÔZ÷ ;÷	 .Ð-÷ ;Ð:ú÷	 .Ð-úó$   ¢AB#Á2BÂB#ÂB 	ÂB#Â#B,c                 ó^  — | j                  «        | j                  d«      5  t        | j                  d   t        t
        f«      st        d«      ‚| j                  «        | j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrØ   r+   zmaxItems must be a numberzif {variable}_len > {maxItems}:z:{name} must contain less than or equal to {maxItems} itemsro   rÙ   r±   s    r^   rJ   z'CodeGeneratorDraft04.generate_max_items�  sŠ   € Ø×$Ñ$Ô&Ø�V‰VÐ,Õ-Ü˜d×.Ñ.¨zÑ:¼SÄ%¸LÔIÜ3Ð4OÓPÐPØ×,Ñ,Ô.Ø—‘Ð9Õ:Ø—‘ÐUÐ\f�Ôg÷ ;÷	 .Ð-÷ ;Ð:ú÷	 .Ð-úrÛ   c                 óH  — | j                   d   }|sy| j                  «        | j                  d«      5  | j                  d«       | j                  «        | j                  d«      5  | j	                  dd¬«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)a²  
        With Python 3.4 module ``timeit`` recommended this solutions:

        .. code-block:: python

            >>> timeit.timeit("len(x) > len(set(x))", "x=range(100)+range(100)", number=100000)
            0.5839540958404541
            >>> timeit.timeit("len({}.fromkeys(x)) == len(x)", "x=range(100)+range(100)", number=100000)
            0.7094449996948242
            >>> timeit.timeit("seen = set(); any(i in seen or seen.add(i) for i in x)", "x=range(100)+range(100)", number=100000)
            2.0819358825683594
            >>> timeit.timeit("np.unique(x).size == len(x)", "x=range(100)+range(100); import numpy as np", number=100000)
            2.1439831256866455
        r,   NrØ   zØdef fn(var): return frozenset(dict((k, fn(v)) for k, v in var.items()).items()) if hasattr(var, "items") else tuple(fn(v) for v in var) if isinstance(var, (dict, list)) else str(var) if isinstance(var, bool) else varzNif {variable}_len > len(set(fn({variable}_x) for {variable}_x in {variable})):z {name} must contain unique itemsro   )rq   rÚ   ru   r°   rv   )rU   Úunique_definitions     r^   rK   z*CodeGeneratorDraft04.generate_unique_itemsŠ  s’   € ð !×,Ñ,¨]Ñ;ÐÙ Øà×$Ñ$Ô&Ø�V‰VÐ,Õ-Ø�F‰Fð4ô5ð ×,Ñ,Ô.Ø—‘ÐhÕiØ—‘Ð;À-�ÔP÷ j÷ .Ð-÷ jÐiú÷ .Ð-ús#   ´3BÁ'BÁ;BÂB	ÂBÂB!c                 óÐ  — | j                   d   }|du ry| j                  «        | j                  d«      5  | j                  «        |du r/| j                  d«      5  | j	                  dd¬«       ddd«       �nœt        |t        «      �rát        |«      D ]º  \  }}| j                  d	|«      5  | j                  d
|«       | j                  |dj                  | j                  |«      dj                  | j                  |«      «       ddd«       | j                  sŒ‡t        |t        «      sŒ˜d|v sŒ�| j                  dt        |d   «      «       Œ¼ d| j                   v �r´| j                   d   du r9| j                  d	t        |«      «      5  | j	                  dd¬«       ddd«       �nj| j                  dt        |«      «      5  t        | j                   «      }| j                  | j                   d   dj                  | j                  «      dj                  | j                  | j                  «      «       t        | j                   «      |k(  r| j                  d«       ddd«       nª|r¨| j                  d«      5  t        | j                   «      }| j                  |dj                  | j                  «      dj                  | j                  | j                  «      «       t        | j                   «      |k(  r| j                  d«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   �Œ%xY w# 1 sw Y   Œ+xY w# 1 sw Y   Œ7xY w# 1 sw Y   ŒCxY w# 1 sw Y   yxY w)aÓ  
        Means array is valid only when all items are valid by this definition.

        .. code-block:: python

            {
                'items': [
                    {'type': 'integer'},
                    {'type': 'string'},
                ],
            }

        Valid arrays are those with integers or strings, nothing else.

        Since draft 06 definition can be also boolean. True means nothing, False
        means everything is invalid.
        r-   TNrØ   Fzif {variable}:r¨   ro   zif {variable}_len > {}:z!{variable}__{0} = {variable}[{0}]ú{}__{}z{}[{}]Údefaultzelse: {variable}.append({})ÚadditionalItemsz({name} must contain only specified itemszFfor {variable}_x, {variable}_item in enumerate({variable}[{0}:], {0}):z{}_itemz{}[{{{}_x}}]r©   z;for {variable}_x, {variable}_item in enumerate({variable}):)rq   rÚ   ru   r°   rv   r~   r   r‘   r—   r&   rt   r˜   r9   r   r   r�   rª   )rU   Úitems_definitionÚidxÚitem_definitionr¬   s        r^   rL   z#CodeGeneratorDraft04.generate_items«  sâ  € ð$  ×+Ñ+¨GÑ4ÐØ˜tÑ#Øà×$Ñ$Ô&Ø�V‰VÐ,Õ-Ø×,Ñ,Ô.Ø 5Ñ(Ø—V‘VÐ,Õ-Ø—H‘HÐ7¸g�HÔF÷ .Ñ-äÐ,¬dÕ3Ü,5Ð6FÖ,GÑ(�C˜ØŸ™Ð 9¸3Õ?ØŸ™ÐBÀCÔHØ×5Ñ5Ø+Ø$ŸO™O¨D¯N©N¸CÓ@Ø$ŸO™O¨D×,?Ñ,?ÀÓEô÷ @ð ×(Ó(¬Z¸ÌÕ-NÐS\Ð`oÒSoØŸ™Ð<¼lÈ?Ð[dÑKeÓ>fÕgð -Hð %¨×(8Ñ(8Ò8Ø×'Ñ'Ð(9Ñ:¸eÑCØ!ŸV™VÐ$=¼sÐCSÓ?TÕUØ ŸH™HÐ%OÐV]˜HÔ^÷ VÑUð "ŸV™VÐ$lÔnqð  sCó  oDõ  EÜ'*¨4¯:©:£˜HØ ×9Ñ9Ø $× 0Ñ 0Ð1BÑ CØ )× 0Ñ 0°·±Ó @Ø .× 5Ñ 5°d×6IÑ6IÈ4Ï>É>Ó Zôô
  # 4§:¡:›°(Ò:Ø $§¡ v¤÷ Eð  Eñ $ØŸ™Ð ]Õ^Ü#& t§z¡z£?˜Ø×5Ñ5Ø,Ø%×,Ñ,¨T¯^©^Ó<Ø*×1Ñ1°$×2EÑ2EÀtÇ~Á~ÓVôô
 ˜tŸz™z›?¨hÒ6Ø ŸF™F 6œN÷ _÷C .Ð-÷ .Ð-ú÷ @Ñ?ú÷ VÐUú÷ Eð  Eú÷ _Ð^ú÷C .Ð-ús™   ¶&MÁLÁ0>MÂ.AL+ÄMÄMÄ.MÄ3AMÆL8Æ"%MÇBMÉ#MÉ?BMÌMÌL(	Ì$MÌ+L5Ì0MÌ8M	Ì=MÍM	Í	MÍM	ÍMÍM%c                 ó^  — | j                  «        | j                  d«      5  t        | j                  d   t        t
        f«      st        d«      ‚| j                  «        | j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Núif {variable}_is_dict:r.   zminProperties must be a numberz$if {variable}_len < {minProperties}:z7{name} must contain at least {minProperties} propertiesro   ©	Úcreate_variable_is_dictru   r~   rq   r   r�   r   r°   rv   r±   s    r^   rM   z,CodeGeneratorDraft04.generate_min_propertiesí  sŒ   € Ø×$Ñ$Ô&Ø�V‰VÐ,Õ-Ü˜d×.Ñ.¨Ñ?Ä#ÄuÀÔNÜ3Ð4TÓUÐUØ×,Ñ,Ô.Ø—‘Ð>Õ?Ø—‘ÐRÐYh�Ôi÷ @÷	 .Ð-÷ @Ð?ú÷	 .Ð-úrÛ   c                 ó^  — | j                  «        | j                  d«      5  t        | j                  d   t        t
        f«      st        d«      ‚| j                  «        | j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nrç   r/   zmaxProperties must be a numberz$if {variable}_len > {maxProperties}:zD{name} must contain less than or equal to {maxProperties} propertiesro   rè   r±   s    r^   rN   z,CodeGeneratorDraft04.generate_max_propertiesö  sŒ   € Ø×$Ñ$Ô&Ø�V‰VÐ,Õ-Ü˜d×.Ñ.¨Ñ?Ä#ÄuÀÔNÜ3Ð4TÓUÐUØ×,Ñ,Ô.Ø—‘Ð>Õ?Ø—‘Ð_Ðfu�Ôv÷ @÷	 .Ð-÷ @Ð?ú÷	 .Ð-úrÛ   c                 óŽ  ‡— | j                  «        | j                  d«      5  t        | j                  d   t        t
        f«      st        d«      ‚t        | j                  d   «      t        t        | j                  d   «      «      k7  rt        d«      ‚| j                  j                  dd«      s�| j                  d   D �‡cg c]P  Š‰| j                  j                  di «      vr0t        ˆfd„| j                  j                  d	i «      D «       «      s‰‘ŒR }}|r%t        d
j                  | j                  |«      «      ‚| j                  d«       | j                  d«      5  d}| j                  d| j                  | j                  d   «      d|¬«       d d d «       d d d «       y c c}w # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nrç   r0   zrequired must be an arrayz%required must contain unique elementsr4   Tr2   c              3   óJ   •K  — | ]  }t        j                  |‰«      –— Œ y ­wrf   )rº   Úsearch)rh   rÀ   Úprops     €r^   rj   z9CodeGeneratorDraft04.generate_required.<locals>.<genexpr>  s   øè ø€ Ð#vÑHu¸u¤B§I¡I¨e°T×$:ÑHuùs   ƒ #r3   z){}: items {} are required but not allowedz>{variable}__missing_keys = set({required}) - {variable}.keys()zif {variable}__missing_keys:z5str(sorted({variable}__missing_keys)) + " properties"z{name} must contain )rp   r¥   )ré   ru   r~   rq   r   r€   r   r�   ÚsetrÒ   Úanyr&   rt   rv   r�   )rU   rî   Únot_possibler¦   s    `  r^   rO   z&CodeGeneratorDraft04.generate_requiredÿ  s�  ø€ Ø×$Ñ$Ô&Ø�V‰VÐ,Õ-Ü˜d×.Ñ.¨zÑ:¼TÄ5¸MÔJÜ3Ð4OÓPÐPÜ�4×#Ñ# JÑ/Ó0´C¼¸D×<LÑ<LÈZÑ<XÓ8YÓ4ZÒZÜ3Ð4[Ó\Ð\Ø×#Ñ#×'Ñ'Ð(>ÀÔEð !%× 0Ñ 0°Ò <ô á <˜à D×$4Ñ$4×$8Ñ$8¸ÀrÓ$JÑJÜ #Ó#vÈ×HXÑHX×H\ÑH\Ð]pÐrtÔHuÓ#vÔ vò	 Ø <ð ð  ñ  Ü7Ð8c×8jÑ8jÐko×kyÑkyð  |Hó  9Ió  Jð  JØ�F‰FÐSÔTØ—‘Ð6Õ7ØQ�Ø—‘Ð/°·±¸×8HÑ8HÈÑ8TÓ1UÐ\fÐv}�Ô~÷ 8÷! .Ð-ùò ÷ 8Ð7ú÷! .Ð-ús8   £B"F;ÃAF*ÄAF;Å%4F/ÆF;Æ*F;Æ/F8	Æ4F;Æ;Gc                 óÎ  — | j                  «        | j                  d«      5  | j                  «        | j                  d   j	                  «       D �]q  \  }}t        j                  dd|«      }t        |t        t        f«      s%t        dj                  | j                  |«      «      ‚| j                  d| j                  |«      «      5  | j                  d| j                  |«      «       | j                  d|| j                  |«      «       | j                  |d	j                  | j                  |«      d
j                  | j                  | j                  |«      «      d¬«       ddd«       | j                   s�Œ,t        |t        «      s�Œ>d|v s�ŒD| j                  d| j                  |«      t#        |d   «      «       �Œt 	 ddd«       y# 1 sw Y   ŒjxY w# 1 sw Y   yxY w)a  
        Means object with defined keys.

        .. code-block:: python

            {
                'properties': {
                    'key': {'type': 'number'},
                },
            }

        Valid object is containing key called 'key' and value any number.
        rç   r2   z($[^a-zA-Z]|[^a-zA-Z0-9])rk   z{}[{}] must be objectzif "{}" in {variable}_keys:z{variable}_keys.remove("{}")z#{variable}__{0} = {variable}["{1}"]rà   z{}.{}Tr•   Nrá   zelse: {variable}["{}"] = {})ré   ru   Úcreate_variable_keysrq   r-   rº   r¹   r~   r   r
   r   r&   rt   r�   r—   r˜   r9   r   )rU   r‡   Úprop_definitionÚkey_names       r^   rQ   z(CodeGeneratorDraft04.generate_properties  s€  € ð 	×$Ñ$Ô&Ø�V‰VÐ,Õ-Ø×%Ñ%Ô'Ø(,×(8Ñ(8¸Ñ(F×(LÑ(L×(NÑ$��_ÜŸ6™6Ð">ÀÀCÓH�Ü! /´D¼$°<Ô@Ü7Ð8O×8VÑ8VÐW[×WeÑWeÐgoÓ8pÓqÐqØ—V‘VÐ9¸4¿6¹6À#»;ÕGØ—F‘FÐ9¸4¿6¹6À#»;ÔGØ—F‘FÐ@À(ÈDÏFÉFÐSVËKÔXØ×1Ñ1Ø'Ø Ÿ™¨¯©¸ÓAØŸ™ t×':Ñ':¸D¿F¹FÀ3»KÓHØ(,ð	 2ô ÷ Hð ×$Ô$¬°OÄTÖ)JÈyÐ\kÓOkØ—F‘FÐ8¸$¿&¹&À»+Ä|ÐTcÐdmÑTnÓGoÖpñ )O÷ .Ð-÷ HÐGú÷ .Ð-ús7   ¢B(GÃ
BGÅ&GÅ<GÆGÆ1GÇGÇGÇG$c                 óJ  — | j                  «        | j                  d«      5  | j                  «        | j                  d   }|i k(  r
	 ddd«       y|j	                  «       D ]'  \  }}t        j                  |«      | j                  |<   Œ) | j                  d«      5  | j                  d   j	                  «       D ]¦  \  }}| j                  dt        |«      «      5  | j                  d«      5  | j                  d«       ddd«       | j                  |dj                  | j                  «      d	j                  | j                  | j                  «      d
¬«       ddd«       Œ¨ 	 ddd«       ddd«       y# 1 sw Y   ŒwxY w# 1 sw Y   ŒÐxY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)a4  
        Means object with defined keys as patterns.

        .. code-block:: python

            {
                'patternProperties': {
                    '^x': {'type': 'number'},
                },
            }

        Valid object is containing key starting with a 'x' and value any number.
        rç   r3   Nz9for {variable}_key, {variable}_val in {variable}.items():z-if REGEX_PATTERNS[{}].search({variable}_key):z%if {variable}_key in {variable}_keys:z&{variable}_keys.remove({variable}_key)z{}_valú{}.{{{}_key}}Tr•   )ré   ru   ró   rq   r-   rº   r»   r¼   rŽ   r—   r&   rt   r˜   )rU   Úpattern_prop_definitionr%   rV   s       r^   rR   z0CodeGeneratorDraft04.generate_pattern_properties6  sk  € ð 	×$Ñ$Ô&Ø�V‰VÐ,Õ-Ø×%Ñ%Ô'Ø&*×&6Ñ&6Ð7JÑ&KÐ#Ø&¨"Ò,Ø÷	 .Ð-ð
 (?×'DÑ'DÖ'FÑ#�˜Ü13·±¸GÓ1D�×%Ñ% gÒ.ð (Gà—‘ÐSÕTØ+/×+;Ñ+;Ð<OÑ+P×+VÑ+VÖ+XÑ'�G˜ZØŸ™Ð OÔQUÐV]ÓQ^Õ_Ø!ŸV™VÐ$KÕLØ ŸF™FÐ#KÔL÷ Mà×5Ñ5Ø&Ø$ŸO™O¨D¯N©NÓ;Ø+×2Ñ2°4×3FÑ3FÈÏÉÓWØ,0ð	 6ô ÷ `Ð_ñ ,Y÷ U÷ .Ð-÷ MÐLú÷ `Ð_ú÷ UÐTú÷ .Ð-ús[   ¢&FÁAFÂ?FÃF	Ã-E5Ã?AF	Å
FÅ$FÅ5E>Å:F	ÆF
ÆFÆF	ÆFÆF"c                 ó  — | j                  «        | j                  d«      5  | j                  «        | j                  d   }|du s|i k(  r
	 ddd«       y|rÊt	        | j                  j                  di «      j                  «       «      }| j                  d«      5  | j                  d|«      5  | j                  d«       | j                  |d	j                  | j                  «      d
j                  | j                  | j                  «      «       ddd«       ddd«       n-| j                  d«      5  | j                  dd¬«       ddd«       ddd«       y# 1 sw Y   ŒHxY w# 1 sw Y   ŒxY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)aŸ  
        Means object with keys with values defined by definition.

        .. code-block:: python

            {
                'properties': {
                    'key': {'type': 'number'},
                }
                'additionalProperties': {'type': 'string'},
            }

        Valid object is containing key called 'key' and it's value any number and
        any other key with any string.
        rç   r4   TNr2   z&for {variable}_key in {variable}_keys:zif {variable}_key not in {}:z1{variable}_value = {variable}.get({variable}_key)z{}_valuer÷   zif {variable}_keys:z;{name} must not contain "+str({variable}_keys)+" propertiesro   )ré   ru   ró   rq   r   rÒ   Úkeysr—   r&   rt   r˜   rv   )rU   Úadd_prop_definitionÚproperties_keyss      r^   rS   z3CodeGeneratorDraft04.generate_additional_propertiesX  sJ  € ð  	×$Ñ$Ô&Ø�V‰VÐ,Õ-Ø×%Ñ%Ô'Ø"&×"2Ñ"2Ð3IÑ"JÐØ" dÑ*Ð.AÀRÒ.GØ÷	 .Ð-ñ
 #Ü"& t×'7Ñ'7×';Ñ';¸LÈ"Ó'M×'RÑ'RÓ'TÓ"U�Ø—V‘VÐDÕEØŸ™Ð >ÀÕPØŸ™ÐRÔSØ×5Ñ5Ø/Ø&×-Ñ-¨d¯n©nÓ=Ø+×2Ñ2°4×3FÑ3FÈÏÉÓWô÷ Q÷ FÐEð —V‘VÐ1Õ2Ø—H‘HÐZÐaw�HÔx÷ 3÷! .Ð-÷ QÐPú÷ FÐEú÷ 3Ð2ú÷! .Ð-ús[   ¢*E;ÁAE;ÂE#Â.A"EÄE#ÄE;Ä2E/ÅE;ÅE ÅE#Å#E,	Å(E;Å/E8	Å4E;Å;Fc                 óŽ  — | j                  «        | j                  d«      5  d}| j                  d   j                  «       D �]@  \  }}|g k(  s|du rŒd}| j                  d| j	                  |«      «      5  |du r$| j                  d| j	                  |«      d¬«       nÜt        |t        «      re|D ]_  }| j                  d| j	                  |«      «      5  | j                  d	| j	                  |«      | j	                  |«      d¬«       d
d
d
«       Œa ngt        | j                  «      }| j                  || j                  | j                  d¬«       t        | j                  «      |k(  r| j                  d«       d
d
d
«       �ŒC |r| j                  d«       d
d
d
«       y
# 1 sw Y   ŒúxY w# 1 sw Y   �ŒvxY w# 1 sw Y   y
xY w)aþ  
        Means when object has property, it needs to have also other property.

        .. code-block:: python

            {
                'dependencies': {
                    'bar': ['foo'],
                },
            }

        Valid object is containing only foo, both bar and foo or none of them, but not
        object with only bar.

        Since draft 06 definition can be boolean or empty array. True and empty array
        means nothing, False means that key cannot be there at all.
        rç   Tr1   Fzif "{}" in {variable}:z{} in {name} must not be therero   zif "{}" not in {variable}:z#{name} missing dependency {} for {}Nr•   r©   )ré   ru   rq   r-   r�   rv   r~   r   r�   rª   r—   rt   r˜   )rU   Úis_emptyr‡   Úvaluesr}   r¬   s         r^   rP   z*CodeGeneratorDraft04.generate_dependencies|  s…  € ð$ 	×$Ñ$Ô&Ø�V‰VÐ,Õ-ØˆHØ#×/Ñ/°Ñ?×EÑE×G‘��VØ˜R’< 6¨T¡>ØØ �Ø—V‘VÐ4°d·f±f¸S³kÕBØ ‘ØŸ™Ð!AÀ4Ç6Á6È#Ã;ÐUc˜ÕdÜ# F¬DÔ1Û%+˜EØ!%§¡Ð(DÀdÇfÁfÈUÃmÕ!TØ $§¡Ð)NÐPT×PVÑPVÐW\ÓP]Ð_c×_eÑ_eÐfiÓ_jÐq ô  !A÷ "UÐ!Tñ &,ô $' t§z¡z£?˜Ø×5Ñ5°f¸d¿n¹nÈd×NaÑNaÐswÐ5ÔxÜ˜tŸz™z›?¨hÒ6Ø ŸF™F 6œN÷ CÑBð	  Hñ  Ø—‘�v”÷' .Ð-÷ "UÐ!Tú÷ CÑBú÷ .Ð-ús>   ¢AF;Á6AF.Ã4F"Ä	A2F.Å;F;Æ"F+Æ'F.Æ.F8Æ3F;Æ;G)"Ú__name__Ú
__module__Ú__qualname__rÂ   r6   Úpropertyrb   r<   r=   r|   r>   r?   r@   rA   rB   rC   rD   rE   rÃ   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rQ   rR   rS   rP   Ú__classcell__)r]   s   @r^   r   r      s÷   ø„ ð DØBð NØwð rØ'ñ€Mð -1¸"È$Ð\`Ðvzð  GKõ  &ðD óó ðò
Kò,Pò*#AòJvò&Sò>sò@Vò>lòmòWò!LòHJò	aò	bòAò [òhòQòB@+òDjòwòò,qòB òD"yöH&r_   r   )rÐ   rº   Ú
exceptionsr   Ú	generatorr   r   r   r   rg   r»   r¸   r   © r_   r^   Ú<module>r     sS   ðÛ Û 	å 5ß WÓ Wð ØØ#ØØØØñÐ ð �—
‘
˜<Ó(€ôL
˜=õ L
r_   