Repository: aeye-lab/pymovements
Pull request #852 (2024-10-18 05:03:12)

feat: entire  row of aoi dataframe instead of just ia string
sometimes we need more than just the string within the area of interest, but also the entire information contained for this area of interest. one example for this could be the calculation of landing position within a word. this feature enhancement allows for this.

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/aeye-lab/pymovements/pull/852?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aeye-lab) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 99.93%. Comparing base [(`9ef3dd2`)](https://app.codecov.io/gh/aeye-lab/pymovements/commit/9ef3dd2402e410ca1f6b1ece2c856666e99e899a?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aeye-lab) to head [(`8bf1087`)](https://app.codecov.io/gh/aeye-lab/pymovements/commit/8bf10878936d0c8a5f4a353103fcbc4e0e72666e?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aeye-lab).

<details><summary>Additional details and impacted files</summary>


```diff
@@             Coverage Diff             @@
##              main     #852      +/-   ##
===========================================
- Coverage   100.00%   99.93%   -0.07%     
===========================================
  Files           72       72              
  Lines         3251     3265      +14     
  Branches       574      578       +4     
===========================================
+ Hits          3251     3263      +12     
- Misses           0        1       +1     
- Partials         0        1       +1     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/aeye-lab/pymovements/pull/852?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aeye-lab).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aeye-lab).


Patch:
diff --git a/src/pymovements/events/frame.py b/src/pymovements/events/frame.py
index 1d6f421..558b26f 100644
--- a/src/pymovements/events/frame.py
+++ b/src/pymovements/events/frame.py
@@ -25,6 +25,7 @@ from typing import Any
 
 import numpy as np
 import polars as pl
+from tqdm import tqdm
 
 from pymovements.events.properties import duration
 from pymovements.stimulus.text import TextStimulus
@@ -323,14 +324,12 @@ class EventDataFrame:
             Text dataframe to map fixation to.
         """
         self.unnest()
-        self.frame = self.frame.with_columns(
-            area_of_interest=pl.Series(
-                get_aoi(
-                    aoi_dataframe, row, 'location_x', 'location_y',
-                )
-                for row in self.frame.iter_rows(named=True)
-            ),
-        )
+        aois = [
+            get_aoi(aoi_dataframe, row, 'location_x', 'location_y')
+            for row in tqdm(self.frame.iter_rows(named=True))
+        ]
+        aoi_df = pl.concat(aois)
+        self.frame = pl.concat([self.frame, aoi_df], how='horizontal')
 
     def __str__(self: Any) -> str:
         """Return string representation of event dataframe."""
diff --git a/src/pymovements/gaze/gaze_dataframe.py b/src/pymovements/gaze/gaze_dataframe.py
index 034978a..87c20a8 100644
--- a/src/pymovements/gaze/gaze_dataframe.py
+++ b/src/pymovements/gaze/gaze_dataframe.py
@@ -29,6 +29,7 @@ from typing import Any
 
 import numpy as np
 import polars as pl
+from tqdm import tqdm
 
 import pymovements as pm  # pylint: disable=cyclic-import
 from pymovements.gaze import transforms
@@ -1056,14 +1057,12 @@ class GazeDataFrame:
         else:
             raise ValueError('neither position nor pixel in gaze dataframe, one needed for mapping')
 
-        self.frame = self.frame.with_columns(
-            area_of_interest=pl.Series(
-                get_aoi(
-                    aoi_dataframe, row, x_eye, y_eye,
-                )
-                for row in self.frame.iter_rows(named=True)
-            ),
-        )
+        aois = [
+            get_aoi(aoi_dataframe, row, x_eye, y_eye)
+            for row in tqdm(self.frame.iter_rows(named=True))
+        ]
+        aoi_df = pl.concat(aois)
+        self.frame = pl.concat([self.frame, aoi_df], how='horizontal')
 
     def nest(
             self,
diff --git a/src/pymovements/utils/aois.py b/src/pymovements/utils/aois.py
index a9f98b9..261210f 100644
--- a/src/pymovements/utils/aois.py
+++ b/src/pymovements/utils/aois.py
@@ -64,42 +64,42 @@ def get_aoi(
             height_column=aoi_dataframe.width_column,
             width_column=aoi_dataframe.height_column,
         )
-        try:
-            aoi = aoi_dataframe.aois.filter(
-                (aoi_dataframe.aois[aoi_dataframe.start_x_column] <= row[x_eye]) &
-                (
-                    row[x_eye] <
-                    aoi_dataframe.aois[aoi_dataframe.start_x_column] +
-                    aoi_dataframe.aois[aoi_dataframe.width_column]
-                ) &
-                (aoi_dataframe.aois[aoi_dataframe.start_y_column] <= row[y_eye]) &
-                (
-                    row[y_eye] <
-                    aoi_dataframe.aois[aoi_dataframe.start_y_column] +
-                    aoi_dataframe.aois[aoi_dataframe.height_column]
-                ),
-            )[aoi_dataframe.aoi_column].item()
-            return aoi
-        except ValueError:
-            return ''
-    elif aoi_dataframe.end_x_column is not None:
+        aoi = aoi_dataframe.aois.filter(
+            (aoi_dataframe.aois[aoi_dataframe.start_x_column] <= row[x_eye]) &
+            (
+                row[x_eye] <
+                aoi_dataframe.aois[aoi_dataframe.start_x_column] +
+                aoi_dataframe.aois[aoi_dataframe.width_column]
+            ) &
+            (aoi_dataframe.aois[aoi_dataframe.start_y_column] <= row[y_eye]) &
+            (
+                row[y_eye] <
+                aoi_dataframe.aois[aoi_dataframe.start_y_column] +
+                aoi_dataframe.aois[aoi_dataframe.height_column]
+            ),
+        )
+
+        if aoi.is_empty():
+            aoi.extend(pl.from_dict({col: None for col in aoi.columns}))
+        return aoi
+    if aoi_dataframe.end_x_column is not None:
         checks.check_is_none_is_mutual(
             end_x_column=aoi_dataframe.end_x_column,
             end_y_column=aoi_dataframe.end_y_column,
         )
-        try:
-            aoi = aoi_dataframe.aois.filter(
-                # x-coordinate: within bounding box
-                (aoi_dataframe.aois[aoi_dataframe.start_x_column] <= row[x_eye]) &
-                (row[x_eye] < aoi_dataframe.aois[aoi_dataframe.end_x_column]) &
-                # y-coordinate: within bounding box
-                (aoi_dataframe.aois[aoi_dataframe.start_y_column] <= row[y_eye]) &
-                (row[y_eye] < aoi_dataframe.aois[aoi_dataframe.end_y_column]),
-            )[aoi_dataframe.aoi_column].item()
-            return aoi
-        except ValueError:
-            return ''
-    else:
-        raise ValueError(
-            'either aoi_dataframe.width or aoi_dataframe.end_x_column have to be not None',
+        aoi = aoi_dataframe.aois.filter(
+            # x-coordinate: within bounding box
+            (aoi_dataframe.aois[aoi_dataframe.start_x_column] <= row[x_eye]) &
+            (row[x_eye] < aoi_dataframe.aois[aoi_dataframe.end_x_column]) &
+            # y-coordinate: within bounding box
+            (aoi_dataframe.aois[aoi_dataframe.start_y_column] <= row[y_eye]) &
+            (row[y_eye] < aoi_dataframe.aois[aoi_dataframe.end_y_column]),
         )
+
+        if aoi.is_empty():
+            aoi.extend(pl.from_dict({col: None for col in aoi.columns}))
+
+        return aoi
+    raise ValueError(
+        'either aoi_dataframe.width or aoi_dataframe.end_x_column have to be not None',
+    )


Test patch:
diff --git a/tests/files/potec_word_aoi_b0.tsv b/tests/files/potec_word_aoi_b0.tsv
new file mode 100644
index 0000000..e689c12
--- /dev/null
+++ b/tests/files/potec_word_aoi_b0.tsv
@@ -0,0 +1,150 @@
+aoi_type	aoi	start_x	start_y	end_x	end_y	character
+0 RECTANGLE	1.0	80.0	21.0	115.0	99.0	Um
+0 RECTANGLE	2.0	115.0	21.0	169.0	99.0	das
+0 RECTANGLE	3.0	169.0	21.0	367.0	99.0	Vorhandensein
+0 RECTANGLE	4.0	367.0	21.0	423.0	99.0	der
+0 RECTANGLE	5.0	423.0	21.0	899.0	99.0	Polymerasekettenreaktion-Produkte
+0 RECTANGLE	6.0	899.0	21.0	1067.0	99.0	feststellen
+0 RECTANGLE	7.0	1067.0	21.0	1109.0	99.0	zu
+0 RECTANGLE	8.0	1109.0	21.0	1218.0	99.0	können,
+0 RECTANGLE	9.0	1218.0	21.0	1360.0	99.0	verwendet
+0 RECTANGLE	10.0	1360.0	21.0	1417.0	99.0	man
+0 RECTANGLE	11.0	1417.0	21.0	1464.0	99.0	die
+0 RECTANGLE	12.0	81.0	99.0	324.0	181.0	Gelelektrophorese
+0 RECTANGLE	13.0	324.0	99.0	381.0	181.0	mit
+0 RECTANGLE	14.0	381.0	99.0	465.0	181.0	einer
+0 RECTANGLE	15.0	465.0	99.0	675.0	181.0	anschließenden
+0 RECTANGLE	16.0	675.0	99.0	829.0	181.0	Behandlung
+0 RECTANGLE	17.0	829.0	99.0	884.0	181.0	des
+0 RECTANGLE	18.0	884.0	99.0	954.0	181.0	Gels
+0 RECTANGLE	19.0	954.0	99.0	1039.0	181.0	durch
+0 RECTANGLE	20.0	1039.0	99.0	1261.0	181.0	Ethidiumbromid.
+0 RECTANGLE	21.0	1261.0	99.0	1318.0	181.0	Bei
+0 RECTANGLE	22.0	1318.0	99.0	1416.0	181.0	dieser
+0 RECTANGLE	23.0	1416.0	99.0	1528.0	181.0	Methode
+0 RECTANGLE	24.0	1528.0	99.0	1592.0	181.0	wird
+0 RECTANGLE	25.0	81.0	181.0	128.0	263.0	die
+0 RECTANGLE	26.0	128.0	181.0	255.0	263.0	negative
+0 RECTANGLE	27.0	255.0	181.0	353.0	263.0	Ladung
+0 RECTANGLE	28.0	353.0	181.0	408.0	263.0	der
+0 RECTANGLE	29.0	408.0	181.0	604.0	263.0	DNA-Fragmente
+0 RECTANGLE	30.0	604.0	181.0	729.0	263.0	genutzt.
+0 RECTANGLE	31.0	729.0	181.0	786.0	263.0	Die
+0 RECTANGLE	32.0	786.0	181.0	983.0	263.0	DNA-Fragmente
+0 RECTANGLE	33.0	983.0	181.0	1054.0	263.0	sind
+0 RECTANGLE	34.0	1054.0	181.0	1109.0	263.0	auf
+0 RECTANGLE	35.0	1109.0	181.0	1193.0	263.0	Grund
+0 RECTANGLE	36.0	1193.0	181.0	1248.0	263.0	der
+0 RECTANGLE	37.0	1248.0	181.0	1333.0	263.0	darin
+0 RECTANGLE	38.0	1333.0	181.0	1493.0	263.0	enthaltenen
+0 RECTANGLE	39.0	82.0	263.0	268.0	345.0	Phosphatreste
+0 RECTANGLE	40.0	268.0	263.0	381.0	345.0	negativ
+0 RECTANGLE	41.0	381.0	263.0	504.0	345.0	geladen.
+0 RECTANGLE	42.0	504.0	263.0	619.0	345.0	Anlegen
+0 RECTANGLE	43.0	619.0	263.0	702.0	345.0	eines
+0 RECTANGLE	44.0	702.0	263.0	885.0	345.0	elektrischen
+0 RECTANGLE	45.0	885.0	263.0	982.0	345.0	Feldes
+0 RECTANGLE	46.0	982.0	263.0	1067.0	345.0	lässt
+0 RECTANGLE	47.0	1067.0	263.0	1123.0	345.0	die
+0 RECTANGLE	48.0	1123.0	263.0	1590.0	345.0	Polymerasekettenreaktion-Produkte
+0 RECTANGLE	49.0	81.0	345.0	157.0	427.0	durch
+0 RECTANGLE	50.0	157.0	345.0	213.0	427.0	ein
+0 RECTANGLE	51.0	213.0	345.0	365.0	427.0	gelartiges
+0 RECTANGLE	52.0	365.0	345.0	477.0	427.0	Medium,
+0 RECTANGLE	53.0	477.0	345.0	590.0	427.0	zumeist
+0 RECTANGLE	54.0	590.0	345.0	714.0	427.0	Agarose,
+0 RECTANGLE	55.0	714.0	345.0	841.0	427.0	wandern.
+0 RECTANGLE	56.0	841.0	345.0	898.0	427.0	Die
+0 RECTANGLE	57.0	898.0	345.0	1094.0	427.0	DNA-Fragmente
+0 RECTANGLE	58.0	1094.0	345.0	1207.0	427.0	wandern
+0 RECTANGLE	59.0	1207.0	345.0	1291.0	427.0	durch
+0 RECTANGLE	60.0	1291.0	345.0	1347.0	427.0	das
+0 RECTANGLE	61.0	1366.0	345.0	1578.0	427.0	Agarose-Sieb*v
+0 RECTANGLE	62.0	1556.0	345.0	1606.0	427.0	vom
+0 RECTANGLE	63.0	80.0	427.0	199.0	509.0	Minuspol
+0 RECTANGLE	64.0	199.0	427.0	255.0	509.0	zum
+0 RECTANGLE	65.0	255.0	427.0	379.0	509.0	Pluspol.
+0 RECTANGLE	66.0	379.0	427.0	506.0	509.0	Kleinere
+0 RECTANGLE	67.0	506.0	427.0	646.0	509.0	Fragmente
+0 RECTANGLE	68.0	646.0	427.0	759.0	509.0	wandern
+0 RECTANGLE	69.0	759.0	427.0	898.0	509.0	schneller
+0 RECTANGLE	70.0	898.0	427.0	983.0	509.0	durch
+0 RECTANGLE	71.0	983.0	427.0	1039.0	509.0	das
+0 RECTANGLE	72.0	1058.0	427.0	1285.0	509.0	Agarose-Sieb*,d
+0 RECTANGLE	73.0	1260.0	427.0	1346.0	509.0	daher
+0 RECTANGLE	74.0	1346.0	427.0	1473.0	509.0	befinden
+0 RECTANGLE	75.0	1473.0	427.0	1529.0	509.0	sie
+0 RECTANGLE	76.0	1529.0	427.0	1599.0	509.0	sich
+0 RECTANGLE	77.0	1599.0	427.0	1633.0	509.0	in
+0 RECTANGLE	78.0	81.0	509.0	128.0	591.0	der
+0 RECTANGLE	79.0	128.0	509.0	199.0	591.0	Nähe
+0 RECTANGLE	80.0	199.0	509.0	255.0	591.0	zum
+0 RECTANGLE	81.0	255.0	509.0	366.0	591.0	Pluspol
+0 RECTANGLE	82.0	366.0	509.0	422.0	591.0	des
+0 RECTANGLE	83.0	422.0	509.0	505.0	591.0	Gels.
+0 RECTANGLE	84.0	505.0	509.0	562.0	591.0	Die
+0 RECTANGLE	85.0	562.0	509.0	689.0	591.0	größeren
+0 RECTANGLE	86.0	689.0	509.0	828.0	591.0	Fragmente
+0 RECTANGLE	87.0	828.0	509.0	941.0	591.0	wandern
+0 RECTANGLE	88.0	941.0	509.0	1080.0	591.0	langsamer
+0 RECTANGLE	89.0	1080.0	509.0	1137.0	591.0	und
+0 RECTANGLE	90.0	1137.0	509.0	1249.0	591.0	bleiben
+0 RECTANGLE	91.0	1249.0	509.0	1291.0	591.0	in
+0 RECTANGLE	92.0	1291.0	509.0	1346.0	591.0	der
+0 RECTANGLE	93.0	1346.0	509.0	1417.0	591.0	Nähe
+0 RECTANGLE	94.0	1417.0	509.0	1472.0	591.0	zum
+0 RECTANGLE	95.0	1472.0	509.0	1601.0	591.0	Minuspol.
+0 RECTANGLE	96.0	81.0	591.0	115.0	673.0	Um
+0 RECTANGLE	97.0	115.0	591.0	311.0	673.0	DNA-Fragmente
+0 RECTANGLE	98.0	311.0	591.0	437.0	673.0	sichtbar
+0 RECTANGLE	99.0	437.0	591.0	478.0	673.0	zu
+0 RECTANGLE	100.0	478.0	591.0	588.0	673.0	machen,
+0 RECTANGLE	101.0	588.0	591.0	730.0	673.0	behandelt
+0 RECTANGLE	102.0	730.0	591.0	787.0	673.0	man
+0 RECTANGLE	103.0	787.0	591.0	842.0	673.0	das
+0 RECTANGLE	104.0	842.0	591.0	898.0	673.0	Gel
+0 RECTANGLE	105.0	898.0	591.0	955.0	673.0	mit
+0 RECTANGLE	106.0	955.0	591.0	1038.0	673.0	einer
+0 RECTANGLE	107.0	1038.0	591.0	1180.0	673.0	wässrigen
+0 RECTANGLE	108.0	1180.0	591.0	1277.0	673.0	Lösung
+0 RECTANGLE	109.0	1277.0	591.0	1333.0	673.0	von
+0 RECTANGLE	110.0	1333.0	591.0	1555.0	673.0	Ethidiumbromid.
+0 RECTANGLE	111.0	1555.0	591.0	1603.0	673.0	Das
+0 RECTANGLE	112.0	80.0	673.0	184.0	755.0	Molekül
+0 RECTANGLE	113.0	184.0	673.0	240.0	755.0	des
+0 RECTANGLE	114.0	240.0	673.0	464.0	755.0	Ethidiumbromids
+0 RECTANGLE	115.0	464.0	673.0	520.0	755.0	ist
+0 RECTANGLE	116.0	520.0	673.0	618.0	755.0	planar
+0 RECTANGLE	117.0	618.0	673.0	676.0	755.0	und
+0 RECTANGLE	118.0	676.0	673.0	745.0	755.0	kann
+0 RECTANGLE	119.0	745.0	673.0	815.0	755.0	sich
+0 RECTANGLE	120.0	815.0	673.0	941.0	755.0	zwischen
+0 RECTANGLE	121.0	941.0	673.0	997.0	755.0	den
+0 RECTANGLE	122.0	997.0	673.0	1081.0	755.0	Basen
+0 RECTANGLE	123.0	1081.0	673.0	1136.0	755.0	der
+0 RECTANGLE	124.0	1136.0	673.0	1333.0	755.0	DNA-Fragmente
+0 RECTANGLE	125.0	1333.0	673.0	1484.0	755.0	einlagern.
+0 RECTANGLE	126.0	1484.0	673.0	1542.0	755.0	Nur
+0 RECTANGLE	127.0	1542.0	673.0	1605.0	755.0	nach
+0 RECTANGLE	128.0	81.0	755.0	129.0	837.0	dem
+0 RECTANGLE	129.0	129.0	755.0	269.0	837.0	Entstehen
+0 RECTANGLE	130.0	269.0	755.0	352.0	837.0	eines
+0 RECTANGLE	131.0	352.0	755.0	465.0	837.0	solchen
+0 RECTANGLE	132.0	465.0	755.0	604.0	837.0	Komplexes
+0 RECTANGLE	133.0	604.0	755.0	661.0	837.0	und
+0 RECTANGLE	134.0	661.0	755.0	745.0	837.0	durch
+0 RECTANGLE	135.0	745.0	755.0	800.0	837.0	das
+0 RECTANGLE	136.0	800.0	755.0	954.0	837.0	Beleuchten
+0 RECTANGLE	137.0	954.0	755.0	1011.0	837.0	mit
+0 RECTANGLE	138.0	1011.0	755.0	1137.0	837.0	UV-Licht
+0 RECTANGLE	139.0	1137.0	755.0	1206.0	837.0	kann
+0 RECTANGLE	140.0	1206.0	755.0	1263.0	837.0	man
+0 RECTANGLE	141.0	1263.0	755.0	1310.0	837.0	die
+0 RECTANGLE	142.0	82.0	837.0	548.0	916.0	Polymerasekettenreaktion-Produkte
+0 RECTANGLE	143.0	548.0	837.0	591.0	916.0	in
+0 RECTANGLE	144.0	591.0	837.0	661.0	916.0	Form
+0 RECTANGLE	145.0	661.0	837.0	717.0	916.0	von
+0 RECTANGLE	146.0	717.0	837.0	815.0	916.0	Banden
+0 RECTANGLE	147.0	815.0	837.0	899.0	916.0	sehen
+0 RECTANGLE	148.0	899.0	837.0	956.0	916.0	und
+0 RECTANGLE	149.0	956.0	837.0	1153.0	916.0	fotografieren.
diff --git a/tests/unit/events/event_aoi_mapping_test.py b/tests/unit/events/event_aoi_mapping_test.py
index 09dc0c0..888d01d 100644
--- a/tests/unit/events/event_aoi_mapping_test.py
+++ b/tests/unit/events/event_aoi_mapping_test.py
@@ -27,79 +27,79 @@ import pymovements as pm
 EXPECTED_DF = {
     'char': pl.DataFrame(
         [
-            (0, 1, 'fixation', 1988147, 1988322, 175, 207.4090909090909, 151.54261363636363, ''),
-            (0, 1, 'fixation', 1988351, 1988546, 195, 167.10408163265308, 147.5826530612245, ''),
-            (0, 1, 'fixation', 1988592, 1988736, 144, 251.9013793103448, 152.1158620689655, ''),
-            (0, 1, 'fixation', 1988788, 1989013, 225, 375.60796460177, 156.98584070796457, ''),
-            (0, 1, 'fixation', 1989060, 1989170, 110, 447.34954954954986, 153.80810810810806, ''),
-            (0, 1, 'fixation', 1989202, 1989424, 222, 513.3, 157.17892376681613, ''),
-            (0, 1, 'fixation', 1989461, 1989585, 124, 581.2648000000002, 159.66959999999992, ''),
-            (0, 1, 'fixation', 1989640, 1989891, 251, 707.7650793650796, 163.16626984126978, ''),
-            (0, 1, 'fixation', 1989929, 1990049, 120, 787.0628099173551, 163.24462809917353, ''),
-            (0, 1, 'fixation', 1990078, 1990304, 226, 846.2229074889868, 166.44008810572686, ''),
-            (0, 1, 'fixation', 1990356, 1990652, 296, 978.3326599326601, 163.44141414141413, ''),
-            (0, 1, 'fixation', 1990751, 1990926, 175, 180.84772727272727, 208.0573863636364, ''),
-            (0, 1, 'fixation', 1990961, 1991140, 179, 150.4911111111111, 211.21777777777777, ''),
-            (0, 1, 'fixation', 1991189, 1991317, 128, 239.65658914728684, 211.82480620155036, ''),
-            (0, 1, 'fixation', 1991353, 1991495, 142, 302.71608391608396, 216.57412587412588, ''),
-            (0, 1, 'fixation', 1991527, 1991715, 188, 375.24232804232804, 219.3873015873016, ''),
-            (0, 1, 'fixation', 1991745, 1991899, 154, 427.50838709677413, 217.13419354838712, 'y'),
-            (0, 1, 'fixation', 1991950, 1992230, 280, 600.1049822064056, 213.44768683274023, ''),
-            (0, 1, 'fixation', 1992284, 1992569, 285, 725.8087412587413, 222.21293706293707, ' '),
-            (0, 1, 'fixation', 1992611, 1992757, 146, 791.1496598639455, 221.16598639455782, 'a'),
-            (0, 1, 'fixation', 1992792, 1992969, 177, 848.5044943820226, 221.47415730337084, ' '),
-            (0, 1, 'fixation', 1993004, 1993238, 234, 932.0889361702128, 221.67829787234044, 'y'),
-            (0, 1, 'fixation', 1993274, 1993510, 236, 1024.154852320675, 221.48607594936712, 'e'),
-            (0, 1, 'fixation', 1993610, 1993716, 106, 200.10841121495332, 264.7196261682243, ''),
-            (0, 1, 'fixation', 1993752, 1993948, 196, 157.92436548223353, 268.2375634517766, ''),
-            (0, 1, 'fixation', 1993982, 1994193, 211, 241.02405660377357, 271.5188679245283, ''),
-            (0, 1, 'fixation', 1994223, 1994383, 160, 296.44596273291927, 273.2776397515528, ''),
-            (0, 1, 'fixation', 1994436, 1994710, 274, 435.9218181818182, 286.8061818181818, ''),
-            (0, 1, 'fixation', 1994761, 1994900, 139, 522.06, 286.785, ''),
-            (0, 1, 'fixation', 1994957, 1995109, 152, 606.8084967320262, 285.3562091503268, ''),
-            (0, 1, 'fixation', 1995156, 1995323, 167, 688.3916666666667, 284.9291666666666, ''),
-            (0, 1, 'fixation', 1995374, 1995532, 158, 770.340251572327, 289.7440251572327, ''),
-            (0, 1, 'fixation', 1995558, 1995805, 247, 825.5754032258062, 287.07620967741934, ''),
-            (0, 1, 'fixation', 1995841, 1995988, 147, 880.3533783783784, 283.3432432432432, ''),
-            (0, 1, 'fixation', 1996026, 1996198, 172, 938.5502890173411, 281.85953757225434, ''),
-            (0, 1, 'fixation', 1996245, 1996412, 167, 1022.4404761904764, 278.0517857142857, ''),
-            (0, 1, 'fixation', 1996517, 1996758, 241, 157.65289256198346, 323.6400826446281, ''),
-            (0, 1, 'fixation', 1996804, 1997014, 210, 223.56682464454977, 337.47156398104266, ''),
-            (0, 1, 'fixation', 1997043, 1997190, 147, 274.86756756756756, 344.575, ''),
-            (0, 1, 'fixation', 1997223, 1997438, 215, 368.6263888888888, 349.68055555555554, ''),
-            (0, 1, 'fixation', 1997488, 1997653, 165, 460.4620481927711, 359.32289156626507, ''),
-            (0, 1, 'fixation', 1997678, 1997905, 227, 432.2407894736842, 357.230701754386, ''),
-            (0, 1, 'fixation', 1997954, 1998254, 300, 521.389368770764, 356.7348837209302, ''),
-            (0, 1, 'fixation', 1998285, 1998512, 227, 477.1824561403509, 357.9864035087719, ''),
-            (0, 1, 'fixation', 1998562, 1998790, 228, 577.8620087336244, 364.32532751091696, ''),
-            (0, 1, 'fixation', 1998838, 1999070, 232, 703.7060085836911, 360.56609442060096, ''),
-            (0, 1, 'fixation', 1999125, 1999382, 257, 830.8821705426357, 355.15271317829456, ''),
-            (0, 1, 'fixation', 1999436, 1999625, 189, 952.5884210526315, 352.0815789473684, ''),
-            (0, 1, 'fixation', 1999663, 1999819, 156, 1009.4426751592357, 342.1987261146497, ''),
-            (0, 1, 'fixation', 1999922, 2000103, 181, 157.89505494505497, 413.2324175824176, ''),
-            (0, 1, 'fixation', 2000129, 2000245, 116, 184.99401709401718, 409.1675213675213, ''),
-            (0, 1, 'fixation', 2000295, 2000455, 160, 272.43975155279503, 416.9608695652175, ''),
-            (0, 1, 'fixation', 2000514, 2000641, 127, 389.371875, 417.5953125, ''),
-            (0, 1, 'fixation', 2000677, 2000894, 217, 446.2220183486238, 419.33073394495403, ''),
-            (0, 1, 'fixation', 2000930, 2001173, 243, 526.5098360655738, 423.3586065573772, ''),
-            (0, 1, 'fixation', 2001208, 2001459, 251, 612.4912698412701, 425.66468253968253, ''),
-            (0, 1, 'fixation', 2001495, 2001712, 217, 708.4536697247707, 423.444495412844, ''),
-            (0, 1, 'fixation', 2001746, 2001930, 184, 773.7962162162162, 423.02918918918914, ''),
-            (0, 1, 'fixation', 2002003, 2002122, 119, 857.3725000000001, 422.345, ''),
-            (0, 1, 'fixation', 2002160, 2002306, 146, 936.16462585034, 418.06870748299326, ''),
-            (0, 1, 'fixation', 2002308, 2002442, 134, 940.3585185185185, 416.97555555555556, ''),
-            (0, 1, 'fixation', 2002495, 2002603, 108, 1034.388990825688, 409.68256880733946, ''),
-            (0, 1, 'fixation', 2002709, 2002831, 122, 134.0609756097561, 491.25121951219506, ''),
-            (0, 1, 'fixation', 2002863, 2003003, 140, 161.38581560283689, 482.5148936170213, ''),
-            (0, 1, 'fixation', 2003042, 2003424, 382, 211.222454308094, 483.4208877284595, ''),
-            (0, 1, 'fixation', 2003453, 2003657, 204, 283.9468292682926, 485.65999999999997, ''),
-            (0, 1, 'fixation', 2003721, 2003917, 196, 422.41421319796956, 484.2720812182742, ''),
-            (0, 1, 'fixation', 2003968, 2004074, 106, 509.65233644859813, 480.192523364486, ''),
-            (0, 1, 'fixation', 2004132, 2004331, 199, 610.861, 484.6025000000001, ''),
-            (0, 1, 'fixation', 2004399, 2004687, 288, 717.8470588235293, 486.0269896193772, ''),
-            (0, 1, 'fixation', 2004714, 2004878, 164, 785.6884848484849, 481.4890909090909, ''),
-            (0, 1, 'fixation', 2004931, 2005109, 178, 896.4055865921787, 480.51899441340777, ''),
-            (0, 1, 'fixation', 2005138, 2005287, 149, 933.612, 481.8833333333333, ''),
+            (0, 1, 'fixation', 1988147, 1988322, 175, 207.4090909090909, 151.54261363636363, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1988351, 1988546, 195, 167.10408163265308, 147.5826530612245, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1988592, 1988736, 144, 251.9013793103448, 152.1158620689655, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1988788, 1989013, 225, 375.60796460177, 156.98584070796457, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989060, 1989170, 110, 447.34954954954986, 153.80810810810806, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989202, 1989424, 222, 513.3, 157.17892376681613, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989461, 1989585, 124, 581.2648000000002, 159.66959999999992, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989640, 1989891, 251, 707.7650793650796, 163.16626984126978, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989929, 1990049, 120, 787.0628099173551, 163.24462809917353, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990078, 1990304, 226, 846.2229074889868, 166.44008810572686, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990356, 1990652, 296, 978.3326599326601, 163.44141414141413, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990751, 1990926, 175, 180.84772727272727, 208.0573863636364, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990961, 1991140, 179, 150.4911111111111, 211.21777777777777, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991189, 1991317, 128, 239.65658914728684, 211.82480620155036, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991353, 1991495, 142, 302.71608391608396, 216.57412587412588, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991527, 1991715, 188, 375.24232804232804, 219.3873015873016, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991745, 1991899, 154, 427.50838709677413, 217.13419354838712, 'y', 414.972602739726, 214.85148514851485, 14.972602739726028, 23, 1, 1, 'page_2', 'pymovements:', 429.94520547945206, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1991950, 1992230, 280, 600.1049822064056, 213.44768683274023, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1992284, 1992569, 285, 725.8087412587413, 222.21293706293707, ' ', 714.4246575342465, 214.85148514851485, 14.972602739726028, 23, 21, 1, 'page_2', ' ', 729.3972602739725, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1992611, 1992757, 146, 791.1496598639455, 221.16598639455782, 'a', 789.2876712328767, 214.85148514851485, 14.972602739726028, 23, 26, 1, 'page_2', 'package', 804.2602739726028, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1992792, 1992969, 177, 848.5044943820226, 221.47415730337084, ' ', 834.2054794520548, 214.85148514851485, 14.972602739726028, 23, 29, 1, 'page_2', ' ', 849.1780821917807, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1993004, 1993238, 234, 932.0889361702128, 221.67829787234044, 'y', 924.0410958904106, 214.85148514851485, 14.972602739726028, 23, 35, 1, 'page_2', 'eye', 939.0136986301366, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1993274, 1993510, 236, 1024.154852320675, 221.48607594936712, 'e', 1013.8767123287664, 214.85148514851485, 14.972602739726028, 23, 41, 1, 'page_2', 'movement', 1028.8493150684924, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1993610, 1993716, 106, 200.10841121495332, 264.7196261682243, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1993752, 1993948, 196, 157.92436548223353, 268.2375634517766, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1993982, 1994193, 211, 241.02405660377357, 271.5188679245283, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994223, 1994383, 160, 296.44596273291927, 273.2776397515528, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994436, 1994710, 274, 435.9218181818182, 286.8061818181818, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994761, 1994900, 139, 522.06, 286.785, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994957, 1995109, 152, 606.8084967320262, 285.3562091503268, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995156, 1995323, 167, 688.3916666666667, 284.9291666666666, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995374, 1995532, 158, 770.340251572327, 289.7440251572327, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995558, 1995805, 247, 825.5754032258062, 287.07620967741934, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995841, 1995988, 147, 880.3533783783784, 283.3432432432432, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996026, 1996198, 172, 938.5502890173411, 281.85953757225434, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996245, 1996412, 167, 1022.4404761904764, 278.0517857142857, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996517, 1996758, 241, 157.65289256198346, 323.6400826446281, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996804, 1997014, 210, 223.56682464454977, 337.47156398104266, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997043, 1997190, 147, 274.86756756756756, 344.575, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997223, 1997438, 215, 368.6263888888888, 349.68055555555554, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997488, 1997653, 165, 460.4620481927711, 359.32289156626507, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997678, 1997905, 227, 432.2407894736842, 357.230701754386, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997954, 1998254, 300, 521.389368770764, 356.7348837209302, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1998285, 1998512, 227, 477.1824561403509, 357.9864035087719, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1998562, 1998790, 228, 577.8620087336244, 364.32532751091696, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1998838, 1999070, 232, 703.7060085836911, 360.56609442060096, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999125, 1999382, 257, 830.8821705426357, 355.15271317829456, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999436, 1999625, 189, 952.5884210526315, 352.0815789473684, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999663, 1999819, 156, 1009.4426751592357, 342.1987261146497, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999922, 2000103, 181, 157.89505494505497, 413.2324175824176, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000129, 2000245, 116, 184.99401709401718, 409.1675213675213, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000295, 2000455, 160, 272.43975155279503, 416.9608695652175, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000514, 2000641, 127, 389.371875, 417.5953125, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000677, 2000894, 217, 446.2220183486238, 419.33073394495403, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000930, 2001173, 243, 526.5098360655738, 423.3586065573772, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2001208, 2001459, 251, 612.4912698412701, 425.66468253968253, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2001495, 2001712, 217, 708.4536697247707, 423.444495412844, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2001746, 2001930, 184, 773.7962162162162, 423.02918918918914, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002003, 2002122, 119, 857.3725000000001, 422.345, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002160, 2002306, 146, 936.16462585034, 418.06870748299326, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002308, 2002442, 134, 940.3585185185185, 416.97555555555556, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002495, 2002603, 108, 1034.388990825688, 409.68256880733946, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002709, 2002831, 122, 134.0609756097561, 491.25121951219506, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002863, 2003003, 140, 161.38581560283689, 482.5148936170213, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003042, 2003424, 382, 211.222454308094, 483.4208877284595, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003453, 2003657, 204, 283.9468292682926, 485.65999999999997, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003721, 2003917, 196, 422.41421319796956, 484.2720812182742, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003968, 2004074, 106, 509.65233644859813, 480.192523364486, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004132, 2004331, 199, 610.861, 484.6025000000001, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004399, 2004687, 288, 717.8470588235293, 486.0269896193772, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004714, 2004878, 164, 785.6884848484849, 481.4890909090909, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004931, 2005109, 178, 896.4055865921787, 480.51899441340777, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2005138, 2005287, 149, 933.612, 481.8833333333333, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
         ],
         schema=[
             'text_id',
@@ -108,90 +108,96 @@ EXPECTED_DF = {
             'onset',
             'offset',
             'duration',
-            'location_x',
-            'location_y',
-            'area_of_interest',
+            'location_x', 'location_y',
+            'char',
+            'top_left_x',
+            'top_left_y',
+            'width',
+            'height',
+            'char_idx_in_line',
+            'line_idx',
+            'page',
+            'word',
+            'bottom_left_x',
+            'bottom_left_y',
         ],
         orient='row',
     ),
     'word': pl.DataFrame(
         [
-            (0, 1, 'fixation', 1988147, 1988322, 175, 207.4090909090909, 151.54261363636363, ''),
-            (0, 1, 'fixation', 1988351, 1988546, 195, 167.10408163265308, 147.5826530612245, ''),
-            (0, 1, 'fixation', 1988592, 1988736, 144, 251.9013793103448, 152.1158620689655, ''),
-            (0, 1, 'fixation', 1988788, 1989013, 225, 375.60796460177, 156.98584070796457, ''),
-            (0, 1, 'fixation', 1989060, 1989170, 110, 447.34954954954986, 153.80810810810806, ''),
-            (0, 1, 'fixation', 1989202, 1989424, 222, 513.3, 157.17892376681613, ''),
-            (0, 1, 'fixation', 1989461, 1989585, 124, 581.2648000000002, 159.66959999999992, ''),
-            (0, 1, 'fixation', 1989640, 1989891, 251, 707.7650793650796, 163.16626984126978, ''),
-            (0, 1, 'fixation', 1989929, 1990049, 120, 787.0628099173551, 163.24462809917353, ''),
-            (0, 1, 'fixation', 1990078, 1990304, 226, 846.2229074889868, 166.44008810572686, ''),
-            (0, 1, 'fixation', 1990356, 1990652, 296, 978.3326599326601, 163.44141414141413, ''),
-            (0, 1, 'fixation', 1990751, 1990926, 175, 180.84772727272727, 208.0573863636364, ''),
-            (0, 1, 'fixation', 1990961, 1991140, 179, 150.4911111111111, 211.21777777777777, ''),
-            (0, 1, 'fixation', 1991189, 1991317, 128, 239.65658914728684, 211.82480620155036, ''),
-            (0, 1, 'fixation', 1991353, 1991495, 142, 302.71608391608396, 216.57412587412588, ''),
-            (0, 1, 'fixation', 1991527, 1991715, 188, 375.24232804232804, 219.3873015873016, ''),
-            (
-                0, 1, 'fixation', 1991745, 1991899, 154,
-                427.50838709677413, 217.13419354838712, 'pymovements:',
-            ),
-            (0, 1, 'fixation', 1991950, 1992230, 280, 600.1049822064056, 213.44768683274023, ''),
-            (0, 1, 'fixation', 1992284, 1992569, 285, 725.8087412587413, 222.21293706293707, ' '),
-            (0, 1, 'fixation', 1992611, 1992757, 146, 791.1496598639455, 221.16598639455782, 'package'),  # noqa: E501
-            (0, 1, 'fixation', 1992792, 1992969, 177, 848.5044943820226, 221.47415730337084, ' '),
-            (0, 1, 'fixation', 1993004, 1993238, 234, 932.0889361702128, 221.67829787234044, 'eye'),
-            (0, 1, 'fixation', 1993274, 1993510, 236, 1024.154852320675, 221.48607594936712, 'movement'),  # noqa: E501
-            (0, 1, 'fixation', 1993610, 1993716, 106, 200.10841121495332, 264.7196261682243, ''),
-            (0, 1, 'fixation', 1993752, 1993948, 196, 157.92436548223353, 268.2375634517766, ''),
-            (0, 1, 'fixation', 1993982, 1994193, 211, 241.02405660377357, 271.5188679245283, ''),
-            (0, 1, 'fixation', 1994223, 1994383, 160, 296.44596273291927, 273.2776397515528, ''),
-            (0, 1, 'fixation', 1994436, 1994710, 274, 435.9218181818182, 286.8061818181818, ''),
-            (0, 1, 'fixation', 1994761, 1994900, 139, 522.06, 286.785, ''),
-            (0, 1, 'fixation', 1994957, 1995109, 152, 606.8084967320262, 285.3562091503268, ''),
-            (0, 1, 'fixation', 1995156, 1995323, 167, 688.3916666666667, 284.9291666666666, ''),
-            (0, 1, 'fixation', 1995374, 1995532, 158, 770.340251572327, 289.7440251572327, ''),
-            (0, 1, 'fixation', 1995558, 1995805, 247, 825.5754032258062, 287.07620967741934, ''),
-            (0, 1, 'fixation', 1995841, 1995988, 147, 880.3533783783784, 283.3432432432432, ''),
-            (0, 1, 'fixation', 1996026, 1996198, 172, 938.5502890173411, 281.85953757225434, ''),
-            (0, 1, 'fixation', 1996245, 1996412, 167, 1022.4404761904764, 278.0517857142857, ''),
-            (0, 1, 'fixation', 1996517, 1996758, 241, 157.65289256198346, 323.6400826446281, ''),
-            (0, 1, 'fixation', 1996804, 1997014, 210, 223.56682464454977, 337.47156398104266, ''),
-            (0, 1, 'fixation', 1997043, 1997190, 147, 274.86756756756756, 344.575, ''),
-            (0, 1, 'fixation', 1997223, 1997438, 215, 368.6263888888888, 349.68055555555554, ''),
-            (0, 1, 'fixation', 1997488, 1997653, 165, 460.4620481927711, 359.32289156626507, ''),
-            (0, 1, 'fixation', 1997678, 1997905, 227, 432.2407894736842, 357.230701754386, ''),
-            (0, 1, 'fixation', 1997954, 1998254, 300, 521.389368770764, 356.7348837209302, ''),
-            (0, 1, 'fixation', 1998285, 1998512, 227, 477.1824561403509, 357.9864035087719, ''),
-            (0, 1, 'fixation', 1998562, 1998790, 228, 577.8620087336244, 364.32532751091696, ''),
-            (0, 1, 'fixation', 1998838, 1999070, 232, 703.7060085836911, 360.56609442060096, ''),
-            (0, 1, 'fixation', 1999125, 1999382, 257, 830.8821705426357, 355.15271317829456, ''),
-            (0, 1, 'fixation', 1999436, 1999625, 189, 952.5884210526315, 352.0815789473684, ''),
-            (0, 1, 'fixation', 1999663, 1999819, 156, 1009.4426751592357, 342.1987261146497, ''),
-            (0, 1, 'fixation', 1999922, 2000103, 181, 157.89505494505497, 413.2324175824176, ''),
-            (0, 1, 'fixation', 2000129, 2000245, 116, 184.99401709401718, 409.1675213675213, ''),
-            (0, 1, 'fixation', 2000295, 2000455, 160, 272.43975155279503, 416.9608695652175, ''),
-            (0, 1, 'fixation', 2000514, 2000641, 127, 389.371875, 417.5953125, ''),
-            (0, 1, 'fixation', 2000677, 2000894, 217, 446.2220183486238, 419.33073394495403, ''),
-            (0, 1, 'fixation', 2000930, 2001173, 243, 526.5098360655738, 423.3586065573772, ''),
-            (0, 1, 'fixation', 2001208, 2001459, 251, 612.4912698412701, 425.66468253968253, ''),
-            (0, 1, 'fixation', 2001495, 2001712, 217, 708.4536697247707, 423.444495412844, ''),
-            (0, 1, 'fixation', 2001746, 2001930, 184, 773.7962162162162, 423.02918918918914, ''),
-            (0, 1, 'fixation', 2002003, 2002122, 119, 857.3725000000001, 422.345, ''),
-            (0, 1, 'fixation', 2002160, 2002306, 146, 936.16462585034, 418.06870748299326, ''),
-            (0, 1, 'fixation', 2002308, 2002442, 134, 940.3585185185185, 416.97555555555556, ''),
-            (0, 1, 'fixation', 2002495, 2002603, 108, 1034.388990825688, 409.68256880733946, ''),
-            (0, 1, 'fixation', 2002709, 2002831, 122, 134.0609756097561, 491.25121951219506, ''),
-            (0, 1, 'fixation', 2002863, 2003003, 140, 161.38581560283689, 482.5148936170213, ''),
-            (0, 1, 'fixation', 2003042, 2003424, 382, 211.222454308094, 483.4208877284595, ''),
-            (0, 1, 'fixation', 2003453, 2003657, 204, 283.9468292682926, 485.65999999999997, ''),
-            (0, 1, 'fixation', 2003721, 2003917, 196, 422.41421319796956, 484.2720812182742, ''),
-            (0, 1, 'fixation', 2003968, 2004074, 106, 509.65233644859813, 480.192523364486, ''),
-            (0, 1, 'fixation', 2004132, 2004331, 199, 610.861, 484.6025000000001, ''),
-            (0, 1, 'fixation', 2004399, 2004687, 288, 717.8470588235293, 486.0269896193772, ''),
-            (0, 1, 'fixation', 2004714, 2004878, 164, 785.6884848484849, 481.4890909090909, ''),
-            (0, 1, 'fixation', 2004931, 2005109, 178, 896.4055865921787, 480.51899441340777, ''),
-            (0, 1, 'fixation', 2005138, 2005287, 149, 933.612, 481.8833333333333, ''),
+            (0, 1, 'fixation', 1988147, 1988322, 175, 207.4090909090909, 151.54261363636363, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1988351, 1988546, 195, 167.10408163265308, 147.5826530612245, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1988592, 1988736, 144, 251.9013793103448, 152.1158620689655, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1988788, 1989013, 225, 375.60796460177, 156.98584070796457, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989060, 1989170, 110, 447.34954954954986, 153.80810810810806, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989202, 1989424, 222, 513.3, 157.17892376681613, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989461, 1989585, 124, 581.2648000000002, 159.66959999999992, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989640, 1989891, 251, 707.7650793650796, 163.16626984126978, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1989929, 1990049, 120, 787.0628099173551, 163.24462809917353, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990078, 1990304, 226, 846.2229074889868, 166.44008810572686, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990356, 1990652, 296, 978.3326599326601, 163.44141414141413, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990751, 1990926, 175, 180.84772727272727, 208.0573863636364, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1990961, 1991140, 179, 150.4911111111111, 211.21777777777777, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991189, 1991317, 128, 239.65658914728684, 211.82480620155036, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991353, 1991495, 142, 302.71608391608396, 216.57412587412588, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991527, 1991715, 188, 375.24232804232804, 219.3873015873016, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1991745, 1991899, 154, 427.50838709677413, 217.13419354838712, 'y', 414.972602739726, 214.85148514851485, 14.972602739726028, 23, 1, 1, 'page_2', 'pymovements:', 429.94520547945206, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1991950, 1992230, 280, 600.1049822064056, 213.44768683274023, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1992284, 1992569, 285, 725.8087412587413, 222.21293706293707, ' ', 714.4246575342465, 214.85148514851485, 14.972602739726028, 23, 21, 1, 'page_2', ' ', 729.3972602739725, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1992611, 1992757, 146, 791.1496598639455, 221.16598639455782, 'a', 789.2876712328767, 214.85148514851485, 14.972602739726028, 23, 26, 1, 'page_2', 'package', 804.2602739726028, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1992792, 1992969, 177, 848.5044943820226, 221.47415730337084, ' ', 834.2054794520548, 214.85148514851485, 14.972602739726028, 23, 29, 1, 'page_2', ' ', 849.1780821917807, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1993004, 1993238, 234, 932.0889361702128, 221.67829787234044, 'y', 924.0410958904106, 214.85148514851485, 14.972602739726028, 23, 35, 1, 'page_2', 'eye', 939.0136986301366, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1993274, 1993510, 236, 1024.154852320675, 221.48607594936712, 'e', 1013.8767123287664, 214.85148514851485, 14.972602739726028, 23, 41, 1, 'page_2', 'movement', 1028.8493150684924, 237.85148514851485),  # noqa: E501
+            (0, 1, 'fixation', 1993610, 1993716, 106, 200.10841121495332, 264.7196261682243, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1993752, 1993948, 196, 157.92436548223353, 268.2375634517766, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1993982, 1994193, 211, 241.02405660377357, 271.5188679245283, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994223, 1994383, 160, 296.44596273291927, 273.2776397515528, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994436, 1994710, 274, 435.9218181818182, 286.8061818181818, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994761, 1994900, 139, 522.06, 286.785, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1994957, 1995109, 152, 606.8084967320262, 285.3562091503268, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995156, 1995323, 167, 688.3916666666667, 284.9291666666666, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995374, 1995532, 158, 770.340251572327, 289.7440251572327, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995558, 1995805, 247, 825.5754032258062, 287.07620967741934, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1995841, 1995988, 147, 880.3533783783784, 283.3432432432432, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996026, 1996198, 172, 938.5502890173411, 281.85953757225434, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996245, 1996412, 167, 1022.4404761904764, 278.0517857142857, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996517, 1996758, 241, 157.65289256198346, 323.6400826446281, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1996804, 1997014, 210, 223.56682464454977, 337.47156398104266, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997043, 1997190, 147, 274.86756756756756, 344.575, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997223, 1997438, 215, 368.6263888888888, 349.68055555555554, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997488, 1997653, 165, 460.4620481927711, 359.32289156626507, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997678, 1997905, 227, 432.2407894736842, 357.230701754386, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1997954, 1998254, 300, 521.389368770764, 356.7348837209302, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1998285, 1998512, 227, 477.1824561403509, 357.9864035087719, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1998562, 1998790, 228, 577.8620087336244, 364.32532751091696, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1998838, 1999070, 232, 703.7060085836911, 360.56609442060096, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999125, 1999382, 257, 830.8821705426357, 355.15271317829456, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999436, 1999625, 189, 952.5884210526315, 352.0815789473684, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999663, 1999819, 156, 1009.4426751592357, 342.1987261146497, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 1999922, 2000103, 181, 157.89505494505497, 413.2324175824176, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000129, 2000245, 116, 184.99401709401718, 409.1675213675213, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000295, 2000455, 160, 272.43975155279503, 416.9608695652175, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000514, 2000641, 127, 389.371875, 417.5953125, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000677, 2000894, 217, 446.2220183486238, 419.33073394495403, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2000930, 2001173, 243, 526.5098360655738, 423.3586065573772, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2001208, 2001459, 251, 612.4912698412701, 425.66468253968253, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2001495, 2001712, 217, 708.4536697247707, 423.444495412844, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2001746, 2001930, 184, 773.7962162162162, 423.02918918918914, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002003, 2002122, 119, 857.3725000000001, 422.345, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002160, 2002306, 146, 936.16462585034, 418.06870748299326, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002308, 2002442, 134, 940.3585185185185, 416.97555555555556, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002495, 2002603, 108, 1034.388990825688, 409.68256880733946, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002709, 2002831, 122, 134.0609756097561, 491.25121951219506, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2002863, 2003003, 140, 161.38581560283689, 482.5148936170213, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003042, 2003424, 382, 211.222454308094, 483.4208877284595, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003453, 2003657, 204, 283.9468292682926, 485.65999999999997, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003721, 2003917, 196, 422.41421319796956, 484.2720812182742, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2003968, 2004074, 106, 509.65233644859813, 480.192523364486, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004132, 2004331, 199, 610.861, 484.6025000000001, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004399, 2004687, 288, 717.8470588235293, 486.0269896193772, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004714, 2004878, 164, 785.6884848484849, 481.4890909090909, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2004931, 2005109, 178, 896.4055865921787, 480.51899441340777, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (0, 1, 'fixation', 2005138, 2005287, 149, 933.612, 481.8833333333333, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
         ],
         schema=[
             'text_id',
@@ -200,9 +206,18 @@ EXPECTED_DF = {
             'onset',
             'offset',
             'duration',
-            'location_x',
-            'location_y',
-            'area_of_interest',
+            'location_x', 'location_y',
+            'char',
+            'top_left_x',
+            'top_left_y',
+            'width',
+            'height',
+            'char_idx_in_line',
+            'line_idx',
+            'page',
+            'word',
+            'bottom_left_x',
+            'bottom_left_y',
         ],
         orient='row',
     ),
diff --git a/tests/unit/gaze/gaze_aoi_mapping_test.py b/tests/unit/gaze/gaze_aoi_mapping_test.py
index ec09d4f..d832332 100644
--- a/tests/unit/gaze/gaze_aoi_mapping_test.py
+++ b/tests/unit/gaze/gaze_aoi_mapping_test.py
@@ -27,405 +27,564 @@ import pymovements as pm
 EXPECTED_DF = {
     'char_left_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_right_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'word_left_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'word_right_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_left_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_right_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
 
     'word_left_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'word_right_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_auto_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_auto_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
 
     'word_auto_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'word_auto_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_else_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'char_else_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
-
     'word_else_pixel': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'pixel_xl',
-            'pixel_yl',
-            'pixel_xr',
-            'pixel_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'pixel_xl': pl.Float64,
+            'pixel_yl': pl.Float64,
+            'pixel_xr': pl.Float64,
+            'pixel_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
     'word_else_position': pl.DataFrame(
         [
-            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, ''),
-            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, ''),
-            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, ''),
-            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, ''),
-            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, ''),
-            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, ''),
-            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, ''),
-            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, ''),
-            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, ''),
-            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, ''),
-        ],
-        schema=[
-            'trialId',
-            'pointId',
-            'time',
-            'position_xl',
-            'position_yl',
-            'position_xr',
-            'position_yr',
-            'area_of_interest',
-        ],
+            (1, 1, 8005274, 649.5, 531.1, 640.6, 529.1, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005275, 649.8, 533.2, 639.7, 528.9, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005276, 647.7, 534.0, 640.6, 529.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005277, 646.2, 533.0, 642.1, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005278, 646.5, 533.7, 642.9, 531.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005279, 647.2, 534.6, 642.6, 531.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005280, 647.3, 534.0, 642.3, 530.6, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005281, 647.7, 536.3, 642.2, 529.4, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005282, 647.5, 537.0, 641.4, 531.3, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+            (1, 1, 8005283, 648.3, 534.9, 640.9, 529.0, None, None, None, None, None, None, None, None, None, None, None),  # noqa: E501
+        ],
+        schema={
+            'trialId': pl.Int64,
+            'pointId': pl.Int64,
+            'time': pl.Int64,
+            'position_xl': pl.Float64,
+            'position_yl': pl.Float64,
+            'position_xr': pl.Float64,
+            'position_yr': pl.Float64,
+            'char': pl.String,
+            'top_left_x': pl.Float64,
+            'top_left_y': pl.Float64,
+            'width': pl.Float64,
+            'height': pl.Int64,
+            'char_idx_in_line': pl.Int64,
+            'line_idx': pl.Int64,
+            'page': pl.String,
+            'word': pl.String,
+            'bottom_left_x': pl.Float64,
+            'bottom_left_y': pl.Float64,
+        },
         orient='row',
     ),
 }