docling-core 2.40.0__tar.gz → 2.41.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of docling-core might be problematic. Click here for more details.

Files changed (107) hide show
  1. {docling_core-2.40.0 → docling_core-2.41.0}/PKG-INFO +1 -1
  2. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/base.py +21 -1
  3. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/document.py +38 -4
  4. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/page.py +18 -2
  5. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core.egg-info/PKG-INFO +1 -1
  6. {docling_core-2.40.0 → docling_core-2.41.0}/pyproject.toml +1 -1
  7. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_docling_doc.py +30 -5
  8. {docling_core-2.40.0 → docling_core-2.41.0}/LICENSE +0 -0
  9. {docling_core-2.40.0 → docling_core-2.41.0}/README.md +0 -0
  10. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/__init__.py +0 -0
  11. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/cli/__init__.py +0 -0
  12. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/cli/view.py +0 -0
  13. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/experimental/__init__.py +0 -0
  14. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/py.typed +0 -0
  15. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/doc/ANN.json +0 -0
  16. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/doc/DOC.json +0 -0
  17. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/doc/OCR-output.json +0 -0
  18. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/doc/RAW.json +0 -0
  19. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/generated/ccs_document_schema.json +0 -0
  20. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/generated/minimal_document_schema_flat.json +0 -0
  21. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/search/search_doc_mapping.json +0 -0
  22. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/resources/schemas/search/search_doc_mapping_v2.json +0 -0
  23. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/search/__init__.py +0 -0
  24. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/search/json_schema_to_search_mapper.py +0 -0
  25. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/search/mapping.py +0 -0
  26. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/search/meta.py +0 -0
  27. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/search/package.py +0 -0
  28. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/__init__.py +0 -0
  29. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/__init__.py +0 -0
  30. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/base.py +0 -0
  31. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/hierarchical_chunker.py +0 -0
  32. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/hybrid_chunker.py +0 -0
  33. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/tokenizer/__init__.py +0 -0
  34. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/tokenizer/base.py +0 -0
  35. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/tokenizer/huggingface.py +0 -0
  36. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/chunker/tokenizer/openai.py +0 -0
  37. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/__init__.py +0 -0
  38. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/base.py +0 -0
  39. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/common.py +0 -0
  40. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/doctags.py +0 -0
  41. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/html.py +0 -0
  42. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/html_styles.py +0 -0
  43. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/serializer/markdown.py +0 -0
  44. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/visualizer/__init__.py +0 -0
  45. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/visualizer/base.py +0 -0
  46. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/visualizer/layout_visualizer.py +0 -0
  47. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/visualizer/reading_order_visualizer.py +0 -0
  48. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/transforms/visualizer/table_visualizer.py +0 -0
  49. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/__init__.py +0 -0
  50. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/base.py +0 -0
  51. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/__init__.py +0 -0
  52. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/labels.py +0 -0
  53. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/tokens.py +0 -0
  54. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/doc/utils.py +0 -0
  55. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/gen/__init__.py +0 -0
  56. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/gen/generic.py +0 -0
  57. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/io/__init__.py +0 -0
  58. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/__init__.py +0 -0
  59. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/base.py +0 -0
  60. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/doc_ann.py +0 -0
  61. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/doc_ocr.py +0 -0
  62. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/doc_raw.py +0 -0
  63. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/document.py +0 -0
  64. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/legacy_doc/tokens.py +0 -0
  65. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/nlp/__init__.py +0 -0
  66. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/nlp/qa.py +0 -0
  67. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/nlp/qa_labels.py +0 -0
  68. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/__init__.py +0 -0
  69. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/attribute.py +0 -0
  70. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/base.py +0 -0
  71. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/predicate.py +0 -0
  72. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/record.py +0 -0
  73. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/statement.py +0 -0
  74. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/types/rec/subject.py +0 -0
  75. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/__init__.py +0 -0
  76. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/alias.py +0 -0
  77. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/file.py +0 -0
  78. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/generate_docs.py +0 -0
  79. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/generate_jsonschema.py +0 -0
  80. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/legacy.py +0 -0
  81. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/validate.py +0 -0
  82. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core/utils/validators.py +0 -0
  83. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core.egg-info/SOURCES.txt +0 -0
  84. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core.egg-info/dependency_links.txt +0 -0
  85. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core.egg-info/entry_points.txt +0 -0
  86. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core.egg-info/requires.txt +0 -0
  87. {docling_core-2.40.0 → docling_core-2.41.0}/docling_core.egg-info/top_level.txt +0 -0
  88. {docling_core-2.40.0 → docling_core-2.41.0}/setup.cfg +0 -0
  89. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_base.py +0 -0
  90. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_collection.py +0 -0
  91. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_data_gen_flag.py +0 -0
  92. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_doc_base.py +0 -0
  93. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_doc_legacy_convert.py +0 -0
  94. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_doc_schema.py +0 -0
  95. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_doc_schema_extractor.py +0 -0
  96. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_doctags_load.py +0 -0
  97. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_hierarchical_chunker.py +0 -0
  98. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_hybrid_chunker.py +0 -0
  99. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_json_schema_to_search_mapper.py +0 -0
  100. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_nlp_qa.py +0 -0
  101. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_otsl_table_export.py +0 -0
  102. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_page.py +0 -0
  103. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_rec_schema.py +0 -0
  104. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_search_meta.py +0 -0
  105. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_serialization.py +0 -0
  106. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_utils.py +0 -0
  107. {docling_core-2.40.0 → docling_core-2.41.0}/test/test_visualization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docling-core
3
- Version: 2.40.0
3
+ Version: 2.41.0
4
4
  Summary: A python library to define and validate data types in Docling.
5
5
  Author-email: Cesar Berrospi Ramis <ceb@zurich.ibm.com>, Panos Vagenas <pva@zurich.ibm.com>, Michele Dolfi <dol@zurich.ibm.com>, Christoph Auer <cau@zurich.ibm.com>, Peter Staar <taa@zurich.ibm.com>
6
6
  Maintainer-email: Panos Vagenas <pva@zurich.ibm.com>, Michele Dolfi <dol@zurich.ibm.com>, Christoph Auer <cau@zurich.ibm.com>, Peter Staar <taa@zurich.ibm.com>, Cesar Berrospi Ramis <ceb@zurich.ibm.com>
@@ -3,7 +3,7 @@
3
3
  from enum import Enum
4
4
  from typing import List, Tuple
5
5
 
6
- from pydantic import BaseModel
6
+ from pydantic import BaseModel, FieldSerializationInfo, field_serializer
7
7
 
8
8
 
9
9
  class ImageRefMode(str, Enum):
@@ -21,12 +21,28 @@ class CoordOrigin(str, Enum):
21
21
  BOTTOMLEFT = "BOTTOMLEFT"
22
22
 
23
23
 
24
+ _CTX_COORD_PREC = "coord_prec"
25
+
26
+
27
+ def _serialize_precision(
28
+ value: float, info: FieldSerializationInfo, ctx_key: str
29
+ ) -> float:
30
+ precision = info.context.get(ctx_key) if info.context else None
31
+ if isinstance(precision, int):
32
+ return round(value, precision)
33
+ return value
34
+
35
+
24
36
  class Size(BaseModel):
25
37
  """Size."""
26
38
 
27
39
  width: float = 0.0
28
40
  height: float = 0.0
29
41
 
42
+ @field_serializer("width", "height")
43
+ def _serialize(self, value: float, info: FieldSerializationInfo) -> float:
44
+ return _serialize_precision(value, info, _CTX_COORD_PREC)
45
+
30
46
  def as_tuple(self):
31
47
  """as_tuple."""
32
48
  return (self.width, self.height)
@@ -52,6 +68,10 @@ class BoundingBox(BaseModel):
52
68
  """height."""
53
69
  return abs(self.t - self.b)
54
70
 
71
+ @field_serializer("l", "t", "r", "b")
72
+ def _serialize(self, value: float, info: FieldSerializationInfo) -> float:
73
+ return _serialize_precision(value, info, _CTX_COORD_PREC)
74
+
55
75
  def resize_by_scale(self, x_scale: float, y_scale: float):
56
76
  """resize_by_scale."""
57
77
  return BoundingBox(
@@ -26,8 +26,10 @@ from pydantic import (
26
26
  BaseModel,
27
27
  ConfigDict,
28
28
  Field,
29
+ FieldSerializationInfo,
29
30
  StringConstraints,
30
31
  computed_field,
32
+ field_serializer,
31
33
  field_validator,
32
34
  model_validator,
33
35
  validate_call,
@@ -38,7 +40,12 @@ from typing_extensions import Annotated, Self, deprecated
38
40
  from docling_core.search.package import VERSION_PATTERN
39
41
  from docling_core.types.base import _JSON_POINTER_REGEX
40
42
  from docling_core.types.doc import BoundingBox, Size
41
- from docling_core.types.doc.base import CoordOrigin, ImageRefMode
43
+ from docling_core.types.doc.base import (
44
+ _CTX_COORD_PREC,
45
+ CoordOrigin,
46
+ ImageRefMode,
47
+ _serialize_precision,
48
+ )
42
49
  from docling_core.types.doc.labels import (
43
50
  CodeLanguageLabel,
44
51
  DocItemLabel,
@@ -85,6 +92,8 @@ DOCUMENT_TOKENS_EXPORT_LABELS.update(
85
92
  ]
86
93
  )
87
94
 
95
+ _CTX_CONFID_PREC = "confid_prec"
96
+
88
97
 
89
98
  class BaseAnnotation(BaseModel):
90
99
  """Base class for all annotation types."""
@@ -98,6 +107,10 @@ class PictureClassificationClass(BaseModel):
98
107
  class_name: str
99
108
  confidence: float
100
109
 
110
+ @field_serializer("confidence")
111
+ def _serialize(self, value: float, info: FieldSerializationInfo) -> float:
112
+ return _serialize_precision(value, info, _CTX_CONFID_PREC)
113
+
101
114
 
102
115
  class PictureClassificationData(BaseAnnotation):
103
116
  """PictureClassificationData."""
@@ -125,6 +138,10 @@ class PictureMoleculeData(BaseAnnotation):
125
138
  segmentation: List[Tuple[float, float]]
126
139
  provenance: str
127
140
 
141
+ @field_serializer("confidence")
142
+ def _serialize(self, value: float, info: FieldSerializationInfo) -> float:
143
+ return _serialize_precision(value, info, _CTX_CONFID_PREC)
144
+
128
145
 
129
146
  class MiscAnnotation(BaseAnnotation):
130
147
  """MiscAnnotation."""
@@ -3048,6 +3065,8 @@ class DoclingDocument(BaseModel):
3048
3065
  artifacts_dir: Optional[Path] = None,
3049
3066
  image_mode: ImageRefMode = ImageRefMode.EMBEDDED,
3050
3067
  indent: int = 2,
3068
+ coord_precision: Optional[int] = None,
3069
+ confid_precision: Optional[int] = None,
3051
3070
  ):
3052
3071
  """Save as json."""
3053
3072
  if isinstance(filename, str):
@@ -3061,7 +3080,9 @@ class DoclingDocument(BaseModel):
3061
3080
  artifacts_dir, image_mode, reference_path=reference_path
3062
3081
  )
3063
3082
 
3064
- out = new_doc.export_to_dict()
3083
+ out = new_doc.export_to_dict(
3084
+ coord_precision=coord_precision, confid_precision=confid_precision
3085
+ )
3065
3086
  with open(filename, "w", encoding="utf-8") as fw:
3066
3087
  json.dump(out, fw, indent=indent)
3067
3088
 
@@ -3087,6 +3108,8 @@ class DoclingDocument(BaseModel):
3087
3108
  artifacts_dir: Optional[Path] = None,
3088
3109
  image_mode: ImageRefMode = ImageRefMode.EMBEDDED,
3089
3110
  default_flow_style: bool = False,
3111
+ coord_precision: Optional[int] = None,
3112
+ confid_precision: Optional[int] = None,
3090
3113
  ):
3091
3114
  """Save as yaml."""
3092
3115
  if isinstance(filename, str):
@@ -3100,7 +3123,9 @@ class DoclingDocument(BaseModel):
3100
3123
  artifacts_dir, image_mode, reference_path=reference_path
3101
3124
  )
3102
3125
 
3103
- out = new_doc.export_to_dict()
3126
+ out = new_doc.export_to_dict(
3127
+ coord_precision=coord_precision, confid_precision=confid_precision
3128
+ )
3104
3129
  with open(filename, "w", encoding="utf-8") as fw:
3105
3130
  yaml.dump(out, fw, default_flow_style=default_flow_style)
3106
3131
 
@@ -3125,9 +3150,18 @@ class DoclingDocument(BaseModel):
3125
3150
  mode: str = "json",
3126
3151
  by_alias: bool = True,
3127
3152
  exclude_none: bool = True,
3153
+ coord_precision: Optional[int] = None,
3154
+ confid_precision: Optional[int] = None,
3128
3155
  ) -> Dict[str, Any]:
3129
3156
  """Export to dict."""
3130
- out = self.model_dump(mode=mode, by_alias=by_alias, exclude_none=exclude_none)
3157
+ context = {}
3158
+ if coord_precision is not None:
3159
+ context[_CTX_COORD_PREC] = coord_precision
3160
+ if confid_precision is not None:
3161
+ context[_CTX_CONFID_PREC] = confid_precision
3162
+ out = self.model_dump(
3163
+ mode=mode, by_alias=by_alias, exclude_none=exclude_none, context=context
3164
+ )
3131
3165
 
3132
3166
  return out
3133
3167
 
@@ -25,9 +25,21 @@ import numpy as np
25
25
  from PIL import Image as PILImage
26
26
  from PIL import ImageColor, ImageDraw, ImageFont
27
27
  from PIL.ImageFont import FreeTypeFont
28
- from pydantic import AnyUrl, BaseModel, Field, model_validator
28
+ from pydantic import (
29
+ AnyUrl,
30
+ BaseModel,
31
+ Field,
32
+ FieldSerializationInfo,
33
+ field_serializer,
34
+ model_validator,
35
+ )
29
36
 
30
- from docling_core.types.doc.base import BoundingBox, CoordOrigin
37
+ from docling_core.types.doc.base import (
38
+ _CTX_COORD_PREC,
39
+ BoundingBox,
40
+ CoordOrigin,
41
+ _serialize_precision,
42
+ )
31
43
  from docling_core.types.doc.document import ImageRef
32
44
 
33
45
  _logger = logging.getLogger(__name__)
@@ -105,6 +117,10 @@ class BoundingRectangle(BaseModel):
105
117
 
106
118
  coord_origin: CoordOrigin = CoordOrigin.BOTTOMLEFT
107
119
 
120
+ @field_serializer("r_x0", "r_y0", "r_x1", "r_y1", "r_x2", "r_y2", "r_x3", "r_y3")
121
+ def _serialize(self, value: float, info: FieldSerializationInfo) -> float:
122
+ return _serialize_precision(value, info, _CTX_COORD_PREC)
123
+
108
124
  @property
109
125
  def width(self) -> float:
110
126
  """Calculate the width of the rectangle."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docling-core
3
- Version: 2.40.0
3
+ Version: 2.41.0
4
4
  Summary: A python library to define and validate data types in Docling.
5
5
  Author-email: Cesar Berrospi Ramis <ceb@zurich.ibm.com>, Panos Vagenas <pva@zurich.ibm.com>, Michele Dolfi <dol@zurich.ibm.com>, Christoph Auer <cau@zurich.ibm.com>, Peter Staar <taa@zurich.ibm.com>
6
6
  Maintainer-email: Panos Vagenas <pva@zurich.ibm.com>, Michele Dolfi <dol@zurich.ibm.com>, Christoph Auer <cau@zurich.ibm.com>, Peter Staar <taa@zurich.ibm.com>, Cesar Berrospi Ramis <ceb@zurich.ibm.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "docling-core"
3
- version = "2.40.0" # DO NOT EDIT, updated automatically
3
+ version = "2.41.0" # DO NOT EDIT, updated automatically
4
4
  description = "A python library to define and validate data types in Docling."
5
5
  license = "MIT"
6
6
  license-files = ["LICENSE"]
@@ -1463,7 +1463,9 @@ def test_save_to_disk():
1463
1463
 
1464
1464
  filename = Path("test/data/doc/constructed_doc.embedded.json")
1465
1465
  doc.save_as_json(
1466
- filename=filename, artifacts_dir=image_dir, image_mode=ImageRefMode.EMBEDDED
1466
+ filename=filename,
1467
+ artifacts_dir=image_dir,
1468
+ image_mode=ImageRefMode.EMBEDDED,
1467
1469
  )
1468
1470
  _verify_saved_output(filename=filename, paths=paths)
1469
1471
 
@@ -1472,7 +1474,9 @@ def test_save_to_disk():
1472
1474
 
1473
1475
  filename = Path("test/data/doc/constructed_doc.referenced.json")
1474
1476
  doc.save_as_json(
1475
- filename=filename, artifacts_dir=image_dir, image_mode=ImageRefMode.REFERENCED
1477
+ filename=filename,
1478
+ artifacts_dir=image_dir,
1479
+ image_mode=ImageRefMode.REFERENCED,
1476
1480
  )
1477
1481
  _verify_saved_output(filename=filename, paths=paths)
1478
1482
 
@@ -1483,13 +1487,17 @@ def test_save_to_disk():
1483
1487
 
1484
1488
  filename = Path("test/data/doc/constructed_doc.embedded.yaml")
1485
1489
  doc.save_as_yaml(
1486
- filename=filename, artifacts_dir=image_dir, image_mode=ImageRefMode.EMBEDDED
1490
+ filename=filename,
1491
+ artifacts_dir=image_dir,
1492
+ image_mode=ImageRefMode.EMBEDDED,
1487
1493
  )
1488
1494
  _verify_saved_output(filename=filename, paths=paths)
1489
1495
 
1490
1496
  filename = Path("test/data/doc/constructed_doc.referenced.yaml")
1491
1497
  doc.save_as_yaml(
1492
- filename=filename, artifacts_dir=image_dir, image_mode=ImageRefMode.REFERENCED
1498
+ filename=filename,
1499
+ artifacts_dir=image_dir,
1500
+ image_mode=ImageRefMode.REFERENCED,
1493
1501
  )
1494
1502
  _verify_saved_output(filename=filename, paths=paths)
1495
1503
 
@@ -1523,7 +1531,11 @@ def test_document_manipulation():
1523
1531
  ref = RefItem(cref=cref)
1524
1532
  return ref.resolve(doc=doc)
1525
1533
 
1526
- def _verify(filename: Path, document: DoclingDocument, generate: bool = False):
1534
+ def _verify(
1535
+ filename: Path,
1536
+ document: DoclingDocument,
1537
+ generate: bool = False,
1538
+ ):
1527
1539
  if generate or (not os.path.exists(_gt_filename(filename=filename))):
1528
1540
  doc.save_as_json(
1529
1541
  filename=_gt_filename(filename=filename),
@@ -1659,3 +1671,16 @@ def test_misplaced_list_items():
1659
1671
  else:
1660
1672
  exp_doc = DoclingDocument.load_from_yaml(exp_file)
1661
1673
  assert doc == exp_doc
1674
+
1675
+
1676
+ def test_export_with_precision():
1677
+ doc = DoclingDocument.load_from_yaml(filename="test/data/doc/dummy_doc_2.yaml")
1678
+ act_data = doc.export_to_dict(coord_precision=2, confid_precision=1)
1679
+ exp_file = Path("test/data/doc/dummy_doc_2_prec.yaml")
1680
+ if GEN_TEST_DATA:
1681
+ with open(exp_file, "w", encoding="utf-8") as f:
1682
+ yaml.dump(act_data, f, default_flow_style=False)
1683
+ else:
1684
+ with open(exp_file, "r", encoding="utf-8") as f:
1685
+ exp_data = yaml.load(f, Loader=yaml.FullLoader)
1686
+ assert act_data == exp_data
File without changes
File without changes
File without changes