From 3c32bf29edc43e71c7761fb4fe0ed350465584da Mon Sep 17 00:00:00 2001 From: Dan-wanna-M Date: Fri, 11 Oct 2024 03:37:03 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Dan-wann?= =?UTF-8?q?a-M/formatron@e97f9602c059b4e3d9085f16cb07ad8e23071f47=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...n_1_1formats_1_1json_1_1JsonExtractor.html | 16 +- dev/doxygen_crawl.html | 10 +- dev/json_8py_source.html | 172 ++--- dev/json__schema_8py.html | 13 +- dev/json__schema_8py.js | 5 +- dev/json__schema_8py_source.html | 604 +++++++++--------- ...eformatron_1_1schemas_1_1json__schema.html | 92 ++- ...aceformatron_1_1schemas_1_1json__schema.js | 5 +- dev/namespacemembers.html | 5 +- dev/namespacemembers_func.html | 5 +- dev/navtreedata.js | 2 +- dev/navtreeindex1.js | 54 +- dev/navtreeindex2.js | 2 + dev/search/all_0.js | 71 +- dev/search/functions_0.js | 31 +- 15 files changed, 580 insertions(+), 507 deletions(-) diff --git a/dev/classformatron_1_1formats_1_1json_1_1JsonExtractor.html b/dev/classformatron_1_1formats_1_1json_1_1JsonExtractor.html index 0714a3c..1843cf7 100644 --- a/dev/classformatron_1_1formats_1_1json_1_1JsonExtractor.html +++ b/dev/classformatron_1_1formats_1_1json_1_1JsonExtractor.html @@ -228,12 +228,16 @@

- NoneType
+
  • pattern currently is automatically anchored at both ends
  • +
  • the generated json could be invalid if the pattern allows invalid content between the json string's quotes.
      +
    • for example, pattern=".*" will allow '"' to appear in the json string which is forbidden by JSON standard.
      - NoneType
      - typing.Any
  • + +

    Subclasses of collections.abc.Mapping[str,T] and typing.Mapping[str,T] where T is a supported type,

    • Subclasses of collections.abc.Sequence[T] and typing.Sequence[T] where T is a supported type.
    • tuple[T1,T2,...] where T1,T2,... are supported types. The order, type and number of elements will be preserved.
    • @@ -252,7 +256,7 @@

      formatron.extractor.NonterminalExtractor.

      -

      Definition at line 317 of file json.py.

      +

      Definition at line 319 of file json.py.

      @@ -287,7 +291,7 @@

      formatron.extractor.Extractor.

      -

      Definition at line 331 of file json.py.

      +

      Definition at line 333 of file json.py.

      @@ -308,7 +312,7 @@

      formatron.extractor.Extractor.

      -

      Definition at line 385 of file json.py.

      +

      Definition at line 387 of file json.py.

      @@ -333,7 +337,7 @@

      -

      Definition at line 321 of file json.py.

      +

      Definition at line 323 of file json.py.

      @@ -357,7 +361,7 @@

      -

      Definition at line 320 of file json.py.

      +

      Definition at line 322 of file json.py.

      diff --git a/dev/doxygen_crawl.html b/dev/doxygen_crawl.html index 30e2a12..c117e60 100644 --- a/dev/doxygen_crawl.html +++ b/dev/doxygen_crawl.html @@ -400,8 +400,9 @@ + - + @@ -411,7 +412,7 @@ - + @@ -454,8 +455,9 @@ + - + @@ -465,7 +467,7 @@ - + diff --git a/dev/json_8py_source.html b/dev/json_8py_source.html index e624cde..142fd7a 100644 --- a/dev/json_8py_source.html +++ b/dev/json_8py_source.html @@ -422,97 +422,99 @@
      292 - pattern is mutually exclusive with min_length and max_length
      293 - pattern will be compiled to a regular expression so all caveats of regular expressions apply
      294 - pattern currently is automatically anchored at both ends
      -
      295 - NoneType
      -
      296 - typing.Any
      -
      297 - Subclasses of collections.abc.Mapping[str,T] and typing.Mapping[str,T] where T is a supported type,
      -
      298 - Subclasses of collections.abc.Sequence[T] and typing.Sequence[T] where T is a supported type.
      -
      299 - tuple[T1,T2,...] where T1,T2,... are supported types. The order, type and number of elements will be preserved.
      -
      300 - typing.Literal[x1,x2,...] where x1, x2, ... are instances of int, string, bool or NoneType, or another typing.Literal[y1,y2,...]
      -
      301 - typing.Union[T1,T2,...] where T1,T2,... are supported types.
      -
      302 - schemas.Schema where all its fields' data types are supported. Recursive schema definitions are supported as well.
      -
      303
      -
      304 Args:
      -
      305 nonterminal: The nonterminal representing the extractor.
      -
      306 capture_name: The capture name of the extractor, or `None` if the extractor does not capture.
      -
      307 to_object: A callable to convert the extracted string to a schema instance.
      -
      308 """
      -
      309 super().__init__(nonterminal, capture_name)
      -
      310 self._to_object = to_object
      -
      311 self._rule_str = _generate_kbnf_grammar(schema, self.nonterminal)
      -
      312 def extract(self, input_str: str) -> typing.Optional[tuple[str, schemas.schema.Schema]]:
      -
      313 """
      -
      314 Extract a schema instance from a string.
      -
      315
      -
      316 Args:
      -
      -
      317 input_str: The input string to extract from.
      -
      318
      -
      319 Returns:
      -
      320 A tuple of the remaining string and the extracted schema instance, or `None` if extraction failed.
      -
      321 """
      +
      295 - the generated json could be invalid if the pattern allows invalid content between the json string's quotes.
      +
      296 - for example, `pattern=".*"` will allow '\"' to appear in the json string which is forbidden by JSON standard.
      +
      297 - NoneType
      +
      298 - typing.Any
      +
      299 - Subclasses of collections.abc.Mapping[str,T] and typing.Mapping[str,T] where T is a supported type,
      +
      300 - Subclasses of collections.abc.Sequence[T] and typing.Sequence[T] where T is a supported type.
      +
      301 - tuple[T1,T2,...] where T1,T2,... are supported types. The order, type and number of elements will be preserved.
      +
      302 - typing.Literal[x1,x2,...] where x1, x2, ... are instances of int, string, bool or NoneType, or another typing.Literal[y1,y2,...]
      +
      303 - typing.Union[T1,T2,...] where T1,T2,... are supported types.
      +
      304 - schemas.Schema where all its fields' data types are supported. Recursive schema definitions are supported as well.
      +
      305
      +
      306 Args:
      +
      307 nonterminal: The nonterminal representing the extractor.
      +
      308 capture_name: The capture name of the extractor, or `None` if the extractor does not capture.
      +
      309 to_object: A callable to convert the extracted string to a schema instance.
      +
      310 """
      +
      311 super().__init__(nonterminal, capture_name)
      +
      312 self._to_object = to_object
      +
      313 self._rule_str = _generate_kbnf_grammar(schema, self.nonterminal)
      +
      314 def extract(self, input_str: str) -> typing.Optional[tuple[str, schemas.schema.Schema]]:
      +
      315 """
      +
      316 Extract a schema instance from a string.
      +
      317
      +
      318 Args:
      +
      +
      319 input_str: The input string to extract from.
      +
      320
      +
      321 Returns:
      +
      322 A tuple of the remaining string and the extracted schema instance, or `None` if extraction failed.
      +
      323 """
      -
      322
      -
      323 # Ensure the input string starts with '{' or '[' after stripping leading whitespace
      -
      324 input_str = input_str.lstrip()
      -
      325 if not input_str.startswith(('{', '[')):
      -
      326 return None
      -
      327
      -
      328 # Variables to track the balance of brackets and the position in the string
      -
      329 bracket_count = 0
      -
      330 position = 0
      -
      -
      331 in_string = False
      -
      332 escape_next = False
      -
      333 start_char = input_str[0]
      -
      334 end_char = '}' if start_char == '{' else ']'
      -
      335
      -
      336 # Iterate over the string to find where the JSON object or array ends
      -
      337 for char in input_str:
      -
      338 if not in_string:
      -
      339 if char == start_char:
      -
      340 bracket_count += 1
      -
      341 elif char == end_char:
      -
      342 bracket_count -= 1
      -
      343 elif char == '"':
      -
      344 in_string = True
      -
      345 else:
      -
      346 if char == '"' and not escape_next:
      -
      347 in_string = False
      -
      348 elif char == '\\':
      -
      349 escape_next = not escape_next
      -
      350 else:
      -
      351 escape_next = False
      -
      352
      -
      353 # Move to the next character
      -
      354 position += 1
      -
      355
      -
      356 # If brackets are balanced and we're not in a string, stop processing
      -
      357 if bracket_count == 0 and not in_string:
      -
      358 break
      -
      359 else:
      -
      360 return None
      -
      361 # The position now points to the character after the last '}', so we slice to position
      -
      362 json_str = input_str[:position]
      -
      363 remaining_str = input_str[position:]
      -
      364 # Return the unparsed remainder of the string and the decoded JSON object
      -
      365 return remaining_str, self._to_object(json_str)
      -
      366
      -
      367 @property
      -
      368 def kbnf_definition(self):
      -
      369 return self._rule_str
      -
      370
      -
      371
      - +
      324
      +
      325 # Ensure the input string starts with '{' or '[' after stripping leading whitespace
      +
      326 input_str = input_str.lstrip()
      +
      327 if not input_str.startswith(('{', '[')):
      +
      328 return None
      +
      329
      +
      330 # Variables to track the balance of brackets and the position in the string
      +
      331 bracket_count = 0
      +
      332 position = 0
      +
      +
      333 in_string = False
      +
      334 escape_next = False
      +
      335 start_char = input_str[0]
      +
      336 end_char = '}' if start_char == '{' else ']'
      +
      337
      +
      338 # Iterate over the string to find where the JSON object or array ends
      +
      339 for char in input_str:
      +
      340 if not in_string:
      +
      341 if char == start_char:
      +
      342 bracket_count += 1
      +
      343 elif char == end_char:
      +
      344 bracket_count -= 1
      +
      345 elif char == '"':
      +
      346 in_string = True
      +
      347 else:
      +
      348 if char == '"' and not escape_next:
      +
      349 in_string = False
      +
      350 elif char == '\\':
      +
      351 escape_next = not escape_next
      +
      352 else:
      +
      353 escape_next = False
      +
      354
      +
      355 # Move to the next character
      +
      356 position += 1
      +
      357
      +
      358 # If brackets are balanced and we're not in a string, stop processing
      +
      359 if bracket_count == 0 and not in_string:
      +
      360 break
      +
      361 else:
      +
      362 return None
      +
      363 # The position now points to the character after the last '}', so we slice to position
      +
      364 json_str = input_str[:position]
      +
      365 remaining_str = input_str[position:]
      +
      366 # Return the unparsed remainder of the string and the decoded JSON object
      +
      367 return remaining_str, self._to_object(json_str)
      +
      368
      +
      369 @property
      +
      370 def kbnf_definition(self):
      +
      371 return self._rule_str
      +
      372
      +
      373
      +
      An extractor that extracts data corresponding to a nonterminal.
      Definition extractor.py:98
      str nonterminal(self)
      Get the nonterminal of the extractor.
      Definition extractor.py:121
      An extractor that loads json data to an object from a string.
      Definition json.py:282
      - -
      typing.Optional[tuple[str, schemas.schema.Schema]] extract(self, str input_str)
      Extract a schema instance from a string.
      Definition json.py:331
      -
      __init__(self, str nonterminal, typing.Optional[str] capture_name, schemas.schema.Schema|collections.abc.Sequence schema, typing.Callable[[str], schemas.schema.Schema] to_object)
      Create a json extractor from a given schema or a list of supported types.
      Definition json.py:318
      - - + +
      typing.Optional[tuple[str, schemas.schema.Schema]] extract(self, str input_str)
      Extract a schema instance from a string.
      Definition json.py:333
      +
      __init__(self, str nonterminal, typing.Optional[str] capture_name, schemas.schema.Schema|collections.abc.Sequence schema, typing.Callable[[str], schemas.schema.Schema] to_object)
      Create a json extractor from a given schema or a list of supported types.
      Definition json.py:320
      + +
      An abstract schema that describes some data.
      Definition schema.py:78
      diff --git a/dev/json__schema_8py.html b/dev/json__schema_8py.html index 4537f9f..0227a9c 100644 --- a/dev/json__schema_8py.html +++ b/dev/json__schema_8py.html @@ -169,11 +169,14 @@   typing.Type formatron.schemas.json_schema._handle_literal (typing.Any literal, typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)   -typing.Type formatron.schemas.json_schema._create_custom_type (typing.Type|None obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) -  -typing.Type formatron.schemas.json_schema._handle_list_and_union (typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) - Handle cases where the obtained type is a list or a union containing a list.
      -  +typing.Type formatron.schemas.json_schema._handle_str_with_metadata (dict[str, typing.Any] schema) + Handle string type with metadata such as maxLength, minLength, and pattern.
      +  +typing.Type formatron.schemas.json_schema._create_custom_type (dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) +  +typing.Type formatron.schemas.json_schema._handle_list_metadata (typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) + Handle cases where the obtained type is a list.
      +  typing.Type[typing.Any|None] formatron.schemas.json_schema._obtain_type (dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)  Directly obtain type information from this schema's type keyword.
        diff --git a/dev/json__schema_8py.js b/dev/json__schema_8py.js index d6fcd5a..8f409e8 100644 --- a/dev/json__schema_8py.js +++ b/dev/json__schema_8py.js @@ -2,12 +2,13 @@ var json__schema_8py = [ [ "formatron.schemas.json_schema.FieldInfo", "classformatron_1_1schemas_1_1json__schema_1_1FieldInfo.html", "classformatron_1_1schemas_1_1json__schema_1_1FieldInfo" ], [ "_convert_json_schema_to_our_schema", "json__schema_8py.html#a5f4856cb7c30aa340432d386836f25be", null ], - [ "_create_custom_type", "json__schema_8py.html#a38fed431c5191f57f9db65d4a744a96e", null ], + [ "_create_custom_type", "json__schema_8py.html#a15dc86b65c90ac8423c8989054f8c9e5", null ], [ "_extract_fields_from_object_type", "json__schema_8py.html#af20251afc012b955e29c92922fcc83ef", null ], [ "_get_literal", "json__schema_8py.html#a096ea829025ebd26b9ae165c17cf8976", null ], [ "_handle_anyOf", "json__schema_8py.html#a6f88bf4e3c48d96b060ccdcbd80b3328", null ], - [ "_handle_list_and_union", "json__schema_8py.html#aa83ea66f3e98cec63e9ff7d2788345af", null ], + [ "_handle_list_metadata", "json__schema_8py.html#aa80f28ccaf9ed4b404564f629139f9d1", null ], [ "_handle_literal", "json__schema_8py.html#a969bd30894a578428528b94b0f82f1ba", null ], + [ "_handle_str_with_metadata", "json__schema_8py.html#a32e51b70be50d55d3944e6c700bbd1a5", null ], [ "_infer_type", "json__schema_8py.html#ac742e1e581efccb6cc9742e7a23c25c2", null ], [ "_merge_key", "json__schema_8py.html#a5fcddd43a5f64374b5b75d4aafeb9135", null ], [ "_merge_referenced_schema", "json__schema_8py.html#a45c9b97319a58c2013b8e3f10ad78c30", null ], diff --git a/dev/json__schema_8py_source.html b/dev/json__schema_8py_source.html index b2bfa9b..e385fd9 100644 --- a/dev/json__schema_8py_source.html +++ b/dev/json__schema_8py_source.html @@ -179,300 +179,324 @@
      51 for data validation and serialization. Currently, only the following JSON Schema features are supported:
      52
      53 - `type` keyword
      -
      54 - `items` keyword
      -
      55 - `properties` keyword
      -
      56 - Due to implementation limitations, we always assume `additionalProperties` is false.
      -
      57 - `enum` and `const` keyword
      +
      54 - `minLength, maxLength, pattern` keywords for string type
      +
      55 - `items` keyword
      +
      56 - `properties` keyword
      +
      57 - Due to implementation limitations, we always assume `additionalProperties` is false.
      -
      58 - This includes advanced enum types such as array and object.
      -
      59 - Note that if both `enum`(or `const`) and `type` are present, `type` will be ignored.
      -
      60 - `required` keyword
      +
      58 - `enum` and `const` keyword
      +
      59 - This includes advanced enum types such as array and object.
      +
      60 - Note that if both `enum`(or `const`) and `type` are present, `type` will be ignored.
      -
      61 - `anyOf` keyword
      -
      62 - This currently does not support factoring out common parts of the subschemas(like https://json-schema.org/understanding-json-schema/reference/combining#factoringschemas)
      +
      61 - `required` keyword
      +
      62 - `anyOf` keyword
      -
      63 - Schema references ($ref and $dynamicRef)
      -
      64 - Hence, all types of schema identifications(`$defs`, `$id`, `$anchor`, `$dynamicAnchor`) are supported.
      -
      65 - This includes recursive schema references.
      -
      66 - Recursive array references(like \[\[\[\[...\]\]\]\]) are not supported yet.
      -
      67 - Due to implementation limitations, duplicate constraint keywords in both referrers and referents are not allowed.
      -
      68 - This bound is expected to be loosened in future versions of Formatron where "easily mergeable" constraint keywords will be merged.
      -
      69
      -
      70 Requirements:
      -
      71 - The input schema must be a valid JSON Schema according to the JSON Schema Draft 2020-12 standard
      -
      72 - The root schema's type must be exactly "object" or "array" or both
      -
      73 - The schema must have a valid '$id' and '$schema' fields
      -
      74 - All references must be resolvable within the given schema and registry
      -
      75
      -
      76 Args:
      -
      77 schema: A dictionary representing a valid JSON schema.
      -
      78 registry: A Registry object containing additional schema definitions.
      -
      79 Defaults to an empty Registry.
      -
      80
      -
      81 Returns:
      -
      82 schemas.schema.Schema: A Schema object representing the input JSON schema.
      -
      83
      -
      84 Raises:
      -
      85 jsonschema.exceptions.ValidationError: If the input schema is not a valid JSON Schema.
      -
      86 ValueError: If there are issues with schema references, constraints or requirements.
      -
      87 """
      -
      88 registry = copy.deepcopy(registry)
      -
      89 schema = copy.deepcopy(schema)
      - -
      91 registry = Resource.from_contents(schema) @ registry
      -
      92 json_schema_id_to_schema = {}
      -
      93 memo = set()
      -
      94 _recursive_resolve_reference(schema["$id"], schema, registry, memo)
      -
      95 memo.clear()
      -
      96 _merge_referenced_schema(schema,memo)
      -
      97 result = _convert_json_schema_to_our_schema(schema,json_schema_id_to_schema)
      -
      98 return result
      -
      99
      -
      100def _resolve_new_url(uri: str, ref: str) -> str:
      -
      101 """
      -
      102 Adapted from https://github.com/python-jsonschema/referencing/blob/main/referencing/_core.py#L667.
      -
      103 """
      -
      104 if not ref.startswith("#"):
      -
      105 uri, _ = urldefrag(urljoin(uri, ref))
      -
      106 return uri
      -
      107
      -
      108def _validate_json_schema(schema: dict[str, typing.Any]) -> None:
      -
      -
      109 if "type" in schema:
      -
      110 root_type = schema["type"]
      -
      111 if isinstance(root_type, str):
      -
      112 if root_type not in ["object", "array"]:
      -
      113 raise ValueError("Root schema type must be 'object' or 'array'")
      -
      114 elif isinstance(root_type, list):
      -
      115 if not set(root_type).issubset({"object", "array"}):
      -
      116 raise ValueError("Root schema type must be 'object', 'array', or both")
      -
      117 else:
      -
      118 raise ValueError("Invalid 'type' specification in root schema")
      -
      119 jsonschema.validate(instance=schema, schema=jsonschema.validators.Draft202012Validator.META_SCHEMA)
      -
      120
      -
      121def _convert_json_schema_to_our_schema(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type])->typing.Type:
      +
      63 - This currently does not support factoring out common parts of the subschemas(like https://json-schema.org/understanding-json-schema/reference/combining#factoringschemas)
      +
      64 - Schema references ($ref and $dynamicRef)
      +
      65 - Hence, all types of schema identifications(`$defs`, `$id`, `$anchor`, `$dynamicAnchor`) are supported.
      +
      66 - This includes recursive schema references.
      +
      67 - Recursive array references(like \[\[\[\[...\]\]\]\]) are not supported yet.
      +
      68 - Due to implementation limitations, duplicate constraint keywords in both referrers and referents are not allowed.
      +
      69 - This bound is expected to be loosened in future versions of Formatron where "easily mergeable" constraint keywords will be merged.
      +
      70
      +
      71 Requirements:
      +
      72 - The input schema must be a valid JSON Schema according to the JSON Schema Draft 2020-12 standard
      +
      73 - The root schema's type must be exactly "object" or "array" or both
      +
      74 - The schema must have a valid '$id' and '$schema' fields
      +
      75 - All references must be resolvable within the given schema and registry
      +
      76
      +
      77 Args:
      +
      78 schema: A dictionary representing a valid JSON schema.
      +
      79 registry: A Registry object containing additional schema definitions.
      +
      80 Defaults to an empty Registry.
      +
      81
      +
      82 Returns:
      +
      83 schemas.schema.Schema: A Schema object representing the input JSON schema.
      +
      84
      +
      85 Raises:
      +
      86 jsonschema.exceptions.ValidationError: If the input schema is not a valid JSON Schema.
      +
      87 ValueError: If there are issues with schema references, constraints or requirements.
      +
      88 """
      +
      89 registry = copy.deepcopy(registry)
      +
      90 schema = copy.deepcopy(schema)
      + +
      92 registry = Resource.from_contents(schema) @ registry
      +
      93 json_schema_id_to_schema = {}
      +
      94 memo = set()
      +
      95 _recursive_resolve_reference(schema["$id"], schema, registry, memo)
      +
      96 memo.clear()
      +
      97 _merge_referenced_schema(schema,memo)
      +
      98 result = _convert_json_schema_to_our_schema(schema,json_schema_id_to_schema)
      +
      99 return result
      +
      100
      +
      101def _resolve_new_url(uri: str, ref: str) -> str:
      +
      102 """
      +
      103 Adapted from https://github.com/python-jsonschema/referencing/blob/main/referencing/_core.py#L667.
      +
      104 """
      +
      105 if not ref.startswith("#"):
      +
      106 uri, _ = urldefrag(urljoin(uri, ref))
      +
      107 return uri
      +
      108
      +
      109def _validate_json_schema(schema: dict[str, typing.Any]) -> None:
      +
      +
      110 if "type" in schema:
      +
      111 root_type = schema["type"]
      +
      112 if isinstance(root_type, str):
      +
      113 if root_type not in ["object", "array"]:
      +
      114 raise ValueError("Root schema type must be 'object' or 'array'")
      +
      115 elif isinstance(root_type, list):
      +
      116 if not set(root_type).issubset({"object", "array"}):
      +
      117 raise ValueError("Root schema type must be 'object', 'array', or both")
      +
      118 else:
      +
      119 raise ValueError("Invalid 'type' specification in root schema")
      +
      120 jsonschema.validate(instance=schema, schema=jsonschema.validators.Draft202012Validator.META_SCHEMA)
      +
      121
      +
      122def _convert_json_schema_to_our_schema(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type])->typing.Type:
      -
      122 """
      -
      123 Recursively handle all types needed to fully determine the type of a schema
      -
      124 """
      -
      125 schema_id = id(schema)
      -
      126 if schema_id in json_schema_id_to_schema: # Circular reference
      -
      -
      127 return json_schema_id_to_schema[schema_id]
      -
      128 if isinstance(schema, dict):
      -
      129 _inferred_type = _infer_type(schema, json_schema_id_to_schema)
      -
      130 if "properties" in schema:
      -
      131 fields = _extract_fields_from_object_type(json_schema_id_to_schema[schema_id])
      +
      123 """
      +
      124 Recursively handle all types needed to fully determine the type of a schema
      +
      125 """
      +
      126 schema_id = id(schema)
      +
      127 if schema_id in json_schema_id_to_schema: # Circular reference
      +
      +
      128 return json_schema_id_to_schema[schema_id]
      +
      129 if isinstance(schema, dict):
      +
      130 _inferred_type = _infer_type(schema, json_schema_id_to_schema)
      +
      131 if "properties" in schema:
      +
      132 fields = _extract_fields_from_object_type(json_schema_id_to_schema[schema_id])
      -
      -
      132 properties = schema["properties"]
      -
      133 required = schema.get("required", [])
      -
      134 for _property in properties:
      -
      135 fields[_property] = FieldInfo(_convert_json_schema_to_our_schema(properties[_property], json_schema_id_to_schema), required=_property in required)
      -
      136 return _inferred_type
      -
      137
      -
      138def _extract_fields_from_object_type(object_type:typing.Type):
      -
      139 args = typing.get_args(object_type)
      -
      140 for arg in args:
      -
      141 if isinstance(arg, type) and issubclass(arg, schemas.schema.Schema):
      -
      142 return arg.fields()
      -
      143 return object_type.fields()
      -
      144
      +
      +
      133 properties = schema["properties"]
      +
      134 required = schema.get("required", [])
      +
      135 for _property in properties:
      +
      136 fields[_property] = FieldInfo(_convert_json_schema_to_our_schema(properties[_property], json_schema_id_to_schema), required=_property in required)
      +
      137 return _inferred_type
      +
      138
      +
      139def _extract_fields_from_object_type(object_type:typing.Type):
      +
      140 args = typing.get_args(object_type)
      +
      141 for arg in args:
      +
      142 if isinstance(arg, type) and issubclass(arg, schemas.schema.Schema):
      +
      143 return arg.fields()
      +
      144 return object_type.fields()
      +
      145
      -
      145def _handle_anyOf(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      -
      146 allowed_keys = {"anyOf", "$id", "$schema"}
      -
      147 assert set(schema.keys()).issubset(allowed_keys), "Only 'anyOf', '$id', and '$schema' are allowed when 'anyOf' is present"
      -
      148 new_list = []
      -
      149 for item in schema["anyOf"]:
      -
      -
      150 new_list.append(_convert_json_schema_to_our_schema(item, json_schema_id_to_schema))
      -
      151 return typing.Union[tuple(new_list)]
      -
      152
      -
      153def _infer_type(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type[typing.Any | None]:
      -
      154 """
      -
      155 Infer more specific types.
      -
      156 """
      -
      157 if "anyOf" in schema:
      -
      158 return _handle_anyOf(schema, json_schema_id_to_schema)
      -
      159 obtained_type = _obtain_type(schema, json_schema_id_to_schema)
      -
      160 args = typing.get_args(obtained_type)
      +
      146def _handle_anyOf(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      +
      147 allowed_keys = {"anyOf", "$id", "$schema"}
      +
      148 assert set(schema.keys()).issubset(allowed_keys), "Only 'anyOf', '$id', and '$schema' are allowed when 'anyOf' is present"
      +
      149 new_list = []
      +
      150 for item in schema["anyOf"]:
      +
      +
      151 new_list.append(_convert_json_schema_to_our_schema(item, json_schema_id_to_schema))
      +
      152 return typing.Union[tuple(new_list)]
      +
      153
      +
      154def _infer_type(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type[typing.Any | None]:
      +
      155 """
      +
      156 Infer more specific types.
      +
      157 """
      +
      158 if "anyOf" in schema:
      +
      159 return _handle_anyOf(schema, json_schema_id_to_schema)
      +
      160 obtained_type = _obtain_type(schema, json_schema_id_to_schema)
      161 if obtained_type is None:
      162 obtained_type = typing.Union[str, float, int, bool, None, list[typing.Any]]
      -
      163 if obtained_type is object or object in args:
      -
      164 obtained_type = _create_custom_type(obtained_type, schema, json_schema_id_to_schema)
      -
      165 obtained_type = _handle_list_and_union(obtained_type, schema, json_schema_id_to_schema)
      -
      166 json_schema_id_to_schema[id(schema)] = obtained_type
      +
      163 args = typing.get_args(obtained_type)
      +
      164 if not args:
      +
      165 args = [obtained_type]
      +
      166 else:
      +
      167 args = list(args)
      -
      -
      167 return obtained_type
      -
      168
      -
      169def _get_literal(schema: dict[str, typing.Any]) -> typing.Any:
      -
      170 if "enum" in schema and "const" in schema:
      -
      171 raise ValueError("JSON schema cannot contain both 'enum' and 'const' keywords")
      -
      172 return tuple(schema["enum"]) if "enum" in schema else schema.get("const")
      -
      173
      +
      +
      168 for i, arg in enumerate(args):
      +
      169 if arg is object:
      +
      170 args[i] = _create_custom_type(schema, json_schema_id_to_schema)
      +
      171 elif arg is list:
      +
      172 args[i] = _handle_list_metadata(obtained_type, schema, json_schema_id_to_schema)
      +
      173 elif arg is str:
      +
      174 args[i] = _handle_str_with_metadata(schema)
      -
      -
      174def _handle_literal(literal: typing.Any, obtained_type: typing.Type, schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      -
      175 # TODO: validate literal against obtained_type
      -
      176 if not isinstance(literal, tuple):
      -
      177 literal = (literal,)
      -
      178 literal = frozendict.deepfreeze(literal)
      -
      179 literal_type = typing.Literal[literal]
      -
      180 return literal_type
      -
      181
      +
      +
      175 if typing.get_origin(obtained_type) is typing.Union:
      +
      176 obtained_type = typing.Union[tuple(args)]
      +
      177 elif typing.get_origin(obtained_type) is typing.Literal:
      +
      178 obtained_type = typing.Literal[tuple(args)]
      +
      179 else:
      +
      180 obtained_type = args[0]
      +
      181 json_schema_id_to_schema[id(schema)] = obtained_type
      +
      182 return obtained_type
      -
      182def _create_custom_type(obtained_type: typing.Type|None, schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      -
      183 global _counter
      -
      184 fields = {}
      -
      185 new_type = type(f"__json_schema_{_counter}", (schemas.schema.Schema,), {
      -
      186 "from_json": classmethod(lambda cls, x: json.loads(x)),
      -
      -
      187 "fields": classmethod(lambda cls: fields)
      -
      188 })
      -
      189 _counter += 1
      -
      190
      -
      191 if object in typing.get_args(obtained_type):
      -
      192 json_schema_id_to_schema[id(schema)] = typing.Union[tuple(item for item in typing.get_args(obtained_type) if item is not object)+(new_type,)]
      -
      193 else:
      -
      194 json_schema_id_to_schema[id(schema)] = new_type
      -
      195 return json_schema_id_to_schema[id(schema)]
      +
      183
      +
      184def _get_literal(schema: dict[str, typing.Any]) -> typing.Any:
      +
      185 if "enum" in schema and "const" in schema:
      +
      186 raise ValueError("JSON schema cannot contain both 'enum' and 'const' keywords")
      +
      187 return tuple(schema["enum"]) if "enum" in schema else schema.get("const")
      +
      + +
      189def _handle_literal(literal: typing.Any, obtained_type: typing.Type, schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      +
      190 # TODO: validate literal against obtained_type
      +
      191 if not isinstance(literal, tuple):
      +
      192 literal = (literal,)
      +
      193 literal = frozendict.deepfreeze(literal)
      +
      194 literal_type = typing.Literal[literal]
      +
      195 return literal_type
      196
      -
      197def _handle_list_and_union(obtained_type: typing.Type, schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      +
      197def _handle_str_with_metadata(schema: dict[str, typing.Any]) -> typing.Type:
      198 """
      -
      199 Handle cases where the obtained type is a list or a union containing a list.
      -
      -
      -
      200 """
      -
      201 if obtained_type is list or (typing.get_origin(obtained_type) is typing.Union and list in typing.get_args(obtained_type)):
      -
      202 if "items" in schema:
      -
      203 item_type = _convert_json_schema_to_our_schema(schema["items"], json_schema_id_to_schema)
      -
      204 if obtained_type is list:
      -
      -
      -
      205 return list[item_type]
      -
      206 else:
      -
      207 args = typing.get_args(obtained_type)
      -
      208 new_args = tuple(list[item_type] if arg is list else arg for arg in args)
      -
      209 return typing.Union[new_args]
      -
      210 return obtained_type
      -
      211
      +
      199 Handle string type with metadata such as maxLength, minLength, and pattern.
      +
      200 """
      +
      201 metadata = {}
      +
      202 if "maxLength" in schema:
      +
      203 metadata["max_length"] = schema["maxLength"]
      +
      204 if "minLength" in schema:
      +
      205 metadata["min_length"] = schema["minLength"]
      +
      206 if "pattern" in schema:
      +
      207 metadata["pattern"] = schema["pattern"]
      +
      208
      +
      209 if metadata:
      +
      210 return schemas.schema.TypeWithMetadata(str, metadata)
      +
      211 return str
      212
      +
      213
      +
      214def _create_custom_type(schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      +
      +
      +
      215 global _counter
      +
      216 fields = {}
      +
      217 new_type = type(f"__json_schema_{_counter}", (schemas.schema.Schema,), {
      +
      218 "from_json": classmethod(lambda cls, x: json.loads(x)),
      +
      219 "fields": classmethod(lambda cls: fields)
      -
      -
      213def _obtain_type(schema: dict[str, typing.Any], json_schema_id_to_schema:dict[int, typing.Type]) -> typing.Type[typing.Any|None]:
      -
      214 """
      -
      215 Directly obtain type information from this schema's type keyword.
      -
      216 """
      -
      217 if "type" not in schema:
      -
      218 obtained_type = None
      -
      219 else:
      -
      220 json_type = schema["type"]
      -
      221 if json_type == "string":
      -
      222 obtained_type = str
      -
      223 elif json_type == "number":
      -
      224 obtained_type = float
      -
      225 elif json_type == "integer":
      -
      226 obtained_type = int
      -
      227 elif json_type == "boolean":
      +
      +
      220 })
      +
      221 _counter += 1
      +
      222 json_schema_id_to_schema[id(schema)] = new_type
      +
      223 return new_type
      +
      224
      +
      225def _handle_list_metadata(obtained_type: typing.Type, schema: dict[str, typing.Any], json_schema_id_to_schema: dict[int, typing.Type]) -> typing.Type:
      +
      226 """
      +
      227 Handle cases where the obtained type is a list
      -
      228 obtained_type = bool
      -
      229 elif json_type == "null":
      -
      230 obtained_type = type(None)
      -
      231 elif json_type == "array":
      -
      232 obtained_type = list
      +
      228 """
      +
      229 if "items" in schema:
      +
      230 item_type = _convert_json_schema_to_our_schema(schema["items"], json_schema_id_to_schema)
      +
      231 return list[item_type]
      +
      232 return obtained_type
      -
      233 elif json_type == "object":
      -
      234 obtained_type = object
      -
      235 elif isinstance(json_type, collections.abc.Sequence):
      -
      236 new_list = []
      -
      237 for item in json_type:
      -
      238 new_schema = schema.copy()
      -
      239 new_schema["type"] = item
      -
      240 new_list.append(_obtain_type(new_schema, json_schema_id_to_schema))
      -
      241 obtained_type = typing.Union[tuple(new_list)]
      -
      242 else:
      -
      243 raise TypeError(f"Unsupported type in json schema: {json_type}")
      -
      244 literal = _get_literal(schema)
      -
      245 if literal is not None:
      + +
      234
      +
      235def _obtain_type(schema: dict[str, typing.Any], json_schema_id_to_schema:dict[int, typing.Type]) -> typing.Type[typing.Any|None]:
      +
      236 """
      +
      237 Directly obtain type information from this schema's type keyword.
      +
      238 """
      +
      239 if "type" not in schema:
      +
      240 obtained_type = None
      +
      241 else:
      +
      242 json_type = schema["type"]
      +
      243 if json_type == "string":
      +
      244 obtained_type = str
      +
      245 elif json_type == "number":
      +
      246 obtained_type = float
      +
      +
      +
      247 elif json_type == "integer":
      +
      248 obtained_type = int
      +
      249 elif json_type == "boolean":
      +
      250 obtained_type = bool
      +
      251 elif json_type == "null":
      +
      252 obtained_type = type(None)
      +
      253 elif json_type == "array":
      +
      254 obtained_type = list
      +
      255 elif json_type == "object":
      +
      256 obtained_type = object
      +
      257 elif isinstance(json_type, collections.abc.Sequence):
      +
      +
      258 new_list = []
      +
      259 for item in json_type:
      +
      260 new_schema = schema.copy()
      +
      261 new_schema["type"] = item
      +
      262 new_list.append(_obtain_type(new_schema, json_schema_id_to_schema))
      +
      +
      263 obtained_type = typing.Union[tuple(new_list)]
      +
      264 else:
      +
      265 raise TypeError(f"Unsupported type in json schema: {json_type}")
      +
      266 literal = _get_literal(schema)
      +
      267 if literal is not None:
      +
      268 return _handle_literal(literal, obtained_type, schema, json_schema_id_to_schema)
      +
      269 return obtained_type
      -
      246 return _handle_literal(literal, obtained_type, schema, json_schema_id_to_schema)
      -
      247 return obtained_type
      -
      248
      -
      249
      -
      250
      -
      - -
      252
      -
      253def _merge_referenced_schema(schema: dict[str, typing.Any], memo: set[int]):
      -
      254 keys = ["$ref", "$dynamicRef"]
      -
      255 if id(schema) in memo: # Circular reference
      -
      256 return None
      -
      257 if isinstance(schema, list):
      -
      258 memo.add(id(schema))
      -
      259 for item in schema:
      -
      260 _merge_referenced_schema(item, memo)
      -
      261 elif isinstance(schema, dict):
      -
      262 memo.add(id(schema))
      -
      263 for key in keys:
      -
      264 if key in schema:
      -
      265 _merge_referenced_schema(schema[key], memo) # ensure no unmerged references
      -
      266 for ref_key, ref_value in schema[key].items():
      -
      267 _merge_key(schema, ref_key, ref_value)
      -
      268 del schema[key]
      -
      269 for key, value in schema.items():
      -
      270 _merge_referenced_schema(value, memo)
      +
      270
      271
      -
      272def _merge_key(schema:dict[str, typing.Any], ref_key:str, reference_value:typing.Any):
      -
      273 if ref_key not in schema:
      -
      274 schema[ref_key] = reference_value
      -
      275 return None
      -
      276 if schema[ref_key] is reference_value:
      -
      277 return None
      -
      278 if isinstance(schema[ref_key], dict) and isinstance(reference_value, dict):
      -
      279 for new_ref_key, new_ref_value in reference_value.items():
      -
      280 _merge_key(schema[ref_key], new_ref_key, new_ref_value)
      -
      281 return None
      -
      282 if ref_key in ("$id", "$schema"):
      -
      283 # For $id and $schema, keep the original value
      -
      284 return None
      -
      285 if isinstance(schema[ref_key], (str, int, float, bool)) and isinstance(reference_value, (str, int, float, bool)):
      -
      286 if schema[ref_key] == reference_value:
      -
      287 return None
      +
      272
      +
      273
      +
      274
      +
      +
      275def _merge_referenced_schema(schema: dict[str, typing.Any], memo: set[int]):
      +
      276 keys = ["$ref", "$dynamicRef"]
      +
      277 if id(schema) in memo: # Circular reference
      +
      278 return None
      +
      279 if isinstance(schema, list):
      +
      280 memo.add(id(schema))
      +
      281 for item in schema:
      +
      282 _merge_referenced_schema(item, memo)
      +
      283 elif isinstance(schema, dict):
      +
      284 memo.add(id(schema))
      +
      285 for key in keys:
      +
      286 if key in schema:
      +
      287 _merge_referenced_schema(schema[key], memo) # ensure no unmerged references
      +
      288 for ref_key, ref_value in schema[key].items():
      +
      289 _merge_key(schema, ref_key, ref_value)
      +
      290 del schema[key]
      +
      291 for key, value in schema.items():
      +
      292 _merge_referenced_schema(value, memo)
      +
      293
      +
      294def _merge_key(schema:dict[str, typing.Any], ref_key:str, reference_value:typing.Any):
      +
      295 if ref_key not in schema:
      +
      296 schema[ref_key] = reference_value
      +
      297 return None
      +
      298 if schema[ref_key] is reference_value:
      +
      299 return None
      +
      300 if isinstance(schema[ref_key], dict) and isinstance(reference_value, dict):
      +
      301 for new_ref_key, new_ref_value in reference_value.items():
      +
      302 _merge_key(schema[ref_key], new_ref_key, new_ref_value)
      +
      303 return None
      +
      304 if ref_key in ("$id", "$schema"):
      +
      305 # For $id and $schema, keep the original value
      +
      306 return None
      +
      307 if isinstance(schema[ref_key], (str, int, float, bool)) and isinstance(reference_value, (str, int, float, bool)):
      +
      308 if schema[ref_key] == reference_value:
      +
      309 return None
      +
      310 raise ValueError(f"Duplicate keys in schema referenced by {ref_key} in JSON schema: {schema} is not supported")
      +
      311
      -
      -
      288 raise ValueError(f"Duplicate keys in schema referenced by {ref_key} in JSON schema: {schema} is not supported")
      -
      289
      -
      290
      -
      291def _recursive_resolve_reference(base_uri: str, schema: typing.Any, registry: Registry, memo: set[int]):
      -
      292 if id(schema) in memo:
      -
      293 return schema
      -
      294 memo.add(id(schema))
      -
      295 if isinstance(schema, list):
      -
      296 new_list = []
      -
      297 for item in schema:
      -
      298 new_list.append(_recursive_resolve_reference(base_uri, item, registry, memo))
      -
      299 schema.clear()
      -
      300 schema.extend(new_list)
      -
      301 if isinstance(schema, dict):
      -
      302 if "$id" in schema:
      -
      303 base_uri = _resolve_new_url(base_uri, schema["$id"])
      -
      304 resolver = registry.resolver(base_uri)
      -
      305 keys = ["$ref", "$dynamicRef"]
      -
      306 for key in keys:
      +
      + +
      313def _recursive_resolve_reference(base_uri: str, schema: typing.Any, registry: Registry, memo: set[int]):
      +
      314 if id(schema) in memo:
      +
      315 return schema
      +
      316 memo.add(id(schema))
      +
      317 if isinstance(schema, list):
      +
      318 new_list = []
      +
      319 for item in schema:
      +
      320 new_list.append(_recursive_resolve_reference(base_uri, item, registry, memo))
      +
      321 schema.clear()
      +
      322 schema.extend(new_list)
      +
      323 if isinstance(schema, dict):
      +
      324 if "$id" in schema:
      +
      325 base_uri = _resolve_new_url(base_uri, schema["$id"])
      +
      326 resolver = registry.resolver(base_uri)
      +
      327 keys = ["$ref", "$dynamicRef"]
      +
      328 for key in keys:
      +
      329 if key in schema:
      +
      330 _resolve_reference(schema, key, resolver)
      -
      -
      307 if key in schema:
      -
      308 _resolve_reference(schema, key, resolver)
      -
      309 for key, value in schema.items():
      -
      310 _recursive_resolve_reference(base_uri, value, registry, memo)
      -
      311 return schema
      -
      312
      -
      313def _resolve_reference(schema: dict[str, typing.Any], key: str, resolver: typing.Any):
      -
      314 resolved = resolver.lookup(schema[key])
      -
      315 if resolved.contents is schema:
      -
      316 raise ValueError(f"Circular self reference detected in JSON schema: {schema}")
      -
      317 schema[key] = resolved.contents
      +
      +
      331 for key, value in schema.items():
      +
      332 _recursive_resolve_reference(base_uri, value, registry, memo)
      +
      333 return schema
      +
      334
      +
      335def _resolve_reference(schema: dict[str, typing.Any], key: str, resolver: typing.Any):
      +
      336 resolved = resolver.lookup(schema[key])
      +
      337 if resolved.contents is schema:
      +
      338 raise ValueError(f"Circular self reference detected in JSON schema: {schema}")
      +
      339 schema[key] = resolved.contents
      typing.Type[typing.Any]|None annotation(self)
      Get the type annotation of the field.
      @@ -482,22 +506,24 @@
      bool required(self)
      Check if the field is required for the schema.
      An abstract schema that describes some data.
      Definition schema.py:78
      -
      typing.Any _get_literal(dict[str, typing.Any] schema)
      -
      _resolve_reference(dict[str, typing.Any] schema, str key, typing.Any resolver)
      -
      typing.Type _create_custom_type(typing.Type|None obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      -
      _merge_referenced_schema(dict[str, typing.Any] schema, set[int] memo)
      -
      None _validate_json_schema(dict[str, typing.Any] schema)
      -
      typing.Type[typing.Any|None] _obtain_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Directly obtain type information from this schema's type keyword.
      -
      typing.Type _convert_json_schema_to_our_schema(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Recursively handle all types needed to fully determine the type of a schema.
      -
      _merge_key(dict[str, typing.Any] schema, str ref_key, typing.Any reference_value)
      -
      typing.Type _handle_anyOf(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      -
      typing.Type _handle_literal(typing.Any literal, typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      -
      str _resolve_new_url(str uri, str ref)
      Adapted from https://github.com/python-jsonschema/referencing/blob/main/referencing/_core....
      -
      typing.Type _handle_list_and_union(typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Handle cases where the obtained type is a list or a union containing a list.
      -
      _recursive_resolve_reference(str base_uri, typing.Any schema, Registry registry, set[int] memo)
      -
      schemas.schema.Schema create_schema(dict[str, typing.Any] schema, registry=Registry())
      Create a Schema object from a JSON schema object.
      -
      typing.Type[typing.Any|None] _infer_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Infer more specific types.
      -
      _extract_fields_from_object_type(typing.Type object_type)
      + +
      typing.Any _get_literal(dict[str, typing.Any] schema)
      +
      typing.Type _create_custom_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      +
      _resolve_reference(dict[str, typing.Any] schema, str key, typing.Any resolver)
      +
      typing.Type _handle_str_with_metadata(dict[str, typing.Any] schema)
      Handle string type with metadata such as maxLength, minLength, and pattern.
      +
      _merge_referenced_schema(dict[str, typing.Any] schema, set[int] memo)
      +
      None _validate_json_schema(dict[str, typing.Any] schema)
      +
      typing.Type[typing.Any|None] _obtain_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Directly obtain type information from this schema's type keyword.
      +
      typing.Type _convert_json_schema_to_our_schema(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Recursively handle all types needed to fully determine the type of a schema.
      +
      _merge_key(dict[str, typing.Any] schema, str ref_key, typing.Any reference_value)
      +
      typing.Type _handle_anyOf(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      +
      typing.Type _handle_literal(typing.Any literal, typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      +
      str _resolve_new_url(str uri, str ref)
      Adapted from https://github.com/python-jsonschema/referencing/blob/main/referencing/_core....
      +
      typing.Type _handle_list_metadata(typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Handle cases where the obtained type is a list.
      +
      _recursive_resolve_reference(str base_uri, typing.Any schema, Registry registry, set[int] memo)
      +
      schemas.schema.Schema create_schema(dict[str, typing.Any] schema, registry=Registry())
      Create a Schema object from a JSON schema object.
      +
      typing.Type[typing.Any|None] _infer_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)
      Infer more specific types.
      +
      _extract_fields_from_object_type(typing.Type object_type)
      diff --git a/dev/namespaceformatron_1_1schemas_1_1json__schema.html b/dev/namespaceformatron_1_1schemas_1_1json__schema.html index da1dba2..82357ae 100644 --- a/dev/namespaceformatron_1_1schemas_1_1json__schema.html +++ b/dev/namespaceformatron_1_1schemas_1_1json__schema.html @@ -158,11 +158,14 @@   typing.Type _handle_literal (typing.Any literal, typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)   -typing.Type _create_custom_type (typing.Type|None obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) -  -typing.Type _handle_list_and_union (typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) - Handle cases where the obtained type is a list or a union containing a list.
      -  +typing.Type _handle_str_with_metadata (dict[str, typing.Any] schema) + Handle string type with metadata such as maxLength, minLength, and pattern.
      +  +typing.Type _create_custom_type (dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) +  +typing.Type _handle_list_metadata (typing.Type obtained_type, dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema) + Handle cases where the obtained type is a list.
      +  typing.Type[typing.Any|None] _obtain_type (dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)  Directly obtain type information from this schema's type keyword.
        @@ -212,12 +215,12 @@

      Definition at line 150 of file json_schema.py.

      +

      Definition at line 151 of file json_schema.py.

      - -

      ◆ _create_custom_type()

      + +

      ◆ _create_custom_type()

      @@ -275,7 +273,7 @@

      -

      Definition at line 167 of file json_schema.py.

      +

      Definition at line 168 of file json_schema.py.

      @@ -302,7 +300,7 @@

      -

      Definition at line 200 of file json_schema.py.

      +

      Definition at line 215 of file json_schema.py.

      @@ -333,12 +331,12 @@

      -

      Definition at line 174 of file json_schema.py.

      +

      Definition at line 175 of file json_schema.py.

      - -

      ◆ _handle_list_and_union()

      + +

      ◆ _handle_list_metadata()

      @@ -445,7 +472,7 @@

      Definition at line 187 of file json_schema.py.

      +

      Definition at line 188 of file json_schema.py.

      @@ -481,7 +508,7 @@

      -

      Definition at line 307 of file json_schema.py.

      +

      Definition at line 331 of file json_schema.py.

      @@ -512,7 +539,7 @@

      -

      Definition at line 288 of file json_schema.py.

      +

      Definition at line 312 of file json_schema.py.

      @@ -545,7 +572,7 @@

      Definition at line 251 of file json_schema.py.

      +

      Definition at line 275 of file json_schema.py.

      @@ -586,7 +613,7 @@

      -

      Definition at line 326 of file json_schema.py.

      +

      Definition at line 350 of file json_schema.py.

      @@ -619,7 +646,7 @@

      https://github.com/python-jsonschema/referencing/blob/main/referencing/_core.py#L667.

      -

      Definition at line 127 of file json_schema.py.

      +

      Definition at line 128 of file json_schema.py.

      @@ -655,7 +682,7 @@

      -

      Definition at line 348 of file json_schema.py.

      +

      Definition at line 372 of file json_schema.py.

      @@ -682,7 +709,7 @@

      -

      Definition at line 132 of file json_schema.py.

      +

      Definition at line 133 of file json_schema.py.

      @@ -709,6 +736,7 @@

      Definition at line 109 of file json_schema.py.

      +

      Definition at line 110 of file json_schema.py.

      diff --git a/dev/namespaceformatron_1_1schemas_1_1json__schema.js b/dev/namespaceformatron_1_1schemas_1_1json__schema.js index 2dcce05..5cc7b23 100644 --- a/dev/namespaceformatron_1_1schemas_1_1json__schema.js +++ b/dev/namespaceformatron_1_1schemas_1_1json__schema.js @@ -2,12 +2,13 @@ var namespaceformatron_1_1schemas_1_1json__schema = [ [ "FieldInfo", "classformatron_1_1schemas_1_1json__schema_1_1FieldInfo.html", "classformatron_1_1schemas_1_1json__schema_1_1FieldInfo" ], [ "_convert_json_schema_to_our_schema", "namespaceformatron_1_1schemas_1_1json__schema.html#a5f4856cb7c30aa340432d386836f25be", null ], - [ "_create_custom_type", "namespaceformatron_1_1schemas_1_1json__schema.html#a38fed431c5191f57f9db65d4a744a96e", null ], + [ "_create_custom_type", "namespaceformatron_1_1schemas_1_1json__schema.html#a15dc86b65c90ac8423c8989054f8c9e5", null ], [ "_extract_fields_from_object_type", "namespaceformatron_1_1schemas_1_1json__schema.html#af20251afc012b955e29c92922fcc83ef", null ], [ "_get_literal", "namespaceformatron_1_1schemas_1_1json__schema.html#a096ea829025ebd26b9ae165c17cf8976", null ], [ "_handle_anyOf", "namespaceformatron_1_1schemas_1_1json__schema.html#a6f88bf4e3c48d96b060ccdcbd80b3328", null ], - [ "_handle_list_and_union", "namespaceformatron_1_1schemas_1_1json__schema.html#aa83ea66f3e98cec63e9ff7d2788345af", null ], + [ "_handle_list_metadata", "namespaceformatron_1_1schemas_1_1json__schema.html#aa80f28ccaf9ed4b404564f629139f9d1", null ], [ "_handle_literal", "namespaceformatron_1_1schemas_1_1json__schema.html#a969bd30894a578428528b94b0f82f1ba", null ], + [ "_handle_str_with_metadata", "namespaceformatron_1_1schemas_1_1json__schema.html#a32e51b70be50d55d3944e6c700bbd1a5", null ], [ "_infer_type", "namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2", null ], [ "_merge_key", "namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135", null ], [ "_merge_referenced_schema", "namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30", null ], diff --git a/dev/namespacemembers.html b/dev/namespacemembers.html index 1d1e3af..488f8e0 100644 --- a/dev/namespacemembers.html +++ b/dev/namespacemembers.html @@ -124,13 +124,14 @@

      - _ -

      • _autodetect_processors() : formatron.integrations._utils
      • _convert_json_schema_to_our_schema() : formatron.schemas.json_schema
      • _counter : formatron.schemas.json_schema
      • -
      • _create_custom_type() : formatron.schemas.json_schema
      • +
      • _create_custom_type() : formatron.schemas.json_schema
      • _extract_fields_from_object_type() : formatron.schemas.json_schema
      • _generate_kbnf_grammar() : formatron.formats.json
      • _get_literal() : formatron.schemas.json_schema
      • _handle_anyOf() : formatron.schemas.json_schema
      • -
      • _handle_list_and_union() : formatron.schemas.json_schema
      • +
      • _handle_list_metadata() : formatron.schemas.json_schema
      • _handle_literal() : formatron.schemas.json_schema
      • +
      • _handle_str_with_metadata() : formatron.schemas.json_schema
      • _infer_type() : formatron.schemas.dict_inference, formatron.schemas.json_schema
      • _merge_key() : formatron.schemas.json_schema
      • _merge_referenced_schema() : formatron.schemas.json_schema
      • diff --git a/dev/namespacemembers_func.html b/dev/namespacemembers_func.html index cc58eca..0bea820 100644 --- a/dev/namespacemembers_func.html +++ b/dev/namespacemembers_func.html @@ -123,13 +123,14 @@

        - _ -

        • _autodetect_processors() : formatron.integrations._utils
        • _convert_json_schema_to_our_schema() : formatron.schemas.json_schema
        • -
        • _create_custom_type() : formatron.schemas.json_schema
        • +
        • _create_custom_type() : formatron.schemas.json_schema
        • _extract_fields_from_object_type() : formatron.schemas.json_schema
        • _generate_kbnf_grammar() : formatron.formats.json
        • _get_literal() : formatron.schemas.json_schema
        • _handle_anyOf() : formatron.schemas.json_schema
        • -
        • _handle_list_and_union() : formatron.schemas.json_schema
        • +
        • _handle_list_metadata() : formatron.schemas.json_schema
        • _handle_literal() : formatron.schemas.json_schema
        • +
        • _handle_str_with_metadata() : formatron.schemas.json_schema
        • _infer_type() : formatron.schemas.dict_inference, formatron.schemas.json_schema
        • _merge_key() : formatron.schemas.json_schema
        • _merge_referenced_schema() : formatron.schemas.json_schema
        • diff --git a/dev/navtreedata.js b/dev/navtreedata.js index a808400..68cf89b 100644 --- a/dev/navtreedata.js +++ b/dev/navtreedata.js @@ -53,7 +53,7 @@ var NAVTREEINDEX = [ "RWKV_8py.html", "classformatron_1_1integrations_1_1exllamav2_1_1FormatterFilter.html#ac6f22aff80d80035bdd2118feff9f965", -"regex_8py_source.html" +"pydantic_8py_source.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/dev/navtreeindex1.js b/dev/navtreeindex1.js index a6e7d75..1121f68 100644 --- a/dev/navtreeindex1.js +++ b/dev/navtreeindex1.js @@ -165,21 +165,22 @@ var NAVTREEINDEX1 = "json_8py_source.html":[2,0,0,0,0,1], "json__schema_8py.html":[2,0,0,0,2,2], "json__schema_8py.html#a096ea829025ebd26b9ae165c17cf8976":[2,0,0,0,2,2,4], -"json__schema_8py.html#a24b516494672cc5dbbf7300ea65479b1":[2,0,0,0,2,2,14], -"json__schema_8py.html#a38fed431c5191f57f9db65d4a744a96e":[2,0,0,0,2,2,2], -"json__schema_8py.html#a45c9b97319a58c2013b8e3f10ad78c30":[2,0,0,0,2,2,10], -"json__schema_8py.html#a51aa68e29951e6b295844b13177b7d6a":[2,0,0,0,2,2,15], -"json__schema_8py.html#a544d74edf1fdccbad9e216d9ff028a20":[2,0,0,0,2,2,11], +"json__schema_8py.html#a15dc86b65c90ac8423c8989054f8c9e5":[2,0,0,0,2,2,2], +"json__schema_8py.html#a24b516494672cc5dbbf7300ea65479b1":[2,0,0,0,2,2,15], +"json__schema_8py.html#a32e51b70be50d55d3944e6c700bbd1a5":[2,0,0,0,2,2,8], +"json__schema_8py.html#a45c9b97319a58c2013b8e3f10ad78c30":[2,0,0,0,2,2,11], +"json__schema_8py.html#a51aa68e29951e6b295844b13177b7d6a":[2,0,0,0,2,2,16], +"json__schema_8py.html#a544d74edf1fdccbad9e216d9ff028a20":[2,0,0,0,2,2,12], "json__schema_8py.html#a5f4856cb7c30aa340432d386836f25be":[2,0,0,0,2,2,1], -"json__schema_8py.html#a5fcddd43a5f64374b5b75d4aafeb9135":[2,0,0,0,2,2,9], -"json__schema_8py.html#a63e9b97210ccf01282f81aa529a86e50":[2,0,0,0,2,2,17], +"json__schema_8py.html#a5fcddd43a5f64374b5b75d4aafeb9135":[2,0,0,0,2,2,10], +"json__schema_8py.html#a63e9b97210ccf01282f81aa529a86e50":[2,0,0,0,2,2,18], "json__schema_8py.html#a6f88bf4e3c48d96b060ccdcbd80b3328":[2,0,0,0,2,2,5], "json__schema_8py.html#a969bd30894a578428528b94b0f82f1ba":[2,0,0,0,2,2,7], -"json__schema_8py.html#a9dc9dc267e5dd7b6581e2367e9238152":[2,0,0,0,2,2,13], -"json__schema_8py.html#aa83ea66f3e98cec63e9ff7d2788345af":[2,0,0,0,2,2,6], -"json__schema_8py.html#aaba012c79d101be93f4d96588c9f8cc2":[2,0,0,0,2,2,12], -"json__schema_8py.html#ab2aeae10eb93ef3a3ca1c50013c6b380":[2,0,0,0,2,2,16], -"json__schema_8py.html#ac742e1e581efccb6cc9742e7a23c25c2":[2,0,0,0,2,2,8], +"json__schema_8py.html#a9dc9dc267e5dd7b6581e2367e9238152":[2,0,0,0,2,2,14], +"json__schema_8py.html#aa80f28ccaf9ed4b404564f629139f9d1":[2,0,0,0,2,2,6], +"json__schema_8py.html#aaba012c79d101be93f4d96588c9f8cc2":[2,0,0,0,2,2,13], +"json__schema_8py.html#ab2aeae10eb93ef3a3ca1c50013c6b380":[2,0,0,0,2,2,17], +"json__schema_8py.html#ac742e1e581efccb6cc9742e7a23c25c2":[2,0,0,0,2,2,9], "json__schema_8py.html#af20251afc012b955e29c92922fcc83ef":[2,0,0,0,2,2,3], "json__schema_8py_source.html":[2,0,0,0,2,2], "namespaceformatron.html":[0,0,0], @@ -220,21 +221,22 @@ var NAVTREEINDEX1 = "namespaceformatron_1_1schemas_1_1dict__inference.html#ad5cac24e76dc097a995f31d3d0ff9efc":[0,0,0,5,0,1], "namespaceformatron_1_1schemas_1_1json__schema.html":[0,0,0,5,1], "namespaceformatron_1_1schemas_1_1json__schema.html#a096ea829025ebd26b9ae165c17cf8976":[0,0,0,5,1,4], -"namespaceformatron_1_1schemas_1_1json__schema.html#a24b516494672cc5dbbf7300ea65479b1":[0,0,0,5,1,14], -"namespaceformatron_1_1schemas_1_1json__schema.html#a38fed431c5191f57f9db65d4a744a96e":[0,0,0,5,1,2], -"namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30":[0,0,0,5,1,10], -"namespaceformatron_1_1schemas_1_1json__schema.html#a51aa68e29951e6b295844b13177b7d6a":[0,0,0,5,1,15], -"namespaceformatron_1_1schemas_1_1json__schema.html#a544d74edf1fdccbad9e216d9ff028a20":[0,0,0,5,1,11], +"namespaceformatron_1_1schemas_1_1json__schema.html#a15dc86b65c90ac8423c8989054f8c9e5":[0,0,0,5,1,2], +"namespaceformatron_1_1schemas_1_1json__schema.html#a24b516494672cc5dbbf7300ea65479b1":[0,0,0,5,1,15], +"namespaceformatron_1_1schemas_1_1json__schema.html#a32e51b70be50d55d3944e6c700bbd1a5":[0,0,0,5,1,8], +"namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30":[0,0,0,5,1,11], +"namespaceformatron_1_1schemas_1_1json__schema.html#a51aa68e29951e6b295844b13177b7d6a":[0,0,0,5,1,16], +"namespaceformatron_1_1schemas_1_1json__schema.html#a544d74edf1fdccbad9e216d9ff028a20":[0,0,0,5,1,12], "namespaceformatron_1_1schemas_1_1json__schema.html#a5f4856cb7c30aa340432d386836f25be":[0,0,0,5,1,1], -"namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135":[0,0,0,5,1,9], -"namespaceformatron_1_1schemas_1_1json__schema.html#a63e9b97210ccf01282f81aa529a86e50":[0,0,0,5,1,17], +"namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135":[0,0,0,5,1,10], +"namespaceformatron_1_1schemas_1_1json__schema.html#a63e9b97210ccf01282f81aa529a86e50":[0,0,0,5,1,18], "namespaceformatron_1_1schemas_1_1json__schema.html#a6f88bf4e3c48d96b060ccdcbd80b3328":[0,0,0,5,1,5], "namespaceformatron_1_1schemas_1_1json__schema.html#a969bd30894a578428528b94b0f82f1ba":[0,0,0,5,1,7], -"namespaceformatron_1_1schemas_1_1json__schema.html#a9dc9dc267e5dd7b6581e2367e9238152":[0,0,0,5,1,13], -"namespaceformatron_1_1schemas_1_1json__schema.html#aa83ea66f3e98cec63e9ff7d2788345af":[0,0,0,5,1,6], -"namespaceformatron_1_1schemas_1_1json__schema.html#aaba012c79d101be93f4d96588c9f8cc2":[0,0,0,5,1,12], -"namespaceformatron_1_1schemas_1_1json__schema.html#ab2aeae10eb93ef3a3ca1c50013c6b380":[0,0,0,5,1,16], -"namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2":[0,0,0,5,1,8], +"namespaceformatron_1_1schemas_1_1json__schema.html#a9dc9dc267e5dd7b6581e2367e9238152":[0,0,0,5,1,14], +"namespaceformatron_1_1schemas_1_1json__schema.html#aa80f28ccaf9ed4b404564f629139f9d1":[0,0,0,5,1,6], +"namespaceformatron_1_1schemas_1_1json__schema.html#aaba012c79d101be93f4d96588c9f8cc2":[0,0,0,5,1,13], +"namespaceformatron_1_1schemas_1_1json__schema.html#ab2aeae10eb93ef3a3ca1c50013c6b380":[0,0,0,5,1,17], +"namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2":[0,0,0,5,1,9], "namespaceformatron_1_1schemas_1_1json__schema.html#af20251afc012b955e29c92922fcc83ef":[0,0,0,5,1,3], "namespaceformatron_1_1schemas_1_1pydantic.html":[0,0,0,5,2], "namespaceformatron_1_1schemas_1_1pydantic.html#a0b1aeb9a63626b0e782bc4b9e1ce18cf":[0,0,0,5,2,2], @@ -247,7 +249,5 @@ var NAVTREEINDEX1 = "pages.html":[], "pydantic_8py.html":[2,0,0,0,2,3], "pydantic_8py.html#a0b1aeb9a63626b0e782bc4b9e1ce18cf":[2,0,0,0,2,3,2], -"pydantic_8py.html#acf48165db355935623fdcd27fafe2b27":[2,0,0,0,2,3,3], -"pydantic_8py_source.html":[2,0,0,0,2,3], -"regex_8py.html":[2,0,0,0,0,2] +"pydantic_8py.html#acf48165db355935623fdcd27fafe2b27":[2,0,0,0,2,3,3] }; diff --git a/dev/navtreeindex2.js b/dev/navtreeindex2.js index 051068a..f16c6d2 100644 --- a/dev/navtreeindex2.js +++ b/dev/navtreeindex2.js @@ -1,5 +1,7 @@ var NAVTREEINDEX2 = { +"pydantic_8py_source.html":[2,0,0,0,2,3], +"regex_8py.html":[2,0,0,0,0,2], "regex_8py_source.html":[2,0,0,0,0,2], "schema_8py.html":[2,0,0,0,2,4], "schema_8py_source.html":[2,0,0,0,2,4], diff --git a/dev/search/all_0.js b/dev/search/all_0.js index b2808fb..d344a46 100644 --- a/dev/search/all_0.js +++ b/dev/search/all_0.js @@ -18,7 +18,7 @@ var searchData= ['_5fconfigs_15',['_configs',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#aef140b4278cf9892faa3644bd4c2ca99',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], ['_5fconvert_5fjson_5fschema_5fto_5four_5fschema_16',['_convert_json_schema_to_our_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a5f4856cb7c30aa340432d386836f25be',1,'formatron::schemas::json_schema']]], ['_5fcounter_17',['_counter',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a937af7ea452c8183053dc3e12cd44e1c',1,'formatron.formatter.FormatterBuilder._counter'],['../namespaceformatron_1_1schemas_1_1json__schema.html#a63e9b97210ccf01282f81aa529a86e50',1,'formatron.schemas.json_schema._counter']]], - ['_5fcreate_5fcustom_5ftype_18',['_create_custom_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a38fed431c5191f57f9db65d4a744a96e',1,'formatron::schemas::json_schema']]], + ['_5fcreate_5fcustom_5ftype_18',['_create_custom_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a15dc86b65c90ac8423c8989054f8c9e5',1,'formatron::schemas::json_schema']]], ['_5fcreate_5fnonterminal_19',['_create_nonterminal',['../classformatron_1_1formatter_1_1FormatterBuilder.html#aefe18951a4dc243909a22dd49b62fe21',1,'formatron::formatter::FormatterBuilder']]], ['_5fdebug_5fcounter_20',['_debug_counter',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#a83ec1613155b800bd9d1b0f012dff371',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], ['_5fdecode_5fcallback_21',['_decode_callback',['../classformatron_1_1formatter_1_1Formatter.html#a9535e6eb6b8001d6f5fc90ee549ecacb',1,'formatron::formatter::Formatter']]], @@ -34,39 +34,40 @@ var searchData= ['_5fget_5fliteral_31',['_get_literal',['../namespaceformatron_1_1schemas_1_1json__schema.html#a096ea829025ebd26b9ae165c17cf8976',1,'formatron::schemas::json_schema']]], ['_5fgrammar_5fstr_32',['_grammar_str',['../classformatron_1_1formatter_1_1Formatter.html#aac1bf058d35745650f1838ea64b66ad2',1,'formatron::formatter::Formatter']]], ['_5fhandle_5fanyof_33',['_handle_anyOf',['../namespaceformatron_1_1schemas_1_1json__schema.html#a6f88bf4e3c48d96b060ccdcbd80b3328',1,'formatron::schemas::json_schema']]], - ['_5fhandle_5flist_5fand_5funion_34',['_handle_list_and_union',['../namespaceformatron_1_1schemas_1_1json__schema.html#aa83ea66f3e98cec63e9ff7d2788345af',1,'formatron::schemas::json_schema']]], + ['_5fhandle_5flist_5fmetadata_34',['_handle_list_metadata',['../namespaceformatron_1_1schemas_1_1json__schema.html#aa80f28ccaf9ed4b404564f629139f9d1',1,'formatron::schemas::json_schema']]], ['_5fhandle_5fliteral_35',['_handle_literal',['../namespaceformatron_1_1schemas_1_1json__schema.html#a969bd30894a578428528b94b0f82f1ba',1,'formatron::schemas::json_schema']]], - ['_5finfer_5ftype_36',['_infer_type',['../namespaceformatron_1_1schemas_1_1dict__inference.html#ad5cac24e76dc097a995f31d3d0ff9efc',1,'formatron.schemas.dict_inference._infer_type()'],['../namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2',1,'formatron.schemas.json_schema._infer_type()']]], - ['_5finstance_5fid_37',['_instance_id',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a8a5b16f094013fb3926acfadd30c4456',1,'formatron::formatter::FormatterBuilder']]], - ['_5fiter_38',['_iter',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#ad7cf01b455ab6847df5c96912a5d2ae9',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], - ['_5flast_5finput_5fid_5flength_39',['_last_input_id_length',['../classformatron_1_1integrations_1_1transformers_1_1FormattersLogitsProcessor.html#a24c02e28fdbae4450af7527f93400fa7',1,'formatron.integrations.transformers.FormattersLogitsProcessor._last_input_id_length'],['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#aa6549c4f4130d1778f69e3e99942a87b',1,'formatron.integrations.vllm.FormattersLogitsProcessor._last_input_id_length']]], - ['_5fliteral_40',['_literal',['../classformatron_1_1extractor_1_1LiteralExtractor.html#a333e99fa481e15e9d907d35cda8ee728',1,'formatron::extractor::LiteralExtractor']]], - ['_5fmain_5frule_41',['_main_rule',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a3c3ba1934b9207c412202c5ef29b002a',1,'formatron::formatter::FormatterBuilder']]], - ['_5fmerge_5fkey_42',['_merge_key',['../namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135',1,'formatron::schemas::json_schema']]], - ['_5fmerge_5freferenced_5fschema_43',['_merge_referenced_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30',1,'formatron::schemas::json_schema']]], - ['_5fmetadata_44',['_metadata',['../classformatron_1_1schemas_1_1schema_1_1TypeWithMetadata.html#a34312895f9d497d5c35cf372f9c498f3',1,'formatron::schemas::schema::TypeWithMetadata']]], - ['_5fmultiple_5freplace_45',['_multiple_replace',['../namespaceformatron_1_1integrations_1_1__utils.html#abf64c53a323448aedc1361d01515226a',1,'formatron::integrations::_utils']]], - ['_5fnonterminal_46',['_nonterminal',['../classformatron_1_1extractor_1_1NonterminalExtractor.html#a5c4c968b45e328b8caa4b2795ecc00fe',1,'formatron::extractor::NonterminalExtractor']]], - ['_5fnonterminal_5fto_5fextractor_47',['_nonterminal_to_extractor',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a870a5075cfd903c77e5ee58b6c304e03',1,'formatron::formatter::FormatterBuilder']]], - ['_5fobtain_5faccepted_5foutput_48',['_obtain_accepted_output',['../classformatron_1_1formatter_1_1Formatter.html#ae4be840a942f608c1a0c256dbf68901b',1,'formatron::formatter::Formatter']]], - ['_5fobtain_5ftype_49',['_obtain_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a544d74edf1fdccbad9e216d9ff028a20',1,'formatron::schemas::json_schema']]], - ['_5fon_5fcompletion_50',['_on_completion',['../classformatron_1_1formatter_1_1FormatterBase.html#a469880a21192928e82823cc340a22ce2',1,'formatron.formatter.FormatterBase._on_completion()'],['../classformatron_1_1formatter_1_1Formatter.html#ac6f7e3f96c6318689c5cd0d44a1cdde7',1,'formatron.formatter.Formatter._on_completion()']]], - ['_5fpass_5ftokens_51',['_pass_tokens',['../classformatron_1_1integrations_1_1exllamav2_1_1FormatterFilter.html#a370eaf641dd803b2759b4e5fc7f74a1c',1,'formatron::integrations::exllamav2::FormatterFilter']]], - ['_5frecursive_5fresolve_5freference_52',['_recursive_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#aaba012c79d101be93f4d96588c9f8cc2',1,'formatron::schemas::json_schema']]], - ['_5fregex_53',['_regex',['../classformatron_1_1formats_1_1regex_1_1RegexExtractor.html#a1df60401933eef6cf5a1ff041f11ec46',1,'formatron::formats::regex::RegexExtractor']]], - ['_5fregister_5fall_5fpredefined_5ftypes_54',['_register_all_predefined_types',['../namespaceformatron_1_1formats_1_1json.html#a311b750cba3838aee622b9809888f051',1,'formatron::formats::json']]], - ['_5frequired_55',['_required',['../classformatron_1_1schemas_1_1json__schema_1_1FieldInfo.html#a8ac1acf32bb578e121ef28a433857726',1,'formatron::schemas::json_schema::FieldInfo']]], - ['_5fresolve_5fnew_5furl_56',['_resolve_new_url',['../namespaceformatron_1_1schemas_1_1json__schema.html#a9dc9dc267e5dd7b6581e2367e9238152',1,'formatron::schemas::json_schema']]], - ['_5fresolve_5freference_57',['_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#a24b516494672cc5dbbf7300ea65479b1',1,'formatron::schemas::json_schema']]], - ['_5frule_5fstr_58',['_rule_str',['../classformatron_1_1formats_1_1json_1_1JsonExtractor.html#aecf88428e414da080f11ed0ab1e13a65',1,'formatron::formats::json::JsonExtractor']]], - ['_5frules_59',['_rules',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a62c61ad02e40526b73ca460d0cf1d12c',1,'formatron::formatter::FormatterBuilder']]], - ['_5fstring_60',['_string',['../classformatron_1_1extractor_1_1SubstringExtractor.html#a3781b75c6c8c12f89fd70ea405e11293',1,'formatron::extractor::SubstringExtractor']]], - ['_5fsuffix_5fautomaton_61',['_suffix_automaton',['../classformatron_1_1extractor_1_1SubstringExtractor.html#a97cb3468674873adfc85bc17ff1a9a97',1,'formatron::extractor::SubstringExtractor']]], - ['_5fto_5fnext_5fbatch_5fstep_62',['_to_next_batch_step',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#ab87fea11f930a33130cecadd8cdf0cc6',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], - ['_5fto_5fobject_63',['_to_object',['../classformatron_1_1formats_1_1json_1_1JsonExtractor.html#a2e72d806c8dffc0136231b81eb724355',1,'formatron::formats::json::JsonExtractor']]], - ['_5ftoken_5fid_5for_5fbytes_64',['_token_id_or_bytes',['../classformatron_1_1formatter_1_1Formatter.html#adf232d46083546ae3363e4ce007a335b',1,'formatron::formatter::Formatter']]], - ['_5ftype_65',['_type',['../classformatron_1_1schemas_1_1schema_1_1TypeWithMetadata.html#a4d1ea7d59f700634eb2545ce3d6cf324',1,'formatron::schemas::schema::TypeWithMetadata']]], - ['_5ftype_5fto_5fnonterminals_66',['_type_to_nonterminals',['../namespaceformatron_1_1formats_1_1json.html#a003a1dac95634ac70f86d51e768945a4',1,'formatron::formats::json']]], - ['_5futils_2epy_67',['_utils.py',['../__utils_8py.html',1,'']]], - ['_5fvalidate_5fjson_5fschema_68',['_validate_json_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a51aa68e29951e6b295844b13177b7d6a',1,'formatron::schemas::json_schema']]] + ['_5fhandle_5fstr_5fwith_5fmetadata_36',['_handle_str_with_metadata',['../namespaceformatron_1_1schemas_1_1json__schema.html#a32e51b70be50d55d3944e6c700bbd1a5',1,'formatron::schemas::json_schema']]], + ['_5finfer_5ftype_37',['_infer_type',['../namespaceformatron_1_1schemas_1_1dict__inference.html#ad5cac24e76dc097a995f31d3d0ff9efc',1,'formatron.schemas.dict_inference._infer_type()'],['../namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2',1,'formatron.schemas.json_schema._infer_type()']]], + ['_5finstance_5fid_38',['_instance_id',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a8a5b16f094013fb3926acfadd30c4456',1,'formatron::formatter::FormatterBuilder']]], + ['_5fiter_39',['_iter',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#ad7cf01b455ab6847df5c96912a5d2ae9',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], + ['_5flast_5finput_5fid_5flength_40',['_last_input_id_length',['../classformatron_1_1integrations_1_1transformers_1_1FormattersLogitsProcessor.html#a24c02e28fdbae4450af7527f93400fa7',1,'formatron.integrations.transformers.FormattersLogitsProcessor._last_input_id_length'],['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#aa6549c4f4130d1778f69e3e99942a87b',1,'formatron.integrations.vllm.FormattersLogitsProcessor._last_input_id_length']]], + ['_5fliteral_41',['_literal',['../classformatron_1_1extractor_1_1LiteralExtractor.html#a333e99fa481e15e9d907d35cda8ee728',1,'formatron::extractor::LiteralExtractor']]], + ['_5fmain_5frule_42',['_main_rule',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a3c3ba1934b9207c412202c5ef29b002a',1,'formatron::formatter::FormatterBuilder']]], + ['_5fmerge_5fkey_43',['_merge_key',['../namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135',1,'formatron::schemas::json_schema']]], + ['_5fmerge_5freferenced_5fschema_44',['_merge_referenced_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30',1,'formatron::schemas::json_schema']]], + ['_5fmetadata_45',['_metadata',['../classformatron_1_1schemas_1_1schema_1_1TypeWithMetadata.html#a34312895f9d497d5c35cf372f9c498f3',1,'formatron::schemas::schema::TypeWithMetadata']]], + ['_5fmultiple_5freplace_46',['_multiple_replace',['../namespaceformatron_1_1integrations_1_1__utils.html#abf64c53a323448aedc1361d01515226a',1,'formatron::integrations::_utils']]], + ['_5fnonterminal_47',['_nonterminal',['../classformatron_1_1extractor_1_1NonterminalExtractor.html#a5c4c968b45e328b8caa4b2795ecc00fe',1,'formatron::extractor::NonterminalExtractor']]], + ['_5fnonterminal_5fto_5fextractor_48',['_nonterminal_to_extractor',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a870a5075cfd903c77e5ee58b6c304e03',1,'formatron::formatter::FormatterBuilder']]], + ['_5fobtain_5faccepted_5foutput_49',['_obtain_accepted_output',['../classformatron_1_1formatter_1_1Formatter.html#ae4be840a942f608c1a0c256dbf68901b',1,'formatron::formatter::Formatter']]], + ['_5fobtain_5ftype_50',['_obtain_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a544d74edf1fdccbad9e216d9ff028a20',1,'formatron::schemas::json_schema']]], + ['_5fon_5fcompletion_51',['_on_completion',['../classformatron_1_1formatter_1_1FormatterBase.html#a469880a21192928e82823cc340a22ce2',1,'formatron.formatter.FormatterBase._on_completion()'],['../classformatron_1_1formatter_1_1Formatter.html#ac6f7e3f96c6318689c5cd0d44a1cdde7',1,'formatron.formatter.Formatter._on_completion()']]], + ['_5fpass_5ftokens_52',['_pass_tokens',['../classformatron_1_1integrations_1_1exllamav2_1_1FormatterFilter.html#a370eaf641dd803b2759b4e5fc7f74a1c',1,'formatron::integrations::exllamav2::FormatterFilter']]], + ['_5frecursive_5fresolve_5freference_53',['_recursive_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#aaba012c79d101be93f4d96588c9f8cc2',1,'formatron::schemas::json_schema']]], + ['_5fregex_54',['_regex',['../classformatron_1_1formats_1_1regex_1_1RegexExtractor.html#a1df60401933eef6cf5a1ff041f11ec46',1,'formatron::formats::regex::RegexExtractor']]], + ['_5fregister_5fall_5fpredefined_5ftypes_55',['_register_all_predefined_types',['../namespaceformatron_1_1formats_1_1json.html#a311b750cba3838aee622b9809888f051',1,'formatron::formats::json']]], + ['_5frequired_56',['_required',['../classformatron_1_1schemas_1_1json__schema_1_1FieldInfo.html#a8ac1acf32bb578e121ef28a433857726',1,'formatron::schemas::json_schema::FieldInfo']]], + ['_5fresolve_5fnew_5furl_57',['_resolve_new_url',['../namespaceformatron_1_1schemas_1_1json__schema.html#a9dc9dc267e5dd7b6581e2367e9238152',1,'formatron::schemas::json_schema']]], + ['_5fresolve_5freference_58',['_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#a24b516494672cc5dbbf7300ea65479b1',1,'formatron::schemas::json_schema']]], + ['_5frule_5fstr_59',['_rule_str',['../classformatron_1_1formats_1_1json_1_1JsonExtractor.html#aecf88428e414da080f11ed0ab1e13a65',1,'formatron::formats::json::JsonExtractor']]], + ['_5frules_60',['_rules',['../classformatron_1_1formatter_1_1FormatterBuilder.html#a62c61ad02e40526b73ca460d0cf1d12c',1,'formatron::formatter::FormatterBuilder']]], + ['_5fstring_61',['_string',['../classformatron_1_1extractor_1_1SubstringExtractor.html#a3781b75c6c8c12f89fd70ea405e11293',1,'formatron::extractor::SubstringExtractor']]], + ['_5fsuffix_5fautomaton_62',['_suffix_automaton',['../classformatron_1_1extractor_1_1SubstringExtractor.html#a97cb3468674873adfc85bc17ff1a9a97',1,'formatron::extractor::SubstringExtractor']]], + ['_5fto_5fnext_5fbatch_5fstep_63',['_to_next_batch_step',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#ab87fea11f930a33130cecadd8cdf0cc6',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], + ['_5fto_5fobject_64',['_to_object',['../classformatron_1_1formats_1_1json_1_1JsonExtractor.html#a2e72d806c8dffc0136231b81eb724355',1,'formatron::formats::json::JsonExtractor']]], + ['_5ftoken_5fid_5for_5fbytes_65',['_token_id_or_bytes',['../classformatron_1_1formatter_1_1Formatter.html#adf232d46083546ae3363e4ce007a335b',1,'formatron::formatter::Formatter']]], + ['_5ftype_66',['_type',['../classformatron_1_1schemas_1_1schema_1_1TypeWithMetadata.html#a4d1ea7d59f700634eb2545ce3d6cf324',1,'formatron::schemas::schema::TypeWithMetadata']]], + ['_5ftype_5fto_5fnonterminals_67',['_type_to_nonterminals',['../namespaceformatron_1_1formats_1_1json.html#a003a1dac95634ac70f86d51e768945a4',1,'formatron::formats::json']]], + ['_5futils_2epy_68',['_utils.py',['../__utils_8py.html',1,'']]], + ['_5fvalidate_5fjson_5fschema_69',['_validate_json_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a51aa68e29951e6b295844b13177b7d6a',1,'formatron::schemas::json_schema']]] ]; diff --git a/dev/search/functions_0.js b/dev/search/functions_0.js index a2fb48c..7fcc543 100644 --- a/dev/search/functions_0.js +++ b/dev/search/functions_0.js @@ -9,25 +9,26 @@ var searchData= ['_5fassert_5fcapture_5fname_5fvalid_6',['_assert_capture_name_valid',['../classformatron_1_1formatter_1_1FormatterBuilder.html#ab5ad5186f55d35e3abd2d5c213302a25',1,'formatron::formatter::FormatterBuilder']]], ['_5fautodetect_5fprocessors_7',['_autodetect_processors',['../namespaceformatron_1_1integrations_1_1__utils.html#a76ded8fc3ee5ad369ec55b595ae74153',1,'formatron::integrations::_utils']]], ['_5fconvert_5fjson_5fschema_5fto_5four_5fschema_8',['_convert_json_schema_to_our_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a5f4856cb7c30aa340432d386836f25be',1,'formatron::schemas::json_schema']]], - ['_5fcreate_5fcustom_5ftype_9',['_create_custom_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a38fed431c5191f57f9db65d4a744a96e',1,'formatron::schemas::json_schema']]], + ['_5fcreate_5fcustom_5ftype_9',['_create_custom_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a15dc86b65c90ac8423c8989054f8c9e5',1,'formatron::schemas::json_schema']]], ['_5fcreate_5fnonterminal_10',['_create_nonterminal',['../classformatron_1_1formatter_1_1FormatterBuilder.html#aefe18951a4dc243909a22dd49b62fe21',1,'formatron::formatter::FormatterBuilder']]], ['_5fextract_5ffields_5ffrom_5fobject_5ftype_11',['_extract_fields_from_object_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#af20251afc012b955e29c92922fcc83ef',1,'formatron::schemas::json_schema']]], ['_5fgenerate_5fkbnf_5fgrammar_12',['_generate_kbnf_grammar',['../namespaceformatron_1_1formats_1_1json.html#af4331f1a7679439503d898b2356d289e',1,'formatron::formats::json']]], ['_5fget_5fliteral_13',['_get_literal',['../namespaceformatron_1_1schemas_1_1json__schema.html#a096ea829025ebd26b9ae165c17cf8976',1,'formatron::schemas::json_schema']]], ['_5fhandle_5fanyof_14',['_handle_anyOf',['../namespaceformatron_1_1schemas_1_1json__schema.html#a6f88bf4e3c48d96b060ccdcbd80b3328',1,'formatron::schemas::json_schema']]], - ['_5fhandle_5flist_5fand_5funion_15',['_handle_list_and_union',['../namespaceformatron_1_1schemas_1_1json__schema.html#aa83ea66f3e98cec63e9ff7d2788345af',1,'formatron::schemas::json_schema']]], + ['_5fhandle_5flist_5fmetadata_15',['_handle_list_metadata',['../namespaceformatron_1_1schemas_1_1json__schema.html#aa80f28ccaf9ed4b404564f629139f9d1',1,'formatron::schemas::json_schema']]], ['_5fhandle_5fliteral_16',['_handle_literal',['../namespaceformatron_1_1schemas_1_1json__schema.html#a969bd30894a578428528b94b0f82f1ba',1,'formatron::schemas::json_schema']]], - ['_5finfer_5ftype_17',['_infer_type',['../namespaceformatron_1_1schemas_1_1dict__inference.html#ad5cac24e76dc097a995f31d3d0ff9efc',1,'formatron.schemas.dict_inference._infer_type()'],['../namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2',1,'formatron.schemas.json_schema._infer_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)']]], - ['_5fmerge_5fkey_18',['_merge_key',['../namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135',1,'formatron::schemas::json_schema']]], - ['_5fmerge_5freferenced_5fschema_19',['_merge_referenced_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30',1,'formatron::schemas::json_schema']]], - ['_5fmultiple_5freplace_20',['_multiple_replace',['../namespaceformatron_1_1integrations_1_1__utils.html#abf64c53a323448aedc1361d01515226a',1,'formatron::integrations::_utils']]], - ['_5fobtain_5faccepted_5foutput_21',['_obtain_accepted_output',['../classformatron_1_1formatter_1_1Formatter.html#ae4be840a942f608c1a0c256dbf68901b',1,'formatron::formatter::Formatter']]], - ['_5fobtain_5ftype_22',['_obtain_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a544d74edf1fdccbad9e216d9ff028a20',1,'formatron::schemas::json_schema']]], - ['_5fon_5fcompletion_23',['_on_completion',['../classformatron_1_1formatter_1_1FormatterBase.html#a469880a21192928e82823cc340a22ce2',1,'formatron.formatter.FormatterBase._on_completion()'],['../classformatron_1_1formatter_1_1Formatter.html#ac6f7e3f96c6318689c5cd0d44a1cdde7',1,'formatron.formatter.Formatter._on_completion()']]], - ['_5frecursive_5fresolve_5freference_24',['_recursive_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#aaba012c79d101be93f4d96588c9f8cc2',1,'formatron::schemas::json_schema']]], - ['_5fregister_5fall_5fpredefined_5ftypes_25',['_register_all_predefined_types',['../namespaceformatron_1_1formats_1_1json.html#a311b750cba3838aee622b9809888f051',1,'formatron::formats::json']]], - ['_5fresolve_5fnew_5furl_26',['_resolve_new_url',['../namespaceformatron_1_1schemas_1_1json__schema.html#a9dc9dc267e5dd7b6581e2367e9238152',1,'formatron::schemas::json_schema']]], - ['_5fresolve_5freference_27',['_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#a24b516494672cc5dbbf7300ea65479b1',1,'formatron::schemas::json_schema']]], - ['_5fto_5fnext_5fbatch_5fstep_28',['_to_next_batch_step',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#ab87fea11f930a33130cecadd8cdf0cc6',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], - ['_5fvalidate_5fjson_5fschema_29',['_validate_json_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a51aa68e29951e6b295844b13177b7d6a',1,'formatron::schemas::json_schema']]] + ['_5fhandle_5fstr_5fwith_5fmetadata_17',['_handle_str_with_metadata',['../namespaceformatron_1_1schemas_1_1json__schema.html#a32e51b70be50d55d3944e6c700bbd1a5',1,'formatron::schemas::json_schema']]], + ['_5finfer_5ftype_18',['_infer_type',['../namespaceformatron_1_1schemas_1_1dict__inference.html#ad5cac24e76dc097a995f31d3d0ff9efc',1,'formatron.schemas.dict_inference._infer_type()'],['../namespaceformatron_1_1schemas_1_1json__schema.html#ac742e1e581efccb6cc9742e7a23c25c2',1,'formatron.schemas.json_schema._infer_type(dict[str, typing.Any] schema, dict[int, typing.Type] json_schema_id_to_schema)']]], + ['_5fmerge_5fkey_19',['_merge_key',['../namespaceformatron_1_1schemas_1_1json__schema.html#a5fcddd43a5f64374b5b75d4aafeb9135',1,'formatron::schemas::json_schema']]], + ['_5fmerge_5freferenced_5fschema_20',['_merge_referenced_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a45c9b97319a58c2013b8e3f10ad78c30',1,'formatron::schemas::json_schema']]], + ['_5fmultiple_5freplace_21',['_multiple_replace',['../namespaceformatron_1_1integrations_1_1__utils.html#abf64c53a323448aedc1361d01515226a',1,'formatron::integrations::_utils']]], + ['_5fobtain_5faccepted_5foutput_22',['_obtain_accepted_output',['../classformatron_1_1formatter_1_1Formatter.html#ae4be840a942f608c1a0c256dbf68901b',1,'formatron::formatter::Formatter']]], + ['_5fobtain_5ftype_23',['_obtain_type',['../namespaceformatron_1_1schemas_1_1json__schema.html#a544d74edf1fdccbad9e216d9ff028a20',1,'formatron::schemas::json_schema']]], + ['_5fon_5fcompletion_24',['_on_completion',['../classformatron_1_1formatter_1_1FormatterBase.html#a469880a21192928e82823cc340a22ce2',1,'formatron.formatter.FormatterBase._on_completion()'],['../classformatron_1_1formatter_1_1Formatter.html#ac6f7e3f96c6318689c5cd0d44a1cdde7',1,'formatron.formatter.Formatter._on_completion()']]], + ['_5frecursive_5fresolve_5freference_25',['_recursive_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#aaba012c79d101be93f4d96588c9f8cc2',1,'formatron::schemas::json_schema']]], + ['_5fregister_5fall_5fpredefined_5ftypes_26',['_register_all_predefined_types',['../namespaceformatron_1_1formats_1_1json.html#a311b750cba3838aee622b9809888f051',1,'formatron::formats::json']]], + ['_5fresolve_5fnew_5furl_27',['_resolve_new_url',['../namespaceformatron_1_1schemas_1_1json__schema.html#a9dc9dc267e5dd7b6581e2367e9238152',1,'formatron::schemas::json_schema']]], + ['_5fresolve_5freference_28',['_resolve_reference',['../namespaceformatron_1_1schemas_1_1json__schema.html#a24b516494672cc5dbbf7300ea65479b1',1,'formatron::schemas::json_schema']]], + ['_5fto_5fnext_5fbatch_5fstep_29',['_to_next_batch_step',['../classformatron_1_1integrations_1_1vllm_1_1FormattersLogitsProcessor.html#ab87fea11f930a33130cecadd8cdf0cc6',1,'formatron::integrations::vllm::FormattersLogitsProcessor']]], + ['_5fvalidate_5fjson_5fschema_30',['_validate_json_schema',['../namespaceformatron_1_1schemas_1_1json__schema.html#a51aa68e29951e6b295844b13177b7d6a',1,'formatron::schemas::json_schema']]] ];