From 9220b48e5ec5d31483669fa99c1ed54b8e995498 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 09:48:00 +0200 Subject: [PATCH 01/11] feat: change epsg int to list to take multiple epsg --- borea/datastruct/workdata.py | 13 ++++++++----- borea/geodesy/proj_engine.py | 8 ++++---- borea/geodesy/transform_geodesy.py | 16 +++++++++++++--- borea/process/p_add_data/p_gen_param.py | 2 +- borea/writer/writer_con.py | 2 +- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/borea/datastruct/workdata.py b/borea/datastruct/workdata.py index 5db28c46..370ebe92 100644 --- a/borea/datastruct/workdata.py +++ b/borea/datastruct/workdata.py @@ -59,20 +59,23 @@ def add_shot(self, name_shot: str, pos_shot: np.ndarray, linear_alteration=linear_alteration, order_axe=order_axe) - def set_proj(self, epsg: int, path_geoid: list = None) -> None: + def set_proj(self, epsg: list, path_geoid: list = None) -> None: """ Setup a projection system to the worksite. Args: - epsg (int): Code epsg of the porjection ex: 2154. + epsg (list): Code epsg of the porjection ex: 2154. path_geoid (str): List of GeoTIFF which represents the geoid in grid form. """ ProjEngine.clear() try: # Check if the epsg exist - crs = CRS.from_epsg(epsg) - del crs + for idepsg in epsg: + if idepsg: + print(idepsg) + crs = CRS.from_epsg(idepsg) + del crs except exceptions.CRSError as e_info: - raise exceptions.CRSError(f"Your EPSG:{epsg} doesn't exist") from e_info + raise exceptions.CRSError(f"Your EPSG:{epsg} doesn't exist in pyproj.") from e_info ProjEngine().set_epsg(epsg, path_geoid) diff --git a/borea/geodesy/proj_engine.py b/borea/geodesy/proj_engine.py index d9b50ab4..30bf4b38 100644 --- a/borea/geodesy/proj_engine.py +++ b/borea/geodesy/proj_engine.py @@ -21,17 +21,17 @@ class ProjEngine(TransformGeodesy, metaclass=Singleton): def __post_init__(self) -> None: if self.epsg: - self.crs = pyproj.CRS.from_epsg(self.epsg) + self.crs = pyproj.CRS.from_epsg(self.epsg[0]) self.proj = pyproj.Proj(self.crs) - TransformGeodesy.__tf_init__(self, self.geoid, self.crs) + TransformGeodesy.__tf_init__(self, self.geoid, self.epsg) - def set_epsg(self, epsg: int, geoid: list = None) -> None: + def set_epsg(self, epsg: list, geoid: list = None) -> None: """ Setter of the class ProjEngine. Allows to init the class with data. Args: - epsg (int): Code epsg of the projection ex: 2154. + epsg (list): Code epsg of the projection ex: 2154. geoid (list): List of geoid to use. """ self.epsg = epsg diff --git a/borea/geodesy/transform_geodesy.py b/borea/geodesy/transform_geodesy.py index 76c30d8f..5021395f 100644 --- a/borea/geodesy/transform_geodesy.py +++ b/borea/geodesy/transform_geodesy.py @@ -26,9 +26,19 @@ class TransformGeodesy(): geoid_to_geog = None carto_to_geog_out = None - def __tf_init__(self, geoid: list, crs: pyproj) -> None: - crs_geoc = pyproj.crs.GeocentricCRS(name=crs.name, datum=crs.datum.name) - crs_geog = pyproj.crs.GeographicCRS(name=crs.name, datum=crs.datum.name) + def __tf_init__(self, geoid: list, epsg: list) -> None: + crs = pyproj.CRS.from_epsg(epsg[0]) + + try: + crs_geog = pyproj.CRS.from_epsg(epsg[1]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geog = pyproj.crs.GeographicCRS(name=crs.name, datum=crs.datum.name) + + try: + crs_geoc = pyproj.CRS.from_epsg(epsg[2]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geoc = pyproj.crs.GeocentricCRS(name=crs.name, datum=crs.datum.name) + # Transform cartographic coordinates to geographic coordinates self.carto_to_geog = pyproj.Transformer.from_crs(crs, crs_geog).transform # Transform geographic coordinates to cartographic coordinates diff --git a/borea/process/p_add_data/p_gen_param.py b/borea/process/p_add_data/p_gen_param.py index 3ec137b7..fc1a3c26 100644 --- a/borea/process/p_add_data/p_gen_param.py +++ b/borea/process/p_add_data/p_gen_param.py @@ -18,7 +18,7 @@ def args_general_param(parser: argparse) -> argparse: argsparse: Parser with argument. """ parser.add_argument('-e', '--epsg', - type=int, default=None, + type=list, default=None, help='EPSG codifier number of the reference system used e.g. "2154".') parser.add_argument('-y', '--pathgeoid', type=str, nargs='*', default=None, diff --git a/borea/writer/writer_con.py b/borea/writer/writer_con.py index 36ce28fc..863bc592 100644 --- a/borea/writer/writer_con.py +++ b/borea/writer/writer_con.py @@ -20,7 +20,7 @@ def write(name: str, folder_con: str, param_con: dict, work: Worksite) -> None: work (Worksite): The site to be recorded. """ _, _ = name, param_con - geoview_proj = search_info("EPSG", str(ProjEngine().epsg), "GEOVIEW") + geoview_proj = search_info("EPSG", str(ProjEngine().epsg[0]), "GEOVIEW") for name_shot, shot in work.shots.items(): cam = work.cameras[shot.name_cam] From 499373467aa9d10a915ba4f74be6e76ac7d73cdb Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 09:48:22 +0200 Subject: [PATCH 02/11] test: refactor and add test for espg list --- test/test_datastruct/test_shot.py | 2 +- test/test_datastruct/test_workdata.py | 48 +++++++++++++------ test/test_format/test_rpc.py | 2 +- test/test_geodesy/test_local_proj.py | 13 ++--- test/test_geodesy/test_projengine.py | 13 ++--- test/test_stat/test_statistics.py | 17 +++---- .../test_conversionz.py | 2 +- .../test_imageworldshot.py | 2 +- .../test_imageworldwork.py | 17 +++---- .../test_spaceresection.py | 13 ++--- .../test_worldimageshot.py | 2 +- .../test_worldimagework.py | 9 ++-- .../test_worldintersection.py | 3 +- test/test_worksite/test_worksite.py | 12 +++-- test/test_writer/test_writer_con.py | 3 +- test/test_writer/test_writer_rpc.py | 5 +- 16 files changed, 97 insertions(+), 66 deletions(-) diff --git a/test/test_datastruct/test_shot.py b/test/test_datastruct/test_shot.py index 3c77ef0d..fa6fb47b 100644 --- a/test/test_datastruct/test_shot.py +++ b/test/test_datastruct/test_shot.py @@ -16,7 +16,7 @@ np.array([-0.245070686036, -0.069409621323, 0.836320989726]), "test_cam", 'degree', True, "opk") CAM = Camera("test_cam", 13210.00, 8502.00, 30975.00, 26460, 17004) -EPSG = 2154 +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] LIST_NO_GEOID = None PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" diff --git a/test/test_datastruct/test_workdata.py b/test/test_datastruct/test_workdata.py index 7ec4b728..618d1597 100644 --- a/test/test_datastruct/test_workdata.py +++ b/test/test_datastruct/test_workdata.py @@ -11,6 +11,8 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSGFR = [2154] +EPSGAR = [4339] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] @@ -41,9 +43,9 @@ def test_set_proj_lambertbase(): np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([814975.925, 6283986.148, 1771.280]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSGFR, PATH_GEOID) work.set_param_shot(approx=False) - assert ProjEngine().epsg == 2154 + assert ProjEngine().epsg == EPSGFR assert round(work.shots["t1"].projeucli.pt_central[0], 3) == 814975.925 assert round(work.shots["t1"].projeucli.pt_central[1], 3) == 6283986.148 @@ -56,9 +58,9 @@ def test_set_proj_lambertbase_pathfolder(): np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([814975.925, 6283986.148, 1771.280]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSGFR, PATH_GEOID) work.set_param_shot(approx=False) - assert ProjEngine().epsg == 2154 + assert ProjEngine().epsg == EPSGFR assert round(work.shots["t1"].projeucli.pt_central[0], 3) == 814975.925 assert round(work.shots["t1"].projeucli.pt_central[1], 3) == 6283986.148 @@ -71,9 +73,9 @@ def test_set_proj_lambertbase_pathfolderwin(): np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([814975.925, 6283986.148, 1771.280]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSGFR, PATH_GEOID) work.set_param_shot(approx=False) - assert ProjEngine().epsg == 2154 + assert ProjEngine().epsg == EPSGFR assert round(work.shots["t1"].projeucli.pt_central[0], 3) == 814975.925 assert round(work.shots["t1"].projeucli.pt_central[1], 3) == 6283986.148 @@ -86,9 +88,9 @@ def test_set_proj_lambertbase_withepsg(): np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([814975.925, 6283986.148, 1771.280]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSGFR, PATH_GEOID) work.set_param_shot(approx=False) - assert ProjEngine().epsg == 2154 + assert ProjEngine().epsg == EPSGFR assert round(work.shots["t1"].projeucli.pt_central[0], 3) == 814975.925 assert round(work.shots["t1"].projeucli.pt_central[1], 3) == 6283986.148 @@ -98,9 +100,9 @@ def test_set_proj_withjsonandepsg(): work.add_shot("t1", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t2", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') - work.set_proj(4339, PATH_GEOID) + work.set_proj(EPSGAR, PATH_GEOID) work.set_param_shot(approx=False) - assert ProjEngine().epsg == 4339 + assert ProjEngine().epsg == EPSGAR assert work.shots["t1"].projeucli.pt_central[0] == 1 assert work.shots["t1"].projeucli.pt_central[1] == 2 @@ -110,8 +112,8 @@ def test_set_proj_epsgnogeoid(): work.add_shot("t1", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t2", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') - work.set_proj(4339) - assert ProjEngine().epsg == 4339 + work.set_proj(EPSGAR) + assert ProjEngine().epsg == EPSGAR def test_set_proj_badepsg(): @@ -120,7 +122,7 @@ def test_set_proj_badepsg(): work.add_shot("t2", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') work.add_shot("t3", np.array([1, 2, 3]), np.array([3, 2, 1]), "test_cam", "degree", True, 'opk') with pytest.raises(pyproj.exceptions.CRSError): - work.set_proj(1111) + work.set_proj([1111]) def test_add_cam(): @@ -179,7 +181,7 @@ def test_set_z_nadir_shot(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, 'opk') - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSGFR, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" @@ -197,3 +199,21 @@ def test_set_dtm(): assert hasattr(dtm, 'img') assert hasattr(dtm, 'rb') assert hasattr(dtm, 'gt') + + +def test_set_multi_proj(): + work = Worksite("Test") + work.set_proj([2154, 4339, 4326]) + assert ProjEngine().epsg == [2154, 4339, 4326] + + +def test_set_multi_proj_none(): + work = Worksite("Test") + work.set_proj([2154, None, 4339]) + assert ProjEngine().epsg == [2154, None, 4339] + + +def test_set_multi_projfalse(): + work = Worksite("Test") + with pytest.raises(pyproj.exceptions.CRSError): + work.set_proj([2154, None, 1111]) diff --git a/test/test_format/test_rpc.py b/test/test_format/test_rpc.py index 12f4b123..9f5f7894 100644 --- a/test/test_format/test_rpc.py +++ b/test/test_format/test_rpc.py @@ -17,7 +17,7 @@ np.array([-0.245070686036, -0.069409621323, 0.836320989726]), "test_cam", 'degree', True, 'opk') CAM = Camera("test_cam", 13210.00, 8502.00, 30975.00, 26460, 17004) -EPSG = 2154 +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] LIST_NO_GEOID = None PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" diff --git a/test/test_geodesy/test_local_proj.py b/test/test_geodesy/test_local_proj.py index 1a711ff1..100a8214 100644 --- a/test/test_geodesy/test_local_proj.py +++ b/test/test_geodesy/test_local_proj.py @@ -8,6 +8,7 @@ from borea.datastruct.dtm import Dtm +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] @@ -22,7 +23,7 @@ def proj_singleton(epsg, path_geoid=None): def test_world_to_eucli_withfloat(): - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) euproj = LocalEuclideanProj(0, 0) x, y, z = euproj.world_to_eucli(np.array([0, 0, 0])) print(x, y, z) @@ -33,7 +34,7 @@ def test_world_to_eucli_withfloat(): def test_world_to_eucli_witharray3(): pt = np.array([[0, 1, 2], [0, 1, 2], [0, 1, 2]]) - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) euproj = LocalEuclideanProj(0, 0) x, y, z = euproj.world_to_eucli(pt) assert round(x[0]) == 0 @@ -43,7 +44,7 @@ def test_world_to_eucli_witharray3(): def test_world_to_eucli_witharray1(): pt = np.array([[0], [0], [0]]) - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) euproj = LocalEuclideanProj(0, 0) x, y, z = euproj.world_to_eucli(pt) assert round(x) == 0 @@ -53,7 +54,7 @@ def test_world_to_eucli_witharray1(): def test_eucli_to_world_withfloat(): pt = np.array([0.0, 0.0, 0.0]) - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) euproj = LocalEuclideanProj(0.0, 0.0) x, y, z = euproj.eucli_to_world(pt) assert round(x) == 0 @@ -63,7 +64,7 @@ def test_eucli_to_world_withfloat(): def test_eucli_to_world_witharray3(): pt = np.array([[0, 1, 2], [0, 1, 2], [0, 1, 2]]) - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) euproj = LocalEuclideanProj(0.0, 0.0) x, y, z = euproj.eucli_to_world(pt) assert round(x[0]) == 0 @@ -73,7 +74,7 @@ def test_eucli_to_world_witharray3(): def test_eucli_to_world_witharray1(): pt = np.array([[0], [0], [0]]) - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) euproj = LocalEuclideanProj(0.0, 0.0) x, y, z = euproj.eucli_to_world(pt) assert round(x) == 0 diff --git a/test/test_geodesy/test_projengine.py b/test/test_geodesy/test_projengine.py index 1bfd5ec3..a3466ffa 100644 --- a/test/test_geodesy/test_projengine.py +++ b/test/test_geodesy/test_projengine.py @@ -8,6 +8,7 @@ from borea.geodesy.proj_engine import ProjEngine +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] @@ -18,7 +19,7 @@ def setup_module(module): # run before the first test def test_projengine_withpathgeotiff(): ProjEngine.clear() - ProjEngine().set_epsg(2154, PATH_GEOID) + ProjEngine().set_epsg(EPSG, PATH_GEOID) proj = ProjEngine() assert proj.geog_to_geoid assert not proj.carto_to_geog_out @@ -26,7 +27,7 @@ def test_projengine_withpathgeotiff(): def test_projengine_notgeoid(): ProjEngine.clear() - ProjEngine().set_epsg(2154) + ProjEngine().set_epsg(EPSG) proj = ProjEngine() assert not proj.geog_to_geoid @@ -34,12 +35,12 @@ def test_projengine_notgeoid(): def test_projengine_notgeoidwithpathgeotiff(): ProjEngine.clear() with pytest.raises(pyproj.exceptions.ProjError): - ProjEngine().set_epsg(2154, ["fr_ign_RAF2.tif"]) + ProjEngine().set_epsg(EPSG, ["fr_ign_RAF2.tif"]) def test_get_meridian_convergence(): ProjEngine.clear() - ProjEngine().set_epsg(2154, PATH_GEOID) + ProjEngine().set_epsg(EPSG, PATH_GEOID) proj = ProjEngine() meridian_convergence = proj.get_meridian_convergence(815601, 6283629) theorical_value = -1.039350 @@ -48,7 +49,7 @@ def test_get_meridian_convergence(): def test_tf_create_tf_output(): ProjEngine.clear() - ProjEngine().set_epsg(2154, PATH_GEOID) + ProjEngine().set_epsg(EPSG, PATH_GEOID) ProjEngine().set_epsg_tf_geog_output(4326) proj = ProjEngine() assert proj.carto_to_geog_out @@ -56,7 +57,7 @@ def test_tf_create_tf_output(): def test_tf_conv_tf_output(): ProjEngine.clear() - ProjEngine().set_epsg(2154, PATH_GEOID) + ProjEngine().set_epsg(EPSG, PATH_GEOID) ProjEngine().set_epsg_tf_geog_output(4326) proj = ProjEngine() xf = 657945.43 diff --git a/test/test_stat/test_statistics.py b/test/test_stat/test_statistics.py index 80a0b80c..12b4c083 100644 --- a/test/test_stat/test_statistics.py +++ b/test/test_stat/test_statistics.py @@ -14,6 +14,7 @@ OUTPUT = "./test/tmp" FILENAME = "Test" PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] TYPE_CONTROL_POINT = [13] ALL_POINT = [] @@ -32,7 +33,7 @@ def test_stat_world_to_image(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp3d('gcp_test', 13, np.array([815601.510, 6283629.280, 54.960])) @@ -54,7 +55,7 @@ def test_stat_world_to_image_withoutdata(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp3d('gcp_test', 13, np.array([815601.510, 6283629.280, 54.960])) @@ -80,7 +81,7 @@ def test_stat_image_to_world_type13(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -117,7 +118,7 @@ def test_stat_image_to_world_alltype(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -144,7 +145,7 @@ def test_stat_image_to_world_withoutdata(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp3d('gcp_test', 13, np.array([815601.510, 6283629.280, 54.960])) @@ -224,7 +225,7 @@ def test_stat_list_world2(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -260,7 +261,7 @@ def test_stat_list_image2(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -316,7 +317,7 @@ def test_main(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) diff --git a/test/test_transfo_world_image/test_conversionz.py b/test/test_transfo_world_image/test_conversionz.py index ec48382c..f748a16a 100644 --- a/test/test_transfo_world_image/test_conversionz.py +++ b/test/test_transfo_world_image/test_conversionz.py @@ -16,7 +16,7 @@ np.array([-0.245070686036, -0.069409621323, 0.836320989726]), "test_cam", 'degree', True, 'opk') CAM = Camera("test_cam", 13210.00, 8502.00, 30975.00, 26460, 17004) -EPSG = 2154 +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] LIST_NO_GEOID = None PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" diff --git a/test/test_transfo_world_image/test_imageworldshot.py b/test/test_transfo_world_image/test_imageworldshot.py index ce85ecd9..3f62dc73 100644 --- a/test/test_transfo_world_image/test_imageworldshot.py +++ b/test/test_transfo_world_image/test_imageworldshot.py @@ -16,7 +16,7 @@ np.array([-0.245070686036, -0.069409621323, 0.836320989726]), "test_cam", 'degree', True, 'opk') CAM = Camera("test_cam", 13210.00, 8502.00, 30975.00, 26460, 17004) -EPSG = 2154 +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] LIST_NO_GEOID = None PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" diff --git a/test/test_transfo_world_image/test_imageworldwork.py b/test/test_transfo_world_image/test_imageworldwork.py index 3cc840c1..271896a1 100644 --- a/test/test_transfo_world_image/test_imageworldwork.py +++ b/test/test_transfo_world_image/test_imageworldwork.py @@ -8,6 +8,7 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] @@ -22,7 +23,7 @@ def test_calculate_image_world_by_intersection_onecop_multiimg(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_co_point('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_co_point('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -51,7 +52,7 @@ def test_calculate_image_world_by_least_square_onecop_multiimg(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_co_point('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_co_point('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -86,7 +87,7 @@ def test_calculate_image_world_by_leastsquare_allgipoint(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -131,7 +132,7 @@ def test_calculate_image_world_by_leastsquare_gipoint13type(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -162,7 +163,7 @@ def test_calculate_image_world_by_intersection_onecopwithoneimg(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_co_point('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_co_point('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -188,7 +189,7 @@ def test_calculate_image_world_by_intersection_withzeropoint(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) ImageWorldWork(work).manage_image_world(type_process="inter") assert work.co_pts_world == {} @@ -211,7 +212,7 @@ def test_calculate_image_world_by_intersection_allgipoint(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) @@ -256,7 +257,7 @@ def test_calculate_image_world_by_intersection_gipoint13type(): work.add_shot("23FD1305x00054_05681", np.array([833123.958, 6282051.774, 1761.056]), np.array([-0.222610811997, -0.045739865938, 0.163818133681]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('"1003"', "23FD1305x00026_01306", np.array([24042.25, 14781.17])) work.add_gcp2d('"1003"', "23FD1305x00026_01307", np.array([24120.2, 10329.3])) diff --git a/test/test_transfo_world_image/test_spaceresection.py b/test/test_transfo_world_image/test_spaceresection.py index 91d254ad..7c9dd638 100644 --- a/test/test_transfo_world_image/test_spaceresection.py +++ b/test/test_transfo_world_image/test_spaceresection.py @@ -18,6 +18,7 @@ INPUT_OPK = "./dataset/23FD1305_alt_test.OPK" INPUT_OPK2 = "./test/data/dataset2/23FD1305_alt_2.OPK" PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] PATH_CAM = ["./dataset/Camera1.txt"] PT_LIAISON = "./dataset/liaisons_test.mes" @@ -43,7 +44,7 @@ def test_shootings_position(): work.add_shot("23FD1305x00026_01307", np.array([814977.593, 6283733.183, 1771.519]), np.array([-0.190175545509, -0.023695590794, 0.565111690487]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" @@ -63,7 +64,7 @@ def test_space_resection(): np.array([-0.245070686036, -0.069409621323, 0.836320989726]), "test_cam", "degree", True, "opk") cam = Camera("test_cam", 13210.00, 8502.00, 30975.00, 26460, 17004) - proj_singleton(2154, PATH_GEOID) + proj_singleton(EPSG, PATH_GEOID) dtm_singleton(PATH_DTM, "height") shot.set_param_eucli_shot(approx=False) z_nadir = ImageWorldShot(shot, cam).image_to_world(np.array([cam.ppax, cam.ppay]), @@ -86,7 +87,7 @@ def test_take_obs(): "header": list("NXYZOPKC"), "unit_angle": "degree", "linear_alteration": True}) - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) read_camera(PATH_CAM, work) work.set_dtm(PATH_DTM, "height") work.set_param_shot() @@ -106,7 +107,7 @@ def test_space_resection_othershot(): "header": list("NXYZOPKC"), "unit_angle": "degree", "linear_alteration": True}) - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) read_camera(PATH_CAM, work) work.set_dtm(PATH_DTM, "height") work.set_param_shot() @@ -123,7 +124,7 @@ def test_space_resection_withcopoints(): "header": list("NXYZOPKC"), "unit_angle": "degree", "linear_alteration": True}) - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) read_camera(PATH_CAM, work) work.set_dtm(PATH_DTM, "height") work.set_param_shot() @@ -140,7 +141,7 @@ def test_space_resection_withcopoints(): def test_space_resection_to_worksite(): work = Worksite("Test") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) read_camera(PATH_CAM, work) work.set_dtm(PATH_DTM, "height") pt2d = read_file_pt_dataframe(PT_LIAISON2, list("PNXY"), "pt2d") diff --git a/test/test_transfo_world_image/test_worldimageshot.py b/test/test_transfo_world_image/test_worldimageshot.py index c1624f1a..3a4b2c6a 100644 --- a/test/test_transfo_world_image/test_worldimageshot.py +++ b/test/test_transfo_world_image/test_worldimageshot.py @@ -17,7 +17,7 @@ np.array([-0.245070686036, -0.069409621323, 0.836320989726]), "test_cam", 'degree', True, 'opk') CAM = Camera("test_cam", 13210.00, 8502.00, 30975.00, 26460, 17004) -EPSG = 2154 +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] LIST_NO_GEOID = None PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" diff --git a/test/test_transfo_world_image/test_worldimagework.py b/test/test_transfo_world_image/test_worldimagework.py index c46bc80d..a84aed0d 100644 --- a/test/test_transfo_world_image/test_worldimagework.py +++ b/test/test_transfo_world_image/test_worldimagework.py @@ -8,6 +8,7 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] TYPE_POINT = [3] TYPE_CONTROL_POINT = [13] @@ -19,7 +20,7 @@ def test_calculate_world_to_image_base(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSG, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp3d('gcp_test', 3, np.array([815601.510, 6283629.280, 54.960])) @@ -38,7 +39,7 @@ def test_calculate_world_to_image_addpointunknow(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSG, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp3d('gcp_test', 3, np.array([815601.510, 6283629.280, 54.960])) @@ -59,7 +60,7 @@ def test_calculate_world_to_image_testcode(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSG, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp2d('gcp_test_test', 'shot_test', np.array([24042.25, 14781.17])) @@ -80,7 +81,7 @@ def test_calculate_world_to_image_testcodenone(): work.add_shot("shot_test", np.array([814975.925, 6283986.148, 1771.280]), np.array([-0.245070686036, -0.069409621323, 0.836320989726]), 'cam_test', "degree", True, "opk") - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSG, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_gcp2d('gcp_test', 'shot_test', np.array([24042.25, 14781.17])) work.add_gcp2d('gcp_test_test', 'shot_test', np.array([24042.25, 14781.17])) diff --git a/test/test_transfo_world_image/test_worldintersection.py b/test/test_transfo_world_image/test_worldintersection.py index 9aa9ef4f..f489e97a 100644 --- a/test/test_transfo_world_image/test_worldintersection.py +++ b/test/test_transfo_world_image/test_worldintersection.py @@ -8,6 +8,7 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] @@ -19,7 +20,7 @@ def test_eucli_intersection_2p(): work.add_shot("shot2", np.array([814977.593, 6283733.183, 1771.519]), np.array([-0.190175545509, -0.023695590794, 0.565111690487]), "cam_test", "degree", True, "opk") - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSG, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.add_co_point('"1003"', "shot1", np.array([24042.25, 14781.17])) work.add_co_point('"1003"', "shot2", np.array([24120.2, 10329.3])) diff --git a/test/test_worksite/test_worksite.py b/test/test_worksite/test_worksite.py index 8eb2dd0f..aca7045c 100644 --- a/test/test_worksite/test_worksite.py +++ b/test/test_worksite/test_worksite.py @@ -11,6 +11,8 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSGFR = [2154] +EPSGAR = [4339] LIST_GEOID = ["./dataset/fr_ign_RAF20.tif"] @@ -141,7 +143,7 @@ def test_set_param_shot(): work = Worksite("Test") work.add_shot("shot1", np.array([814975.925, 6283986.148, 1771.280]), np.array([180, 0, 360]), "cam_test", "degree", True, 'opk') - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSGFR, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" @@ -154,7 +156,7 @@ def test_set_param_shot_noprojengineandtypediff(): work = Worksite("Test") work.add_shot("shot1", np.array([814975.925, 6283986.148, 1771.280]), np.array([180, 0, 360]), "cam_test", "degree", True, 'opk') - work.set_proj(4339) + work.set_proj(EPSGAR) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" @@ -167,7 +169,7 @@ def test_set_param_shot_noprojengineandsametype(): work = Worksite("Test") work.add_shot("shot1", np.array([814975.925, 6283986.148, 1771.280]), np.array([180, 0, 360]), "cam_test", "degree", True, 'opk') - work.set_proj(4339) + work.set_proj(EPSGAR) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "height" @@ -181,7 +183,7 @@ def test_set_param_shot_nodtm(): work = Worksite("Test") work.add_shot("shot1", np.array([814975.925, 6283986.148, 1771.280]), np.array([180, 0, 360]), "cam_test", "degree", True, 'opk') - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSGFR, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.type_z_shot = "altitude" work.set_param_shot() @@ -193,7 +195,7 @@ def test_set_unit_shot(): work = Worksite("Test") work.add_shot("shot1", np.array([814975.925, 6283986.148, 1771.280]), np.array([180, 0, 360]), "cam_test", "degree", True, 'opk') - work.set_proj(2154, LIST_GEOID) + work.set_proj(EPSGFR, LIST_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" diff --git a/test/test_writer/test_writer_con.py b/test/test_writer/test_writer_con.py index 97ec3bf0..41a534fa 100644 --- a/test/test_writer/test_writer_con.py +++ b/test/test_writer/test_writer_con.py @@ -9,6 +9,7 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] OUTPUT = "./test/tmp" @@ -28,7 +29,7 @@ def test_write_con(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "UCE-M3-f120-s06", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('UCE-M3-f120-s06', 13210.00, 8502.00, 30975.00, 26460, 17004) write(None, OUTPUT, None, work) assert os.path.exists("./test/tmp/23FD1305x00026_01306.CON") diff --git a/test/test_writer/test_writer_rpc.py b/test/test_writer/test_writer_rpc.py index 98a967c4..38d0e44c 100644 --- a/test/test_writer/test_writer_rpc.py +++ b/test/test_writer/test_writer_rpc.py @@ -9,6 +9,7 @@ PATH_DTM = "./dataset/MNT_France_25m_h_crop.tif" +EPSG = [2154] PATH_GEOID = ["./dataset/fr_ign_RAF20.tif"] OUTPUT = "./test/tmp" @@ -28,7 +29,7 @@ def test_write_rpc(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" @@ -52,7 +53,7 @@ def test_write_rpc_4326(): work.add_shot("23FD1305x00026_01308", np.array([814978.586, 6283482.827, 1771.799]), np.array([-0.181570631296, 0.001583051432, 0.493526899473]), "cam_test", "degree", True, "opk") - work.set_proj(2154, PATH_GEOID) + work.set_proj(EPSG, PATH_GEOID) work.add_camera('cam_test', 13210.00, 8502.00, 30975.00, 26460, 17004) work.set_dtm(PATH_DTM, "height") work.type_z_shot = "altitude" From 71187ec0cde75140afbecfbd1bb4cb0b47074add Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 10:13:55 +0200 Subject: [PATCH 03/11] docs: add information projection epsg in docs functions --- borea_tools/docs_tools/README_opk_control.md | 22 +++++++++++++++++++ borea_tools/docs_tools/README_opk_to_conl.md | 22 +++++++++++++++++++ borea_tools/docs_tools/README_opk_to_opk.md | 22 +++++++++++++++++++ borea_tools/docs_tools/README_opk_to_rpc.md | 22 +++++++++++++++++++ .../docs_tools/README_pt_image_to_world.md | 22 +++++++++++++++++++ .../docs_tools/README_pt_world_to_image.md | 22 +++++++++++++++++++ .../README_ptfile_image_to_world.md | 22 +++++++++++++++++++ .../README_ptfile_world_to_image.md | 22 +++++++++++++++++++ .../docs_tools/README_spaceresection_opk.md | 22 +++++++++++++++++++ 9 files changed, 198 insertions(+) diff --git a/borea_tools/docs_tools/README_opk_control.md b/borea_tools/docs_tools/README_opk_control.md index 98c68441..125a0122 100644 --- a/borea_tools/docs_tools/README_opk_control.md +++ b/borea_tools/docs_tools/README_opk_control.md @@ -108,6 +108,28 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ## Detail for process ### Intersection diff --git a/borea_tools/docs_tools/README_opk_to_conl.md b/borea_tools/docs_tools/README_opk_to_conl.md index bd2736cc..fc9a68e9 100644 --- a/borea_tools/docs_tools/README_opk_to_conl.md +++ b/borea_tools/docs_tools/README_opk_to_conl.md @@ -84,4 +84,26 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_opk_to_opk.md b/borea_tools/docs_tools/README_opk_to_opk.md index 32ecc8cd..323e8b42 100644 --- a/borea_tools/docs_tools/README_opk_to_opk.md +++ b/borea_tools/docs_tools/README_opk_to_opk.md @@ -89,4 +89,26 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_opk_to_rpc.md b/borea_tools/docs_tools/README_opk_to_rpc.md index 69c70f69..d614b2e4 100644 --- a/borea_tools/docs_tools/README_opk_to_rpc.md +++ b/borea_tools/docs_tools/README_opk_to_rpc.md @@ -89,4 +89,26 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_pt_image_to_world.md b/borea_tools/docs_tools/README_pt_image_to_world.md index eee8da5c..8bc62bf7 100644 --- a/borea_tools/docs_tools/README_pt_image_to_world.md +++ b/borea_tools/docs_tools/README_pt_image_to_world.md @@ -65,4 +65,26 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_pt_world_to_image.md b/borea_tools/docs_tools/README_pt_world_to_image.md index 01167ec0..54bad80a 100644 --- a/borea_tools/docs_tools/README_pt_world_to_image.md +++ b/borea_tools/docs_tools/README_pt_world_to_image.md @@ -65,4 +65,26 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_ptfile_image_to_world.md b/borea_tools/docs_tools/README_ptfile_image_to_world.md index 18ab66c3..214e7162 100644 --- a/borea_tools/docs_tools/README_ptfile_image_to_world.md +++ b/borea_tools/docs_tools/README_ptfile_image_to_world.md @@ -105,6 +105,28 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ## Detail for process ### Intersection diff --git a/borea_tools/docs_tools/README_ptfile_world_to_image.md b/borea_tools/docs_tools/README_ptfile_world_to_image.md index e5d981f2..e21ea8af 100644 --- a/borea_tools/docs_tools/README_ptfile_world_to_image.md +++ b/borea_tools/docs_tools/README_ptfile_world_to_image.md @@ -112,6 +112,28 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ## Detail for approx system The approximate system is used to set up a local tangent frame of reference for each acquisition in a purely mathematical way, without geodesy. To be used if the **data is corrected by linear alteration**, all data must be in the **same Z coordinate system** (altimetric or height), and there is **no need for the .json projection file**, **nor for DTM** if you are not using the image to world function with least square processing. diff --git a/borea_tools/docs_tools/README_spaceresection_opk.md b/borea_tools/docs_tools/README_spaceresection_opk.md index 397ab369..759626df 100644 --- a/borea_tools/docs_tools/README_spaceresection_opk.md +++ b/borea_tools/docs_tools/README_spaceresection_opk.md @@ -99,4 +99,26 @@ This library can transform and process 3D data with a z in altitude or height. T The command for adding a geoid is -y, where you can enter the paths to the various geoids. If the file is stored in pyproj's native folder (pyproj.datadir.get_data_dir(), *usr/share/proj* or *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) the file name is sufficient pyproj will find it on its own. Geoids file can be found on pyproj's github (https://github.com/OSGeo/PROJ-data). +This transformation is accompanied by other cartographic, geographic and geocentric transformations. And pyproj may not be able to find the other systems on its own. +e.g. +``` +>>>crsm = crs.CRS.from_epsg(4326) +>>>crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) +File "...", line 171, in + crs_geoc = pyproj.crs.GeocentricCRS(name=crsm.name, datum=crsm.datum.name) + File "...", line 1918, in __init__ + super().__init__(geocentric_crs_json) + File "...", line 348, in __init__ + self._local.crs = _CRS(self.srs) + File "pyproj/_crs.pyx", line 2378, in pyproj._crs._CRS.__init__ +pyproj.exceptions.CRSError: Invalid projection: +``` +You can therefore specify as parameters the epsg ( -e ) you want to use for each type of projection in a precise order. +[data_projection, geographic, geocentric] +e.g. in commande line for 4326 error GeocentricCRS +``` +-e 4326 None 4328 +``` +None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. + ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file From 0648a109003b1983f05aea3652f9a5754f17936c Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 11:41:39 +0200 Subject: [PATCH 04/11] refactor: change example with list epsg --- examples/eg_build_worksite_by_data.py | 6 +++--- examples/eg_build_worksite_by_file.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/eg_build_worksite_by_data.py b/examples/eg_build_worksite_by_data.py index 2c23a584..49e72b16 100644 --- a/examples/eg_build_worksite_by_data.py +++ b/examples/eg_build_worksite_by_data.py @@ -33,7 +33,7 @@ def worksite_1shot() -> Worksite: # Setup projection # set_epsg(epsg, path_geoid) # the geoid is mandatory if type_z_data and type_z_shot are different - work.set_proj(2154, PATH_GEOID) + work.set_proj([2154], PATH_GEOID) # Add camera information # add_camera(name_cam, ppax, ppay, focal, width, height) @@ -72,7 +72,7 @@ def worksite_2shots_2copts() -> Worksite: # Setup projection # set_epsg(epsg, path_geoid) # the geoid is mandatory if type_z_data and type_z_shot are different - work.set_proj(2154, PATH_GEOID) + work.set_proj([2154], PATH_GEOID) # Add camera information # add_camera(name_cam, ppax, ppay, focal, width, height) @@ -120,7 +120,7 @@ def worksite_2shot_3gcp() -> Worksite: # Setup projection # set_epsg(epsg, path_geoid) # the geoid is mandatory if type_z_data and type_z_shot are different - work.set_proj(2154, PATH_GEOID) + work.set_proj([2154], PATH_GEOID) # Add camera information # add_camera(name_cam, ppax, ppay, focal, width, height,) diff --git a/examples/eg_build_worksite_by_file.py b/examples/eg_build_worksite_by_file.py index 29294ae5..b1bd1b2c 100644 --- a/examples/eg_build_worksite_by_file.py +++ b/examples/eg_build_worksite_by_file.py @@ -46,13 +46,13 @@ def worksite_opk() -> Worksite: read_camera(PATH_CAM, work_opk) # Settup projection of your worksite - # work.set_proj(code_epsg: int, path_geoid: list[str]) + # work.set_proj(code_epsg: list, path_geoid: list[str]) # path geoid is a list of path if there are many geoid of the worksite or you can make just name # of the file if they're in the right place for pyproj (*usr/share/proj* or # *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) # The geoid is used to perform the height-altitude transformation or the inverse # if the data are not in the same unit (if they are in the same unit, you can use None instead). - work_opk.set_proj(2154, PATH_GEOID) + work_opk.set_proj([2154], PATH_GEOID) # Settup dtm of the worksite # work.set_dtm(path_dtm: str, unit_dtm: str) @@ -77,13 +77,13 @@ def worksite_without_shot() -> Worksite: read_camera(PATH_CAM, work_opk) # Settup projection of your worksite - # work.set_proj(code_epsg: int, path_geoid: list[str]) + # work.set_proj(code_epsg: list, path_geoid: list[str]) # path geoid is a list of path if there are many geoid of the worksite or you can make just name # of the file if they're in the right place for pyproj (*usr/share/proj* or # *env_name_folder/lib/python3.10/site-packages/pyproj/proj_dir/share/proj*) # The geoid is used to perform the height-altitude transformation or the inverse # if the data are not in the same unit (if they are in the same unit, you can use None instead). - work_opk.set_proj(2154, PATH_GEOID) + work_opk.set_proj([2154], PATH_GEOID) # Settup dtm of the worksite # work.set_dtm(path_dtm: str, unit_dtm: str) From f5c3b73670daf8819cd3e1d7e0437e86a8d54664 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 11:42:08 +0200 Subject: [PATCH 05/11] refactor: change class projengine and transform --- borea/datastruct/shot.py | 4 +- borea/datastruct/workdata.py | 5 +- borea/format/rpc.py | 12 +- borea/geodesy/local_euclidean_proj.py | 18 +- borea/geodesy/proj_engine.py | 10 +- borea/geodesy/transform_geodesy.py | 181 +++++++++++++----- .../transform_shot/conversion_coor_shot.py | 8 +- .../transform_shot/image_world_shot.py | 2 +- .../transform_shot/world_image_shot.py | 2 +- 9 files changed, 159 insertions(+), 83 deletions(-) diff --git a/borea/datastruct/shot.py b/borea/datastruct/shot.py index f510537e..82796111 100644 --- a/borea/datastruct/shot.py +++ b/borea/datastruct/shot.py @@ -153,9 +153,9 @@ def set_type_z(self, type_z: str) -> None: type_z (str): z type height or altitude. """ if type_z == "height": - self.pos_shot[2] = ProjEngine().tranform_height(self.pos_shot) + self.pos_shot[2] = ProjEngine().tf.tranform_height(self.pos_shot) else: - self.pos_shot[2] = ProjEngine().tranform_altitude(self.pos_shot) + self.pos_shot[2] = ProjEngine().tf.tranform_altitude(self.pos_shot) def set_linear_alteration(self, linear_alteration: bool) -> None: """ diff --git a/borea/datastruct/workdata.py b/borea/datastruct/workdata.py index 370ebe92..a11e9966 100644 --- a/borea/datastruct/workdata.py +++ b/borea/datastruct/workdata.py @@ -71,9 +71,8 @@ def set_proj(self, epsg: list, path_geoid: list = None) -> None: try: # Check if the epsg exist for idepsg in epsg: if idepsg: - print(idepsg) - crs = CRS.from_epsg(idepsg) - del crs + _ = CRS.from_epsg(idepsg) + del _ except exceptions.CRSError as e_info: raise exceptions.CRSError(f"Your EPSG:{epsg} doesn't exist in pyproj.") from e_info diff --git a/borea/format/rpc.py b/borea/format/rpc.py index fcb452c4..7c3c21ba 100644 --- a/borea/format/rpc.py +++ b/borea/format/rpc.py @@ -111,13 +111,13 @@ def normalize_data(self, grid_img: np.ndarray, grid_world: np.ndarray) -> tuple: if self.fact_rpc is None: if self.output_epsg: ProjEngine().set_epsg_tf_geog_output(self.output_epsg) - x_geog, y_geog, z_geog = ProjEngine().carto_to_geog_out(grid_world[0], - grid_world[1], - grid_world[2]) + x_geog, y_geog, z_geog = ProjEngine().tf.carto_to_geog_out(grid_world[0], + grid_world[1], + grid_world[2]) else: - x_geog, y_geog, z_geog = ProjEngine().carto_to_geog(grid_world[0], - grid_world[1], - grid_world[2]) + x_geog, y_geog, z_geog = ProjEngine().tf.carto_to_geog(grid_world[0], + grid_world[1], + grid_world[2]) else: x_geog = grid_world[0]*self.fact_rpc y_geog = grid_world[1]*self.fact_rpc diff --git a/borea/geodesy/local_euclidean_proj.py b/borea/geodesy/local_euclidean_proj.py index 12607d5e..6ba6d7f0 100644 --- a/borea/geodesy/local_euclidean_proj.py +++ b/borea/geodesy/local_euclidean_proj.py @@ -37,7 +37,7 @@ def mat_rot_euclidean_local(self, x: float, y: float) -> np.ndarray: Returns: np.array: Transition matrix. """ - lon, lat = ProjEngine().carto_to_geog(x, y) + lon, lat = ProjEngine().tf.carto_to_geog(x, y) gamma = ProjEngine().get_meridian_convergence(x, y) # Matrix for switching to local cartesian coordinates @@ -92,10 +92,10 @@ def world_to_eucli(self, coor: np.ndarray) -> np.ndarray: """ coor = check_array_transfo(coor[0], coor[1], coor[2]) - coor_geoc = np.array(ProjEngine().carto_to_geoc(coor[0], coor[1], coor[2])) - central_geoc = np.array(ProjEngine().carto_to_geoc(self.pt_central[0], - self.pt_central[1], - self.pt_central[2])) + coor_geoc = np.array(ProjEngine().tf.carto_to_geoc(coor[0], coor[1], coor[2])) + central_geoc = np.array(ProjEngine().tf.carto_to_geoc(self.pt_central[0], + self.pt_central[1], + self.pt_central[2])) dr = np.vstack([coor_geoc[0] - central_geoc[0], coor_geoc[1] - central_geoc[1], coor_geoc[2] - central_geoc[2]]) @@ -115,13 +115,13 @@ def eucli_to_world(self, coor: np.ndarray) -> np.ndarray: """ coor = np.squeeze(coor) - central_geoc = np.array(ProjEngine().carto_to_geoc(self.pt_central[0], - self.pt_central[1], - self.pt_central[2])) + central_geoc = np.array(ProjEngine().tf.carto_to_geoc(self.pt_central[0], + self.pt_central[1], + self.pt_central[2])) dr = np.vstack([coor[0] - self.pt_central[0], coor[1] - self.pt_central[1], coor[2] - self.pt_central[2]]) point_geoc = np.squeeze((self.rot_to_euclidean_local.T @ dr) + np.array([central_geoc]).T) x_gc, y_gc, z_gc = check_array_transfo(point_geoc[0], point_geoc[1], point_geoc[2]) - tup = ProjEngine().geoc_to_carto(x_gc, y_gc, z_gc) + tup = ProjEngine().tf.geoc_to_carto(x_gc, y_gc, z_gc) return np.array([tup[0], tup[1], tup[2]]) diff --git a/borea/geodesy/proj_engine.py b/borea/geodesy/proj_engine.py index 30bf4b38..197f23a6 100644 --- a/borea/geodesy/proj_engine.py +++ b/borea/geodesy/proj_engine.py @@ -11,7 +11,7 @@ # pylint: disable=unpacking-non-sequence @dataclass -class ProjEngine(TransformGeodesy, metaclass=Singleton): +class ProjEngine(metaclass=Singleton): """ This class provides functions for using a cartographic system. """ @@ -23,7 +23,7 @@ def __post_init__(self) -> None: if self.epsg: self.crs = pyproj.CRS.from_epsg(self.epsg[0]) self.proj = pyproj.Proj(self.crs) - TransformGeodesy.__tf_init__(self, self.geoid, self.epsg) + self.tf = TransformGeodesy(self.epsg, self.geoid) def set_epsg(self, epsg: list, geoid: list = None) -> None: """ @@ -45,7 +45,7 @@ def set_epsg_tf_geog_output(self, epsg_output: int) -> None: Args: epsg_out (int): Code epsg of the output crs. """ - self.tf_output(self.crs, epsg_output) + self.tf.tf_output(epsg_output) def get_meridian_convergence(self, x_carto: Union[np.ndarray, List[float], float], y_carto: Union[np.ndarray, List[float], float]) -> np.ndarray: @@ -60,7 +60,7 @@ def get_meridian_convergence(self, x_carto: Union[np.ndarray, List[float], float Returns: np.array : Meridian convergence in degree. """ - (x_geog, y_geog) = self.carto_to_geog(x_carto, y_carto) + (x_geog, y_geog) = self.tf.carto_to_geog(x_carto, y_carto) return -np.array(self.proj.get_factors(x_geog, y_geog).meridian_convergence) def get_scale_factor(self, x_carto: Union[np.ndarray, List[float], float], @@ -76,5 +76,5 @@ def get_scale_factor(self, x_carto: Union[np.ndarray, List[float], float], Returns: np.array: Scale factor and meridian convergence. """ - x_geog, y_geog = self.carto_to_geog(x_carto, y_carto) + x_geog, y_geog = self.tf.carto_to_geog(x_carto, y_carto) return np.array(self.proj.get_factors(x_geog, y_geog).meridional_scale) - 1 diff --git a/borea/geodesy/transform_geodesy.py b/borea/geodesy/transform_geodesy.py index 5021395f..3ac9e2d5 100644 --- a/borea/geodesy/transform_geodesy.py +++ b/borea/geodesy/transform_geodesy.py @@ -1,13 +1,11 @@ """ Module for class ProjEngine, transform geodesy """ -from dataclasses import dataclass import pyproj import numpy as np -# pylint: disable=unsubscriptable-object -@dataclass +# pylint: disable=too-many-instance-attributes class TransformGeodesy(): """ This class provides functions to tranform coordinate system. @@ -18,59 +16,139 @@ class TransformGeodesy(): geoid (list): List of geoid to use. crs (pyproj): CRS pyproj of the worksite. """ - carto_to_geoc = None - geoc_to_carto = None - carto_to_geog = None - geog_to_carto = None - geog_to_geoid = None - geoid_to_geog = None - carto_to_geog_out = None + def __init__(self, epsg: list, geoid: list) -> None: + self.epsg = epsg + self.crs = pyproj.CRS.from_epsg(epsg[0]) + self.geoid = geoid + self._carto_to_geoc = None + self._geoc_to_carto = None + self._carto_to_geog = None + self._geog_to_carto = None + self._geog_to_geoid = None + self._geoid_to_geog = None + self.carto_to_geog_out = None + + @property + def carto_to_geog(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. - def __tf_init__(self, geoid: list, epsg: list) -> None: - crs = pyproj.CRS.from_epsg(epsg[0]) + Returns: + pyproj.Transformer : carto_to_geog + """ + if not self._carto_to_geog: + try: + crs_geog = pyproj.CRS.from_epsg(self.epsg[1]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geog = pyproj.crs.GeographicCRS(name=self.crs.name, datum=self.crs.datum.name) - try: - crs_geog = pyproj.CRS.from_epsg(epsg[1]) - except (IndexError, pyproj.exceptions.CRSError): - crs_geog = pyproj.crs.GeographicCRS(name=crs.name, datum=crs.datum.name) - - try: - crs_geoc = pyproj.CRS.from_epsg(epsg[2]) - except (IndexError, pyproj.exceptions.CRSError): - crs_geoc = pyproj.crs.GeocentricCRS(name=crs.name, datum=crs.datum.name) + self._carto_to_geog = pyproj.Transformer.from_crs(self.crs, crs_geog).transform - # Transform cartographic coordinates to geographic coordinates - self.carto_to_geog = pyproj.Transformer.from_crs(crs, crs_geog).transform - # Transform geographic coordinates to cartographic coordinates - self.geog_to_carto = pyproj.Transformer.from_crs(crs_geog, crs).transform - # Transform cartographic coordinates to geocentric coordinates - self.carto_to_geoc = pyproj.Transformer.from_crs(crs, crs_geoc).transform - # Transform geocentric coordinates to cartographic coordinates - self.geoc_to_carto = pyproj.Transformer.from_crs(crs_geoc, crs).transform + return self._carto_to_geog - if geoid: - self.tf_geoid(geoid) + @property + def geog_to_carto(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. - def tf_geoid(self, geoid: list) -> None: + Returns: + pyproj.Transformer : geog_to_carto """ - Create attribute transform, to transform geographic coordinates to geoide coordinates. + if not self._geog_to_carto: + try: + crs_geog = pyproj.CRS.from_epsg(self.epsg[1]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geog = pyproj.crs.GeographicCRS(name=self.crs.name, datum=self.crs.datum.name) - Args: - geoid (list): List of geoid to use. + self._geog_to_carto = pyproj.Transformer.from_crs(crs_geog, self.crs).transform + + return self._geog_to_carto + + @property + def carto_to_geoc(self) -> pyproj.Transformer: """ - try: - # Transform geoide coordinates to geographic coordinates - self.geoid_to_geog = pyproj.Transformer.from_pipeline(f"+proj=vgridshift " - f"+grids={','.join(geoid)} " - "+multiplier=1").transform - # Transform geographic coordinates to geoide coordinates - self.geog_to_geoid = pyproj.Transformer.from_pipeline(f"+proj=vgridshift " - f"+grids={','.join(geoid)} " - "+multiplier=-1").transform - except pyproj.exceptions.ProjError as e: - raise pyproj.exceptions.ProjError(f"{geoid} The name or path of geotif is incorrect or " - "does not exist in " - f"{pyproj.datadir.get_data_dir()}!!!{e}") from e + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : carto_to_geoc + """ + if not self._carto_to_geoc: + try: + crs_geoc = pyproj.CRS.from_epsg(self.epsg[2]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geoc = pyproj.crs.GeocentricCRS(name=self.crs.name, datum=self.crs.datum.name) + + self._carto_to_geoc = pyproj.Transformer.from_crs(self.crs, crs_geoc).transform + + return self._carto_to_geoc + + @property + def geoc_to_carto(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geoc_to_carto + """ + if not self._geoc_to_carto: + try: + crs_geoc = pyproj.CRS.from_epsg(self.epsg[2]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geoc = pyproj.crs.GeocentricCRS(name=self.crs.name, datum=self.crs.datum.name) + + self._geoc_to_carto = pyproj.Transformer.from_crs(crs_geoc, self.crs).transform + + return self._geoc_to_carto + + @property + def geoid_to_geog(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geoid_to_geog + """ + if not self.geoid: + raise ValueError("Mistake Geoid path") + + if not self._geoid_to_geog: + try: + # Transform geoide coordinates to geographic coordinates + self._geoid_to_geog = pyproj.Transformer.from_pipeline("+proj=vgridshift " + "+grids=" + f"{','.join(self.geoid)} " + "+multiplier=1").transform + except pyproj.exceptions.ProjError as e: + raise pyproj.exceptions.ProjError(f"{self.geoid} The name or path " + "of geotif is incorrect or does not exist in " + f"{pyproj.datadir.get_data_dir()}!!!{e}") from e + + return self._geoid_to_geog + + @property + def geog_to_geoid(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geog_to_geoid + """ + if not self.geoid: + raise ValueError("Mistake Geoid path") + + if not self._geog_to_geoid: + try: + # Transform geoide coordinates to geographic coordinates + self._geog_to_geoid = pyproj.Transformer.from_pipeline("+proj=vgridshift " + "+grids=" + f"{','.join(self.geoid)} " + "+multiplier=-1").transform + except pyproj.exceptions.ProjError as e: + raise pyproj.exceptions.ProjError(f"{self.geoid} The name or path " + "of geotif is incorrect or does not exist in " + f"{pyproj.datadir.get_data_dir()}!!!{e}") from e + + return self._geog_to_geoid def tranform_height(self, coor: np.ndarray) -> float: """ @@ -124,15 +202,14 @@ def tranform_altitude(self, coor: np.ndarray) -> float: raise ValueError("out geoid") return new_z - def tf_output(self, crs: pyproj, epsg_out: int = None) -> None: + def tf_output(self, epsg_out: int = None) -> None: """ Create the pyproj Transformer from crs of worksite to crs geographic ask. Args: - crs (pyproj): The crs pyproj of the worksite. epsg_out (int): Code epsg of the output crs. """ - if epsg_out and epsg_out != crs.to_epsg(): + if epsg_out and epsg_out != self.epsg[0]: crs_out = pyproj.CRS.from_epsg(epsg_out) crs_geog_out = pyproj.crs.GeographicCRS(name=crs_out.name, datum=crs_out.datum.name) - self.carto_to_geog_out = pyproj.Transformer.from_crs(crs, crs_geog_out).transform + self.carto_to_geog_out = pyproj.Transformer.from_crs(self.crs, crs_geog_out).transform diff --git a/borea/transform_world_image/transform_shot/conversion_coor_shot.py b/borea/transform_world_image/transform_shot/conversion_coor_shot.py index 8e6d0723..f1674f68 100644 --- a/borea/transform_world_image/transform_shot/conversion_coor_shot.py +++ b/borea/transform_world_image/transform_shot/conversion_coor_shot.py @@ -28,9 +28,9 @@ def conv_z_shot_to_z_data(shot: Shot, type_z_shot: str, type_z_data: str, if type_z_shot != type_z_data: if type_z_shot == "height": - new_z = ProjEngine().tranform_altitude(pos_shot) + new_z = ProjEngine().tf.tranform_altitude(pos_shot) else: - new_z = ProjEngine().tranform_height(pos_shot) + new_z = ProjEngine().tf.tranform_height(pos_shot) pos_shot[2] = new_z return pos_shot @@ -51,8 +51,8 @@ def conv_output_z_type(coor: np.ndarray, type_z_input: str, type_z_output: str) new_z = coor[2] if type_z_input != type_z_output: if type_z_input == "height": - new_z = ProjEngine().tranform_altitude(coor) + new_z = ProjEngine().tf.tranform_altitude(coor) else: - new_z = ProjEngine().tranform_height(coor) + new_z = ProjEngine().tf.tranform_height(coor) return np.array([coor[0], coor[1], new_z]) diff --git a/borea/transform_world_image/transform_shot/image_world_shot.py b/borea/transform_world_image/transform_shot/image_world_shot.py index b659bc6c..516323e4 100644 --- a/borea/transform_world_image/transform_shot/image_world_shot.py +++ b/borea/transform_world_image/transform_shot/image_world_shot.py @@ -37,7 +37,7 @@ def image_to_world(self, img_coor: np.ndarray, Returns: np.array: Cartographique coordinate [x,y,z]. """ - if type_z_data != type_z_shot and not ProjEngine().geog_to_geoid: + if type_z_data != type_z_shot and not ProjEngine().tf.geog_to_geoid: raise ValueError("Missing geoid") if not Dtm().path_dtm: diff --git a/borea/transform_world_image/transform_shot/world_image_shot.py b/borea/transform_world_image/transform_shot/world_image_shot.py index 07a6d77c..277aa3c9 100644 --- a/borea/transform_world_image/transform_shot/world_image_shot.py +++ b/borea/transform_world_image/transform_shot/world_image_shot.py @@ -34,7 +34,7 @@ def world_to_image(self, coor_world: np.ndarray, Returns: np.array: The image coordinate [c,l]. """ - if type_z_data != type_z_shot and not ProjEngine().geog_to_geoid: + if type_z_data != type_z_shot and not ProjEngine().tf.geog_to_geoid: raise ValueError("Missing geoid") if self.shot.linear_alteration and not Dtm().path_dtm and not self.shot.approxeucli: From a81a2a277cafd6443b60ce088640dfa3d9ea76f9 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 11:42:41 +0200 Subject: [PATCH 06/11] test: refactor test for new class projengine and transform and linter --- test/test_geodesy/test_local_proj.py | 2 +- test/test_geodesy/test_projengine.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/test/test_geodesy/test_local_proj.py b/test/test_geodesy/test_local_proj.py index 100a8214..20d31077 100644 --- a/test/test_geodesy/test_local_proj.py +++ b/test/test_geodesy/test_local_proj.py @@ -1,7 +1,7 @@ """ Script test for module euclidean_proj """ -# pylint: disable=import-error, missing-function-docstring, unused-argument +# pylint: disable=import-error, missing-function-docstring, unused-argument, duplicate-code import numpy as np from borea.geodesy.proj_engine import ProjEngine from borea.geodesy.local_euclidean_proj import LocalEuclideanProj diff --git a/test/test_geodesy/test_projengine.py b/test/test_geodesy/test_projengine.py index a3466ffa..86bb63be 100644 --- a/test/test_geodesy/test_projengine.py +++ b/test/test_geodesy/test_projengine.py @@ -1,7 +1,7 @@ """ Script test for module proj_engine """ -# pylint: disable=import-error, missing-function-docstring, unused-argument +# pylint: disable=import-error, missing-function-docstring, unused-argument, duplicate-code import pyproj import pytest from borea.datastruct.dtm import Dtm @@ -21,21 +21,22 @@ def test_projengine_withpathgeotiff(): ProjEngine.clear() ProjEngine().set_epsg(EPSG, PATH_GEOID) proj = ProjEngine() - assert proj.geog_to_geoid - assert not proj.carto_to_geog_out + assert proj.tf.geog_to_geoid + assert not proj.tf.carto_to_geog_out def test_projengine_notgeoid(): ProjEngine.clear() ProjEngine().set_epsg(EPSG) - proj = ProjEngine() - assert not proj.geog_to_geoid + with pytest.raises(ValueError): + _ = ProjEngine().tf.geog_to_geoid def test_projengine_notgeoidwithpathgeotiff(): ProjEngine.clear() + ProjEngine().set_epsg(EPSG, ["fr_ign_RAF2.tif"]) with pytest.raises(pyproj.exceptions.ProjError): - ProjEngine().set_epsg(EPSG, ["fr_ign_RAF2.tif"]) + _ = ProjEngine().tf.geog_to_geoid def test_get_meridian_convergence(): @@ -52,7 +53,7 @@ def test_tf_create_tf_output(): ProjEngine().set_epsg(EPSG, PATH_GEOID) ProjEngine().set_epsg_tf_geog_output(4326) proj = ProjEngine() - assert proj.carto_to_geog_out + assert proj.tf.carto_to_geog_out def test_tf_conv_tf_output(): @@ -64,6 +65,6 @@ def test_tf_conv_tf_output(): yf = 6860369.44 xm = 2.427 ym = 48.842 - xmo, ymo = proj.carto_to_geog_out(xf, yf) + xmo, ymo = proj.tf.carto_to_geog_out(xf, yf) assert round(xmo, 3) == xm assert round(ymo, 3) == ym From f81edfc7200340d058b1629b4dc8bed1e2c2281c Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 11:47:07 +0200 Subject: [PATCH 07/11] docs: update sphinx python doc --- .../_build/doctrees/borea.datastruct.doctree | Bin 189240 -> 187843 bytes docs/sphinx/_build/doctrees/borea.doctree | Bin 3776 -> 3750 bytes .../_build/doctrees/borea.format.doctree | Bin 76154 -> 75635 bytes .../_build/doctrees/borea.geodesy.doctree | Bin 161804 -> 166991 bytes .../borea.geodesy.projectionlist.doctree | Bin 17065 -> 16945 bytes .../_build/doctrees/borea.process.doctree | Bin 3726 -> 3700 bytes .../doctrees/borea.process.p_add_data.doctree | Bin 82361 -> 81551 bytes .../doctrees/borea.process.p_format.doctree | Bin 43877 -> 43457 bytes .../doctrees/borea.process.p_func.doctree | Bin 44261 -> 43841 bytes .../_build/doctrees/borea.reader.doctree | Bin 28407 -> 28199 bytes .../doctrees/borea.reader.orientation.doctree | Bin 20214 -> 20068 bytes .../sphinx/_build/doctrees/borea.stat.doctree | Bin 29794 -> 29471 bytes .../borea.transform_world_image.doctree | Bin 3933 -> 3907 bytes ...ransform_world_image.transform_dtm.doctree | Bin 18471 -> 18298 bytes ...ansform_world_image.transform_shot.doctree | Bin 108105 -> 107479 bytes ...orm_world_image.transform_worksite.doctree | Bin 178968 -> 177716 bytes .../_build/doctrees/borea.utils.check.doctree | Bin 63169 -> 62677 bytes .../_build/doctrees/borea.utils.doctree | Bin 3726 -> 3700 bytes .../borea.utils.miscellaneous.doctree | Bin 40757 -> 40425 bytes .../doctrees/borea.utils.singleton.doctree | Bin 8837 -> 8717 bytes .../_build/doctrees/borea.utils.xml.doctree | Bin 21323 -> 21169 bytes .../_build/doctrees/borea.worksite.doctree | Bin 60971 -> 60551 bytes .../_build/doctrees/borea.writer.doctree | Bin 50454 -> 50134 bytes .../sphinx/_build/doctrees/environment.pickle | Bin 2079565 -> 481688 bytes docs/sphinx/_build/doctrees/index.doctree | Bin 5057 -> 5044 bytes docs/sphinx/_build/doctrees/modules.doctree | Bin 2765 -> 2752 bytes docs/sphinx/_build/html/.buildinfo | 2 +- .../_modules/borea/datastruct/camera.html | 23 +- .../html/_modules/borea/datastruct/dtm.html | 23 +- .../html/_modules/borea/datastruct/gcp.html | 23 +- .../html/_modules/borea/datastruct/shot.html | 27 +-- .../_modules/borea/datastruct/workdata.html | 35 +-- .../html/_modules/borea/format/conl.html | 23 +- .../html/_modules/borea/format/rpc.html | 35 +-- .../borea/geodesy/approx_euclidean_proj.html | 23 +- .../borea/geodesy/euclidean_proj.html | 23 +- .../borea/geodesy/local_euclidean_proj.html | 41 ++-- .../_modules/borea/geodesy/proj_engine.html | 39 ++-- .../geodesy/projectionlist/search_proj.html | 23 +- .../borea/geodesy/transform_geodesy.html | 205 ++++++++++++------ .../borea/process/p_add_data/p_add_shot.html | 23 +- .../process/p_add_data/p_file_gcp2d.html | 23 +- .../process/p_add_data/p_file_gcp3d.html | 23 +- .../borea/process/p_add_data/p_gen_param.html | 25 +-- .../borea/process/p_add_data/p_pt2d.html | 23 +- .../borea/process/p_add_data/p_pt3d.html | 23 +- .../borea/process/p_add_data/p_unit_shot.html | 23 +- .../borea/process/p_add_data/p_write.html | 23 +- .../borea/process/p_format/p_read_opk.html | 23 +- .../borea/process/p_format/p_write_con.html | 23 +- .../borea/process/p_format/p_write_opk.html | 23 +- .../borea/process/p_format/p_write_rpc.html | 23 +- .../borea/process/p_func/p_control.html | 23 +- .../borea/process/p_func/p_image_world.html | 23 +- .../process/p_func/p_spaceresection.html | 23 +- .../borea/process/p_func/p_world_image.html | 23 +- .../reader/orientation/manage_reader.html | 23 +- .../borea/reader/orientation/reader_opk.html | 23 +- .../_modules/borea/reader/reader_camera.html | 23 +- .../_modules/borea/reader/reader_point.html | 23 +- .../html/_modules/borea/stat/statistics.html | 23 +- .../transform_dtm/world_image_dtm.html | 23 +- .../transform_shot/conversion_coor_shot.html | 31 +-- .../transform_shot/image_world_shot.html | 25 +-- .../transform_shot/world_image_shot.html | 25 +-- .../image_world_intersection.html | 23 +- .../image_world_least_square.html | 23 +- .../transform_worksite/image_world_work.html | 23 +- .../transform_worksite/space_resection.html | 23 +- .../transform_worksite/world_image_work.html | 23 +- .../borea/utils/check/check_args_opk.html | 23 +- .../utils/check/check_args_reader_pt.html | 23 +- .../borea/utils/check/check_array.html | 23 +- .../borea/utils/check/check_header.html | 23 +- .../borea/utils/check/check_order_axe.html | 23 +- .../utils/miscellaneous/miscellaneous.html | 23 +- .../utils/miscellaneous/param_bundle.html | 23 +- .../borea/utils/miscellaneous/sparse.html | 23 +- .../borea/utils/singleton/singleton.html | 23 +- .../html/_modules/borea/utils/xml/xml.html | 23 +- .../_modules/borea/worksite/worksite.html | 23 +- .../_modules/borea/writer/manage_writer.html | 23 +- .../_modules/borea/writer/writer_con.html | 25 +-- .../borea/writer/writer_df_to_txt.html | 23 +- .../_modules/borea/writer/writer_opk.html | 23 +- .../_modules/borea/writer/writer_rpc.html | 23 +- docs/sphinx/_build/html/_modules/index.html | 23 +- .../_build/html/_static/scripts/furo.js | 2 +- .../_build/html/_static/scripts/furo.js.map | 2 +- .../sphinx/_build/html/_static/searchtools.js | 7 +- .../html/_static/styles/furo-extensions.css | 2 +- .../_static/styles/furo-extensions.css.map | 2 +- .../_build/html/_static/styles/furo.css | 2 +- .../_build/html/_static/styles/furo.css.map | 2 +- docs/sphinx/_build/html/borea.datastruct.html | 27 +-- docs/sphinx/_build/html/borea.format.html | 23 +- docs/sphinx/_build/html/borea.geodesy.html | 138 +++++++----- .../html/borea.geodesy.projectionlist.html | 23 +- docs/sphinx/_build/html/borea.html | 25 +-- docs/sphinx/_build/html/borea.process.html | 23 +- .../_build/html/borea.process.p_add_data.html | 23 +- .../_build/html/borea.process.p_format.html | 23 +- .../_build/html/borea.process.p_func.html | 23 +- docs/sphinx/_build/html/borea.reader.html | 23 +- .../_build/html/borea.reader.orientation.html | 23 +- docs/sphinx/_build/html/borea.stat.html | 23 +- .../html/borea.transform_world_image.html | 23 +- ...a.transform_world_image.transform_dtm.html | 23 +- ....transform_world_image.transform_shot.html | 23 +- ...nsform_world_image.transform_worksite.html | 23 +- .../sphinx/_build/html/borea.utils.check.html | 23 +- docs/sphinx/_build/html/borea.utils.html | 23 +- .../html/borea.utils.miscellaneous.html | 23 +- .../_build/html/borea.utils.singleton.html | 23 +- docs/sphinx/_build/html/borea.utils.xml.html | 23 +- docs/sphinx/_build/html/borea.worksite.html | 23 +- docs/sphinx/_build/html/borea.writer.html | 23 +- docs/sphinx/_build/html/genindex.html | 39 +--- docs/sphinx/_build/html/index.html | 23 +- docs/sphinx/_build/html/modules.html | 23 +- docs/sphinx/_build/html/objects.inv | Bin 3078 -> 3069 bytes docs/sphinx/_build/html/py-modindex.html | 23 +- docs/sphinx/_build/html/search.html | 23 +- docs/sphinx/_build/html/searchindex.js | 2 +- 124 files changed, 707 insertions(+), 1737 deletions(-) diff --git a/docs/sphinx/_build/doctrees/borea.datastruct.doctree b/docs/sphinx/_build/doctrees/borea.datastruct.doctree index 4d718114b24f404e6c78a668d7c156a88be80a56..d70273838cdad384346e73246420c27aef564a36 100644 GIT binary patch delta 3391 zcmaJ^dr*{B6!)Cn{dQSGR+2|bsECY;4}A2nrpZT?GU5YYnUXw&P#i%Z70Qem$8?5K zXRdgn%uNItab{t?+9k;VamdOCk~UG0l%|bkG}WY;S>N~V>-%7dzxdAY+}}C(ocp`y zZhdQDOGBXXO;ef0X-o&0#Wo~{n`X{WPME>>z-)wcpMf=-pXalU^9}4^PK4X1*?cmV ze&|B?x9pP4?o2rC^H431#kayZem_1ngnec3xhC;1X1!=+~S<`3p~Pl9FzG^n^S{fosKnu&D(9`pX~^h`~bqeI)+c!^Mb+q zaezGyo)4O{9tUz;Sv4qCaG&eGcyu28kMncn^kbV_m|=GCuYY#PG?DlU+G% zIei^qtv(0#W{a7Bb7qp{4`ACrKceKZa3_r7%g>EhX_)=uQ8k~8wqC7lHb?La?I-oE zl#T2{`)HPT*U108!UJ_}(||1e`}6%`$=CF)O}c*83YnUn_=rq=ThA$EpZ)AnPZZz! z+dk;u`wyQ)WUWQs& z2?NSt01Qz6*rm&l&|HKAkfHONNxxnO6U7e&lSnl{Tv)%jg^WX>ppDcQ;f`kXM}wt)EQX!DgQ2=#Zc*ua^yA0P@)L=3Tbl%xc3H3MkwmL0W0m< zA(yef1kxpTbyqKT75zw|lBKgsm5unc6aZm^A1X0@H%yfLLL@^2>Gv}5%2}M=2NnZ; z&Dq+J4BA{6Zu{p|tLhkCt-NV3Rmj2^ZB9F5anzyK*CaBgb7@tFY8S zl|gssxQcEi8403zho*1$9I(jKw;1*EWVW)g!chlXT=jkK81(2zjVBI0)Bu6v_;L8& zq#IgV-05xIjRpvJl{u^t%*aA}`gA1zECh>+W{8j=-%k@r#!qh-GYrF{xO>Sk6!95XVOIKj)8%! zeo~xpJb>-MY}+Kd_W*2E8w=6uf6QJIeWDtR3;|{Db*VSp05RN%m#oT#D6GLa4cV0p zcNg55M50BUAB01LDEp>oWND!MVc6~}ddf%~tCO9Ox3Vh8Cp2YMy4XJj&#MdMhf=ht zd;-n7MT*l35&skp4%Dw)L9)?IZ3*a+mHJ{}N!M43=ohdkK;6Uf1z4n0mYS-lU4(Ci zYE`A0Nj3*i^BO&)>(&g`05{OJ#mYbim zI;}8mLP2KXs=WN%wWBlh3SN0?__{R()c8JD_ujcHF4-Lz5dLaj%@iye|myO*L4W4L&?4%eI1jzoWe@`T!|SEYMT z&k76@?e+M$L?=Jdo>vV{)QIXENuC)obn3i(!Z$Rb&DExNTK<>ZOdp>?NhG!^o$oJ# z%ZYwE=L;j`FcE45`lSuk+eP`MAU?c=f!5wXO=xN-R`z~z)66bBq%*pnIdPQyEtd9r d$s|zHRc!Bba}n#tE0E%=obpr>HQ(Vb_z!S-;*$UX delta 4414 zcma)AeNdFg8NcVbd++Y$a*D{OObfIsv59=t8Y+%$MD#>K0%D3zjref_mxv{5NQ}}X zDiq_Gh85T7NMweP5o@Y$bWI^?5-e)a8oy#BP7=Y|f12WurjEf%_ub>r%&_mlU%b!$ zc7MO;a~IlLT*up8wwJWJn8UVZ08fwx8WoniZf)r^OXg=yPhP%yg?CAD=~}i4W+PqG z1<^w+lJcZkEXkH@h36F81tOpQ%TY33iD2bP;hgngbc?0r z$8&)t6m$Z-XtIZSpA;1B3;h(|E_y2n92X1t@*+R{k4u}u)YHc0`L^0(2`0%URrZo& zQq_AUQ;-xS4HY2z(G{G*@}J&`uu3Jnp*53bl_fY#5yV~LBp26R4F)=(`F{G4#X{kG zn9H>1i$>BHDu+%;L+ea3Z+j@aQXOHZi?*17xaNCxggEr&Dj3TidCg;e@OxM7RCwT< zPCE#{WT`tgf-X172py^Ww@Ixvv}Q5;u9bFmH5!Nu^_@sg?{<-HPXx`Lgt4rv;S+#$ z>ab>!YkzXGF^#`<21C80`SL~uqITtAqFtBYQaipIqps?P)`jf#W8Z4@-3nCz`!!$Y z=s@t=-~YK)m*4X2yC41s=$)FOdrLS?Mth-{MS;df3YiHR z_%`e8dL{&(Rb?=**Tb5>X+cua<8RRVTRTAsXL-G`!si(=13o7dOlEI=*KAUEdA&2) z;oGN?Y`){~Y4&}MF4f88Jl;1A;c109dcFcO$hH5a>U9naSd1U$zGp}B=*5`2$xu&U zXd1F0jC~%S29Od-Hn$ErG7JRmh=Mj+-K;)?_C|w<qP;QXj;I1)KvHKqaYSq9TY`%9QKo9=SxeA&z-xuTjwLX?#S_O-Rgh2y|S?r>}?}0>K zvl`Y5Eyjw};wXp55w@CWSxFC-KsvXrg+o>)kc&7v1mnf=0SWh>hvg3%?n`)Yy_8@; zrG&H%kbzKTB4IW?#KA@vZG_SMyGrodhl{44Z2>U^Iub1wE>f{XG=uTGq`grCqYx^C z)Anx#7cbogW9`F5Qy>QIhzWsUd`iG+rRlGUgTCAeDQI4f(%E|y!g$RaP+&K&$w4qJ z+-H#H{VYJ5*Z{MH!-hdRT;2#y<=FN&f;{Y2Gq`zA6YR38M)(iG;-=W~NPzUj0hlk+ ze%~POzN4bx41-kh-*=#2{Q?<0c_c4A3|*S?Witpos`<7(8eo6*I7A7T4TB_WYJn)E zUS`tMhRb~X2asr|xhI3*=&=(Z_|8oX@V)*w&;*}hkbJvOfdf_Vr9sIy`qX)Nh(~t7 zR~o%GCK#yzAJKea$pO;GE}%z_3RRug*5jLgz(~<@N8Ic;33WTMyhCI@rs** zdRqm%GNh%P}g7kwcpf>NUh1{VTebSsysSoZR#V)3kqwCyo} zq{($plze9KrE%yq8Cha;A^$P~9d7lYGB8wNLimbg$->j_vvBd4`$-T2x_Y|U{LN%^ zyMnL?popGtiinY z_wKZCT^eL6Hmt|F2(^k-(3dx18PDH{VRj{k3rx6}E4Jx@E@;_|}SP+ds(?Lj;J(OwMICwPCirZ_#`zbk?C>khhPFNSEkVJF+$BKelR7!RcVL=wGR zkG~=3;uC26Er{c*-ozWaG70x-&g@5V2c%~XWI~^0oE-nKU_8@|SLt6hjO8C6z%osj zAnDOB4x@OEY%>cVP5B5NwCFf${3gRR`*6{;{x8_9`5I>pWR31Sg--rl3x-;0Cl{&P z_5mgb;pT!nZWxTA^wLQqb^r7PN<@%Fi}p1PhNHB#16y=oQ_2HgyG)j)fpzNajVwNlj24pv8O2$h{DWK_H&-$Cb2GXl2^jPCG6Dcdqzw81 delta 73 zcmZ1`dq9?@fpzNEjVwNljINUd8O4SCOG`3y;)6XM^^@~cQsdJzOE%{+_H#3a;F6W( H?PUZ2YKRxR diff --git a/docs/sphinx/_build/doctrees/borea.format.doctree b/docs/sphinx/_build/doctrees/borea.format.doctree index 8174e0a59a8f8bb6bd87a98fd4252da26ec164f2..53cfb4afa257f173502ecada0c0b5a91b67610f8 100644 GIT binary patch delta 1108 zcmZvcUr1AN6vsP1H|M6CO>XKmsfF{BZCMf|p~K zE<$gWi+r#=%v(|xSdt+YKFtsrq?J%)?IDng?sl*2ZoBvC$M+mQ-}62Ees_Id7oOAU zuIdN%PjoE+mAKcCqp$LuJmRLC;AGGk6VU48@XG!o%GKqjz^SCdE*df{W@r|cxDwDR z;1ZXHz1dUXq^g{D6SO8los_xbJHv&89D0kl(LTpdfHsY;+x&R6i@e1q2IrDG4p7K> z#)P{&a^-YNm=No5_7B*EIWv^fXjyA&#EJOIS_Yj-3>Ssmm-Si&47sx~cyu^QD=;^ zubDx89J!2o+Nu~d#ffezZhw)Y7Rl->0JR`(=`h{xc%6cK3>zUX{;I%#omL8VO=hAw zJ3&TE&m;9t(|Xf6B~E$&OOTFZ10Nu|<<-G=Oc>)qMWDQ)LzV;$^M))q@As>zGY{Vs zC{%I!c!b(NP)Ix94$I`PGt~^vtHMTRUJP!b(b?&Ajl%O7dx9=}%rYv#kxw-WTd1=^ z88xr;$Obo;U@Bh~-8Bs0JKbugT*DPiS# zxRtjn*HoHZSjzxg;60eYIM~8(ihkk(z+)3GH>;Kx>3by`iqd_aRZ@skIp9-bh*FF| y)K0MH!w62C-Hf3Mo%FN};p6Vax1VV0Jl6n@mEX3o=KAbyZ0w5vYo zB6*V|LDDFcx~X{3Aq#>)iTGvAYAVWXEuQnOj<)tr>;o$UEizN$wG?59O<}<$ zudriB;(|_D@yKWc(%qM`4FUDAll&diFpgku(STdV3B8tFmP}=vh`TWx7ll)twZ>RWKz`sk#LCmSlk@@~SrEx#`1VHzJW3dz5j}pA^7ZjlW1Lu&w26WC z(O(&{QozQ^3W^Y&3OGGA0;GOOi#@OE80c0qcYH9ReR@h8PxXuwe;T(kkn(hJ4Oixq z`B-1TJ)f&6MN}q8{bne{xi9@Rjc{-COIpffpi>42eL+1hJ0-qgHA!C`<-}F<76=-C z45(u*0bl;UN*TfmtX`i5a(!8gyEYCm{9x(twhbEQeC1Vl7ac9Vipsq@QF`^3M{l`wbc0!qB73}hZ+uQ|W_l%nyuLjik!dkDw7RM_= zw+Htu6t4vNI}XJyhTbZ~nS`Gq%W-8(Pn9sd-m zk?GwqMVzWG7Q+h@9ET?SIZ(H=Wom_bI8h5+hSHIu!hxLY$ z2bZ~w2=j{VVsTE48uDOT=p#!-&_cYlCAK%i=hMc1A%$MBUO_wTb-WW5w9 zggAHc1_L*3(?>;A4xA-A_E{Yd+<#+#xa&f9G@~7loJAE}k+Wm4qifsO&}Un5`}SZ* z*5k*G_Rnaj_ImHC*m6AN<$_ z@BKO`z9 z)yJp4-;EpV<2nNxtL?QlZSwFG_&CP(u(7>PwrX`V`rC2k`8x=6Gja2izU5qc&y@7-_?Kc&&k*wso)> zVMU*6mp)Fw-6mjn%&#<(Uv39urg0wG0Ry6S+ZivxVuLY1?lWw!dj)O)7%Pvz3IhXf zX=rWBN|TXq!T`C(jLCBJYtVkd)U9L6D(eqGn5b=u2pwG8)H=T?%`KlMJ6?y-pdh1M zEMF7r-2OV`fb1HKCh7kM%$ALnQ09E-4Y(%g;zpj+$1^C86{Za%Lvr_L5HCBs;WZhN zjmgf2_aVt&zyH=!yYY>$irX4 zQ#v^NId>d`IS4Ioo3eX6&T`)QHSC1U%o#0J3tQ_NTW-CowsBr<>(XJyxX^gduWf9Y zrwyJg`v%U#o!(mJJNJJJb3xp;Dl|U6cR>L^#`YL&NrRmX56bTUhGbD$n2a(R0y0EKcs#z5Bhrgvn z*#RQQ$EUqomS2I_zzMgZwLJq%G18#;CdQpKsqXP$YLhscmLk^1CSa3EHeL;RtnIy1F!+KImo(!3{v zQ-Dflo1CwnhA@DYtT{_g+YbJH%g;8+rV&^No4IkeNXzXP_#o>_c1;j+%^Bj~9<4T_ zt{*;c63tU$;d$9IeBK0bf6@1$Ql_2ob|#$zN!4@{DrmCf_@n-rbrqsytNVEhtwKO)> zwzMskCxg){pZ*!brRgUKRZ`-lHAzMQrVOsx$mwfX{fC(v9Q-@26(xh(YL~PXr47|p zh{#=8afU(<=qxdd>AOs@j0YeO>FM<0!D8B@{@7*~>;96it=*XB_3S{5T>BH{=1tr> zSsvK{L&vny*wiQ0`_?DhH}Wk3sJ+_5nbbctEhR7PBir=pp|)kDF;&#Ih%JwdfF~sQ zVi9hm@eCalx@kzKT1fd25}(%`+h&$kZ^6KXU=K-;Uc9d2C(`aKOilR}b6eYznGr9| z!DP1Q>Tal4H$>H=(b#B~TL)_04hyuOp(TL*bBb&%#>>rq7&544zc^uiOeaS{`V?Dvl25gQK5t>}LKZev*Ej zpI&Y&e%_mF@H0eq_+cRYB$vfv0<$x2z|Yh-os)V$3C$~We;1rg>YJ0k7NU}=S3atc z1~4goEN)UJSQIH^EpB$naez6P$(opyLoAAvu@(jVD0(7NUa5(V^ANjCQdW?iOD5${ zxf&^FTQpM6(0m)G`=*i7$D)yv!sQ}m1NrGDrG(KC8$(4JDevPuMaugmB%#gVqKY0E%D0zA!h;q?!VfHpgkLI8@B_<5N%$Sd>bH@Q^y?(_a+^sATjV1H z@fLX?93wG0kF(=Ic|IJY2gKyL`KNc0fVa>vBko?_u}dNP;8O>W@|58=L;nA%&; zbLaC`)@D`dG2>U$W3=3#jS1M8rxEcM&AkfUJ&lM7c^VNZZZ0A&CpXG$KC1 zcZ!Hl2>C}3*a#wwnzrCfdvqV=_Hl&p-$z)ZC= z{y!~pU&&L8-2dd^Nm1`+RHA3k7b%wBbY-g{E~|=}GA9a4;ZqiOt$JVNU}*$C#J872 zU^uBMRBx%@ z$N6-YRWW&jRWW%iJyAYgq=~h9i1o$dUs>d?=Ez>^B9~&M7P)g#ayJZ_+`FREPmPQ$>K1@V%Ixr!@LV$QVZqD1Pqal@#y`M zs)&54X|~tb)W2KR+V_Z6t$pc9XYYp;xeM4E?r+dGUVageL-4Fs<=qcCIvQ=y@a^T$ zR@Rl!PJ$w>Z@x;svH8j?-~5Xbc2NFrBy6(WSBe4h*j1?36`@|vE7I<_GHLI?arsQt zR5>aU!xF~lyV4UA|ffOj}!^C_yO)K*iO>d;$8Z`YRo@m<4 zdYGmQ^O>e_qda;Qrry5~f^iO&5LMS|qN_bbFO#a|L>Xv+sst;-Ytv39l z{XTY8yz=*8oS3gA-fo(MHOlTLcY9Eli!{m}c7tay|0;Tc(7c%#20KNahzTJtt>G3EB`VD zvt?H>1O~Qqg!S#DrOC8vUa9HpdI|jTo&uF@+Y3~(ZJ{SxHb2e{@&dPcNcP3xUs*Em z)#I!-oG)Qli6W+0>@3h&{G8_BHr+pM-CS9q(U)T9qVHSeYY+Nzkw)K>e5dGpvcQwR zGS-9}+;6P6&BSQA&O}=s!{lx&Ci3~!cnmD$+!o?jsB@-sjrV3=1Iq--eYqsvWyK7+ z&59#s&YQHK{NpGbEZ;9DPVnhTVj-WNV0NK;v7{&7-6^KRQI^z1Qr})}A4dD2#zu2c z!@{<-JJO~$F07U1&5$I6Zh&ySrjQezY`Ou`jh)s>nyxCP3+c(+8Z9Fh(RO>IX3W)~ zLvO(39FD75)p(h57%U#DWO*a)Ico074`*wWO@EhzkEY1ONPR50p0f0hZ_@#gs~@i_ z)q1mKS@LK;#>zjx1JSsjeMt7}%<}P(pS+{#=0lnILK!&`EurqAwZ|2T)1%|0X(*cT zL@(YQS0WjrX^x*blG(3^XnI+h+%*X;a$X_kq94h>HvoSr;AvrIs6EC;C{P>CNj6y) zgmH3&4Q-)u99S&@LLpBD@4*!ks&&Hk9_+AU48U}ob}(b(=6Qknq~9PKpY*|0uE-XA zCNtTlPDSX#ry^6|heW7RwX*AZ=!cay!RJcG!Avdt>Txhb9xGaqJRgbBg^xrg+vL+@ zXg`LoL<19EWm74ca$7YHM+@uBWG~eYEOm~#;y28`#3s$*kP^3qji_zc9ek$chA_?0H9G6og#3)xvN z(lW+J|k` zv7BzmXBTm6H*CD5gbOye;yxNyLd+hU3o)~cbi~|T#E6NP&rZgPp$E9v8e;a^RPvAq z=3=BAJ%vu`=Ck!|Iek0$f#;aO)wmqz710bmAMW5bS=#ixlx!HNnRX4%hxMv-JOZur9G%K@|XnHLWw-tHAWjj0S0T*&t!G$ClE_7kItSORHr{QS6D!8mFQgi>( zA~p9fDiUQ2CczO8-#+#9?XT0(0;jn)TQp7f!xNhHr-n4I{lbdXvN5>W-6^puF<9Je z8;XO9X|}QA-Xgj6S{#GAkEzAlOrKP&ya_ILd85tr^NKX|(m=b=OY#c6d%4dFy|c)g zhTd7lUg+(bft%gvrRn`%Y%Er@`2u!O1FrA}ZnOM$7Oud1ibeO&He6AxrtFQyYRaZ3 zp0XdMLOLQ?QLF%q&ymrAu*?8k7nz^~ZfeYv+#iZHpt>#EJBk%h@h}g_5<~7Es-+vG zUJ^P;Epk-_7UBXDC8X9ByO8Qvq9Zk=M3&9PiqH=3p$5|WVgsa$F{VVl2lUqKVBY(V zEMbUZW{C>q5Yp>~P8?Mtmpdq56qP7!(uJ^z*Odr!g9WFTc;j*=yXApPa!%orq!^cU zVO$oKXt<=S!ev2;Lc)*|g@i#Rj7wajIkd{tp?THxLb91V#4jWdmdID9;czg-7?684 zu@^kV3_u+l$+mQn|^0>UXc zNu~0O`FJ-bQPFz|G?m**o%hybyf3zwIv-hppZWHi$Vw)Z%9V|188Uz$;`nC_|CG{C zduRWJRkzl*Ep4i8?f02akk!kZL7O^pI@cPtTwEPRGo~c zk4fx#{NwU#Pn%mo&+lqvO*7ccfboIg3K*z0&MV&E?VIWvi5!XLi;aprWN>Z)J= zx~fihogBL_Xyci{eG36*sMQcPvaF-MVQJNMQ%g*>O^fQP>KoeatKi9@aN7V+)$GUx z_T7H9KCpFQiRJcfK{o{tC}Gcz{1yg$N)}eA&qV(WXYKo9ehq?02e#9y8pjT|PaR$A zKd6*CHuG^`rQT=A5Vfl;#eP21C_I{z%^N^(R@yUiRzaW?wk1pl`(wFh1w8HrhTU9X z4e=_WnhPS;;ibEMmGeU-gcx;1%`*GMEB6QJT`Bg+nGFPkCG1^gCkX=IN(c)o?(+_T z4ESQ%2-s|oyZ)}=!LUftFm+}%0s6^b17sgj;~%IuQ|uF#R1p~G(@OgU z>=NEduj&l9Z*R#SWNE58pZ8UIgPhA!yh8EuXdYj+nIJfyR@z@)%@DZB5Y*zXXZ>tv zC7R#5+5~hCyh0J`_6IMwf4KG^!kc5W)Kq)s?I!~Vl~VUc2dEqFId^G-KHdN0t9%!t zFMN)g7&}{?c;9gQoGrHoqV;!(zDOWaATXk7_8YeUDAaX#3RvfjoZ|VnrssMAM}!UdU7Z-3y(1Adn{ z=KW)j`YLNjYJP{u@}Sc0bK*nF3EXGzdG{%DJm=#|`yju1w1kcv?_JS zr=j*er!EV*G*PwT^T&LZ>~Niq_4cQ~*h<;K*_C3ysh6_@H|;&&b9Ufc3FxICcM8}y z7$EzZb2I${w+tBqL--H7Ops|`^82IkbONk`!N;p-&P8LX0LmE|Q98^VN1+dF_tX1Q z9Ona}jDR|2Djkmollnl}X0(p6p`d!_&p}JuIXG|47;IoP>tb{?>mAo6Ko_y*>`PH6 zESc(Oq)0Dh$=QuqMZt?djf+W(2B9Fn`9IyG5gM6xx zl9}GlEP^cr!r88L7%!K!aGPnto#Wy8Kp78`rG*n_z5! zNBLwZ@r6<~FgyuA{sNNK?;HkveF`MN1a(AstkzfkY&Zr_g<$;bONhs`sqi+K@x&L9 z9nxVNtIQ{du^BdcwR7(^5a76V8U%xPJkMMMoq&gbylBSbSNczp%Pgy*>X zTKE(&rFP&E_~sl4aeO}u+J@rnInH6*=E7?LYX{)QL6%+{iltRf=`{=CK>;|BbV)5t zjTrDT(&ILa?d0X}O45BX$1!XLtQ)TPr8o|301jcNOr>MZe@hqOwp??#6ZQ(YdjJ#& z55W>g!6tYjd_Wlo$&4fuSC8?4vG8Gt8Kw87IJO^v<29J?2{__ICgc7WJ z31USlWT^F??C`Q^fE+*q|`OH)mx1XjqT%%xcV>{@!3)c4GeU3t0y)@ zV8{$GILrqLDz5kdvat0K+<+H8fMQ3`VVDtgDaPJ83Y0I~$GYd~o69!vn~xw4zkUl2 zc1Jlr`UK_)SUnJ;mJMRAWADG<5g0jg zR%>-*+v29yWmnhHZoRED4SPzU3P1iFw!x->6okc#dIx+7m7vCcT8PWaMGn@Ufi2=; z6aI1r)``bV*wqVHh^I{$I+e)V`ZXlr@4b*E>?XD1-b9@7Jw%B^CbcUfD?k||h73_? z=wH8w(cX;)b@P;Mamr&RwPZ#THva&=q3@cssZ;kJljD{jU>LwDtoRf%@$`c*^b$4h zF=5L?5T_cur^9zVdYrl=CLs75R&G#kq95Ak^By|~C!U45Sn@3-;)o=O6nDFNa-%`*M4<^4ZH5-fFFZeYt9K8l4* zBthoL#sMH)=Y&9N7y>ol_yr1CIYTISK_J4Dao_FWFV36rM5#y@-|!-&i!V*s^DCqa zVld=4xEiM6tlywGu)4jywV|e?y$;JFL>|8UI}FFuzdlwUIa}ScKxY zze6&-fjzxMp7{cd4tbT}+Tv|K^q$z}#Sv|+Cmi3J4TbO_Pd-6C{cEK7z>J%1Fbd0V zpcnO5tk$5G7aFKvJ<&P_e(EE6;RfTmbj`r&6ady zw{p;|_B=cq51xTB_%VoVh{P}zeATnmXFC`Zvf8)!jM0d*c;Y5+$;c zxCxD5iEf+U%=YeT28A*Uv4dw&z!nb^2}4;z?R_o0FzgSiyKVkAcH1I1UgXKT?yhcj zw>ag1wq#H1bK1DeYdkP4UkM9epA8e?sK<&N@m#o5+QJ>t7Ve9_Vshc=k-l(l`^xJK zrT@b1>$`BlnAajkN{&J$80AOW^eKKh7?vs`Ef<;bZQaUQ7V*z9i@2FxT}881R)z;s6mlgQ3d!_G|( z$s~Q35HKt7Z?h>DN^{hto?KC!;|>#XZ4Q?5>P)+BDU;Z2f2PxN z`hv z!zAVT$|TV*&lh5%S@`0y%Y;9EktAHnev-ReGCR>M0&!ou7$Y9h=zU0s;WgPW(e;GL zj4xi$SbWx#=r^52KdTY_fi5D6re2+Bw^hZ#0QwWXqd(E*xgvlk=jUYmtYkYg<{XW7 z5$)1MMDOw-dY3*!-IgTUKi5Tc0N+WX19ClGmWX~T^P)tD;DoHc9BYnC^qNFcu5?@j zX}tu;mCS}|q*`*N_nLD(y!VP+&3nzc(tFEw5lJfb>ZH02DkiqwpVa8we%?!@hKt5r z&I^fSC^{P!b-PkQ6De@<>QY9$#v;Utc=$a-wW&r)^-PE7ne_HkA@R=kz7T=pBMn!*4qg~v(G!eJ=xVgPYpP+6^a(j;Y zHEw_6JIU=&eYg!SZC}jq&xS>5>GJi76Xu9OC_=bSSa8!k2zO@N41B6pj2h( zcaub#h27ks9;72qibeXrT09|AXYtYYLO8_66Qm6%$aRbt7l)2OJ9LxJ_7B# zMi}5)Jdr3ysb_{8cu@8DOggtxPoipmCL+`gRY|m9&q=sStg&GB8?am-zfwx$h;lK! zueciaX$c>>av=tHmW%MAOqyDp5iLT=PDzXiu($*4yJis_@-Pvjy&d*i_YG|Z!Z7d_r)Oq%1xfXaZ^%=UgLG|N#2Skf!XvzL+5*xkxM3~bjT<1%> zML!LSzY(9Exxq)63InZ|^Dxe*KyjL$)#r*2E%FFRKdvL7_>V>1JS7*t*A~4vECkCF z!5nsu*TUl*xED7iifB@x9Ro=NpTVdpkAc*rGZ>s?B^lxfsh^P!uX5`$-0?0Q#q2CF z7C(Lg0#bt*pgb^1ko_}*?XnxY)0Ch*JYf?FkwJN`7`~kEWDH-P=lR;fc~^;hTwzMJ z5AwBGLt1TXo7FgeS<|A9rFF*C=FaBUCMDIlxV34SF_nX^{EwgiOf^m9F;#VqH<^|; z)R>w(+igvaxmnp}Q(HrOU1oE2?UL&Hx;A>i%1l*N4UG-$RaIHdov9P4;$yj5REb%6 z9O9xpPhItT(nY>(AO|+ySs?;AsuOk$igW3ojgu=yyw8<|D&tDy%%;XV;{^GWj!%_B zxS?w>?pFV~m}EpLX|$zI*Nzgt8@)m>sWlM!|AB!HINlB0nwHg>N+vh8Hg>4XAb9?t z%!B()u_Vu(-s|(!mf|sLbGv^)ErmcwjgpKjrid&^lKbl%zVc{w zEDtLxL|JGJ+tPCOj69jM@yQQiw|GB~6QNpkEXHd9={2^$=ecv>H)NJ_;Fql0ps)p3 zH7wdhZf#7{f;ZimnQ5G5qs-pghTr}~#UOv|$`%P)q0A>=W=Z({VOe1urEn#Ly4Xsw9%kW3Pz-1)QsZ$Kemld@0 zd0GXHE2vb-aAPXhFwqZV;`%N$xG^ox*Gg#FWSmQAO9lW}?gU3_IDJ#|@4U(eJpKYirOsfkwRG-UQO_Ebmd**7 zOy}7QOjeJc<2#wopUdx)&d=T;cDd3yzA{JL3Gebm4Qla*v|ydhfolttVQ5?cK74OKs5KHt2^4}xHdW>yZ}p1 z^2ebb1Gb+X(}K5LR)F7KgS+Z;~=s?M`lwYz3|eYA%r5BivRcriS#eeJzZR-dilvFm55u{lBp5 z3Ssgwc;%@}bQEyx)We;O)DnCLnV`5~l@vEAIIc$2!!CZ7iHS+{9^Y0VLt|S3_SA@3 z;E<10<5m9Re+y*&_yB|S*f$VV85T4`){jX6dmc5%E)tVq8&+H?#;K`{C2(0IJmUEuKjf!6LrU z1+>CO5z@gkv7{dL^agEV{um8pN=Cy`CQC*`J%Q7rp}w$BG~Ci4w&~GujUsM?H5%mN z4XGh3c}iO8d54#iL<^R;2tRZz5i0?Cbb>rLsD*k=;FuZI$q}Izazx;IYHKA_>fnHQ zRpZ&X7#6vF84fWU+R=fe_~>vq_gFk|DO3P`VJ(vHm;y3QvBIYGSP^CPjP}{ni#SYRIv$!O%s8S}j24TE zc%Ln*i)5HAX51cOLg;0fOfS;HgcNX?P?N)i^>KopQlx#*C@7L2G%Q7WjEHR-sIC1# zMJ}g0z>_@Jtf6trY8Ddpfe5tn)$fA`Yf zKK$+L;#w_cb;K=(NDF^hl1h_wrAeAnZ2F7%Oqi|MI}ywx(~28bigol$@S}&ODbuWu zajQg>k63SYT)9Sk;^RM;HO#hR)>@G}CW9NPe5v5eOuBSz3~a1kR@dIyT-V0+ab>O* zZ(A#p!&!ENl-tl@OX4S_<;AsPZopA`LLZU5{r@4}w@yqKZ&@*HgNVfo>qN3^RObNk z@BCM)%W=zkQLK;bUGE;b&f7@(|0q;%6ASc_p|`t7di@s-eBgFb8zxDKqJ>c`e9@4P zcY*fy<+pA1L0&HY!le}QM-cuXqwM1gSNN4Qs#7XlfmU|#g-fJLG?#g}uBU9`3zwjj z06xfa9fP){bm0xI@+Ku|^C$shT}S)KfYTpc&BV4TIo*n$w4{Ej_i^A(m4OpMbI zf}7v5GjSjb09Dmbo+)sgQD<|aU?(%9&SY6lsmTpuT$}kt!x$ml%?)D97$=AG32wHO zIL^d40bv|acjn~nlDwN2NbB)nlbD>Rv5F}}XS1xPB`1)E8(weZ%!tf?Z9E5J!(3AZ WE_7c^_ID^^EJd+ZWi!9yEJgq+#aKcB delta 375 zcmdnk!nm@Pk)?rk>b#9CRg8==lN0R4h5SoPGIQdCJstIv^HWme(=$sp&t{y(#5fU$ z?Bp8z?9F>w-ZC*R#;qb_vp&ZxcDyPk>vM=tP8B%LxO}s&U?(%<^2vF|Dw}VMgfT*y zVPbO_*)o=A$aynv{w98fiE%C-`z8x$2yRZ0*5)CkY6ol9TqXtvpk-2Q)!nrD& nHI1AZA>7S*#s?TD?^5C3Y+|a-g)b;>F*f0LmCEMn4zm~m==gy_ diff --git a/docs/sphinx/_build/doctrees/borea.process.doctree b/docs/sphinx/_build/doctrees/borea.process.doctree index f756b26aa353ba01d990e48a54e6e71a47205347..388ed37add0cd44f61b4b676b24da5618f3333d0 100644 GIT binary patch delta 47 ucmeB^{UXECz&bT^BTEb;qr>DxMsZdr{~%Y#&0UPP+>GH!0v~ziG6Dcf$qlvu delta 73 zcmew&(gBTEb;qwnNIMsXqk(vr-a_+U>*{p9?V)cEwwlFhY@w%m*bN=6+|MxrJIp5qp%{Klq z8og{&T#xYpz#2SRZ)J-du98A(g>wuXQ39AYHV197E2-CLGr+lMfo!o;V$?xlwFBQz zdji?iX})HFZ1gTo$Ht5K)NZjt@RjpgVHqVS><1igv(PQ;X9i2N5`%k?E$wJcil@w! zRu<2c=}5R^b_cUd%1*g+at-n`4mf6!KO+Iech7A%WoOm`R?f4Kf8HeqPDB&nU|B5P z%(5DA>}RBh5JumUQgST($Z{ig&}!d={N!D_KI|(J+ExU81>zuLkF5^SZM9II{VW4M zt-0WmOU{DknE#3BEQm*6X?qYanOv(~CK;6m964dk&FchA(dm=xh6a-c%Tm>d{S{8S z;MU^xSBwYqH&D@*0Y>(c4)EYM72fD}8SltW9lZXELh@A})}jdl`YPkGwMN7uXYB?B z>2L(n(Gb$Hs|*}dipQC4u$88GO$KO;j(X5>K9TO6Hk8$N0d&@&MR6DUHOIoGck>~dF z;5n7FpJ1RSGP@npvA$~&6?c4Pz^hWIzH6pQ6BX8%U}mq}9S!8ZqkuX5Dlp?c8SL`? z76uwr212SF>VELsq^n@}gG4NT+$JK4cr8!bSgGAM4b*8c+_YhERD)2C_XB1Myn4l| zF(d^Szm?~?fp!lm7!|`R49hzi??V#0zJ#~mH7aj^&yVv_twm{L zMF!O@dho?~JpKLko7EGVnjy4r?j^wWiB0?SCP+WNih;$E1H{L$5IsTsaT5e-__$c` zGhAG1#9bpAo49Aw!Hn}$rtZ5 zf>R9CDNVqCPl04Z)X@l$jokMPn9et+LLmCsLYhBhoRg_C-Zft_mTp6SI4cBOwE$}4 zxHtI`DAH$!+p!#K^e$;GI~PbtDCVkHz#;YJFr+(JT-8cAs#XG#{}nzxTe<2yAz?&e VICDNcg}q9pgjH$$+yb}?{{X2$kHr80 delta 2744 zcma);e@t6d6vumB`wEp!%3ySmfPn0G((R8jMA)FgL>NZM$dtGlNN`FU62j=zfZ1d- z+v<;Q@uquF79tA+vKdj2`b3DjM$G)3W-&~+K+rfRZpK9onyGltZA2YjB^#`KwuAE zTip)Umf@D%8o)h{+Y0m;l-;ZLI(h1eOS23BWG+xUuF-JqpU;8jD+38<5 z0<1ST1s~YZuds)**ZdE>D4qpZ1$s8mC~!*ZbHP=IQ_i1ML)pCQwOhEqi2o=a-1dbM z3*)3-FUjOSg@S0^UFrjy2nDddvY-OJG9%blKAj|&u(tAgHgo^5>J6v@R5qTe+GSk~ z-B?^pCStpVtbbh*j?{HM^KNclghWu;M+7Mp#ycN3A}C5=z|(1fF={2?NoS#U&a%@c zSZ1+`NezG7Kd3II-1zO3Od@~r73o|F={!d*iOt8yl8!@Ry7_`^Y)8BWVipXK$H zW9#AdR%01!J?vl`{M`9;iphi#e?7k{v|PNj{+GzL*c}Lb#of|Uxb>a9uD~k>MjpXG z*bS>(hIxI!YwTUQgx#gnVa_g=a^vMQf7>N`yS~E?IC=|v| z&d3=>3+2vb;iuotT4kW($`4d;WyX@0JMr_7Y7;3@u;f-qdKtBxQgCDa@BE=4oyDZv zfur*)tjo}`(fKr6Fvo2YA6EVEdDUyqj51@-EcCKppSQkU2u{vUq+{%KT>*k8avYw% z$pSuLJO5142UYl3fspKa2#36~Rlk`G*VSc;H7>SmEvdkdwcBAb>1lSL=|SuG^w2*^ z7rw;)YzEN$pfv&3-^zrS73h{YYtYBDAS~@ek8aL^NWvb}`OA%+gK=d=8S4H*pvDt% z9NzePVN&D>o^vCIXA>G>bZ8SCxx@JVNgFJJ{qTb1{}eF(9-#%dL6=-c50!EDp)2t~ v;12@r*ggDrmNoaZ10_aMx)h_blGG$)^3&34%Aj4_Sd?&B=IMWx!72C;zAL>2 diff --git a/docs/sphinx/_build/doctrees/borea.process.p_format.doctree b/docs/sphinx/_build/doctrees/borea.process.p_format.doctree index fe449a88d6e215ea9291709e01b9821ed6aacdda..60b47981a084a10f4ec144a16a2ad5ae48184861 100644 GIT binary patch delta 914 zcmaEQjp^WJCe{YlsoPd=WX)$}^qf3#sW_{Xe~_!==6Q@YOpIj+fys&dQJd$n*fBG< zqX-skF5@`JhAg-_k>8w=QD^f^ff>wUGar|%tb|z&_Sh-w5{UKTwwsw4`!TE!nryGnJNZ|d$mD)I*2%)@Qk&m6 z_ygi0sm+Hx%-Fyl67+9F@zCajfsV|KohVksOfCo(-aI?>J1aJc$=WfiVBz#HMjsk} zz{p7uL-7Q663`P~$s(I)Bx86YX7ZjC$<43QHljNkEHT+CZzaSA$;p~ir*EE--@yuY zyk#k><3VA&nZH6B-2-Zq`76veZ>Z*CL-PPwVzNWiUZ@AavCz>BjsoI>{i#0JkPhoBzVtT|O467q?&^|>Z@u9Sde3{XCpEV8T!TjH9` lv%DHbeB<)#D11;_s`Ey>J@5B7A_PtH$CjZe=k**uZ4hKaEm zhwS8oISP~HIVMk#GTPk2V#mxlg`h&?%~l-O*oaX$*@{DS@?8GojLSEt3d~?;Ts~Q` zHFFl{w|(;jsh_Nb6aoF>J6T$BIcru7 z69dC!K{J)jFBC1Ak+|-v#*9eZ1!^l8C(o4Q-t4E*!^GH%+X-rugItXTpq3=EqE&4PhW1Tn#Zbkb4`=tQv0L#y+QlTR6OZ{B8e zkcn{)KIi>&3);-%u%3;OsvoRbeXQWHk=iWeVaCP@=7OWa$8Q?mFo@Y49r%=qaT;!C z#79I_3C0zp>85?G2eV1XsKS$D-0MgYX-y9NLN diff --git a/docs/sphinx/_build/doctrees/borea.process.p_func.doctree b/docs/sphinx/_build/doctrees/borea.process.p_func.doctree index 1821b41a5a6713033b896a0cfba9af512c7d9fd7..0e53563e132a32a8cea607ee009d2dc164659ab6 100644 GIT binary patch delta 1012 zcmaEQlj-0!Ce{Ylsb;G;vSu?fx=$`-6lZnv4{~+fJc}`hiLn47FnOVe+~foW_Q~(r z^*6V$$S_Z4W08QUg-LCG&(6#~S!6kyFi?l%(j5?dW1ZFTZ>P$Z9DLHw6yVqtn z5phN+H(!8zaznED=AEL2jFXR>2yC_y-_A6dLkH6=gUK5t#5Q+G#jsCiS%E`(ay>uW zxJ`oBMRWGBI|d2*z&aGEihg7o5yxAUgTD z*>b3{ljq0fZvJV0mI=lO`AN@Oj1k6%d1{GG2_x8gL%TdC#vT-#N+-)3@NV{Y)L}=K z*u2m~8f47ogPs-;mkR|p5GE|U+$N^SlhX3B;`@*vce zo9D+_F~eL8@_}O#iVrq7B(H|J-X(P#)8uA-Rrwau_dO=iwt z1v9-~xnQ$(!8KTTZPqWgLkX+MS^Sg#O;Fo>x}+FlV|ZB)dUVN6_G`A=oLPwxWgv-= z&A)1R(4!3`@f+p@P?TM1fk)Zq{p|@TP5`CB`c7zc@pNNE7sxRC$$CAalfTypO!ju< z+^pZHj1qO=+yGNFznN|Fm#NTnxM8!;^bS^VLU=nzoeNj)nmlQF5qcV(+_j<_OYHAQ cQwI*5$#a`ICeK<`%$SOjC}cJVub#vR0Pp5rL;wH) delta 1332 zcmX?jjp^x4Ce{Ylskhc_WX)z|44GWWC@$n*T9TO)AMELKly9H;W0(U}juC z`J*&p`qJ@lX8Ot-|ycswD5I$Z1;*wqt58O$%t7n(jGSOaVCPM- ztz%-Gi7PBNE{oaR?GVI{SH6fT&k7C$$;}3y^1v_valw`Z`!8T(?8apY zFnMg&3(99^T!2T#WW6Al$$x{zC$CQz*z6pp!A6{F#@JP?SvT3i&T89i9Cwxp&V?kA z)I>30$beOVlF5yv5@6_nxL}6|q#R>nTujJWuXANLZ%W_AN{q@QtXbilzzEuy7Y~de z5EC3hW<|z8XTZ7r#Vdf$0CB<2ur8g0GYu(DiP;=b@fBwpQk)XId4IJc&h!J6pS-_X zbaH;va@H(vZfHo&YX*fBlnV)|3vHl~0t15NMbfh3^G2AcCKB(cdxsmM_(`1Jn z35Xh?kniS8oEBWDLX#Ust}^Ou4i`PaHksW;V6&mjWG2QE6q8~%d&~Q9A`5OlsKLz0 zl%X@ZE?#o;Bh4^~R$l`jCdM=*t$}7}9?CGeVoS%{!pPpH=xtg(=g|QTe z?BqfXpUvrPx0o0kaI5g0>?^{*c^9W97a>(w8J}-f7Cphnmhn78&YN-bd+GU1jE%TW zj@`^5@56~x#pXf{W=7U5b!G;J&1IVTY@A>w*yNY`5loXG3rk?}@#I1uugxorq?qxz z)+cTFtcWr zurn}Bz7?mkxii)u=ra&^^R2jtjGSO5*k}6_K5*iVugMbGMR>eE`D1o9V-gOB0^?g` J^W2;+MgRop&QbsX diff --git a/docs/sphinx/_build/doctrees/borea.reader.orientation.doctree b/docs/sphinx/_build/doctrees/borea.reader.orientation.doctree index fa6b6f357ea834ac22c5fb886c344dd6fec2d40b..0b2d861927524b1ac6f88c5513b02ecaf8d6c1d5 100644 GIT binary patch delta 318 zcmex1m+{FQMwSNFsgWC5iWnKaC+o9_vpV?)xjJrMz}Uyc*nkk29O#|Cc|VIdGvj0w z!Ia6mY@(YhIaIl@NlbPWKE7zT9k#)nwWP%v!AzCOUiPM&XUh~bPIh+| zn0WwVOh1182Q6yp^(`zhXIVys6Mob0D)H`&0DYx6#pSKK%xH!@}DY<^~VmK#Lx zu+3xy(m)reZ1%EW%{bZ9L}W9cqa+ua7tc%<^Ob;v0MNq}9?CGeVoS%{!pPpH=c`{=k6Jswf zSv!_GX2u0LWGCCPq-?h3u;Rk2VzMoV#AE^C+(fCI ze9K@JYgRim0|U@`lAGrnZsCS=RW?`Jx-vqzn-AEXXXFGc1Uq)JgC-Zw-~$Fw`eX<1 aRJ^_cy47*AvQOURrQQp#5 zH~F8w&gNqZEsTsc7$$H{j#lQMyud4r*oG{=d7n;fepKUvTZ z)!vVO7g^Y^u_0XiC-@a3V;+jV9+T(C^KVWMJH~-UVk^kr$b@-pAbTeZq_3F#JxOHq fx%4%hljjvlKoTV=4NiVmxPvheVeaM=MY9+IdHDVZ delta 1021 zcmbRLjPcP6M%D(_so^CXSwk5ay(Vw87Z>s`Ey>J@5B7A_PtH$CjZe=k*<8+O#l)D6 zLw0h$veRY(mVZo)1-MnXZ!Tg#CV*GP51hf+llG-zB7gd-5e^ zo6U1&W-)VoWny5+kn?7o%&4KWIZL61k+BoE;mMQpl%C*JusL73n}wr|8DijOMvVx( zh6PQ2tIId}hmX?aUL^q_TVS$;)>52?0|ObXVY8LCHp}GMI$V>PH4HY-(-&Z5ti$bK zkICLf0+W>u593v|+1uzWGsgrLct{v+4m6WtWNg7_u!FhicFrxdb(DHn%Kb;Sgm-vh;!N1xCgy{FbtAmU1XyBdBWf7q@e)Su=sA zZ$9Fl$2^(Kg?qDww+BH#u}*&F^Nf(&SvOnxwXkr!VMB8J_n=pdjMezu-Vn#XIW+Vb z2O(8kS+fe*f$lbspU1`tW`fh_&D0%i8QY*qRebZBw56PQbL8X=1v@5hWR}2|om&fM GF#-Vj-eV5{ diff --git a/docs/sphinx/_build/doctrees/borea.transform_world_image.doctree b/docs/sphinx/_build/doctrees/borea.transform_world_image.doctree index 063be044a3613e517eb4402a4426981e5c7b4209..96a403b3d260ccb1e8406974e6dabbbebd73591b 100644 GIT binary patch delta 47 ucmcaBcUX?4fpx0IMwS{zM!(68jN+_L{z0yen^!Sj;ASjF5?I2!lMw)8`VO-I delta 73 zcmX>scUO+3fpu!oMwS{z#^}k7jN(H6r6rj;@xh*s`pNkzsqyKVC7b6mUf^bIz$M$o HyOR+Bm`xdU diff --git a/docs/sphinx/_build/doctrees/borea.transform_world_image.transform_dtm.doctree b/docs/sphinx/_build/doctrees/borea.transform_world_image.transform_dtm.doctree index 7430a2fd6cdb0606b770c708462b018573cd3e82..7484b6aaa95eeae493fc9ebd1236f3862bd929c2 100644 GIT binary patch delta 338 zcmZ2Jf$>)#BWnZe)O`1itTP!IV8&W$0{v zD8G{#NKaN&RoQ%4Ig$}1rl@+2adM@l$Yufc>nNsf7Ssx7M>B2BWILnfFcbKUec`6H xnE8WD1DYJO*~Fp>Y~tkOmMbQQn~H31wJP934~NMsU27QoQT$-IxxsBYBLFScXl(!h delta 512 zcmey>$GCg~BWnZeR2h$rtTP!IGbe8p78mj_Ey>J@5B7A_PtH$CjZe=k*}R+aGZW)x z9I}%?3U+M{Wwl{uJcwJx+|Aycog6q-Z2l;?pAn}l(1rz@b49qB7%$+qVa8@%@uO^b zRZP|u7n!_U?ig#igbf}35m))BBAsA}>K!&R(VvzQqeK-O&TF!BXD0M7kw>JM}ToLgYNiIEe`&5-kE loUCTKgDqnlh`ITZWdj%9=$OpuTEjR8cUT#2zU;c35dd(Iwc7vy diff --git a/docs/sphinx/_build/doctrees/borea.transform_world_image.transform_shot.doctree b/docs/sphinx/_build/doctrees/borea.transform_world_image.transform_shot.doctree index 2346b9777d5d14827c5070f8dbaadc5bfae4eff4..0075addff709dc6a8d6f64c1198a980f69f0b179 100644 GIT binary patch delta 1629 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 IRpWiezv_w42mk;8 diff --git a/docs/sphinx/_build/doctrees/borea.utils.check.doctree b/docs/sphinx/_build/doctrees/borea.utils.check.doctree index af33e8dbf4b299eca18381cf52694225b62741ec..d54c3b9eb98a588d71110732a7751bf9a2fde3c6 100644 GIT binary patch delta 1159 zcmX^3mig*SX4VGQsi(edWKCvdbeY^(FV5=ZALQz|c@kqG6JrTNVDf=v#m#;!D$J8Z zk4Qk&fP^Odv6xTRmu27ln>~b`u^Cl8OmgyXcHYTP`HwT|Y+ftC%m$=3icMf-)S0|d zOl7jPmj33c5(SKt*_}i-OG`~+Vr;`SWwX9)0~3ezY#wtF3CwYs~{Fg zZ9Zu;gAHa`m$N&}VzBo#U5g=>Z*?nUV$4IaC}{I?PZ4IuCKSQ!%>lk{V#tD<4u>&9)6T?Lg(CiLn~fCZK`ln?KE#;lw35 zdCJoD5Yxf7O_oqi*!+3fO;(`T=8J3kQEc0>4r-gr1{d`71M{@OlNKu<>~ z3MRMgf<~zd*v9R~_H#O%Q+!;&I2Oj=lMvbmNuv`i{A!n8(c z{ZeKnF@LzyH4A4V@pY2;Hc1*Izrda84dHD9{-_V)Xo^S$T$xxe4Ww4;F#u z2`NbePr>rhRUzYli{bm)2V$^a(CIKH@6-PY)9Z%FV#ra_>l=xQi#Sc7@Qy&PDbS$P z<6Y=l!F}6u=2J6-6kO+x4VN8Pkb172P?i3VO~S2zwJ^&?Rw92TVmaVV!R9$i@5a`b*VXV`Otl^6C#~3*98g1CQo>|vPzFgf)kZDVPcb;OV$lavb9K~&rQBr8hi%KW9>V*I qF95w_ewdwa(71u{bRn!d{m_?gCzsTJ)eSvg&ykR_$bn_wy2x)XRwi!% diff --git a/docs/sphinx/_build/doctrees/borea.utils.doctree b/docs/sphinx/_build/doctrees/borea.utils.doctree index b70cf4679d3f05defd312d9a5095c3d0c1a24085..d0d847f750eda6b6bcffcee5a170bd7391c87c43 100644 GIT binary patch delta 47 ucmeB^{UXECz&bT^BTED$quu0KMsZdr{~%Y#&25aX+>F6U0$+J%G6DcePYtL5 delta 73 zcmew&(gBTED$qxaP%+zRM|XNDi0_!`Jk8TyNQXh2Vvgkg9=HU$O4lODwIw>q_vzW17wioL}94;zX*1^r7W=Y&B`Q`u}2ZpaLCCiw@HxcUkT9RTze9O*VEy>J@5B7A_PtH$CjZe=k**ukTA`@dj z4%x|ua}*~(V0YcTlI158<03q&Ha}o5;KHi{Xin_p*Fwh`mv7!IJdurY`Q*k9)y-K_ zxr|_@%H}`P^BLJPmS@O$Gj5(Qdx(i~CLa5Mrnzl?s_>hGpsL9!T3cDO0+|^YfEG$l zHghuGoUU!d1{YG_7# zQaQQMaTROUPF9GsHk&zl1Dyors%&2FF&*e67ej<1MCo$%`?LcnUT03B71=jfysg$aw!@VHXtEz*m%Y+W18$} zE`cR+fs)T=-2_f%#>M!;PB+1M@|i@5&F7OdxrtIa`C>jW?D)B$VK=Ry92j;`uF7WP z@@$}!VO+42KUaX93=#r6Ijd>{6JsMjC)Kr^Z_cl+Wn!FcT5%lfk#j^_;YjAjWv*DZ_i~w?=fh+(3 diff --git a/docs/sphinx/_build/doctrees/borea.utils.singleton.doctree b/docs/sphinx/_build/doctrees/borea.utils.singleton.doctree index 00a7d1f07ff902b27da5257aa9d74af005cab051..69be448c8a5849b652d0278a2de159651adbf459 100644 GIT binary patch delta 232 zcmZp5?R8;kV4cdektK(b(PMHUqd2RRe~_!==2?unOpHZH0){N=%#1Y%fyss}VUy*B zxHdmxpU;9-f}59_37f>^8T@A$n=nigp8Q>41-kfVd7&mI_FzT^h738s$$Le`Cm#^` jKG{TAVDm}Q51hyj1iB}3vW-GMV>*h-vYS6COlAZC=N>_8 delta 338 zcmeBmX?103V4YgEktK(bF?4bvqqvZNX-Q^Ie6XjZesX?FYJ7TT$>v_hTqeeP9I}%g z1j07wvRq_h?8L1iVe@YG`7HQVT<2lNZ^qaRUGV diff --git a/docs/sphinx/_build/doctrees/borea.utils.xml.doctree b/docs/sphinx/_build/doctrees/borea.utils.xml.doctree index 49c749c0cf9e9a025a16cbbdc9ed4354d86f48a5..7e35aac64c706cd52e45367cca74e3b67f9b0af0 100644 GIT binary patch delta 304 zcmX@TjB(>qM%D(_smp>kvc@wqI!&$%6lZnv4{~+f+{b9n#2AGn@Sa(dnK2n5F!?>R z-R1`Nj~wWNlN;FiCO;QA#;CJ-o!|%V$I1EM*+X2xMqWQ{U?765Et?J@5B7A_PtH$CjZe=k+1$uz&cv9G zLw0h2h23Uhme)*-1-Mn%Pqt>|+ML4vjDw)6$r}VtGA`d-CHR4xEn|6xoHygaoVd`v&@(o7$z?;lALVnV6-_@$CC{rw0VJ1DI;7~WwW)( zBF4#*8r+*7n+7m3=HYO_<^YSmY&d0s!Q(Z##C{oT)?-$PrJGG11lc&jT(IxF+|G02 X4c*Bl0X2*nIBW-+FTPnNu$K`4{c)e% diff --git a/docs/sphinx/_build/doctrees/borea.worksite.doctree b/docs/sphinx/_build/doctrees/borea.worksite.doctree index b01ff83e29d3df2fa7ce67c9b4baaa3ce41cd16e..57692e6e6fb5d01198a4c7621372d530648e6eee 100644 GIT binary patch delta 916 zcmZ2|hq?VGGiw9u)S5RNSz{R)9VZ7mh_gER2e~?K?qPIeVoX8^OyO=j&EiBeJ#VsO$#R(cElNA!?tfYB3Nv+ccfxhhLw zvcTf*%?15^=wXdeGKclqKL%TJv8=I5MgI$LwmVb-|qLF|KayP|MQ(2|7y&9 zH_~x>r{(8!st^)@l2h7s_HuOiVtj^~$2Kz4zM=?ga1QO9$g_OMu+f45TGODfU z#Q{r0jiv%q_D-U?$_RaM)bWmFal=tEk%Sg!eWV)|>7!9s0gB{;XM59B4G0DUlrk~IylInV6OTdH<)@)WaEEi3GB=oGW_e+%TX!)O^CB@pbh z;?1EcT{D-UJz#^PJBF?51MPfpeWa0bZq!zsKu*4m`RHG|+2U>>9P(hxHRqPHVp1Mk zWC4{o^MLBEw+bY#eP7+s5o^Gw<3YNu3MM8OsQRO>G8lXmd*UaJB5!fny;~Ey0hD1B zlZoS^-feIdBoi(O-er?$s^`E*_;~g=6?w^F59f9OgAVp+Sn9Zv-q21Q*mEpfW9k*E z{<0ekSjyaIV_*K{u$iT#KqmELG=coN9@8(+H0?zBf~o~ab=H*CtX1S?83xkYvN@dP a+|{*DqVE3;%!RjPNXuBt?!-TZY4Q(u6!*yh diff --git a/docs/sphinx/_build/doctrees/borea.writer.doctree b/docs/sphinx/_build/doctrees/borea.writer.doctree index bab0a8d2232afdfff4b20e9e5e8185c3352aa8d6..567a9718ef357dceaa9ffd8b0af5245d5250cfa1 100644 GIT binary patch delta 610 zcmbQ%#eA)unYDp+>gmH9StA)4?I%CnC(i2RALQz|xq~r?i7^8qFnOb%$Yikir~D^#W0RPC%3pNyyJ)Bt-jkQg25vTuHRS+X)12yq?rQ1HA{nbtTn!8;>B%jX zW}7Xu+0b1NlDGqLz4zt~Rnfd)V^umFFpQlnFh_gyl`hl(0UIqa$854?w$A3iz2|t* z0!JFC3uOG}k8`eygN?qwg^>$Q5hxZHO!hl00f}g!nQoKy4isVuz7;5{q$i7H=uQ5A ZFb_=>=+Mb`4;3)-7FK4)7Cfpp=d*VT;#Dy@pWSD2spK)n<(qA!%K6wbmS@O$Gj86l zv4V*)AGgVFn-6I>;dbHXM7>}>-0r_<^PM&82MYtk=2N!y+?-%0*jiuD945wU+}27@ zKE2;+v$oGhCdO|3s>~<*MvHDv@UP=0M&)kStV|A|bGTwIa&Ur~VCURViNPBR(vw#o z(A&H)y#{wk0OJazN_%rdmLQ%GfvTF^ki|Xuf5kG^EE{eHhRLUFy*GcVjOLx3Rm#0N zxZRI{W9kp;ZD#MPC*YX+gW8*4_OKFg3{chNmp$B*V`c*#vz8C+n0cEQ%`q3}1araR zb9b{K7w%Ywq|ya=lhI_Q{e^@gd<8xeK!H04zk>RMb0+WKCxIoKfilu&pF>@Y00yc@ AlmGw# diff --git a/docs/sphinx/_build/doctrees/environment.pickle b/docs/sphinx/_build/doctrees/environment.pickle index f6c6aa5f3d27b654c0b1a4bae1c70c05ba2a0da3..b31080d2b1e0f4112275eeb580854a4e503b905d 100644 GIT binary patch literal 481688 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

k*8{xJr;+j05Tp1=Cx;-SENf}OyWtA| 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

q;UVla8Tyhz6pvZGQR!j0NG-N|o$x*cBk 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≻IULkooL>zeIln7!-+XKwZ+i`kU&f0Ib2&{M%LCTTUASpY= z>XL(Iq7ngZ56D7&8`?kyMX76Y;~{4>{ls?kPkh1ctcXxgr3$Iik@g?D+R?uhawfi_ zBBpUru~^81v{>fo=g~A_AWAFBaI(9aNZ|a*T+NK)sZJhE=V@cAMbKr0AWG4tMmRQ~ z{^Y}Z7TQ6?O)HLJTAI&v00D6Dn5~KmXtTXlrFjP?b$`Fz`f_Xe_F=MiGy;0kZP?g%PGF2R*Cj`xL%FPUKyJBvXY(OvPzbiscY{Bh5&gzegn@o}8 zDM{-2$>C(bTcS4^!l`qLnnMCQp`s9-MD!X{sK=VF}MvqVeFW(wx3?0-C|UM4WAVgjpb;o>=?Jd~l4bYOh6ATCc8V z>TQ`<&0te)S`WRV3}>-nvIcj>^fgyXM5Jt!MctpvO`5-@xwf$hsg&xY_M?`J6*i6K z_e}dnRy!!E;*E`ooTCLPnaXEZ-bYQMx_ah#adNgH)jCMZo|;qkVN!PG_G2CR+^T)T zZi6xmvGShJ?xs2`5}fAsl^)Eb_$lv#ZLn`_TI_aeikK7U?Yye|r{AA`iAIW*`AqjK zwoUQDUvx*$@;?lYo*%;DJdxA&zJBpKv*JMjWnUoVgPrH_Womd9u9F zJNhg9D3Y6Igetn9GgL~ZZWS1HGQXBEeRVtnT0&cALVzZGvZ3N%n2Dm~Xm>TY=b3 zVBkuS;;v*qzq2<5oi{fT=Lo3i3OY3rh|=O&+5M<^A^6Qars7#8%^!U) zhIf0Ln}hw;Q)kRCZsnaC?EpjtL#AJL4(!MTfCc8n6@iT9voCE+HlbXdWenF>vT_7I z?){C5$1n+vh*!k+K;nkA$t!i(zbXef=DX}`%E4*>2xvUk;j|Pi%&fZ$;~D&C>2zzH z_oYalpMJM>Ea8LTOnzQ-(RcoL2#|jUpYi10cmE$EK#nyE5Qiq&=>PF^mNTuG+y-_tFDMGoMTWJVX92|@$)E6>N$h#k zn%~Q!?M98Hf-v)LM+dl1HHr8%mv1J(qeq)0p6j~CbU?Kf|HOU(X{bXnc2e>zq{zik_*k_lr zthY=zJKrdQm-F7IH7jmE-2=wCfjfGom~Fz5O1Lh`!Xh5!tvx=BOOSIeF%QN=+}I8_ zX>L*O^*KZfn=Las^!|Dy!DBz(nf9K~WOa#^BjF+mOS=G97IXqvHWYj)OYjc6s{lmJ z6VU+hu)7O$0jhuFc(FlIc2*i+Xd7fv3S6Zxpg~S^Txx!1Q$U;xPZMC57$W7uVJQ%% zVQI{f{Ac!>*1D`hCMKst;snX%wpt_R!>6cjOCFXW+ukIHI^kCx>c#vCy9pCPWy%nV zQ6|MBH~Tu116us;<;R@`z_cy_jK#m{Z8CuMBR>LvanNQptR$~m)B~>|;$mMygkJ5f zU%gSZFZ9L_2D{5d=_Q___FW1AC(=S3PI}$|R)YQ|U&|)-x6ueTBl>OKGipTtSN}K| z(Qo@FVnn}Bjc7SO&VOJ^AXy9--5*o4S?zvNTk(5pF%Kth5)X!rR`c;nsGx-^G@KG+ zU*|2n*Kz5#knusk*kKw20wax+7|68q zq^z7B0Ik@cFg4^uf@s6)JeI&3Jyg#9j+ieoe369XkHAm*6!uE^G56Nh7msygy8;xa zDDAMQ#y4k>LkSHcMwgLYqFRC!D*>@c#(<0z$)TW#kbt~flkI_Ri;pR%MmikH>|ppe zH~z2+#Dy@NZZeK40wQaqwWV{hVd)%??g*Cc=!htl(@y9SpY4ruIpUycD;U~pgPixU z)X?GjiQyV->>=maSwjghst}{ZGf_|w zrj$tFXxnF#_Y67~A%%59#(cHpD$)B*B$r|eaw*-SkCNTuPd&Lx2u8+9$)$w^a1*(b zBA8>5j5)cIQVF>ddWUg4BBf;UEjj31N>*7ZPN=|-bO9o5&(g#X@N10P34~W#t{|TA zs+I^+FeNTq6wf2#kB%4Hx`@NlNr(a>zM%&QtKqF2rEH1I7yR+D@XDt*R=t7SNI?US zkb{qsk{$zTF?oeuq1BqDDw`nEvf2bBML8d7mhqoj9Q`AI4|cYY3J?&D69jKUpRDrV z+e(1ghd{;@h(9|pgnfsxm;pDX%}lu49y7NZ5IHU+fI01L7AL}E(!6f;JAUQgLiCbs z@O?{dGfuK{UE8DV_757OgVPFGq_BUO3nA1B>MPN1K`}hl=_fOXCXYyv+UXbaX2{$% zEs#yWx)Nc0o2DPAxL9 z!n)av#P^jA*xhRVM5v7bYo-h)i#LPG;*Uv-&66celte2mGEwHTxc5J>y1(G>xwS*B ze1Zfvf-eAGRNT2XL0C5b6+4f?`H`toeoX8<&NMaZXz~Q@6N8|L;H!h(D$cS*F=*g|*NA^7OAHcO%+gbA zbCtz*NF;ga?SlnZTc8@_wm~;~N~FwqE0n?`%0*TT5LX=Hj?o%0cZA${xKE1X_hh=! z=(9n~Qd1g7MgGP}@t2HM3$2FvL?Y2J(}N@8(BYq?+QY#}&bDbk;T(qL5W0=z1lgY} zw@U(SM9#_wgfs_ZG<+c@+z0Wd;cg-(ZBib1?GGkrPa+)LUjvYQ;w$}DLV&G7VA3T_ z5HdSf2XvP&7qB``<-EYs{1N1Q%9rY~Y9O2z*MGfJ)q3~XUTwYVBGVzxLg7g5=arHf zw2DpIUF?!SMoJ4z-xfEQ9<}r`$2!`#NDu^v2!@X{Qq)7eGpWL?4jdTM06QUVB}4g7;y!}O&D>7Ni*`1t;a0%7n4a6WVP!$ys`-CtdlvQx?TcWpqYo$@UWtav$%NA z*SrhZJvSJk>$WI8Nr_a)MD7)mcQJSBq(YT$l(q5T0fv8w^qlysa}Q^HbWIt3EXRw@ z)(yHQR88o@-jZ`5*~KH#o?_7mQ?b$HfT1+9vv?zVG2~GifuHn{JrOG~_$n6b$>NPz zPZnz=aEKdwwA&MNBxmkgb1iN|`oLm_J%IdgKIMwR&jGtI5;r}*Y7WPC>%1qa;2E%# z&xE^vWH%Xb2O+bVJDCZXr(f{8IC4C>9aFyBNi+462ZJBy2C%t^y;bNIdR;pUqY{jx zv%Vy!T^1TDPR#f0gA}bWQE{5EZUynQDag5~XW4MaD|l&Ne;w$rht1uGKBicv$gQ)B z>-nW-u%ToKM-}1YqR_uiQ7xu_A<{7UhS14o%$%9htt00)Go~-0%&fpAFJ9Sbj%STG za3T2a(o_=#*90m#h|+X}h?_gzP^L;gnQHj*1XHaHqLze5Dnz+ovrh0?q^_vApkAoq zE96Y7DqJ1SUu$26w}Zc5v)`}Zu7#s|hG}}FwuC#a3EAa~fJh`}uEPU^lG4sVwL(|r zwE)Tot2E$HH**IZWpWq+4Sadh0Z%~G(n|*Xu!U5f!ZDr+IV44p$OsdnRaf{z2qcnJ z$a`ofXN`0fAy~MdY3ve#VG;l7yJSpcUAewt~*g`kvh$cs+2uUPLV$j zBdSRDD5?^EX%bcC@#F@WCL*J-vkhwEjB^vi&P@c~UcP#3OxFh71ysICh1@QRx@3Vlwp5XcJpa3 zOC^IOgL7^&8Lkhw)vlISJrp846HGwIyk|L>JCi3zMPbZG1TK{(y7cy+23=Api=$Ja z3&A`oT_TM6h=^mYmR*uBv&Yy9R=N`2&#B%szAUjT9DP16x#gTOD*d*km^f!6d)eEW zEyINf*Dtc8MpthDfNu*l9wC$wkop|Q8K{fzvaa#u!y*96ZCmx&y5wPd#|?>9zDEsY zAAhd<-{a%A@#9zT?I5dp_icP5H>m#nKSg-iKV)8?fBsAU^rQdGpT7B@`_oT^r?>qJ zfA{yo(_j0S{_g+zzwK%7-YNhhx83(^xLP=-kVepS;@ges4nvMSJL?+$Mo8QD{TdBv zyCoqxLbiC|0SXYhMvsu`wlrdC(m1y?Qti3tG=NJWUFHt`g{h?wb3Js)d=I+&82nDM zbCQpkv__0YA)c40Hsslqb5S^|?jIa5?E>dnvkJDbx|;6cU{y`*kJunv^wMulqx&(( zz`$@<4{oR}$>xg;MsT7W2t>F&?ayc?IyzL|=Z8BZYy?>h2*Kzr1h$e;N++*p#=JQe zMH|g34rkDU!?acCsvBowmn8tNms3L%L5Fmv!2Z@j70-Gz!o71KZ)U6PgO~w1WD!!T zaR=bVlbug37cZ#cw>5=zj~pL10{EUmIjDyM-*y?wr&1`VBb4g)g7i*O%j|ORj^ozb z4Xv6#+KJI#WpQkGNC7c7Wy-j`Nx4EM(~6`W4-n|$8m1vG1TugJ&Ie_p6UgFCWr4kAup;XWxU;OqgBpU0GSg?2~VmxAc z1As)>3%%q$Uo~lzv_PWr)j9Omee;Hr;=Oa&o0)I8-wwgf(O6Az&!YcJ=+m* z+Yc`<;TjRuP~<>WFDh7llAYJflO?Pj1eM-{$_ypLpQKBtUfVJ6K2o3(?TGTQbNAWLFYZhK_r>V89qR{H$0P}Qjqu*kjn`d&Y zR41k$cYT4+)`NM~jg0a9TzciTP#F2+aF9IhGyk}@HfT*p`= zu+(nl^{&vLTlxi=Fp@}_f_!NvC+Kx_i?o?&)Y*5;I4Il?y>8Yu6 z|DH~DyKUm3Tu&huN~*iVY?tG0`E*ZCJJgzf&J(4n%2~?!xHp9%SZodM_u=2EnT6!K zqK(t0!(C0ZqiRTn0e1CMbuL=`c=3924%UWJ@b(Gzy3Q`_VCicgN135MK&{FgHB@bq zM4Mt$da>*yB(05hVmlk^$`d5)U=$vh!P@ z?Ef(hfaPCnPkZ;i<=eiQ3&tNfgxXhQMGX-OBB=by2UO*Y61R0jSY}q1j8qj*Pr*}Q zEto+)DT?)?n*lJ=^gx!tO%o5y~Hy-}?Brm1S37b<2PAUSkl?((abb_K(pjGXqSrx8uS6%Yc0vGGOE+mT!c0}Wm4{7>2R($-Ku;;Z zVn5j|jwVf&K$h_=B{Wt8c`-0iko+gUz{dsFY13s7_sECHQBss)|xw zQv&$7by5fm%mZjrJb`E$JOVC@i3Cj|AJ42TBq+j6iGsnq6_$xyJAU0tfM3z`^kLvz zaQNol_BP_J--tXehMvwPUBL;jh(76%E@9ocdh!fH$>&cAn0s<598Qe-JPLeEfUvF= zqhxMSAn|83?ynETgM;JI$ZgIexZ;2alYjRPoZZYYe6~0lUh>5ng7)$9RD6r`&e*%A zsHlSFVmE;LEOVv^fLw}XlylioB~_euWfHMV@|E_p&^4DHPeLlf-d|&06u?xO5n92R z!nc^>1ux_aFBB_*Vyu18R9l>!Np1QtE4ATcs&5-h`>bs+O||w0_O*DN!g}zcBl9Ad zgK#rMtHY;x*mn;QdO$dzg-iD2sTW=-1%<~hprw2qGWdZJUIhO{Ju_FTCc`&Fs-|jj zo=fgwDvyEm$uLKLB@5a`EUJg@e{j16A@AG6-jv>lS9%C2HU}9Dw>>)%h~2nifqHw!PhkOAg&F9kyVf>8op2 z0w)uT0{58S!CgR*pP9J>$*!*hPH7!;IIcx^NsXT%YL=2#P{A5Zoot2@`8hu}o*uqM z&86APIwnKj^r5=o^KkUd7Q9iqhE={>bWOOHCX5 zW?{FO1!(&Pl*qQ!6Jr`8T9;|`@h2a()u+4;4D9vhEROcw_3kE+s$^L?U>V;Tje7e5 zg@a0A(ZFfpgHSkR5y~dAwr9-G1~$o!kyre?HboPR+~%w+oVU4#EJ`@wd%s;@I0Y7D zgZ1+zT@!_dv6-$d1hfyLJhAT1uk$e0DM71n^1cOKX?%B4xFoD9y_4yD>R znYP*M(4&$(%2fAJ=YidJgmdT|zCzPlaXQG<-#{>!y_-23LVq&1$Tc|^BvXsNzp3uG z=bn1@DM+iV_6@R2(6VrcaO0qgRZ0}7Y!^{b(yzzb@UKWm)5w82(=hBR&=b?#Z0esF zttk;rfeDWzvGCe>Xp*#Zv-mvK;eDvt^*3;RwQ)gY^aujQd;#DuUyPJuc9*-oQNP_j zeY`leoGg;Idpmb9%b=1^#NyaOSbnK(aJWHK`W9GhKXf4s3gyU)MW`%>e)^GdENnEu zIH-Xk0WJZC2%88)to<@gTR7jmE zzHYRwf)7ay-uKoP6?G>IK`Z>J?sdSeFC6W3D}1v%M&XavLJlU5m7Pl1T^V8Nbx`(J z^e4N&7hvC+gSEhickr9+d;I<9eBWd64u87%E`Rz9@A0SK@&SKpe~&%w-TM=7JM{jD zk&3}GBJ{C8@|W#GJ{cwTB+m$`<1l_>e+1&s;xy{_M|=ZAXeul~x;1WK=%|3%1`@@@ z-3XCTy8O&N-TbiV21c0o(8bU6{zXoJnNe$v+Ysh(rZ+U-4=2Us&0>n!a|Pj2Vea!B z=g}&+O(&9IxqyR64yOhU4OJ{dH&YXf(?NQg=|b5}3M~{8(MMaIP1(UyX(wN?CcUk0 zSD+@zu-LwWK~lcLJ`Xpz!o~+60b|MI*bFVO*&Myio+^h&iWaM&@H4onAojLQ!sZAV zU8MS^L)hhrRg*PmzC3T<;Mgc_Nm%MR!6X4!(^v)1c};RSWVZ%^%HkQFo!)z1M${JF zsN5qXxINje!L(4EG3v}rD2Z8-6E(WkM)|T?x`~Lc`qg)wKnVogxLmV@+%0TX60K(C zJpDUxtbo)nW*Uk;No6i?VHe4Z;GWQVmCTt06|;;Y%((MXf@(_*g}u;R0evPOksAEZ$waf))?bO*vU@an&Vf1TEvWPvcnob{mQ=KKg8bkx{ZCpHS^OdF$EB;z;c4Hy4&?13*FX5Mg3O7(C=hjJo68!gDxUy(km4m(?`*AvEW znoer+#fcr~eMuRGWw%f6+3GN-$O4Fz8|KtD&MjjSrA*@Nh~9eK@0IvYGSA7XX$AFh zhAz4L8~VzApCeL<$_T^L6_ujGvK&qbELPc{8wi;=2nV*@6x zJ71OrwXH7mIl{*vq*^zW(ugWXTo6b+hL zECVb0>F#AZ(n?T6QDr+T+wI<|DXT@wC~S21Q1+cUT=S&8o!`Wh_S#3>L-u#R*Pl+d z{OQGy`_m`d_Oy3z>7(L5dwH?=VvtAgGmt*(9vgN@;0u`GN-adg!gRDukZ$Qx>8~|u1xTk@;1ZuI# z)H7a`{E`;)kYjan1{Jc#Rhrj%g&PzXxwXn&2}b$VK~OcSYaW)%K%A3f8lkiD9@}mbMb#6SXzQ z6{%9AjHZajI~m)IrA)7z;LbgW%%I~wBPLAoAZ7=oV%jm|+jxOj)O5<(KvWmXHXrUB zWK+UCd18Et6Kh_~ORY5kA1m{>$;pAk+}UwHcjX0Vnnj1ew*|<%oV%x9^6Gz*ATB9R`5=QZ{7wy-Dw%eZd_g?9uut z)+1wt?jQ~tcbM~VNE{;9cI2E6!w7rR>3GfN7fQEdkMoL&3CmU`(-VPf7EzH=yNCcr z+Jfm=ZBaI1t{EZpa!8F|6vv8JhQkr5A)oXPQFfX?wFwy!G?VoMQOv8i#nUFHzxHQ+ zSeQ(;Pk{kC0^#l3%Vez!m4u-#hD^unM(ljN@B~sF4)+Qy0 z57WAw{MTuVf7e!Uhv~SFz&r9dvL}P?dL3#u6vzi$;Gh-SW3!0_S)gIH zpN$jD@fG@-+lS4`3f>I_B1h2b6s7ZDaJDOk+8VA4-GA@q>=WsR;N zCVJFHxSV6o-&wmW6b_-?m8xj)g**uoC5_;svq!MM9fGg3rr4YVAgvk!tjqwwAUzu> zS?`ZAKCUfw-(JGrTtMGVx&4p+owdXvu14S-1rffJ9~pE8jJzr#8>>VO~^Bnrqzq*)Wezz_kR z$4pLa2^N0BjDM`?AB(vfa$`vieO&1s#F}n>s$7&cM=*L4InyNYB;3djKV31K6GzWO z6p}5IqGcQH4Gw_xEbMw;8dIk5UA5FoD0QO`-IrZ8OGr(EP_opVDRcqCZbwwyJ~n(~ zo2f87M##7Vof*EvX0B`(ODDydLU}5RCW7FM3B%}eLb5tg)R`4n3f>*T;@%Qj0SY9= zOw*F4F~JP`EEPmHkS8MC+6vV}@1^#{8m+Bb(^j=`m}tkKl&4~P?~Ra^Ff9F;(Ses# zONIkvP=ZF@pcUtOTUB)=;T@(xL{ydVNRW|C+9SPn*|_{tlnkJ{mewVy@Omz(!X6|b z*DOujY?Lm|LLLw$6}nYJKi|&;tm;a+22_9rk8+%qTu~O25zfSH;`R<$A$1gsWTA&v zIz~2oFRNF?SuuqikU7;3|;Qmye27QCjxwSq8a{54IpA%^SS|kJ`%ta$;~hp(l^nw+RFya zB6*u?rWY4vti!2;+%A|@F#GSzFA+__z%zG2kWv@jmxD0zO-w+pb#;p%G8o~oM}Y@U zbr?f=nU=IzlQ%$|>d3&iiBr^io!2Skwt^1Bt6X4Fkj(zULXYi`eCjmB#wVp>q#e=Y zfCltdn$XJzHbrmcX`@#^KwPtnYDoNnqI0lF;ofRoxr*TefrxHZtr`|xJH64CaY+J} zaU;FZB6(H9LpK>5ji8i?ldxK4=o365R|@lTK%@>MXvKbsBVzWLe`v6Cyc=rcNN3V* z6ZQgdPi60dz^r8&>3vpSVZb_y%f>_5NK{R>K1yvg1sj|~D>8ai>b>GL3=xffiN2Gn ztt7q8g2OJztmV+~8)mOHyEz!c1R|~Cgkg!lP5FMo`{Z0CC}Mf`37=J5dmiP!S>L0)Kh=1?hCacC?ZMT48{>0`k^@h`V0BPJ(Ffu=Qnr%ZPfX$N*&wGdM7{2X4W^qh)t@0#B?~n?}R`7 zu9y7jt1JHWKYhxc_U=7K6(q}flFh8`J~o8baI^steAvwTXCFPpW|q_~v~Gc%$9Iw0 z?g=)vY~yQ$n8F_JHimO;LpN(C>x0ojXM*FLnA9N#TMXLqU_af^d0_h@a&a|0bD=oM zU)csaH`a!3Y#@vGU>#en z8|}&79SEbdt4jl1I5AyIV(X~4J$M)fRcIoIJO#hRwnaN5 zWT6Ucz=1h>%v;!2JdzDMZgXI_5OS`fpp(8NFjK*yt2hQN7+|cx1c9u9o8#W@1iKzP zN$|H02j+%o4IQ1hTG_|-TL<|6A+IwG4A7CMxQg_p1dg>!qpL04(%QiyQzBs6%W+%I zd$QuprR6v5S@8=VW73YRz)L?NUvq98~WLzRU?zy;7tkM~v=zS=BKvTCz3 z191+CD9AIliOgm@*Cg`^iK}o2_0HB0K#6Vd?I2mYE=dDjYuA-&6Qve}_wp8)UL8Cd z**5L*=ng01+TN}ttHa7mh`0J<_SSD2MKH({b%MF7ClS7vh&xJc#2my%1baGShIsEr3hA3S!QsqLD8qs|GBh z%J~H+8QP9am^#fGd}iDfVJA>8o73PnBDe~b&N0j;k4TzOfPWa5Ax~V0_RU+otO7yFm6G(+y-18AzCsFSp{PZs32uRK_ zRD>iH(b{M0yrwV)dOPmtjHi~vWd%nUeQe!-;vl9j^9)fhdf4Aa)CvKku29=0k2`?A zh^jA=HN!|qr?VAo2*OGRb$Lm%<3~s#ZL?XKQ{OGR z!3!OAMu%5WBCloWHxjaSkXOW}$buCg<`r=*C!|ZL3qb(Rr+nGK?%ytqleYFBB6JIG z9mMeMZuIxhO5VOwt<{!%BLLAt3acY8V+-c((T`EhG#C=iy2g!*BWa*l)$KrKky$%n zDK&ZBpB>rCt&-5`H(58OLvN!pQ|YOEpi&oY#}KTbk^;^P=($USKBgJraK(oO_ZD;P zJ2t6O3%2OPiQ1yj8h5be0HO|I&5rNO+fbG1((qn*i>5;muL#4B&Ok}3hU@BGM|O5q zX}0Z7crcmFItK5bj$E}NN&Jw_Eo-il@h|4~qiTV)ms`E}mn{|CvL2T8T!Ei0J{1iZ zQs7v@TeO8Zp&h=*_)z&w`#YkV6xF)-GB-V~0p5nZs( zg=JqhhQ(Ot6O&1r5fUDL6hga*Ve9r0x%xlH6(ye$^_`HrTvEh`a zK1Ctm9`?t>N!xl7g^cL5HQZRL5BKy!QOxR9xE=KWfEh_|hP^0U(F+iPiIA!;KH^}L zl5fItA)rV2qv-&+-=e?yvip_AJU6pgEGzm6WaPq@qxcEfou}t0AU5F#6jJC<%WV)K z^C3VlI}sL~vl+1PN5#Zv51uYWazjb{V-AsM**D%;!C1E6F!y z)We88E+_ZMzR7HHfH+m zRV0c%zZ7?cc$RI|Rq=j)GmWHf9`A5hlx7^v> z#u*imv5b$1@zn)}kN& z&ZXkp(FJCImyRa;P}Wl1Gr&MpOWunmW#}r!_%@j$w(LYRwrALGvjm3ES`O-P8DlD* zpR=wygHf}L+n|Q)6I@MYrm%)4oD${pO57d z>)casJ#N}I|yNm zS{J6tMXwG?GSkW4580sc6m7EY?KPXD1dbJ>156L35W}&B9!`s#*u}-|XE|d|Oozi0 z+r!Pct}7cRTQuOPkI#ZO^Pob)1t?mP7J+D!Q?Yct{b zx}&TzB)4dp;h#6uEOcA-DQud*iJRm*yDqVqtEo724 zJFU7mNw%+}#?7Bz@FA!>_)K?|?mu$l!y^yk+A0SX{{m2rVQT3ejlq#G3)l^u8Z;lH zOdi`#&B3OF9**tZoPVa)k-+wQ67gVXOSwN{`@1b9;*(<)t=svMtddl2vy}jP6rUgS zwoNQ&hhv6>A75Pxu$PW63FxKUX_B^pkquSA$)-S{*`f#;979R}Dj_vD+Z;C4IRSyO z4p;@{Y#h*G&O08@j&xvV{DiJKHM8pZMq8O41f!(LL5PgJoCxrEXnA?DFvm0sAy`|^ zC{Or1?OT?T+AS$3(C z%#wK+I`8oQUUcB&u9bt%ADPyDSpV zA@p{)a6#)ve{07l*>v1kaLCkE@ z(R5{_%a>j(uo@j20jQJQ-XsZh?l+&aow5x|khi z7uiJbweA)7d*gx1xY1z0zdh5?CEY5KL^ru`i%~@49Z)-3twgzAQl@oo%#q;Dz%0P2 z46Ou$v@dWu6=;uuBm9D_-sPcHX%z62`r?_-V*z2IFmwhllN*rJA!8jmM@Nbsm-I6u z#`};E!Hv&NNq%pY!hWFcB^oI1+kUn<9a%$%1fJjnqqQE2UPaTiKwv;P1a z#M8To1fJf73Q@~@ay;gRa4`D2RZNgm6gRE*c4rV~yC1JefQV3K?)*_Vw? zMki^n5b(6s$62(~8^?>g!w1-#MZzDf+8Xz1v6WK^Qv$$-_$2vK@tu_dlL!)%AN%iV z?2}Y21v3`%GWTg>ABWAC{lvMSQ|9+-OGKh<{EFZahm*W(14d51AerP|zlombCWFu| zC?CrbiXSyy0-r!ZrPRy?aCyL*{thI9Y$w(c*91?7>WT&uOyY;+5O;3Ja@bd84TQL{ z0XCZ9FU?t7*8+@;u_aYtr0Oy5q-yU|!4s-&j`Y`D6@sX zLBl`%|F`$8F>+?s}$077Jl3x$OU zhRDi`9QR?zuTO%iyKQP9ZsZA(^Q6*IlOIQZ@q?3pq0p+gHF522ws#t#n|Xq(b87Tn zMG0Y%Kz-*SYyNEslz0Mndow-#ddwn51z})W6|$x()OS}n{7>_8Va zWLa>CXkq|nN{YS&f8E3y!8$qx79RJ!I8!Zc9ZeC&R6vw)$=4ZNS)a z%To5tZQxm$a5#M*$4Q`>b5_dn>EM`AYS+j98+n*WCCjxDX7||o6AM%~tQbCpE!xmU z5xa)1hW$=-ff%%%UQXa9V`vcTSmuUg87XUWY_YS&tS9k^ol%dOdy7L4NwZG-;z+hb zx5A|J$yMG0wa8$TC*cW6ueJ@Ev>px3LibLb}+kPk87y= z+SkWOktYr)_7zVtB|N3feF;S{tS-wjlbr7bjz?2QStz-c3_WSNl3VFmQc$azl_D22 z5tj?$nyBpa(==@#?ZIsZ-$Z-3$tScN-Dr{#V|x=!0`C$g!Ab~&wMuetb!DaYexXvg z&!bZWSe0Ar^d56=HW>eeu3$@WciWFk1wzzLE9$rRXR0p&6O7O@=p|f01|PbRBJ9EY zV#orE#A8hKE4Ci7nc!iR^d+q>`Fvx_98-7^ z2qY~o+qYg+{+Lt@jz?<|#TM72Lur~eQK7AfQjvh*JQ2gp?8N{_S@VNj5M*TKDJ?|W zr*B17SpgcV`DxWmMN>}mxf0Y_wjUCHRLvoMsWb==Sln&wRIqV&s0%D=9ULpPE>YQ*T{nqjmck08UVKB_?p(7pibEx8x{N}cLqi8}xl}$N4KDIv;FR}Sgj%8>`sm%>kUc8|i&_+0`NRuz=#s~}F%q>? zl9zKm=fWZzT4?VU$@+i-QR~qJ%bQr|FtV7vf;a|aV6KILGy4!1VnN;RL(2mv5 z9M()q4XHHDCTgnqV}Fx=GQ_CF^EnnD6$NGn_@ss^-ls@T#O>2)t}LvdMyqg}si=P{ zL#~wnL{mQZqCuo;faAZc4Y0D@EWkr+8=e~z9RFc|u*U@0>8%T+U8EJK7u>hFu=AH8 ziA~^wBn%q7A};d+biUH>LHZ@7(z%UA%I(7^HLZ15-=?%4i{uOx!xgtBj$9@q`Eu>t z+1lyTwKI!$@=_0FN(sUezQ2w=2=K*(M}GxX&*mIl5w81>v1C*P`JF#O0AQ@*jmtr0 ze&(GXclU$tD}QF_N-&C6@>z(@P1BDm1j!%0egs1Dy#8T$snr?W@j{y-_RL{5s&$YF zOME#Z92-kb=5$>`zV|cCY^Z;}6>;%>%_tm+rd^dPT{CM&zV5M=vL7|ZbiyD3K#!uS zpoi!xPv|u`rlZ>=)knY|)J3QJUZR4KfolvxkeC~d{p2QtjkDsa+r61`(U+7%3+8^eTdu=-&eOdMk95 zoY7ostwLv{W_G5waTdR2yPRga{C)1;Js#|4A`&^vB`2;-GeTk9tPmPS*NJMgr1M2} z3GKro?zYpC9=k)06WhEK7OxLKy1wA8?sN`2nie)Yj(0Ywx4nmamw<@KZv(=?9t2!Rh)#3HkTAPWPRFlphn~luy3N+=%M8X zPX?0MwJ;}szP6ZLBob=LQF|Uo1RbBT(#h6Ou^fyJP0rhDW094CSmmjF1U)3hDqGWH z(wg_0_@QI3Jiu?wdAZ7NwVaG13^}gtNo+l$y@IPN$pR~w@>xzaQWNttjjscvIPG>j zAV?ZpJwIPVUW3|cunfN7p~eIRzKTa1BlMvzY%|scJe_WzcgD>1x;TE`+j@BBE4}W+ zxmg(c@f`<-c}5R}F3!YtCWPSf+!kWW56)0uqq=jZJ=~0W)(b2v`7@9}1`cQeRGhy` z)`>A%L0DvT(ajt*#DtMe%dhaDgOnL-19R?JUT<;!E?1lPHn5l+P+rOZv-;|%7?+(urhW#dZkqJjY<+%@=AbK3)-8K4+d43^uqXuiBC zX+%|}4|U!nIgXN>IKW4AJYk3tCgv}b7zYd#VLg(wMHDH~)lzrG#KtjBv~MAx;8tI` zPlGg|m8wssY$?^rjk~AP=3Y#vI6&o$Q;6ifegQSCzZKDuOd+;du_V{XR}% zE)>^4EAqo7NXTHXtUtrcNNGrdE#u#&*)>RxC(xr9BR>$?wx2p)90n-7xP!njp) zcqU)yoVU&HBV7H37B{e6y^doC%*r)Y>|r#uhKdp!>>uLF#lW%6+f>_qxP>h{kr~QFK=oOZ%PmP z?@wtD@(Z5GFVYbhItlReqOS=5n*e74|G$p^e+vIE;{S8_pJ2X$|M~6Jv&XVxug>CZ zlGXXlrq~RcK=UP_bX}+LESyEjMOIyqHdt|yKrJp3lkrb}T|~EGfMpEwGr0-=AqGLd2Xm3O|4uPnEwS8D!pwp(Thfqv57Smz}R!kR5q+46!5%1Z~ zB>0eE;`tB0^SxjC6Y_KPLF3ymu4G5TiZ{@IcKLHSw|Tlys2I(z;fxZ^Zs$E;TD~wt zy(9|W>ix9bP5;U<{c*ush2`Zfbo6Hn6=E=*73(d31I6lvV#RSFXvoU{{PJ(0eBr!Y zGu?TVPzo#ko6G;cqIAi}Y^8sH`G2AG=L)dU>L7ooIc^32_qESFgObH5a)U%mU3>AF zYfCKlnTO#qnyOOan(=ae(qg=`ghm;Y42zJsdw9-_TKlW zzyDQ#`k#0GY5tx+jegdje)hgSjkmss?rTW4kVoSY zL)H!3$sMeZEhrMDgla#Ed?X*y8Q4kpW4LmAe4-D*8Uz(~vqFjrMO5+*dJr)R-5Mz# zgcs$eBn^XNKt5$@tVA~FRv+KS1DH|o@cp)qs_8LLoH`VHytyH{J$mNbE`sERgqNrp z+-1?lwHA^}VYCC6CUies@c@A7hQ|B#7{7p_^Mjy7R7Cg|caYBux%m21bqoPFq>@0t z(r&d44COZ}>t&kCP}Q2h10bah z7oD}i@JZYBw$tB{&YpZXCT*|uT391ez)Dant^-f0i}FkX;0bsg#$j?miKS#&1(PIh?I9B<<}!m0s)-+_V! zR$SD%D?TZGfdjrtP}8LeiM2A2Wu{M|9K}!-Su^my4aG()>Tt846M;<*_3}<^tHAS2>`MBidI>SMPUS@#dkOjqtC5Fa6EX> zj9kGh<$Gs{%vaow${}tL^yJ7}V!OIXx+vaRmXom%Qkt*4B?&{WlzCFv4~Spw0|ijp zn9zgBNE<-##0Ii9M$VtjI8R7TAW2P619P?>#E9gj!5bQ@v?C#r5cdqDx(@-?UXxIZ z37lcIJ73$nN5ohl;wN*Ij`HD*ln=gg<#Q=6)=O;oHuT~Os zm$Nc$$n_Z0gf@_11Ywx(A*z^zlEC8HoF35{%@NYMAts~UpPPU{IopxNAEQyml`yyy zk%%0ziFL`G1P=jR1wEOItLwnhj8GNXpae6PNdr?BGCq0j~gN`#V^Oaf>3{+L%3}ZTpu&Per$WA(m z6H#gi1*IWrNoU56X&+J|1g3$&G%i130;^8C?s+sTnT`AOdLtPt(e||=eNGh7iTniP zqwZ*A18U)41cpQ091M`mU!Y$?_i?0Fyg}s$G(356N!^lv$|&}V(ki1V2arCbR~;Ew z8Q7;2uuzsREvH}6x_a1imuTMAxs|#3+T3;i^Hu)yHU4v#|6JieH~7y@{%1BCtpjb*?#Okt5MKod&4z}+Pdf8kxbnLtn2#TZ@H-bb8B;=c;nzk#Lv9DxP z46xJ21S1nWj$O45ae;dPk1dy=^llAy)UAIF4mqDpqfuK@&A-@JWx$6@=dwQ=qyif# z!aI%=URv~C(_kJK#7=!SH+cU5OBpp8)FCbqvv_QLDWfqXd zbsn5#?vPZR_Ijcs3a|zaSX7CNMT<1!GFrL7T{tJ`Ukkph{755avsd-o6*+tGl2)x0 zjLV-b@<(1H9ASI#sMBD5!MT1zq-^9@IXlJRY;DiP)x157fs)*t&B4j30zFLTJ)NP# znWtVUAwCr!9~#{`us#HUnS~GtP7AmKTi&SOh7?xWGO9fmtRFG9LM8xukuY%Ug&KYP_nbue<7MAPNUo*s*BUZ?oCs;crvWPK z`x<1M#6=$*U-}^0cZbK9#^sJOrb+5=NGM1y;1Ug^Mbd-*Xt&*8>oia#5)q(AAOH@N zKjid4uEO+>m}4UhQ9^l*|J{$w8O0eKi4=YCnx2cz$P^wsHD z?96{&5&Iq~6sf{T8Yu_8agSJ*K?4^aCEJSL5cgp9`$6S*Ky_GcczFx_P0LDKIh0ny zz%nE(R3V`dy5m@Y1Wj<(ukr8Ds(1Yg9DIS@5U)Tg=o31m&}XTc&wYfP(39S<;PiqvW`;xPEUoeW#A zC?^pG0(Y6(E(i`lWump|V+$1rpVjObz;`7IuNm^7a zVHzVUL{q`Y0%kC)Gs4}Ys@u%qprG7oD`T{-l(l|si;AMkLkc;5q1-cQA4+O=%aIM1^}(p^E#|YSeQJa z(_e3x?NVB8v2AeL%2wEt4z!7|w91BZU7r>Bli;$Xhx2<8t)h#ss1xY1!V5iI_EvH6 zZU^cm{M@@xpx~S-Z?#mkR+lS#A-jW*6f{7E$Tn;T{oVm0%+@;Ytszw9u}m9BMXyM& zS{Q@*hLCz?u-QlcZP?;D{FSZHxTa-qL>6n;9;c*oMBrswjaxamk=~7N3uK?Mj>J?v zFNZKun{F`pJvvAjQUGuUZ-_16D`E}Yb)pUVVRGHkK@NU;y6YKu3F;)%F=hljZnS&p ztr7wwTp=Az%DVw?T4#5!gAI_>H9>9IC^*o6VMOjuksU!K{2GlAhInGel6v->qhJUM zCDzyD`rSH68sH?at`uJhGl{D?Ag5r?qG2>g%xYt7wtgkPh%Lxs!)$^tNm1AL+~}+E%+L;k5`Hxk29&^8VDnV1?xWx}B|x2CVSwfFOab^f zm?oL|?3q7hE})omZ_J62FsVZ!$Uq~|`DdK{BK?ASW`2yjg5N8iof#$|2qjpG&>u3# z#&N8}_CBV0eWt4yYLJ0=7}U7z``2+32In*tf>GdN1IyTpj)$n3S`s{Ycud>hy` zImHcDEM@^GC%xE~BPi$g+LZaJ4>d;Md6f_RWUA>WmcIa>|8w@fb!e{}%a`%`GnLb7 zMXoO2we5gk+4b#!U)%GiXAbRYy!Cry(R5#)r0Ir~5Kwl%`-7_Nu4uFXtPFt+T!KLY z$PgvOYedOEsYc2D8PRhzsUJlM;7_>*MlRWzgbrQTVt)8R-kkK0At>=7hg&=UnNR2}v}?|E}JEiJtRN7*P*!T%E-tj5xNnu>oE{<43+w0*??3EE}DClk+tzP1ouU zP}kQn;@(_3ypWXD{yz1^1(C1Xl9di$!IiSwURs9OB5a^DZ3#uSOCE5M)}&n*SHyr+ z@Nr-_lfc_*#`TlCtp%JvMHU8lI?-v^w!qB-=?j?|@vaucQAiL$jfm~heNAlb?%8o- zmmRs8g$@NrGA1~-n&ssJ6j913KF&btyktQTpF+L&H98y{(H{}?8 zX}QpWLcV?uaK*JLLkG?@!#opQXf1W}t<(Q~Okn~bcq3?N{mZDaAWCBa?Yggq5;(72 zQGyAhD<#G_TPT;i zBkcNW`M5A1Wo1^Bvv{GYtmSRF`wmEETJuVfXxqD5-ydTZ3(RJ$b0$hi;nO4iv^E%l z?c!7j#K9OjHXfb&VgoImuJx@z@8>=)7MPFK~7=Yq%!ip7u7 zObe7{uV0jit>>{2?Jhri|ApnZsE3rN*1lg_UNJr75C0OhkN?V0uDd_)Pyh0-_|xfc z+S7RJKYl}WlPtU|(?*(_RPp|}zuxOWHTeZI<*wA2cQ8BavyFEzTm;37^LxSh4mB{~6o}o#SUcYGg3R#(T1NMwf#v&CD^R<=imE{%V(TaKWRy0Qip#m_pIyqlZxw=_BWInnLgvtvHTF+PQ z=>f2~(&J=hOFp8<SV)+yxwG(LLSQ{uOj4g=$(8k|WoS+6BQZgBeWqq* zj6#6_+8HGnc|qPLP-DXVpC$y75;XM*b;se}?G>5Qq$@`##cfNRP-qdIFi8^BD{^^LCl8HzK!W zn+or1^kT0K$LNX|5sm5X-EEOlH;03*OZ`opN76NQm3i*lIGHo*ZsIynPUaBm{rygF zz*3tYq{GxVn*&@(N_!Sj;Nlgw;&uz~-h%-+QyT$OaCKspW9to0<28-=&^S2gF;WqY z;NY`>iGuB#4icG5wje+9#g1jIE(p4MADefMr|w!U_&s{9R%5M)E&J0j==kgO!#zGF zMhz?^l<)&lcx=Wdqv=D{J^!|fKe@(6W2BC0oI-XA>#x|AP#o(!)n#2sGq%KdRuDVS zLxP+@=<~)lF7i7xIU93mJ1x@!R5`5B9(EKD5-F+%z>fwB2(TNeerowgpxVC>zYA3M z@zcvM(o6^+EkVO4_*%|$e)$(c-~WT^{wIIQp2l0>!b@aP_;gC?``f)H{s(n`(=sEZ zE=IT$HHA%$<%GJ;!^poo*tzXAFKLO}yf7A*$X>cVSWHUBdymj-<7L%IdD86AHHuOS_;CY!V@q2ltrbkRYb~tW0-o z*HN<~cHkIM_{6!PS@&~HR&68rdrJ5B>2Ny#%A$ta~C&F(zlqsXrim`PU?*!RI&U8>|Fe0 z?1dk*HrrhQoVJM<)7oTtv>CV)#nosGp`i8bJ9Lw_ubL zLYE~j`EoQ)8*+kr0?fE&x8LUH&W@P+m%{239?ZnPe7+ohZ!>HN->X;OT~DQmWfo&A(SczlLSaO zNC1CuEc`^=jo9@yNg7fJ1bO6ahoET#ToIZ~4A8MMzJEz^#94sSA~OKhjY|Yh;wTX? z5|ssZcJcZ6Eog6_h1C0mvJ-pv((*aHd)BAg-oCp0(Tcax3iv}WlWr1>(Km6utEu(P>4W@1z;r!5&uq$Z+4KrWpp5ym9;veLwdtet4u3| z+((vSM_oJdt#}aRr4>+zj>cA8-A0TY!04^7sE1C~MMqV`AvBV3D)R48ke~!Z%~xb1 z%Gf0>^7=wSQ;jTV^|R*{l4V6Dl))|HGqOxj#F<{?&5R%J@Rdem&sH@V3E$$(1ZGb|K zd<43K!+iq70^7|o!8fvzpk-|rDaj2>X<^r)!**Z{Fl`0qQ)GyDdcO%U6qy9uO)(I- z%WZB@*%uAS!70lGypjgQmUMu)H&6$<%PYBKUn$lg1d`!coHMWR)X5uh{~sML$gxg6 z-&sgVR5~@iA(zH${o3Q$`VsZF7!tfX7dn}npOZfH_u~58J;XW&2AzY*U9(WJ?y@;W zT_leZQe%KPKM81HF1#x%f+@kTa;jBQ&M-V%#|^mwE6%WyfJbUW3kW@Dqx@0I%iqze z&fk!&OY$5NtAy$3Do3&!>~kPM(^7s0Fp;jd>OOSfCmp_sbIIBxU~7J!o!xtyW6EYY zt&ro3@bjyrzTqGK6To#S1IXnDWCeN%yp2&^FWwq|E1I%mY`a{LxbtEuZe+V+l%$tR z*~+Of@`RRb7R2+yZAShb`!mHl>r(+AxAXc&;6lY)D zVC8)ldJ%4XckbSidz-*J#gR(to4`AF)>{ab&aWX(haPv~qb5aw(uI#L7?|Z{&c~!I z#vg@k_^@@~2mQtZ0>`4Z#Cr}W?hD}#%#92D^CC$JNmVI9t zz|5tH`s24oaNbsQxl~?(LRGv$!=#w>GwCQOK3`A2k=98>fUxmg5}Q;=BzO>Zl+FB1 z8IM((t~kV*33MN?SeD_qaI6%y1m6qTP!e?5*u$FV-*IivCK30G((NF5f&ErSk49Oy zFhSN;vw@F8)){~JzIZ#K`ksk5U%K?k&$M2})=Ttiob#ZRs`~~7^-X9KRDGb!QmIO} z3Mhq6BvDzRaycI-5BGy8JP1#RnMBO}Y)=H4V2u71QQ{k^h&DM)+_3+!aux20&?WjM zhK-OtVQMsy(@RgpHWxNRRoqPTs4PUyGReop0j6T)7DC6Eltd#|#2%qmLr(*Ryi5}| zs9^K-AF9nwyHH$tX^ab-EvuCQHs3I~&J-L_Da9WV5Fr>4Srumq9bWun%{%0Z4u8^E9X0pUXEZ13zIganCf#r*-`G-;pH&BI`} zsoW{q@K_hccjPa~6Dk@B*Nw>Jw4Mmx) zTOV{ryaek(8(01bOrj=f?s9mPJ41vHaJ$Yn zuw}7jlV+*~R*43GDY%HA<#jO#zK{i^pM1>mqlyXo8Dr298GyM=aL{}>*uNmD1PU8n z#7@erUkUq9?8YPX;6V$8@`aYxE#E-J+R;;uM&Qxz z7V?~zmTH}Yk@;tJ?8kJ5@S&2ib5o|9Wa6ctq05h8&zLWSed?YbQCIm>mnJZWjC$Z+ zu%V^)R%fkEypg5X4wdJ_LuY@AS0QyBsuUGs5EKJ(it(`cxuj)&v5ciO{}?r~Edrl# z(Fo@^x$Ro$L*o%8&3Z#y&DR#DJ77JZ430TTc0OaCbGuF(W5{;^Bn}r=3X_zJ?BR(v zSu){-5F#sagUQZL8=9>>9U!nUV4-pnW_u|}6A61LsQ73a)vO?=Jk&7-Eli4EL7rbb z?mR-$^RjH}RYh(w><n zIDdpqV6Ch@V04&(MMrnwO0MoqXF)nCuJRyBn4IjgMdOSpavI_^A|R_KC<(kPuTsLo zWS%Gd(@uGIkaIVk#egjD_(t^+T^zV_(5V;T83&g+W3joEWnv8`V zrX`NIkz|rSUwa%|hK{0fR0!YjTqDP^xLDL~%91P%mI#_#@`X&$#Fndyhi(%wk+K|h zhm9Q$s?RzYB@hfmAD-SI91>Ce6~IjN$6-j~1zeSpFpzu>jEHrG28t;gSVcC3Rj5^? zL3tuppA(MFZthKY@(m0q(nBLYmSlpBXtpM`u)4JlOHGy6-fXRw>fw}lftQu~iVJkM zK0^8IU^Q_@j*Ni8wJ`!@JFWZe;Q_Co8+L>-3x9-8n1xugR=TP$dTj(Ycx~UrhTu!@ z$6?h<%gwDbjZ{n83AasGbCeMh34yp6ixl;Rh%MxH#8)(K;ruKf1NaFIgPh{!Y$qa0 zG|t-tBxqTv4lhLLhJ~RW;H-5_-WT=kZKU?$op`23BjcUa^WFNQFO|b9?JCh5THL3X zIh*1Scn2yU!?3UqPV1dB#lFPI+j{`5k=%1cLn1^#XfUj3GZIwB9Rjs$6N|j8b<1)| zcjgOQ#lCq8y}Q0WMT4^V`e6hcYjPGF4pAivHW>|AeAH9*Ppi!UDCD|9SbpqvW$*(t?tI zm~SO0`LF#d;;#N5W3gWRHGle@U-zfK^EdqI@Vox>AO4m<{j0z2Pj`RApRWC;KmCip zXHVm;7ykM)jOhBTMRYOPcZeJSeMBm?B=mQPpsvsVfChEl1V#p%u&`lbBW_;eyW}jKBn0BLA1qLjnO0ET3bG@O;{?M0ix%{Xto zhCLv55${SXXz{+Nvw?Nj3L_)`X^lHoeS)MZBA)4ji z!m9hfSkI%aGrujX&f_R`)fqm(u(9O+pnAy>AwDlG&*_9=G~8Ls!YT(NU2a4X)}Ajf zQqg?vCc?MxASx90DqoyzVJ4@KPaHgHiva`dIYbxnoC1)xsU9S59>H~kqu~!)BzmuD zuSny@Eh23g8`v21c&i5b3ycE1OaDFra{!DyZrI^P_vXv)Ba1{IS9SF)7?W0?EKQi| zn2w7#u2=Gjs?{(2^L_^hlj2&AfM@F;>X&{YCm5m%bTierq>-j{8+nM0H82GlL9ve~ zTk;5d;kKYJKVVgul4{&ZQgg zU%hn4J%D6Z>_Yug!OcgIb!(vPuZMFCa7hU~PP=`OYl1W&(|4gZ7>VPxxdpwZ!S&E6 ztdB;V4W6t6e+Zx*5#Rx0h#Ld`~2Lb6LI4L@Mje01Sj@ zcy@`ctIoxyOg_*JdOe=_SXgzNg!qn{sP1$p)TrY|i?Y|gz7h7>)l!snkORatE9Id! z7Tq3JWT%f5eGnoS>f_ywGjBqkVe&Y@XvT0c#%MP*Jt@*{kG=?iV9CXt5wSjET>v2` zD1kP1;YDFriKh=+PkLBTw$HUPHq7N1Rw2C3t7_+x5&1Fq+^y14A#pH^m#wPmMxZg| z{V$#>HWzy3;it@&7a|ejZ%Co2)5w>#9uAh;QQQ{_Ys8qqbIUbl0^j?GfeAeKyOZ?> zy;<_ErA5y)+5=&X6?%hQ%}Bbm1$-jC!Rn+(I1=rEte8DE{lNwI9s7`q{qj9kROpz% z&ui(1jOMD8Yo|&=pQRJdlKjcGPGk;{!$2oDl^?DYQ@n8iA+>xgL;FMLqskKOyO zf0cE3vIiZ8#72_vqk8Qtc>K5iwaTi<<9B?ocPpzd%u@A6T6Hk&%Ho*~;G30IX99S+ zvg%9#Uu0EcS5?IJ_E8D5VR2~kl{Y8of*D0&tt9hrnZ%LBwoE3REbx^sGb_Il846#g zKgHH@(7i&*WR1y+Ccl>23HMU)D}R!8m==y}EmI{~!`xn%p}?QW=_Q%)DP3|NDK0J; z37MBGvsC{iJ^plV{mp+Al+@-wnXIJ3Q3V^d|7@i{nX9-$Nqt(*EmP0XoGX>LcGglY z)cc=FWu@^9hQQo=4D2#x7?E5h#nhBib0eU8d!eyN^7n`JM%}u3vDyV>48_MMKthFShQqCpciazasx`ECvj337paVfpf3$7x%1A-o3AFl)7{m=#vBq2 zpfyR3&sWkIrZAQyC7xV8bkCd&*JSW&{nD*lt+%c&t?)oFpKmQ)f1A(mUcG*)b>s47 zKCdiYyQ$9sRYY0+-KE=J^rNb$tj z-nG`n8<#*s_X?so0|+7* z5DC478m-6O^?hbbA&}_osQ$!IynX5V384rzo(>eUdcw$N!9`xJqF-e(yl9c<6AY)D>JKbb?lMK*Z*tG5$_f&xd~mgxVKy1ZM=hti?6+~A{+ jUd{JzU#3@6Qr;C57rT4#g?}0pm+$^FDlX&k{pSA%-cEsI diff --git a/docs/sphinx/_build/doctrees/index.doctree b/docs/sphinx/_build/doctrees/index.doctree index db46972889925280d0a7bfcaeb38d97bb1b6f06f..eb22bfeb301b59a9e08397b1140fac6133b9afe5 100644 GIT binary patch delta 30 mcmX@8zD1p-fpzN2jV!yF7%e6rU=n9_@(*%#-29U1h5!JiX9|`8 delta 43 zcmdm@eo&pIfpzM(jV!yF7+ohHU=kPdFD=Q;i4XR4)KAV&NsUj>EZKaA>4pFRRcjCZ diff --git a/docs/sphinx/_build/doctrees/modules.doctree b/docs/sphinx/_build/doctrees/modules.doctree index d91fdfb87c24feb17c5ee0ad186e1d845c75a8e7..51f963f36a5e3a86b18187037dddd53010216d71 100644 GIT binary patch delta 30 mcmX>rdO(z=fpzNEjVv~dj8>B!8O2$h{DWK_H)k;>a{>U7=?I(v delta 43 zcmX>gdRCOBfpzMkjVv~djP8>i8O4SCOG`3y;)6XM^^@~cQsdJzOE$+cCUXJ+H3tp@ diff --git a/docs/sphinx/_build/html/.buildinfo b/docs/sphinx/_build/html/.buildinfo index 9ec5cac8..2ed24355 100644 --- a/docs/sphinx/_build/html/.buildinfo +++ b/docs/sphinx/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 75b8c6a2e242458b2767632b4ca8f3e1 +config: 504fc0b18f5078da3c2b6c957c5c94f7 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/_build/html/_modules/borea/datastruct/camera.html b/docs/sphinx/_build/html/_modules/borea/datastruct/camera.html index fd0557e5..ddf8308a 100644 --- a/docs/sphinx/_build/html/_modules/borea/datastruct/camera.html +++ b/docs/sphinx/_build/html/_modules/borea/datastruct/camera.html @@ -4,11 +4,11 @@ - + borea.datastruct.camera - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -348,6 +335,6 @@

Source code for borea.datastruct.camera

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/datastruct/dtm.html b/docs/sphinx/_build/html/_modules/borea/datastruct/dtm.html index 198f1aac..c7f87328 100644 --- a/docs/sphinx/_build/html/_modules/borea/datastruct/dtm.html +++ b/docs/sphinx/_build/html/_modules/borea/datastruct/dtm.html @@ -4,11 +4,11 @@ - + borea.datastruct.dtm - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -457,6 +444,6 @@

Source code for borea.datastruct.dtm

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/datastruct/gcp.html b/docs/sphinx/_build/html/_modules/borea/datastruct/gcp.html index df4fd8bf..54a40716 100644 --- a/docs/sphinx/_build/html/_modules/borea/datastruct/gcp.html +++ b/docs/sphinx/_build/html/_modules/borea/datastruct/gcp.html @@ -4,11 +4,11 @@ - + borea.datastruct.gcp - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -345,6 +332,6 @@

Source code for borea.datastruct.gcp

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/datastruct/shot.html b/docs/sphinx/_build/html/_modules/borea/datastruct/shot.html index fa5646bf..df9d36c5 100644 --- a/docs/sphinx/_build/html/_modules/borea/datastruct/shot.html +++ b/docs/sphinx/_build/html/_modules/borea/datastruct/shot.html @@ -4,11 +4,11 @@ - + borea.datastruct.shot - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -459,9 +446,9 @@

Source code for borea.datastruct.shot

             type_z (str): z type height or altitude.
         """
         if type_z == "height":
-            self.pos_shot[2] = ProjEngine().tranform_height(self.pos_shot)
+            self.pos_shot[2] = ProjEngine().tf.tranform_height(self.pos_shot)
         else:
-            self.pos_shot[2] = ProjEngine().tranform_altitude(self.pos_shot)
+ self.pos_shot[2] = ProjEngine().tf.tranform_altitude(self.pos_shot)
@@ -575,6 +562,6 @@

Source code for borea.datastruct.shot

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/datastruct/workdata.html b/docs/sphinx/_build/html/_modules/borea/datastruct/workdata.html index 04b79484..6a96440b 100644 --- a/docs/sphinx/_build/html/_modules/borea/datastruct/workdata.html +++ b/docs/sphinx/_build/html/_modules/borea/datastruct/workdata.html @@ -4,11 +4,11 @@ - + borea.datastruct.workdata - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -353,20 +340,22 @@

Source code for borea.datastruct.workdata

 
 
[docs] - def set_proj(self, epsg: int, path_geoid: list = None) -> None: + def set_proj(self, epsg: list, path_geoid: list = None) -> None: """ Setup a projection system to the worksite. Args: - epsg (int): Code epsg of the porjection ex: 2154. + epsg (list): Code epsg of the porjection ex: 2154. path_geoid (str): List of GeoTIFF which represents the geoid in grid form. """ ProjEngine.clear() try: # Check if the epsg exist - crs = CRS.from_epsg(epsg) - del crs + for idepsg in epsg: + if idepsg: + _ = CRS.from_epsg(idepsg) + del _ except exceptions.CRSError as e_info: - raise exceptions.CRSError(f"Your EPSG:{epsg} doesn't exist") from e_info + raise exceptions.CRSError(f"Your EPSG:{epsg} doesn't exist in pyproj.") from e_info ProjEngine().set_epsg(epsg, path_geoid)
@@ -573,6 +562,6 @@

Source code for borea.datastruct.workdata

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/format/conl.html b/docs/sphinx/_build/html/_modules/borea/format/conl.html index 468508a0..c061db6f 100644 --- a/docs/sphinx/_build/html/_modules/borea/format/conl.html +++ b/docs/sphinx/_build/html/_modules/borea/format/conl.html @@ -4,11 +4,11 @@ - + borea.format.conl - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -475,6 +462,6 @@

Source code for borea.format.conl

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/format/rpc.html b/docs/sphinx/_build/html/_modules/borea/format/rpc.html index 177267ef..544c28c7 100644 --- a/docs/sphinx/_build/html/_modules/borea/format/rpc.html +++ b/docs/sphinx/_build/html/_modules/borea/format/rpc.html @@ -4,11 +4,11 @@ - + borea.format.rpc - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -408,13 +395,13 @@

Source code for borea.format.rpc

         if self.fact_rpc is None:
             if self.output_epsg:
                 ProjEngine().set_epsg_tf_geog_output(self.output_epsg)
-                x_geog, y_geog, z_geog = ProjEngine().carto_to_geog_out(grid_world[0],
-                                                                        grid_world[1],
-                                                                        grid_world[2])
+                x_geog, y_geog, z_geog = ProjEngine().tf.carto_to_geog_out(grid_world[0],
+                                                                           grid_world[1],
+                                                                           grid_world[2])
             else:
-                x_geog, y_geog, z_geog = ProjEngine().carto_to_geog(grid_world[0],
-                                                                    grid_world[1],
-                                                                    grid_world[2])
+                x_geog, y_geog, z_geog = ProjEngine().tf.carto_to_geog(grid_world[0],
+                                                                       grid_world[1],
+                                                                       grid_world[2])
         else:
             x_geog = grid_world[0]*self.fact_rpc
             y_geog = grid_world[1]*self.fact_rpc
@@ -590,6 +577,6 @@ 

Source code for borea.format.rpc

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/geodesy/approx_euclidean_proj.html b/docs/sphinx/_build/html/_modules/borea/geodesy/approx_euclidean_proj.html index a7b2a6c3..500c03f8 100644 --- a/docs/sphinx/_build/html/_modules/borea/geodesy/approx_euclidean_proj.html +++ b/docs/sphinx/_build/html/_modules/borea/geodesy/approx_euclidean_proj.html @@ -4,11 +4,11 @@ - + borea.geodesy.approx_euclidean_proj - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -426,6 +413,6 @@

Source code for borea.geodesy.approx_euclidean_proj

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/geodesy/euclidean_proj.html b/docs/sphinx/_build/html/_modules/borea/geodesy/euclidean_proj.html index 40f595c1..1511631c 100644 --- a/docs/sphinx/_build/html/_modules/borea/geodesy/euclidean_proj.html +++ b/docs/sphinx/_build/html/_modules/borea/geodesy/euclidean_proj.html @@ -4,11 +4,11 @@ - + borea.geodesy.euclidean_proj - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -348,6 +335,6 @@

Source code for borea.geodesy.euclidean_proj


     
     
-    
+    
     
 
\ No newline at end of file
diff --git a/docs/sphinx/_build/html/_modules/borea/geodesy/local_euclidean_proj.html b/docs/sphinx/_build/html/_modules/borea/geodesy/local_euclidean_proj.html
index f91fa202..0a963ada 100644
--- a/docs/sphinx/_build/html/_modules/borea/geodesy/local_euclidean_proj.html
+++ b/docs/sphinx/_build/html/_modules/borea/geodesy/local_euclidean_proj.html
@@ -4,11 +4,11 @@
     
     
 
-    
+    
         borea.geodesy.local_euclidean_proj - Borea 1.0.0 documentation
       
-    
-    
+    
+    
     
     
 
@@ -87,19 +87,6 @@
       
     
   
-  
-    Auto light/dark mode
-    
-      
-      
-      
-      
-      
-      
-      
-    
-  
   
     Auto light/dark, in light mode
     
       
       
-      
     
   
   
@@ -328,7 +315,7 @@ 

Source code for borea.geodesy.local_euclidean_proj

Returns: np.array: Transition matrix. """ - lon, lat = ProjEngine().carto_to_geog(x, y) + lon, lat = ProjEngine().tf.carto_to_geog(x, y) gamma = ProjEngine().get_meridian_convergence(x, y) # Matrix for switching to local cartesian coordinates @@ -392,10 +379,10 @@

Source code for borea.geodesy.local_euclidean_proj

""" coor = check_array_transfo(coor[0], coor[1], coor[2]) - coor_geoc = np.array(ProjEngine().carto_to_geoc(coor[0], coor[1], coor[2])) - central_geoc = np.array(ProjEngine().carto_to_geoc(self.pt_central[0], - self.pt_central[1], - self.pt_central[2])) + coor_geoc = np.array(ProjEngine().tf.carto_to_geoc(coor[0], coor[1], coor[2])) + central_geoc = np.array(ProjEngine().tf.carto_to_geoc(self.pt_central[0], + self.pt_central[1], + self.pt_central[2])) dr = np.vstack([coor_geoc[0] - central_geoc[0], coor_geoc[1] - central_geoc[1], coor_geoc[2] - central_geoc[2]]) @@ -418,15 +405,15 @@

Source code for borea.geodesy.local_euclidean_proj

""" coor = np.squeeze(coor) - central_geoc = np.array(ProjEngine().carto_to_geoc(self.pt_central[0], - self.pt_central[1], - self.pt_central[2])) + central_geoc = np.array(ProjEngine().tf.carto_to_geoc(self.pt_central[0], + self.pt_central[1], + self.pt_central[2])) dr = np.vstack([coor[0] - self.pt_central[0], coor[1] - self.pt_central[1], coor[2] - self.pt_central[2]]) point_geoc = np.squeeze((self.rot_to_euclidean_local.T @ dr) + np.array([central_geoc]).T) x_gc, y_gc, z_gc = check_array_transfo(point_geoc[0], point_geoc[1], point_geoc[2]) - tup = ProjEngine().geoc_to_carto(x_gc, y_gc, z_gc) + tup = ProjEngine().tf.geoc_to_carto(x_gc, y_gc, z_gc) return np.array([tup[0], tup[1], tup[2]])
@@ -465,6 +452,6 @@

Source code for borea.geodesy.local_euclidean_proj

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/geodesy/proj_engine.html b/docs/sphinx/_build/html/_modules/borea/geodesy/proj_engine.html index 1f0a5218..441acde8 100644 --- a/docs/sphinx/_build/html/_modules/borea/geodesy/proj_engine.html +++ b/docs/sphinx/_build/html/_modules/borea/geodesy/proj_engine.html @@ -4,11 +4,11 @@ - + borea.geodesy.proj_engine - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -300,7 +287,7 @@

Source code for borea.geodesy.proj_engine

 
[docs] @dataclass -class ProjEngine(TransformGeodesy, metaclass=Singleton): +class ProjEngine(metaclass=Singleton): """ This class provides functions for using a cartographic system. """ @@ -310,19 +297,19 @@

Source code for borea.geodesy.proj_engine

 
     def __post_init__(self) -> None:
         if self.epsg:
-            self.crs = pyproj.CRS.from_epsg(self.epsg)
+            self.crs = pyproj.CRS.from_epsg(self.epsg[0])
             self.proj = pyproj.Proj(self.crs)
-            TransformGeodesy.__tf_init__(self, self.geoid, self.crs)
+            self.tf = TransformGeodesy(self.epsg, self.geoid)
 
 
[docs] - def set_epsg(self, epsg: int, geoid: list = None) -> None: + def set_epsg(self, epsg: list, geoid: list = None) -> None: """ Setter of the class ProjEngine. Allows to init the class with data. Args: - epsg (int): Code epsg of the projection ex: 2154. + epsg (list): Code epsg of the projection ex: 2154. geoid (list): List of geoid to use. """ self.epsg = epsg @@ -339,7 +326,7 @@

Source code for borea.geodesy.proj_engine

         Args:
             epsg_out (int): Code epsg of the output crs.
         """
-        self.tf_output(self.crs, epsg_output)
+ self.tf.tf_output(epsg_output)
@@ -357,7 +344,7 @@

Source code for borea.geodesy.proj_engine

         Returns:
             np.array : Meridian convergence in degree.
         """
-        (x_geog, y_geog) = self.carto_to_geog(x_carto, y_carto)
+        (x_geog, y_geog) = self.tf.carto_to_geog(x_carto, y_carto)
         return -np.array(self.proj.get_factors(x_geog, y_geog).meridian_convergence)
@@ -376,7 +363,7 @@

Source code for borea.geodesy.proj_engine

         Returns:
             np.array: Scale factor and meridian convergence.
         """
-        x_geog, y_geog = self.carto_to_geog(x_carto, y_carto)
+        x_geog, y_geog = self.tf.carto_to_geog(x_carto, y_carto)
         return np.array(self.proj.get_factors(x_geog, y_geog).meridional_scale) - 1
@@ -415,6 +402,6 @@

Source code for borea.geodesy.proj_engine

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/geodesy/projectionlist/search_proj.html b/docs/sphinx/_build/html/_modules/borea/geodesy/projectionlist/search_proj.html index 68b51a9e..a1cc77cd 100644 --- a/docs/sphinx/_build/html/_modules/borea/geodesy/projectionlist/search_proj.html +++ b/docs/sphinx/_build/html/_modules/borea/geodesy/projectionlist/search_proj.html @@ -4,11 +4,11 @@ - + borea.geodesy.projectionlist.search_proj - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -386,6 +373,6 @@

Source code for borea.geodesy.projectionlist.search_proj

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/geodesy/transform_geodesy.html b/docs/sphinx/_build/html/_modules/borea/geodesy/transform_geodesy.html index 29b207f9..f9176c54 100644 --- a/docs/sphinx/_build/html/_modules/borea/geodesy/transform_geodesy.html +++ b/docs/sphinx/_build/html/_modules/borea/geodesy/transform_geodesy.html @@ -4,11 +4,11 @@ - + borea.geodesy.transform_geodesy - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -288,15 +275,13 @@

Source code for borea.geodesy.transform_geodesy

< """ Module for class ProjEngine, transform geodesy """ -from dataclasses import dataclass import pyproj import numpy as np -# pylint: disable=unsubscriptable-object +# pylint: disable=too-many-instance-attributes
[docs] -@dataclass class TransformGeodesy(): """ This class provides functions to tranform coordinate system. @@ -307,52 +292,139 @@

Source code for borea.geodesy.transform_geodesy

< geoid (list): List of geoid to use. crs (pyproj): CRS pyproj of the worksite. """ - carto_to_geoc = None - geoc_to_carto = None - carto_to_geog = None - geog_to_carto = None - geog_to_geoid = None - geoid_to_geog = None - carto_to_geog_out = None - - def __tf_init__(self, geoid: list, crs: pyproj) -> None: - crs_geoc = pyproj.crs.GeocentricCRS(name=crs.name, datum=crs.datum.name) - crs_geog = pyproj.crs.GeographicCRS(name=crs.name, datum=crs.datum.name) - # Transform cartographic coordinates to geographic coordinates - self.carto_to_geog = pyproj.Transformer.from_crs(crs, crs_geog).transform - # Transform geographic coordinates to cartographic coordinates - self.geog_to_carto = pyproj.Transformer.from_crs(crs_geog, crs).transform - # Transform cartographic coordinates to geocentric coordinates - self.carto_to_geoc = pyproj.Transformer.from_crs(crs, crs_geoc).transform - # Transform geocentric coordinates to cartographic coordinates - self.geoc_to_carto = pyproj.Transformer.from_crs(crs_geoc, crs).transform - - if geoid: - self.tf_geoid(geoid) - -
-[docs] - def tf_geoid(self, geoid: list) -> None: + def __init__(self, epsg: list, geoid: list) -> None: + self.epsg = epsg + self.crs = pyproj.CRS.from_epsg(epsg[0]) + self.geoid = geoid + self._carto_to_geoc = None + self._geoc_to_carto = None + self._carto_to_geog = None + self._geog_to_carto = None + self._geog_to_geoid = None + self._geoid_to_geog = None + self.carto_to_geog_out = None + + @property + def carto_to_geog(self) -> pyproj.Transformer: """ - Create attribute transform, to transform geographic coordinates to geoide coordinates. + Returns the transformation or instantiates it before returning it. - Args: - geoid (list): List of geoid to use. + Returns: + pyproj.Transformer : carto_to_geog """ - try: - # Transform geoide coordinates to geographic coordinates - self.geoid_to_geog = pyproj.Transformer.from_pipeline(f"+proj=vgridshift " - f"+grids={','.join(geoid)} " - "+multiplier=1").transform - # Transform geographic coordinates to geoide coordinates - self.geog_to_geoid = pyproj.Transformer.from_pipeline(f"+proj=vgridshift " - f"+grids={','.join(geoid)} " - "+multiplier=-1").transform - except pyproj.exceptions.ProjError as e: - raise pyproj.exceptions.ProjError(f"{geoid} The name or path of geotif is incorrect or " - "does not exist in " - f"{pyproj.datadir.get_data_dir()}!!!{e}") from e
+ if not self._carto_to_geog: + try: + crs_geog = pyproj.CRS.from_epsg(self.epsg[1]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geog = pyproj.crs.GeographicCRS(name=self.crs.name, datum=self.crs.datum.name) + + self._carto_to_geog = pyproj.Transformer.from_crs(self.crs, crs_geog).transform + + return self._carto_to_geog + + @property + def geog_to_carto(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geog_to_carto + """ + if not self._geog_to_carto: + try: + crs_geog = pyproj.CRS.from_epsg(self.epsg[1]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geog = pyproj.crs.GeographicCRS(name=self.crs.name, datum=self.crs.datum.name) + + self._geog_to_carto = pyproj.Transformer.from_crs(crs_geog, self.crs).transform + + return self._geog_to_carto + + @property + def carto_to_geoc(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : carto_to_geoc + """ + if not self._carto_to_geoc: + try: + crs_geoc = pyproj.CRS.from_epsg(self.epsg[2]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geoc = pyproj.crs.GeocentricCRS(name=self.crs.name, datum=self.crs.datum.name) + + self._carto_to_geoc = pyproj.Transformer.from_crs(self.crs, crs_geoc).transform + + return self._carto_to_geoc + + @property + def geoc_to_carto(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geoc_to_carto + """ + if not self._geoc_to_carto: + try: + crs_geoc = pyproj.CRS.from_epsg(self.epsg[2]) + except (IndexError, pyproj.exceptions.CRSError): + crs_geoc = pyproj.crs.GeocentricCRS(name=self.crs.name, datum=self.crs.datum.name) + + self._geoc_to_carto = pyproj.Transformer.from_crs(crs_geoc, self.crs).transform + return self._geoc_to_carto + + @property + def geoid_to_geog(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geoid_to_geog + """ + if not self.geoid: + raise ValueError("Mistake Geoid path") + + if not self._geoid_to_geog: + try: + # Transform geoide coordinates to geographic coordinates + self._geoid_to_geog = pyproj.Transformer.from_pipeline("+proj=vgridshift " + "+grids=" + f"{','.join(self.geoid)} " + "+multiplier=1").transform + except pyproj.exceptions.ProjError as e: + raise pyproj.exceptions.ProjError(f"{self.geoid} The name or path " + "of geotif is incorrect or does not exist in " + f"{pyproj.datadir.get_data_dir()}!!!{e}") from e + + return self._geoid_to_geog + + @property + def geog_to_geoid(self) -> pyproj.Transformer: + """ + Returns the transformation or instantiates it before returning it. + + Returns: + pyproj.Transformer : geog_to_geoid + """ + if not self.geoid: + raise ValueError("Mistake Geoid path") + + if not self._geog_to_geoid: + try: + # Transform geoide coordinates to geographic coordinates + self._geog_to_geoid = pyproj.Transformer.from_pipeline("+proj=vgridshift " + "+grids=" + f"{','.join(self.geoid)} " + "+multiplier=-1").transform + except pyproj.exceptions.ProjError as e: + raise pyproj.exceptions.ProjError(f"{self.geoid} The name or path " + "of geotif is incorrect or does not exist in " + f"{pyproj.datadir.get_data_dir()}!!!{e}") from e + + return self._geog_to_geoid
[docs] @@ -414,18 +486,17 @@

Source code for borea.geodesy.transform_geodesy

<
[docs] - def tf_output(self, crs: pyproj, epsg_out: int = None) -> None: + def tf_output(self, epsg_out: int = None) -> None: """ Create the pyproj Transformer from crs of worksite to crs geographic ask. Args: - crs (pyproj): The crs pyproj of the worksite. epsg_out (int): Code epsg of the output crs. """ - if epsg_out and epsg_out != crs.to_epsg(): + if epsg_out and epsg_out != self.epsg[0]: crs_out = pyproj.CRS.from_epsg(epsg_out) crs_geog_out = pyproj.crs.GeographicCRS(name=crs_out.name, datum=crs_out.datum.name) - self.carto_to_geog_out = pyproj.Transformer.from_crs(crs, crs_geog_out).transform
+ self.carto_to_geog_out = pyproj.Transformer.from_crs(self.crs, crs_geog_out).transform
@@ -463,6 +534,6 @@

Source code for borea.geodesy.transform_geodesy

<
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_add_shot.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_add_shot.html index d095a539..a23237d8 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_add_shot.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_add_shot.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_add_shot - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -389,6 +376,6 @@

Source code for borea.process.p_add_data.p_add_shot

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp2d.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp2d.html index fc1889cb..72f8c4fb 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp2d.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp2d.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_file_gcp2d - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -381,6 +368,6 @@

Source code for borea.process.p_add_data.p_file_gcp2d

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp3d.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp3d.html index 3625e901..22cf2876 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp3d.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_file_gcp3d.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_file_gcp3d - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -379,6 +366,6 @@

Source code for borea.process.p_add_data.p_file_gcp3d

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html index c1057f7e..1f809e38 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_gen_param - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -307,7 +294,7 @@

Source code for borea.process.p_add_data.p_gen_param

argsparse: Parser with argument. """ parser.add_argument('-e', '--epsg', - type=int, default=None, + type=list, default=None, help='EPSG codifier number of the reference system used e.g. "2154".') parser.add_argument('-y', '--pathgeoid', type=str, nargs='*', default=None, @@ -402,6 +389,6 @@

Source code for borea.process.p_add_data.p_gen_param

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt2d.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt2d.html index 97180d2e..7bb9a805 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt2d.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt2d.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_pt2d - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -374,6 +361,6 @@

Source code for borea.process.p_add_data.p_pt2d

<
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt3d.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt3d.html index 494bfaa8..3faf9a69 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt3d.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_pt3d.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_pt3d - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -374,6 +361,6 @@

Source code for borea.process.p_add_data.p_pt3d

<
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_unit_shot.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_unit_shot.html index 6018b289..28425d42 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_unit_shot.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_unit_shot.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_unit_shot - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -374,6 +361,6 @@

Source code for borea.process.p_add_data.p_unit_shot

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_write.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_write.html index ac303e83..96693040 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_write.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_write.html @@ -4,11 +4,11 @@ - + borea.process.p_add_data.p_write - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -346,6 +333,6 @@

Source code for borea.process.p_add_data.p_write

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_read_opk.html b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_read_opk.html index 60138f23..41616562 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_read_opk.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_read_opk.html @@ -4,11 +4,11 @@ - + borea.process.p_format.p_read_opk - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -404,6 +391,6 @@

Source code for borea.process.p_format.p_read_opk

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_con.html b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_con.html index 0042d5b7..603218f8 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_con.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_con.html @@ -4,11 +4,11 @@ - + borea.process.p_format.p_write_con - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -362,6 +349,6 @@

Source code for borea.process.p_format.p_write_con

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_opk.html b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_opk.html index be64c0cd..c8c547ac 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_opk.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_opk.html @@ -4,11 +4,11 @@ - + borea.process.p_format.p_write_opk - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -390,6 +377,6 @@

Source code for borea.process.p_format.p_write_opk

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_rpc.html b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_rpc.html index e4b1cfa1..81cbb4bb 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_rpc.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_format/p_write_rpc.html @@ -4,11 +4,11 @@ - + borea.process.p_format.p_write_rpc - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -378,6 +365,6 @@

Source code for borea.process.p_format.p_write_rpc

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_control.html b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_control.html index ca8ee6b8..e62c01a0 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_control.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_control.html @@ -4,11 +4,11 @@ - + borea.process.p_func.p_control - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -393,6 +380,6 @@

Source code for borea.process.p_func.p_control

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_image_world.html b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_image_world.html index 1bcf6ffb..9141b6f9 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_image_world.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_image_world.html @@ -4,11 +4,11 @@ - + borea.process.p_func.p_image_world - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -374,6 +361,6 @@

Source code for borea.process.p_func.p_image_world

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_spaceresection.html b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_spaceresection.html index 744c07f6..ea79eabe 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_spaceresection.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_spaceresection.html @@ -4,11 +4,11 @@ - + borea.process.p_func.p_spaceresection - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -377,6 +364,6 @@

Source code for borea.process.p_func.p_spaceresection

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_world_image.html b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_world_image.html index a8e422e1..8f87aa34 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_func/p_world_image.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_func/p_world_image.html @@ -4,11 +4,11 @@ - + borea.process.p_func.p_world_image - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -375,6 +362,6 @@

Source code for borea.process.p_func.p_world_image

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/reader/orientation/manage_reader.html b/docs/sphinx/_build/html/_modules/borea/reader/orientation/manage_reader.html index dbab97b2..318c90e7 100644 --- a/docs/sphinx/_build/html/_modules/borea/reader/orientation/manage_reader.html +++ b/docs/sphinx/_build/html/_modules/borea/reader/orientation/manage_reader.html @@ -4,11 +4,11 @@ - + borea.reader.orientation.manage_reader - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -356,6 +343,6 @@

Source code for borea.reader.orientation.manage_reader

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/reader/orientation/reader_opk.html b/docs/sphinx/_build/html/_modules/borea/reader/orientation/reader_opk.html index 7fffccc7..1be1480a 100644 --- a/docs/sphinx/_build/html/_modules/borea/reader/orientation/reader_opk.html +++ b/docs/sphinx/_build/html/_modules/borea/reader/orientation/reader_opk.html @@ -4,11 +4,11 @@ - + borea.reader.orientation.reader_opk - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -381,6 +368,6 @@

Source code for borea.reader.orientation.reader_opk

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/reader/reader_camera.html b/docs/sphinx/_build/html/_modules/borea/reader/reader_camera.html index 056dd4d2..fbcce254 100644 --- a/docs/sphinx/_build/html/_modules/borea/reader/reader_camera.html +++ b/docs/sphinx/_build/html/_modules/borea/reader/reader_camera.html @@ -4,11 +4,11 @@ - + borea.reader.reader_camera - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -378,6 +365,6 @@

Source code for borea.reader.reader_camera

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/reader/reader_point.html b/docs/sphinx/_build/html/_modules/borea/reader/reader_point.html index 2fb793f0..01d91b9a 100644 --- a/docs/sphinx/_build/html/_modules/borea/reader/reader_point.html +++ b/docs/sphinx/_build/html/_modules/borea/reader/reader_point.html @@ -4,11 +4,11 @@ - + borea.reader.reader_point - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -439,6 +426,6 @@

Source code for borea.reader.reader_point

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/stat/statistics.html b/docs/sphinx/_build/html/_modules/borea/stat/statistics.html index 2fc2c7c7..485acb49 100644 --- a/docs/sphinx/_build/html/_modules/borea/stat/statistics.html +++ b/docs/sphinx/_build/html/_modules/borea/stat/statistics.html @@ -4,11 +4,11 @@ - + borea.stat.statistics - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -562,6 +549,6 @@

Source code for borea.stat.statistics

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_dtm/world_image_dtm.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_dtm/world_image_dtm.html index 52a441de..28d145d4 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_dtm/world_image_dtm.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_dtm/world_image_dtm.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_dtm.world_image_dtm - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -376,6 +363,6 @@

Source code for borea.transform_world_image.transform_dtm.world_image_dtm - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/conversion_coor_shot.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/conversion_coor_shot.html index 10c96aca..575efbdb 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/conversion_coor_shot.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/conversion_coor_shot.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_shot.conversion_coor_shot - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -317,9 +304,9 @@

Source code for borea.transform_world_image.transform_shot.conversion_coor_s if type_z_shot != type_z_data: if type_z_shot == "height": - new_z = ProjEngine().tranform_altitude(pos_shot) + new_z = ProjEngine().tf.tranform_altitude(pos_shot) else: - new_z = ProjEngine().tranform_height(pos_shot) + new_z = ProjEngine().tf.tranform_height(pos_shot) pos_shot[2] = new_z return pos_shot

@@ -343,9 +330,9 @@

Source code for borea.transform_world_image.transform_shot.conversion_coor_s new_z = coor[2] if type_z_input != type_z_output: if type_z_input == "height": - new_z = ProjEngine().tranform_altitude(coor) + new_z = ProjEngine().tf.tranform_altitude(coor) else: - new_z = ProjEngine().tranform_height(coor) + new_z = ProjEngine().tf.tranform_height(coor) return np.array([coor[0], coor[1], new_z])

@@ -384,6 +371,6 @@

Source code for borea.transform_world_image.transform_shot.conversion_coor_s

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/image_world_shot.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/image_world_shot.html index 81edd0f9..9858883e 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/image_world_shot.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/image_world_shot.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_shot.image_world_shot - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -328,7 +315,7 @@

Source code for borea.transform_world_image.transform_shot.image_world_shot< Returns: np.array: Cartographique coordinate [x,y,z]. """ - if type_z_data != type_z_shot and not ProjEngine().geog_to_geoid: + if type_z_data != type_z_shot and not ProjEngine().tf.geog_to_geoid: raise ValueError("Missing geoid") if not Dtm().path_dtm: @@ -491,6 +478,6 @@

Source code for borea.transform_world_image.transform_shot.image_world_shot<

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/world_image_shot.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/world_image_shot.html index bb60a708..86041649 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/world_image_shot.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_shot/world_image_shot.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_shot.world_image_shot - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -325,7 +312,7 @@

Source code for borea.transform_world_image.transform_shot.world_image_shot< Returns: np.array: The image coordinate [c,l]. """ - if type_z_data != type_z_shot and not ProjEngine().geog_to_geoid: + if type_z_data != type_z_shot and not ProjEngine().tf.geog_to_geoid: raise ValueError("Missing geoid") if self.shot.linear_alteration and not Dtm().path_dtm and not self.shot.approxeucli: @@ -452,6 +439,6 @@

Source code for borea.transform_world_image.transform_shot.world_image_shot<

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_intersection.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_intersection.html index a13c346a..519c0960 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_intersection.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_intersection.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_worksite.image_world_intersection - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -489,6 +476,6 @@

Source code for borea.transform_world_image.transform_worksite.image_world_i

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_least_square.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_least_square.html index d49c8040..dfd6036f 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_least_square.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_least_square.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_worksite.image_world_least_square - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -519,6 +506,6 @@

Source code for borea.transform_world_image.transform_worksite.image_world_l

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_work.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_work.html index 61706a9e..72e0a952 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_work.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/image_world_work.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_worksite.image_world_work - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -375,6 +362,6 @@

Source code for borea.transform_world_image.transform_worksite.image_world_w

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/space_resection.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/space_resection.html index b96475db..b2bac65a 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/space_resection.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/space_resection.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_worksite.space_resection - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -696,6 +683,6 @@

Source code for borea.transform_world_image.transform_worksite.space_resecti

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/world_image_work.html b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/world_image_work.html index eb0dacc8..07c8a4e9 100644 --- a/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/world_image_work.html +++ b/docs/sphinx/_build/html/_modules/borea/transform_world_image/transform_worksite/world_image_work.html @@ -4,11 +4,11 @@ - + borea.transform_world_image.transform_worksite.world_image_work - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -369,6 +356,6 @@

Source code for borea.transform_world_image.transform_worksite.world_image_w

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_opk.html b/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_opk.html index 5114b826..1b3df712 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_opk.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_opk.html @@ -4,11 +4,11 @@ - + borea.utils.check.check_args_opk - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -385,6 +372,6 @@

Source code for borea.utils.check.check_args_opk

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_reader_pt.html b/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_reader_pt.html index 9200d845..84274b82 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_reader_pt.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/check/check_args_reader_pt.html @@ -4,11 +4,11 @@ - + borea.utils.check.check_args_reader_pt - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -367,6 +354,6 @@

Source code for borea.utils.check.check_args_reader_pt

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/check/check_array.html b/docs/sphinx/_build/html/_modules/borea/utils/check/check_array.html index fcfaaa89..3ad07197 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/check/check_array.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/check/check_array.html @@ -4,11 +4,11 @@ - + borea.utils.check.check_array - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -379,6 +366,6 @@

Source code for borea.utils.check.check_array

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/check/check_header.html b/docs/sphinx/_build/html/_modules/borea/utils/check/check_header.html index a9e6f2f4..aff0c817 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/check/check_header.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/check/check_header.html @@ -4,11 +4,11 @@ - + borea.utils.check.check_header - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -419,6 +406,6 @@

Source code for borea.utils.check.check_header

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/check/check_order_axe.html b/docs/sphinx/_build/html/_modules/borea/utils/check/check_order_axe.html index 7c451c23..e45b6dbb 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/check/check_order_axe.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/check/check_order_axe.html @@ -4,11 +4,11 @@ - + borea.utils.check.check_order_axe - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -376,6 +363,6 @@

Source code for borea.utils.check.check_order_axe

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/miscellaneous.html b/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/miscellaneous.html index dbccef23..c5d6bd9a 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/miscellaneous.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/miscellaneous.html @@ -4,11 +4,11 @@ - + borea.utils.miscellaneous.miscellaneous - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -415,6 +402,6 @@

Source code for borea.utils.miscellaneous.miscellaneous

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/param_bundle.html b/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/param_bundle.html index f7989c80..6b0a1fdb 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/param_bundle.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/param_bundle.html @@ -4,11 +4,11 @@ - + borea.utils.miscellaneous.param_bundle - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -359,6 +346,6 @@

Source code for borea.utils.miscellaneous.param_bundle

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/sparse.html b/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/sparse.html index 13fd9646..272876d5 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/sparse.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/miscellaneous/sparse.html @@ -4,11 +4,11 @@ - + borea.utils.miscellaneous.sparse - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -354,6 +341,6 @@

Source code for borea.utils.miscellaneous.sparse

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/singleton/singleton.html b/docs/sphinx/_build/html/_modules/borea/utils/singleton/singleton.html index 203e9257..d0238fdc 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/singleton/singleton.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/singleton/singleton.html @@ -4,11 +4,11 @@ - + borea.utils.singleton.singleton - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -349,6 +336,6 @@

Source code for borea.utils.singleton.singleton

<
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/utils/xml/xml.html b/docs/sphinx/_build/html/_modules/borea/utils/xml/xml.html index 8f036845..c7d80d2e 100644 --- a/docs/sphinx/_build/html/_modules/borea/utils/xml/xml.html +++ b/docs/sphinx/_build/html/_modules/borea/utils/xml/xml.html @@ -4,11 +4,11 @@ - + borea.utils.xml.xml - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -392,6 +379,6 @@

Source code for borea.utils.xml.xml

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/worksite/worksite.html b/docs/sphinx/_build/html/_modules/borea/worksite/worksite.html index 15d38d23..fb6fff8d 100644 --- a/docs/sphinx/_build/html/_modules/borea/worksite/worksite.html +++ b/docs/sphinx/_build/html/_modules/borea/worksite/worksite.html @@ -4,11 +4,11 @@ - + borea.worksite.worksite - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -590,6 +577,6 @@

Source code for borea.worksite.worksite

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/writer/manage_writer.html b/docs/sphinx/_build/html/_modules/borea/writer/manage_writer.html index 1f44c2de..26675353 100644 --- a/docs/sphinx/_build/html/_modules/borea/writer/manage_writer.html +++ b/docs/sphinx/_build/html/_modules/borea/writer/manage_writer.html @@ -4,11 +4,11 @@ - + borea.writer.manage_writer - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -346,6 +333,6 @@

Source code for borea.writer.manage_writer

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/writer/writer_con.html b/docs/sphinx/_build/html/_modules/borea/writer/writer_con.html index 26d471ba..997b6bd4 100644 --- a/docs/sphinx/_build/html/_modules/borea/writer/writer_con.html +++ b/docs/sphinx/_build/html/_modules/borea/writer/writer_con.html @@ -4,11 +4,11 @@ - + borea.writer.writer_con - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -309,7 +296,7 @@

Source code for borea.writer.writer_con

         work (Worksite): The site to be recorded.
     """
     _, _ = name, param_con
-    geoview_proj = search_info("EPSG", str(ProjEngine().epsg), "GEOVIEW")
+    geoview_proj = search_info("EPSG", str(ProjEngine().epsg[0]), "GEOVIEW")
 
     for name_shot, shot in work.shots.items():
         cam = work.cameras[shot.name_cam]
@@ -352,6 +339,6 @@ 

Source code for borea.writer.writer_con

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/writer/writer_df_to_txt.html b/docs/sphinx/_build/html/_modules/borea/writer/writer_df_to_txt.html index 2a53ec57..fadad467 100644 --- a/docs/sphinx/_build/html/_modules/borea/writer/writer_df_to_txt.html +++ b/docs/sphinx/_build/html/_modules/borea/writer/writer_df_to_txt.html @@ -4,11 +4,11 @@ - + borea.writer.writer_df_to_txt - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -355,6 +342,6 @@

Source code for borea.writer.writer_df_to_txt

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/writer/writer_opk.html b/docs/sphinx/_build/html/_modules/borea/writer/writer_opk.html index 990166fc..ffbc4aaa 100644 --- a/docs/sphinx/_build/html/_modules/borea/writer/writer_opk.html +++ b/docs/sphinx/_build/html/_modules/borea/writer/writer_opk.html @@ -4,11 +4,11 @@ - + borea.writer.writer_opk - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -393,6 +380,6 @@

Source code for borea.writer.writer_opk

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/borea/writer/writer_rpc.html b/docs/sphinx/_build/html/_modules/borea/writer/writer_rpc.html index c63024f1..0b65d53f 100644 --- a/docs/sphinx/_build/html/_modules/borea/writer/writer_rpc.html +++ b/docs/sphinx/_build/html/_modules/borea/writer/writer_rpc.html @@ -4,11 +4,11 @@ - + borea.writer.writer_rpc - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -379,6 +366,6 @@

Source code for borea.writer.writer_rpc

 
- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_modules/index.html b/docs/sphinx/_build/html/_modules/index.html index e1a3a810..7cb2f820 100644 --- a/docs/sphinx/_build/html/_modules/index.html +++ b/docs/sphinx/_build/html/_modules/index.html @@ -4,11 +4,11 @@ - + Overview: module code - Borea 1.0.0 documentation - - + + @@ -87,19 +87,6 @@
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -379,6 +366,6 @@

All modules for which code is available

- + \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/scripts/furo.js b/docs/sphinx/_build/html/_static/scripts/furo.js index 0267c7e1..0abb2afa 100644 --- a/docs/sphinx/_build/html/_static/scripts/furo.js +++ b/docs/sphinx/_build/html/_static/scripts/furo.js @@ -1,3 +1,3 @@ /*! For license information please see furo.js.LICENSE.txt */ -(()=>{var t={856:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(856),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+2.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +(()=>{var t={856:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(856),e=n.n(t),o=null,r=null,c=document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;(function(t){const e=Math.floor(r.getBoundingClientRect().top);console.log(`headerTop: ${e}`),0==e&&t!=e?r.classList.add("scrolled"):r.classList.remove("scrolled")})(n=t),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+2.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); //# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/scripts/furo.js.map b/docs/sphinx/_build/html/_static/scripts/furo.js.map index c3b37aaa..80ea12b8 100644 --- a/docs/sphinx/_build/html/_static/scripts/furo.js.map +++ b/docs/sphinx/_build/html/_static/scripts/furo.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 2.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader(positionY) {\n const headerTop = Math.floor(header.getBoundingClientRect().top);\n\n console.log(`headerTop: ${headerTop}`);\n if (headerTop == 0 && positionY != headerTop) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader(positionY);\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 2.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","headerTop","floor","scrollHandlerForHeader","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/searchtools.js b/docs/sphinx/_build/html/_static/searchtools.js index 92da3f8b..b08d58c9 100644 --- a/docs/sphinx/_build/html/_static/searchtools.js +++ b/docs/sphinx/_build/html/_static/searchtools.js @@ -178,7 +178,7 @@ const Search = { htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - for (const removalQuery of [".headerlinks", "script", "style"]) { + for (const removalQuery of [".headerlink", "script", "style"]) { htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); } if (anchor) { @@ -328,13 +328,14 @@ const Search = { for (const [title, foundTitles] of Object.entries(allTitles)) { if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], ]); } diff --git a/docs/sphinx/_build/html/_static/styles/furo-extensions.css b/docs/sphinx/_build/html/_static/styles/furo-extensions.css index bc447f22..82295876 100644 --- a/docs/sphinx/_build/html/_static/styles/furo-extensions.css +++ b/docs/sphinx/_build/html/_static/styles/furo-extensions.css @@ -1,2 +1,2 @@ -#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} /*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/styles/furo-extensions.css.map b/docs/sphinx/_build/html/_static/styles/furo-extensions.css.map index 9ba5637f..c26eac7f 100644 --- a/docs/sphinx/_build/html/_static/styles/furo-extensions.css.map +++ b/docs/sphinx/_build/html/_static/styles/furo-extensions.css.map @@ -1 +1 @@ -{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAEE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cAIA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UCzCN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/styles/furo.css b/docs/sphinx/_build/html/_static/styles/furo.css index e3d4e57b..05a56b17 100644 --- a/docs/sphinx/_build/html/_static/styles/furo.css +++ b/docs/sphinx/_build/html/_static/styles/furo.css @@ -1,2 +1,2 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-stack--headings:var(--font-stack);--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#6b6f76;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-family:var(--font-stack--headings);font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;vertical-align:middle;width:1.25rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.25rem;width:1.25rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{height:1rem;width:1rem;fill:currentColor;display:inline-block}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:4.25rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>:not(span),div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree a.reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling. Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,p,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-stack--headings:var(--font-stack);--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#6b6f76;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-family:var(--font-stack--headings);font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{display:flex}.theme-toggle{background:transparent;border:none;cursor:pointer;display:flex;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;width:1.25rem}.theme-toggle-header{align-items:center;display:flex;justify-content:center}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.5rem;width:1.5rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{height:1rem;width:1rem;fill:currentColor;display:inline-block}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.content{margin-left:auto;margin-right:auto;padding:0 1em}}@media(max-width:63em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.theme-toggle-header,.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.5rem;width:1.5rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}}@media(max-width:48em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){article[role=main] aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:4.25rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>:not(span),div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}[role=main] .table-wrapper.container{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree a.reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling. Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} /*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/docs/sphinx/_build/html/_static/styles/furo.css.map b/docs/sphinx/_build/html/_static/styles/furo.css.map index 6e02d0b1..3ecc3715 100644 --- a/docs/sphinx/_build/html/_static/styles/furo.css.map +++ b/docs/sphinx/_build/html/_static/styles/furo.css.map @@ -1 +1 @@ -{"version":3,"file":"styles/furo.css","mappings":"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AEE,CAJJ,gBAEE,CAJE,iBAMA,yFAQA,aACA,eEpbJ,cACE,iBACA,YAEA,CAFA,iBAEA,+DAGA,mBAKA,gCAGA,CARA,SAIA,SACA,CALA,0EAIA,CAJA,OAQA,0CACE,UAGF,iDAGF,CAHE,UAGF,8CAEE,CAFF,UAEE,CACA,uCAEA,WACA,WAFA,UAEA,6CAIA,yCACA,WAGA,WAJA,UAIA,gDACE,aASF,0CACE,CAFF,mBAEE,wEACA,CATA,YACA,CAKF,kBACA,CALE,MAGJ,CAII,eACA,CAJF,iCALE,cACA,CAHA,oBACA,CAKJ,SAKI,2BADA,UACA,6BAEJ,WACE,0DACA,kBACE,gCACA,mBADA,YACA,oEACA,2CAMF,mDAII,CAJJ,aADF,cACE,kBAII,kEACA,iBACE,mEACA,6BACE,wBADF,cACE,mCACA,qDANN,kCACE,6BAEE,mBADF,0CACE,CAFF,eACA,MACE,0DACA,wCACE,sGACA,WANN,yBACE,uCACA,CAFF,UAEE,2CACE,0FACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAIF,gEAIE,6BACA,gEAIA,+CACE,0EAIF,sDAEE,+DAGF,sCACA,8BACE,oC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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/variables/_layout.scss","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n --font-stack--headings: var(--font-stack);\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #6b6f76; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-family: var(--font-stack--headings)\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\n$icon-size: 1.25rem\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: $icon-size\n width: $icon-size\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: $icon-size\n width: $icon-size\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page, .view-this-page\n svg\n color: inherit\n height: $icon-size\n width: $icon-size\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: $icon-size\n width: $icon-size\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$full-width: $content-width + 2 * ($content-padding + $sidebar-width);\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 4.25rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > *:not(span),\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n color: var(--color-sidebar-link-text)\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the
- - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -756,12 +743,12 @@

Submodules
-set_proj(epsg: int, path_geoid: list | None = None) None[source]¶
+set_proj(epsg: list, path_geoid: list | None = None) None[source]¶

Setup a projection system to the worksite.

Parameters:
    -
  • epsg (int) – Code epsg of the porjection ex: 2154.

  • +
  • epsg (list) – Code epsg of the porjection ex: 2154.

  • path_geoid (str) – List of GeoTIFF which represents the geoid in grid form.

@@ -934,6 +921,6 @@

Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.format.html b/docs/sphinx/_build/html/borea.format.html index 92c6e682..dd5772e4 100644 --- a/docs/sphinx/_build/html/borea.format.html +++ b/docs/sphinx/_build/html/borea.format.html @@ -5,11 +5,11 @@ - + borea.format package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -600,6 +587,6 @@

Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.geodesy.html b/docs/sphinx/_build/html/borea.geodesy.html index 0caf5d10..0ee59c9e 100644 --- a/docs/sphinx/_build/html/borea.geodesy.html +++ b/docs/sphinx/_build/html/borea.geodesy.html @@ -5,11 +5,11 @@ - + borea.geodesy package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -581,7 +568,7 @@

Submodules
class borea.geodesy.proj_engine.ProjEngine(*args, **kwargs)[source]¶
-

Bases: TransformGeodesy

+

Bases: object

This class provides functions for using a cartographic system.

@@ -642,13 +629,13 @@

Submodules
-set_epsg(epsg: int, geoid: list | None = None) None[source]¶
+set_epsg(epsg: list, geoid: list | None = None) None[source]¶

Setter of the class ProjEngine. Allows to init the class with data.

Parameters:
    -
  • epsg (int) – Code epsg of the projection ex: 2154.

  • +
  • epsg (list) – Code epsg of the projection ex: 2154.

  • geoid (list) – List of geoid to use.

@@ -674,7 +661,7 @@

Submodules
-class borea.geodesy.transform_geodesy.TransformGeodesy[source]¶
+class borea.geodesy.transform_geodesy.TransformGeodesy(epsg: list, geoid: list)[source]¶

Bases: object

This class provides functions to tranform coordinate system. Class parent of ProjEngine. @@ -687,62 +674,97 @@

Submodules +
-carto_to_geoc = None¶
-
+property carto_to_geoc: Transformer¶ +

Returns the transformation or instantiates it before returning it.

+
+
Returns:
+

carto_to_geoc

+
+
Return type:
+

pyproj.Transformer

+
+
+

-
+
-carto_to_geog = None¶
-
- -
-
-carto_to_geog_out = None¶
-
+property carto_to_geog: Transformer¶ +

Returns the transformation or instantiates it before returning it.

+
+
Returns:
+

carto_to_geog

+
+
Return type:
+

pyproj.Transformer

+
+
+
-
+
-geoc_to_carto = None¶
-
+property geoc_to_carto: Transformer¶ +

Returns the transformation or instantiates it before returning it.

+
+
Returns:
+

geoc_to_carto

+
+
Return type:
+

pyproj.Transformer

+
+
+
-
+
-geog_to_carto = None¶
-
+property geog_to_carto: Transformer¶ +

Returns the transformation or instantiates it before returning it.

+
+
Returns:
+

geog_to_carto

+
+
Return type:
+

pyproj.Transformer

+
+
+
-
+
-geog_to_geoid = None¶
-
+property geog_to_geoid: Transformer¶ +

Returns the transformation or instantiates it before returning it.

+
+
Returns:
+

geog_to_geoid

+
+
Return type:
+

pyproj.Transformer

+
+
+
-
+
-geoid_to_geog = None¶
-
- -
-
-tf_geoid(geoid: list) None[source]¶
-

Create attribute transform, to transform geographic coordinates to geoide coordinates.

+property geoid_to_geog: Transformer¶ +

Returns the transformation or instantiates it before returning it.

-
Parameters:
-

geoid (list) – List of geoid to use.

+
Returns:
+

geoid_to_geog

+
+
Return type:
+

pyproj.Transformer

-tf_output(crs: <module 'pyproj' from '/home/ACornu/Documents/Outil_SIA/code_git/borea_env/lib/python3.10/site-packages/pyproj/__init__.py'>, epsg_out: int | None = None) None[source]¶
+tf_output(epsg_out: int | None = None) None[source]¶

Create the pyproj Transformer from crs of worksite to crs geographic ask.

Parameters:
-
    -
  • crs (pyproj) – The crs pyproj of the worksite.

  • -
  • epsg_out (int) – Code epsg of the output crs.

  • -
+

epsg_out (int) – Code epsg of the output crs.

@@ -893,12 +915,10 @@

SubmodulesTransformGeodesy
  • TransformGeodesy.carto_to_geoc
  • TransformGeodesy.carto_to_geog
  • -
  • TransformGeodesy.carto_to_geog_out
  • TransformGeodesy.geoc_to_carto
  • TransformGeodesy.geog_to_carto
  • TransformGeodesy.geog_to_geoid
  • TransformGeodesy.geoid_to_geog
  • -
  • TransformGeodesy.tf_geoid()
  • TransformGeodesy.tf_output()
  • TransformGeodesy.tranform_altitude()
  • TransformGeodesy.tranform_height()
  • @@ -921,6 +941,6 @@

    Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.geodesy.projectionlist.html b/docs/sphinx/_build/html/borea.geodesy.projectionlist.html index 88d549de..96d81bc6 100644 --- a/docs/sphinx/_build/html/borea.geodesy.projectionlist.html +++ b/docs/sphinx/_build/html/borea.geodesy.projectionlist.html @@ -5,11 +5,11 @@ - + borea.geodesy.projectionlist package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -421,6 +408,6 @@

    Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.html b/docs/sphinx/_build/html/borea.html index 43bc202f..84d7cdcf 100644 --- a/docs/sphinx/_build/html/borea.html +++ b/docs/sphinx/_build/html/borea.html @@ -5,11 +5,11 @@ - + borea package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -451,12 +438,10 @@

    SubpackagesTransformGeodesy
    • TransformGeodesy.carto_to_geoc
    • TransformGeodesy.carto_to_geog
    • -
    • TransformGeodesy.carto_to_geog_out
    • TransformGeodesy.geoc_to_carto
    • TransformGeodesy.geog_to_carto
    • TransformGeodesy.geog_to_geoid
    • TransformGeodesy.geoid_to_geog
    • -
    • TransformGeodesy.tf_geoid()
    • TransformGeodesy.tf_output()
    • TransformGeodesy.tranform_altitude()
    • TransformGeodesy.tranform_height()
    • @@ -742,6 +727,6 @@

      Subpackages - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.process.html b/docs/sphinx/_build/html/borea.process.html index f249ae83..841fe2a4 100644 --- a/docs/sphinx/_build/html/borea.process.html +++ b/docs/sphinx/_build/html/borea.process.html @@ -5,11 +5,11 @@ - + borea.process package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -471,6 +458,6 @@

      Subpackages - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.process.p_add_data.html b/docs/sphinx/_build/html/borea.process.p_add_data.html index 6c6ca77a..82821b68 100644 --- a/docs/sphinx/_build/html/borea.process.p_add_data.html +++ b/docs/sphinx/_build/html/borea.process.p_add_data.html @@ -5,11 +5,11 @@ - + borea.process.p_add_data package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -702,6 +689,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.process.p_format.html b/docs/sphinx/_build/html/borea.process.p_format.html index f93509f6..4666ef6a 100644 --- a/docs/sphinx/_build/html/borea.process.p_format.html +++ b/docs/sphinx/_build/html/borea.process.p_format.html @@ -5,11 +5,11 @@ - + borea.process.p_format package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -536,6 +523,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.process.p_func.html b/docs/sphinx/_build/html/borea.process.p_func.html index 9f403642..4a5a23d6 100644 --- a/docs/sphinx/_build/html/borea.process.p_func.html +++ b/docs/sphinx/_build/html/borea.process.p_func.html @@ -5,11 +5,11 @@ - + borea.process.p_func package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -536,6 +523,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.reader.html b/docs/sphinx/_build/html/borea.reader.html index 6f3d47bf..a292cf79 100644 --- a/docs/sphinx/_build/html/borea.reader.html +++ b/docs/sphinx/_build/html/borea.reader.html @@ -5,11 +5,11 @@ - + borea.reader package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -474,6 +461,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.reader.orientation.html b/docs/sphinx/_build/html/borea.reader.orientation.html index 3512c563..73e217d7 100644 --- a/docs/sphinx/_build/html/borea.reader.orientation.html +++ b/docs/sphinx/_build/html/borea.reader.orientation.html @@ -5,11 +5,11 @@ - + borea.reader.orientation package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -437,6 +424,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.stat.html b/docs/sphinx/_build/html/borea.stat.html index c2be143a..6fa6c92f 100644 --- a/docs/sphinx/_build/html/borea.stat.html +++ b/docs/sphinx/_build/html/borea.stat.html @@ -5,11 +5,11 @@ - + borea.stat package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -462,6 +449,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.transform_world_image.html b/docs/sphinx/_build/html/borea.transform_world_image.html index 481ef243..304f5def 100644 --- a/docs/sphinx/_build/html/borea.transform_world_image.html +++ b/docs/sphinx/_build/html/borea.transform_world_image.html @@ -5,11 +5,11 @@ - + borea.transform_world_image package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -480,6 +467,6 @@

      Subpackages - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.transform_world_image.transform_dtm.html b/docs/sphinx/_build/html/borea.transform_world_image.transform_dtm.html index af0aa3c7..2e1d9390 100644 --- a/docs/sphinx/_build/html/borea.transform_world_image.transform_dtm.html +++ b/docs/sphinx/_build/html/borea.transform_world_image.transform_dtm.html @@ -5,11 +5,11 @@ - + borea.transform_world_image.transform_dtm package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -427,6 +414,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.transform_world_image.transform_shot.html b/docs/sphinx/_build/html/borea.transform_world_image.transform_shot.html index 7c973394..d879c95d 100644 --- a/docs/sphinx/_build/html/borea.transform_world_image.transform_shot.html +++ b/docs/sphinx/_build/html/borea.transform_world_image.transform_shot.html @@ -5,11 +5,11 @@ - + borea.transform_world_image.transform_shot package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -667,6 +654,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.transform_world_image.transform_worksite.html b/docs/sphinx/_build/html/borea.transform_world_image.transform_worksite.html index 0d347c84..6a45cdcd 100644 --- a/docs/sphinx/_build/html/borea.transform_world_image.transform_worksite.html +++ b/docs/sphinx/_build/html/borea.transform_world_image.transform_worksite.html @@ -5,11 +5,11 @@ - + borea.transform_world_image.transform_worksite package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -906,6 +893,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.utils.check.html b/docs/sphinx/_build/html/borea.utils.check.html index 16e4fa48..ad3389d4 100644 --- a/docs/sphinx/_build/html/borea.utils.check.html +++ b/docs/sphinx/_build/html/borea.utils.check.html @@ -5,11 +5,11 @@ - + borea.utils.check package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -589,6 +576,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.utils.html b/docs/sphinx/_build/html/borea.utils.html index 12a46ef0..20fb4acd 100644 --- a/docs/sphinx/_build/html/borea.utils.html +++ b/docs/sphinx/_build/html/borea.utils.html @@ -5,11 +5,11 @@ - + borea.utils package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -449,6 +436,6 @@

      Subpackages - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.utils.miscellaneous.html b/docs/sphinx/_build/html/borea.utils.miscellaneous.html index 4384b4d1..8d731345 100644 --- a/docs/sphinx/_build/html/borea.utils.miscellaneous.html +++ b/docs/sphinx/_build/html/borea.utils.miscellaneous.html @@ -5,11 +5,11 @@ - + borea.utils.miscellaneous package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -520,6 +507,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.utils.singleton.html b/docs/sphinx/_build/html/borea.utils.singleton.html index 62367b47..66d41030 100644 --- a/docs/sphinx/_build/html/borea.utils.singleton.html +++ b/docs/sphinx/_build/html/borea.utils.singleton.html @@ -5,11 +5,11 @@ - + borea.utils.singleton package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -399,6 +386,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.utils.xml.html b/docs/sphinx/_build/html/borea.utils.xml.html index bbb2c71a..e21b33c6 100644 --- a/docs/sphinx/_build/html/borea.utils.xml.html +++ b/docs/sphinx/_build/html/borea.utils.xml.html @@ -5,11 +5,11 @@ - + borea.utils.xml package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -433,6 +420,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.worksite.html b/docs/sphinx/_build/html/borea.worksite.html index 60ac4913..d753852d 100644 --- a/docs/sphinx/_build/html/borea.worksite.html +++ b/docs/sphinx/_build/html/borea.worksite.html @@ -5,11 +5,11 @@ - + borea.worksite package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -548,6 +535,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/borea.writer.html b/docs/sphinx/_build/html/borea.writer.html index 1d736728..687a8c2e 100644 --- a/docs/sphinx/_build/html/borea.writer.html +++ b/docs/sphinx/_build/html/borea.writer.html @@ -5,11 +5,11 @@ - + borea.writer package - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -496,6 +483,6 @@

      Submodules - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/genindex.html b/docs/sphinx/_build/html/genindex.html index 3482f6b4..0cb2ca6b 100644 --- a/docs/sphinx/_build/html/genindex.html +++ b/docs/sphinx/_build/html/genindex.html @@ -4,10 +4,10 @@ - Index - Borea 1.0.0 documentation + Index - Borea 1.0.0 documentation - - + + @@ -86,19 +86,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -950,11 +937,9 @@

      C

    • camera_txt() (in module borea.reader.reader_camera)
    • -
    • carto_to_geoc (borea.geodesy.transform_geodesy.TransformGeodesy attribute) -
    • -
    • carto_to_geog (borea.geodesy.transform_geodesy.TransformGeodesy attribute) +
    • carto_to_geoc (borea.geodesy.transform_geodesy.TransformGeodesy property)
    • -
    • carto_to_geog_out (borea.geodesy.transform_geodesy.TransformGeodesy attribute) +
    • carto_to_geog (borea.geodesy.transform_geodesy.TransformGeodesy property)
    • check_args_opk() (in module borea.utils.check.check_args_opk)
    • @@ -1068,15 +1053,15 @@

      G

      • GCP (class in borea.datastruct.gcp)
      • -
      • geoc_to_carto (borea.geodesy.transform_geodesy.TransformGeodesy attribute) +
      • geoc_to_carto (borea.geodesy.transform_geodesy.TransformGeodesy property)
      • -
      • geog_to_carto (borea.geodesy.transform_geodesy.TransformGeodesy attribute) +
      • geog_to_carto (borea.geodesy.transform_geodesy.TransformGeodesy property)
      • -
      • geog_to_geoid (borea.geodesy.transform_geodesy.TransformGeodesy attribute) +
      • geog_to_geoid (borea.geodesy.transform_geodesy.TransformGeodesy property)
      • geoid (borea.geodesy.proj_engine.ProjEngine attribute)
      • -
      • geoid_to_geog (borea.geodesy.transform_geodesy.TransformGeodesy attribute) +
      • geoid_to_geog (borea.geodesy.transform_geodesy.TransformGeodesy property)
      • get_attr_transfo_pt() (borea.worksite.worksite.Worksite method)
      • @@ -1568,8 +1553,6 @@

        T

        • take_obs() (borea.transform_world_image.transform_worksite.space_resection.SpaceResection method) -
        • -
        • tf_geoid() (borea.geodesy.transform_geodesy.TransformGeodesy method)
        • tf_output() (borea.geodesy.transform_geodesy.TransformGeodesy method)
        • @@ -1700,6 +1683,6 @@

          Y

          - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/index.html b/docs/sphinx/_build/html/index.html index 2b91dfe2..de41039f 100644 --- a/docs/sphinx/_build/html/index.html +++ b/docs/sphinx/_build/html/index.html @@ -5,11 +5,11 @@ - + Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -354,6 +341,6 @@

          Indices and tables - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/modules.html b/docs/sphinx/_build/html/modules.html index 93e84f9d..e24193d4 100644 --- a/docs/sphinx/_build/html/modules.html +++ b/docs/sphinx/_build/html/modules.html @@ -5,11 +5,11 @@ - + borea - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -431,6 +418,6 @@

          borea¶ - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/objects.inv b/docs/sphinx/_build/html/objects.inv index e475898551d50e1563e36a03df27b3e6ca913df2..a5d5a302ffa180a4e7108b68b09b872ec1b05a55 100644 GIT binary patch delta 2949 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 - Python Module Index - Borea 1.0.0 documentation + Python Module Index - Borea 1.0.0 documentation - - + + @@ -86,19 +86,6 @@ - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -824,6 +811,6 @@

          Python Module Index

          - + \ No newline at end of file diff --git a/docs/sphinx/_build/html/search.html b/docs/sphinx/_build/html/search.html index dfbd620f..3b070b56 100644 --- a/docs/sphinx/_build/html/search.html +++ b/docs/sphinx/_build/html/search.html @@ -5,11 +5,11 @@ - + Search - Borea 1.0.0 documentation - - + + @@ -88,19 +88,6 @@
          - - Auto light/dark mode - - - - - - - - - - Auto light/dark, in light mode - @@ -331,7 +318,7 @@ - + diff --git a/docs/sphinx/_build/html/searchindex.js b/docs/sphinx/_build/html/searchindex.js index 7e7f3b14..aa56d9e3 100644 --- a/docs/sphinx/_build/html/searchindex.js +++ b/docs/sphinx/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"Contents:": [[23, null]], "Indices and tables": [[23, "indices-and-tables"]], "Module contents": [[0, "module-borea"], [1, "module-borea.datastruct"], [2, "module-borea.format"], [3, "module-borea.geodesy"], [4, "module-borea.geodesy.projectionlist"], [5, "module-borea.process"], [6, "module-borea.process.p_add_data"], [7, "module-borea.process.p_format"], [8, "module-borea.process.p_func"], [9, "module-borea.reader"], [10, "module-borea.reader.orientation"], [11, "module-borea.stat"], [12, "module-borea.transform_world_image"], [13, "module-borea.transform_world_image.transform_dtm"], [14, "module-borea.transform_world_image.transform_shot"], [15, "module-borea.transform_world_image.transform_worksite"], [16, "module-borea.utils"], [17, "module-borea.utils.check"], [18, "module-borea.utils.miscellaneous"], [19, "module-borea.utils.singleton"], [20, "module-borea.utils.xml"], [21, "module-borea.worksite"], [22, "module-borea.writer"]], "Submodules": [[1, "submodules"], [2, "submodules"], [3, "submodules"], [4, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"], [10, "submodules"], [11, "submodules"], [13, "submodules"], [14, "submodules"], [15, "submodules"], [17, "submodules"], [18, "submodules"], [19, "submodules"], [20, "submodules"], [21, "submodules"], [22, "submodules"]], "Subpackages": [[0, "subpackages"], [3, "subpackages"], [5, "subpackages"], [9, "subpackages"], [12, "subpackages"], [16, "subpackages"]], "Welcome to Pink_Lady\u2019s documentation!": [[23, "welcome-to-pink-lady-s-documentation"]], "borea": [[24, "borea"]], "borea package": [[0, "borea-package"]], "borea.datastruct package": [[1, "borea-datastruct-package"]], "borea.datastruct.camera module": [[1, "module-borea.datastruct.camera"]], "borea.datastruct.dtm module": [[1, "module-borea.datastruct.dtm"]], "borea.datastruct.gcp module": [[1, "module-borea.datastruct.gcp"]], "borea.datastruct.shot module": [[1, "module-borea.datastruct.shot"]], "borea.datastruct.workdata module": [[1, "module-borea.datastruct.workdata"]], "borea.format package": [[2, "borea-format-package"]], "borea.format.conl module": [[2, "module-borea.format.conl"]], "borea.format.rpc module": [[2, "module-borea.format.rpc"]], "borea.geodesy package": [[3, "borea-geodesy-package"]], "borea.geodesy.approx_euclidean_proj module": [[3, "module-borea.geodesy.approx_euclidean_proj"]], "borea.geodesy.euclidean_proj module": [[3, "module-borea.geodesy.euclidean_proj"]], "borea.geodesy.local_euclidean_proj module": [[3, "module-borea.geodesy.local_euclidean_proj"]], "borea.geodesy.proj_engine module": [[3, "module-borea.geodesy.proj_engine"]], "borea.geodesy.projectionlist package": [[4, "borea-geodesy-projectionlist-package"]], "borea.geodesy.projectionlist.search_proj module": [[4, "module-borea.geodesy.projectionlist.search_proj"]], "borea.geodesy.transform_geodesy module": [[3, "module-borea.geodesy.transform_geodesy"]], "borea.process package": [[5, "borea-process-package"]], "borea.process.p_add_data package": [[6, "borea-process-p-add-data-package"]], "borea.process.p_add_data.p_add_shot module": [[6, "module-borea.process.p_add_data.p_add_shot"]], "borea.process.p_add_data.p_file_gcp2d module": [[6, "module-borea.process.p_add_data.p_file_gcp2d"]], "borea.process.p_add_data.p_file_gcp3d module": [[6, "module-borea.process.p_add_data.p_file_gcp3d"]], "borea.process.p_add_data.p_gen_param module": [[6, "module-borea.process.p_add_data.p_gen_param"]], "borea.process.p_add_data.p_pt2d module": [[6, "module-borea.process.p_add_data.p_pt2d"]], "borea.process.p_add_data.p_pt3d module": [[6, "module-borea.process.p_add_data.p_pt3d"]], "borea.process.p_add_data.p_unit_shot module": [[6, "module-borea.process.p_add_data.p_unit_shot"]], "borea.process.p_add_data.p_write module": [[6, "module-borea.process.p_add_data.p_write"]], "borea.process.p_format package": [[7, "borea-process-p-format-package"]], "borea.process.p_format.p_read_opk module": [[7, "module-borea.process.p_format.p_read_opk"]], "borea.process.p_format.p_write_con module": [[7, "module-borea.process.p_format.p_write_con"]], "borea.process.p_format.p_write_opk module": [[7, "module-borea.process.p_format.p_write_opk"]], "borea.process.p_format.p_write_rpc module": [[7, "module-borea.process.p_format.p_write_rpc"]], "borea.process.p_func package": [[8, "borea-process-p-func-package"]], "borea.process.p_func.p_control module": [[8, "module-borea.process.p_func.p_control"]], "borea.process.p_func.p_image_world module": [[8, "module-borea.process.p_func.p_image_world"]], "borea.process.p_func.p_spaceresection module": [[8, "module-borea.process.p_func.p_spaceresection"]], "borea.process.p_func.p_world_image module": [[8, "module-borea.process.p_func.p_world_image"]], "borea.reader package": [[9, "borea-reader-package"]], "borea.reader.orientation package": [[10, "borea-reader-orientation-package"]], "borea.reader.orientation.manage_reader module": [[10, "module-borea.reader.orientation.manage_reader"]], "borea.reader.orientation.reader_opk module": [[10, "module-borea.reader.orientation.reader_opk"]], "borea.reader.reader_camera module": [[9, "module-borea.reader.reader_camera"]], "borea.reader.reader_point module": [[9, "module-borea.reader.reader_point"]], "borea.stat package": [[11, "borea-stat-package"]], "borea.stat.statistics module": [[11, "module-borea.stat.statistics"]], "borea.transform_world_image package": [[12, "borea-transform-world-image-package"]], "borea.transform_world_image.transform_dtm package": [[13, "borea-transform-world-image-transform-dtm-package"]], "borea.transform_world_image.transform_dtm.world_image_dtm module": [[13, "module-borea.transform_world_image.transform_dtm.world_image_dtm"]], "borea.transform_world_image.transform_shot package": [[14, "borea-transform-world-image-transform-shot-package"]], "borea.transform_world_image.transform_shot.conversion_coor_shot module": [[14, "module-borea.transform_world_image.transform_shot.conversion_coor_shot"]], "borea.transform_world_image.transform_shot.image_world_shot module": [[14, "module-borea.transform_world_image.transform_shot.image_world_shot"]], "borea.transform_world_image.transform_shot.world_image_shot module": [[14, "module-borea.transform_world_image.transform_shot.world_image_shot"]], "borea.transform_world_image.transform_worksite package": [[15, "borea-transform-world-image-transform-worksite-package"]], "borea.transform_world_image.transform_worksite.image_world_intersection module": [[15, "module-borea.transform_world_image.transform_worksite.image_world_intersection"]], "borea.transform_world_image.transform_worksite.image_world_least_square module": [[15, "module-borea.transform_world_image.transform_worksite.image_world_least_square"]], "borea.transform_world_image.transform_worksite.image_world_work module": [[15, "module-borea.transform_world_image.transform_worksite.image_world_work"]], "borea.transform_world_image.transform_worksite.space_resection module": [[15, "module-borea.transform_world_image.transform_worksite.space_resection"]], "borea.transform_world_image.transform_worksite.world_image_work module": [[15, "module-borea.transform_world_image.transform_worksite.world_image_work"]], "borea.utils package": [[16, "borea-utils-package"]], "borea.utils.check package": [[17, "borea-utils-check-package"]], "borea.utils.check.check_args_opk module": [[17, "module-borea.utils.check.check_args_opk"]], "borea.utils.check.check_args_reader_pt module": [[17, "module-borea.utils.check.check_args_reader_pt"]], "borea.utils.check.check_array module": [[17, "module-borea.utils.check.check_array"]], "borea.utils.check.check_header module": [[17, "module-borea.utils.check.check_header"]], "borea.utils.check.check_order_axe module": [[17, "module-borea.utils.check.check_order_axe"]], "borea.utils.miscellaneous package": [[18, "borea-utils-miscellaneous-package"]], "borea.utils.miscellaneous.miscellaneous module": [[18, "module-borea.utils.miscellaneous.miscellaneous"]], "borea.utils.miscellaneous.param_bundle module": [[18, "module-borea.utils.miscellaneous.param_bundle"]], "borea.utils.miscellaneous.sparse module": [[18, "module-borea.utils.miscellaneous.sparse"]], "borea.utils.singleton package": [[19, "borea-utils-singleton-package"]], "borea.utils.singleton.singleton module": [[19, "module-borea.utils.singleton.singleton"]], "borea.utils.xml package": [[20, "borea-utils-xml-package"]], "borea.utils.xml.xml module": [[20, "module-borea.utils.xml.xml"]], "borea.worksite package": [[21, "borea-worksite-package"]], "borea.worksite.worksite module": [[21, "module-borea.worksite.worksite"]], "borea.writer package": [[22, "borea-writer-package"]], "borea.writer.manage_writer module": [[22, "module-borea.writer.manage_writer"]], "borea.writer.writer_con module": [[22, "module-borea.writer.writer_con"]], "borea.writer.writer_df_to_txt module": [[22, "module-borea.writer.writer_df_to_txt"]], "borea.writer.writer_opk module": [[22, "module-borea.writer.writer_opk"]], "borea.writer.writer_rpc module": [[22, "module-borea.writer.writer_rpc"]]}, "docnames": ["borea", "borea.datastruct", "borea.format", "borea.geodesy", "borea.geodesy.projectionlist", "borea.process", "borea.process.p_add_data", "borea.process.p_format", "borea.process.p_func", "borea.reader", "borea.reader.orientation", "borea.stat", "borea.transform_world_image", "borea.transform_world_image.transform_dtm", "borea.transform_world_image.transform_shot", "borea.transform_world_image.transform_worksite", "borea.utils", "borea.utils.check", "borea.utils.miscellaneous", "borea.utils.singleton", "borea.utils.xml", "borea.worksite", "borea.writer", "index", "modules"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["borea.rst", "borea.datastruct.rst", "borea.format.rst", "borea.geodesy.rst", "borea.geodesy.projectionlist.rst", "borea.process.rst", "borea.process.p_add_data.rst", "borea.process.p_format.rst", "borea.process.p_func.rst", "borea.reader.rst", "borea.reader.orientation.rst", "borea.stat.rst", "borea.transform_world_image.rst", "borea.transform_world_image.transform_dtm.rst", "borea.transform_world_image.transform_shot.rst", "borea.transform_world_image.transform_worksite.rst", "borea.utils.rst", "borea.utils.check.rst", "borea.utils.miscellaneous.rst", "borea.utils.singleton.rst", "borea.utils.xml.rst", "borea.worksite.rst", "borea.writer.rst", "index.rst", "modules.rst"], "indexentries": {"add_camera() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_camera", false]], "add_co_point() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_co_point", false]], "add_elem() (in module borea.utils.xml.xml)": [[20, "borea.utils.xml.xml.add_elem", false]], "add_gcp2d() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_gcp2d", false]], "add_gcp3d() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_gcp3d", false]], "add_shot() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_shot", false]], "angle_degree_2vect() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.angle_degree_2vect", false]], "approxeuclideanproj (class in borea.geodesy.approx_euclidean_proj)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj", false]], "args_add_pt2d() (in module borea.process.p_add_data.p_pt2d)": [[6, "borea.process.p_add_data.p_pt2d.args_add_pt2d", false]], "args_add_pt3d() (in module borea.process.p_add_data.p_pt3d)": [[6, "borea.process.p_add_data.p_pt3d.args_add_pt3d", false]], "args_add_shot() (in module borea.process.p_add_data.p_add_shot)": [[6, "borea.process.p_add_data.p_add_shot.args_add_shot", false]], "args_control() (in module borea.process.p_func.p_control)": [[8, "borea.process.p_func.p_control.args_control", false]], "args_gcp2d() (in module borea.process.p_add_data.p_file_gcp2d)": [[6, "borea.process.p_add_data.p_file_gcp2d.args_gcp2d", false]], "args_gcp3d() (in module borea.process.p_add_data.p_file_gcp3d)": [[6, "borea.process.p_add_data.p_file_gcp3d.args_gcp3d", false]], "args_general_param() (in module borea.process.p_add_data.p_gen_param)": [[6, "borea.process.p_add_data.p_gen_param.args_general_param", false]], "args_image_world() (in module borea.process.p_func.p_image_world)": [[8, "borea.process.p_func.p_image_world.args_image_world", false]], "args_input_shot() (in module borea.process.p_add_data.p_unit_shot)": [[6, "borea.process.p_add_data.p_unit_shot.args_input_shot", false]], "args_output_shot() (in module borea.process.p_add_data.p_unit_shot)": [[6, "borea.process.p_add_data.p_unit_shot.args_output_shot", false]], "args_reading_opk() (in module borea.process.p_format.p_read_opk)": [[7, "borea.process.p_format.p_read_opk.args_reading_opk", false]], "args_space_resection() (in module borea.process.p_func.p_spaceresection)": [[8, "borea.process.p_func.p_spaceresection.args_space_resection", false]], "args_world_image() (in module borea.process.p_func.p_world_image)": [[8, "borea.process.p_func.p_world_image.args_world_image", false]], "args_write_con() (in module borea.process.p_format.p_write_con)": [[7, "borea.process.p_format.p_write_con.args_write_con", false]], "args_writer() (in module borea.process.p_add_data.p_write)": [[6, "borea.process.p_add_data.p_write.args_writer", false]], "args_writing_opk() (in module borea.process.p_format.p_write_opk)": [[7, "borea.process.p_format.p_write_opk.args_writing_opk", false]], "args_writing_rpc() (in module borea.process.p_format.p_write_rpc)": [[7, "borea.process.p_format.p_write_rpc.args_writing_rpc", false]], "borea": [[0, "module-borea", false]], "borea.datastruct": [[1, "module-borea.datastruct", false]], "borea.datastruct.camera": [[1, "module-borea.datastruct.camera", false]], "borea.datastruct.dtm": [[1, "module-borea.datastruct.dtm", false]], "borea.datastruct.gcp": [[1, "module-borea.datastruct.gcp", false]], "borea.datastruct.shot": [[1, "module-borea.datastruct.shot", false]], "borea.datastruct.workdata": [[1, "module-borea.datastruct.workdata", false]], "borea.format": [[2, "module-borea.format", false]], "borea.format.conl": [[2, "module-borea.format.conl", false]], "borea.format.rpc": [[2, "module-borea.format.rpc", false]], "borea.geodesy": [[3, "module-borea.geodesy", false]], "borea.geodesy.approx_euclidean_proj": [[3, "module-borea.geodesy.approx_euclidean_proj", false]], "borea.geodesy.euclidean_proj": [[3, "module-borea.geodesy.euclidean_proj", false]], "borea.geodesy.local_euclidean_proj": [[3, "module-borea.geodesy.local_euclidean_proj", false]], "borea.geodesy.proj_engine": [[3, "module-borea.geodesy.proj_engine", false]], "borea.geodesy.projectionlist": [[4, "module-borea.geodesy.projectionlist", false]], "borea.geodesy.projectionlist.search_proj": [[4, "module-borea.geodesy.projectionlist.search_proj", false]], "borea.geodesy.transform_geodesy": [[3, "module-borea.geodesy.transform_geodesy", false]], "borea.process": [[5, "module-borea.process", false]], "borea.process.p_add_data": [[6, "module-borea.process.p_add_data", false]], "borea.process.p_add_data.p_add_shot": [[6, "module-borea.process.p_add_data.p_add_shot", false]], "borea.process.p_add_data.p_file_gcp2d": [[6, "module-borea.process.p_add_data.p_file_gcp2d", false]], "borea.process.p_add_data.p_file_gcp3d": [[6, "module-borea.process.p_add_data.p_file_gcp3d", false]], "borea.process.p_add_data.p_gen_param": [[6, "module-borea.process.p_add_data.p_gen_param", false]], "borea.process.p_add_data.p_pt2d": [[6, "module-borea.process.p_add_data.p_pt2d", false]], "borea.process.p_add_data.p_pt3d": [[6, "module-borea.process.p_add_data.p_pt3d", false]], "borea.process.p_add_data.p_unit_shot": [[6, "module-borea.process.p_add_data.p_unit_shot", false]], "borea.process.p_add_data.p_write": [[6, "module-borea.process.p_add_data.p_write", false]], "borea.process.p_format": [[7, "module-borea.process.p_format", false]], "borea.process.p_format.p_read_opk": [[7, "module-borea.process.p_format.p_read_opk", false]], "borea.process.p_format.p_write_con": [[7, "module-borea.process.p_format.p_write_con", false]], "borea.process.p_format.p_write_opk": [[7, "module-borea.process.p_format.p_write_opk", false]], "borea.process.p_format.p_write_rpc": [[7, "module-borea.process.p_format.p_write_rpc", false]], "borea.process.p_func": [[8, "module-borea.process.p_func", false]], "borea.process.p_func.p_control": [[8, "module-borea.process.p_func.p_control", false]], "borea.process.p_func.p_image_world": [[8, "module-borea.process.p_func.p_image_world", false]], "borea.process.p_func.p_spaceresection": [[8, "module-borea.process.p_func.p_spaceresection", false]], "borea.process.p_func.p_world_image": [[8, "module-borea.process.p_func.p_world_image", false]], "borea.reader": [[9, "module-borea.reader", false]], "borea.reader.orientation": [[10, "module-borea.reader.orientation", false]], "borea.reader.orientation.manage_reader": [[10, "module-borea.reader.orientation.manage_reader", false]], "borea.reader.orientation.reader_opk": [[10, "module-borea.reader.orientation.reader_opk", false]], "borea.reader.reader_camera": [[9, "module-borea.reader.reader_camera", false]], "borea.reader.reader_point": [[9, "module-borea.reader.reader_point", false]], "borea.stat": [[11, "module-borea.stat", false]], "borea.stat.statistics": [[11, "module-borea.stat.statistics", false]], "borea.transform_world_image": [[12, "module-borea.transform_world_image", false]], "borea.transform_world_image.transform_dtm": [[13, "module-borea.transform_world_image.transform_dtm", false]], "borea.transform_world_image.transform_dtm.world_image_dtm": [[13, "module-borea.transform_world_image.transform_dtm.world_image_dtm", false]], "borea.transform_world_image.transform_shot": [[14, "module-borea.transform_world_image.transform_shot", false]], "borea.transform_world_image.transform_shot.conversion_coor_shot": [[14, "module-borea.transform_world_image.transform_shot.conversion_coor_shot", false]], "borea.transform_world_image.transform_shot.image_world_shot": [[14, "module-borea.transform_world_image.transform_shot.image_world_shot", false]], "borea.transform_world_image.transform_shot.world_image_shot": [[14, "module-borea.transform_world_image.transform_shot.world_image_shot", false]], "borea.transform_world_image.transform_worksite": [[15, "module-borea.transform_world_image.transform_worksite", false]], "borea.transform_world_image.transform_worksite.image_world_intersection": [[15, "module-borea.transform_world_image.transform_worksite.image_world_intersection", false]], "borea.transform_world_image.transform_worksite.image_world_least_square": [[15, "module-borea.transform_world_image.transform_worksite.image_world_least_square", false]], "borea.transform_world_image.transform_worksite.image_world_work": [[15, "module-borea.transform_world_image.transform_worksite.image_world_work", false]], "borea.transform_world_image.transform_worksite.space_resection": [[15, "module-borea.transform_world_image.transform_worksite.space_resection", false]], "borea.transform_world_image.transform_worksite.world_image_work": [[15, "module-borea.transform_world_image.transform_worksite.world_image_work", false]], "borea.utils": [[16, "module-borea.utils", false]], "borea.utils.check": [[17, "module-borea.utils.check", false]], "borea.utils.check.check_args_opk": [[17, "module-borea.utils.check.check_args_opk", false]], "borea.utils.check.check_args_reader_pt": [[17, "module-borea.utils.check.check_args_reader_pt", false]], "borea.utils.check.check_array": [[17, "module-borea.utils.check.check_array", false]], "borea.utils.check.check_header": [[17, "module-borea.utils.check.check_header", false]], "borea.utils.check.check_order_axe": [[17, "module-borea.utils.check.check_order_axe", false]], "borea.utils.miscellaneous": [[18, "module-borea.utils.miscellaneous", false]], "borea.utils.miscellaneous.miscellaneous": [[18, "module-borea.utils.miscellaneous.miscellaneous", false]], "borea.utils.miscellaneous.param_bundle": [[18, "module-borea.utils.miscellaneous.param_bundle", false]], "borea.utils.miscellaneous.sparse": [[18, "module-borea.utils.miscellaneous.sparse", false]], "borea.utils.singleton": [[19, "module-borea.utils.singleton", false]], "borea.utils.singleton.singleton": [[19, "module-borea.utils.singleton.singleton", false]], "borea.utils.xml": [[20, "module-borea.utils.xml", false]], "borea.utils.xml.xml": [[20, "module-borea.utils.xml.xml", false]], "borea.worksite": [[21, "module-borea.worksite", false]], "borea.worksite.worksite": [[21, "module-borea.worksite.worksite", false]], "borea.writer": [[22, "module-borea.writer", false]], "borea.writer.manage_writer": [[22, "module-borea.writer.manage_writer", false]], "borea.writer.writer_con": [[22, "module-borea.writer.writer_con", false]], "borea.writer.writer_df_to_txt": [[22, "module-borea.writer.writer_df_to_txt", false]], "borea.writer.writer_opk": [[22, "module-borea.writer.writer_opk", false]], "borea.writer.writer_rpc": [[22, "module-borea.writer.writer_rpc", false]], "bundle_to_image() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.bundle_to_image", false]], "calculate_barycentre() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.calculate_barycentre", false]], "calculate_image_world_by_intersection() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.calculate_image_world_by_intersection", false]], "calculate_world_to_image() (borea.transform_world_image.transform_worksite.world_image_work.worldimagework method)": [[15, "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork.calculate_world_to_image", false]], "cam (borea.format.conl.conl attribute)": [[2, "borea.format.conl.Conl.cam", false]], "camera (class in borea.datastruct.camera)": [[1, "borea.datastruct.camera.Camera", false]], "camera_txt() (in module borea.reader.reader_camera)": [[9, "borea.reader.reader_camera.camera_txt", false]], "carto_to_geoc (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.carto_to_geoc", false]], "carto_to_geog (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.carto_to_geog", false]], "carto_to_geog_out (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.carto_to_geog_out", false]], "check_args_opk() (in module borea.utils.check.check_args_opk)": [[17, "borea.utils.check.check_args_opk.check_args_opk", false]], "check_array_transfo() (in module borea.utils.check.check_array)": [[17, "borea.utils.check.check_array.check_array_transfo", false]], "check_h_z() (in module borea.utils.check.check_header)": [[17, "borea.utils.check.check_header.check_h_z", false]], "check_head() (in module borea.utils.check.check_header)": [[17, "borea.utils.check.check_header.check_head", false]], "check_header_file() (in module borea.utils.check.check_args_opk)": [[17, "borea.utils.check.check_args_opk.check_header_file", false]], "check_header_file() (in module borea.utils.check.check_args_reader_pt)": [[17, "borea.utils.check.check_args_reader_pt.check_header_file", false]], "check_order_axe() (in module borea.utils.check.check_order_axe)": [[17, "borea.utils.check.check_order_axe.check_order_axe", false]], "clear() (borea.utils.singleton.singleton.singleton method)": [[19, "borea.utils.singleton.singleton.Singleton.clear", false]], "code (borea.datastruct.gcp.gcp attribute)": [[1, "borea.datastruct.gcp.GCP.code", false]], "comput_inter_in_2_more_distant_shot() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.comput_inter_in_2_more_distant_shot", false]], "compute_image_world_least_square() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.compute_image_world_least_square", false]], "conl (class in borea.format.conl)": [[2, "borea.format.conl.Conl", false]], "conv_output_z_type() (in module borea.transform_world_image.transform_shot.conversion_coor_shot)": [[14, "borea.transform_world_image.transform_shot.conversion_coor_shot.conv_output_z_type", false]], "conv_z_shot_to_z_data() (in module borea.transform_world_image.transform_shot.conversion_coor_shot)": [[14, "borea.transform_world_image.transform_shot.conversion_coor_shot.conv_z_shot_to_z_data", false]], "convert_line_list() (in module borea.geodesy.projectionlist.search_proj)": [[4, "borea.geodesy.projectionlist.search_proj.convert_line_list", false]], "convert_opk_to_xyz() (in module borea.utils.check.check_order_axe)": [[17, "borea.utils.check.check_order_axe.convert_opk_to_xyz", false]], "coor (borea.datastruct.gcp.gcp attribute)": [[1, "borea.datastruct.gcp.GCP.coor", false]], "create_grid_rpc() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.create_grid_rpc", false]], "create_mat_a_and_vect_residu() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.create_mat_a_and_vect_residu", false]], "dist_2pts() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.dist_2pts", false]], "dtm (class in borea.datastruct.dtm)": [[1, "borea.datastruct.dtm.Dtm", false]], "epsg (borea.geodesy.proj_engine.projengine attribute)": [[3, "borea.geodesy.proj_engine.ProjEngine.epsg", false]], "epsg_output (borea.geodesy.proj_engine.projengine attribute)": [[3, "borea.geodesy.proj_engine.ProjEngine.epsg_output", false]], "eucli_to_bundle() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.eucli_to_bundle", false]], "eucli_to_image() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.eucli_to_image", false]], "eucli_to_world() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.eucli_to_world", false]], "eucli_to_world() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.eucli_to_world", false]], "euclideanproj (class in borea.geodesy.euclidean_proj)": [[3, "borea.geodesy.euclidean_proj.EuclideanProj", false]], "focal (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.focal", false]], "format_xml() (in module borea.utils.xml.xml)": [[20, "borea.utils.xml.xml.format_xml", false]], "from_param_euclidean() (borea.datastruct.shot.shot class method)": [[1, "borea.datastruct.shot.Shot.from_param_euclidean", false]], "from_shot() (borea.format.rpc.rpc class method)": [[2, "borea.format.rpc.Rpc.from_shot", false]], "func_least_square() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.func_least_square", false]], "gcp (class in borea.datastruct.gcp)": [[1, "borea.datastruct.gcp.GCP", false]], "geoc_to_carto (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geoc_to_carto", false]], "geog_to_carto (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geog_to_carto", false]], "geog_to_geoid (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geog_to_geoid", false]], "geoid (borea.geodesy.proj_engine.projengine attribute)": [[3, "borea.geodesy.proj_engine.ProjEngine.geoid", false]], "geoid_to_geog (borea.geodesy.transform_geodesy.transformgeodesy attribute)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geoid_to_geog", false]], "get_attr_transfo_pt() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_attr_transfo_pt", false]], "get_coor_pt_img_and_world() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_coor_pt_img_and_world", false]], "get_meridian_convergence() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.get_meridian_convergence", false]], "get_point_image_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_point_image_dataframe", false]], "get_point_world_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_point_world_dataframe", false]], "get_scale_factor() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.get_scale_factor", false]], "get_type_z_and_header() (in module borea.utils.check.check_header)": [[17, "borea.utils.check.check_header.get_type_z_and_header", false]], "get_z_add_scale_factor() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.get_z_add_scale_factor", false]], "get_z_remove_scale_factor() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.get_z_remove_scale_factor", false]], "get_z_world() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.get_z_world", false]], "height (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.height", false]], "image_to_bundle() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_to_bundle", false]], "image_to_world() (borea.transform_world_image.transform_dtm.world_image_dtm.worldimagedtm method)": [[13, "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm.image_to_world", false]], "image_to_world() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_to_world", false]], "image_world_iter() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_world_iter", false]], "image_z_to_world() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_z_to_world", false]], "imageworldshot (class in borea.transform_world_image.transform_shot.image_world_shot)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot", false]], "imageworldwork (class in borea.transform_world_image.transform_worksite.image_world_work)": [[15, "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork", false]], "indent() (in module borea.utils.xml.xml)": [[20, "borea.utils.xml.xml.indent", false]], "init_eucli_points() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.init_eucli_points", false]], "init_kappa() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.init_kappa", false]], "intersection_line_3d() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.intersection_line_3d", false]], "intersection_pt_in_2shot() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.intersection_pt_in_2shot", false]], "invert_diag_sparse_matrix_3_3() (in module borea.utils.miscellaneous.sparse)": [[18, "borea.utils.miscellaneous.sparse.invert_diag_sparse_matrix_3_3", false]], "least_square_intersect() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.least_square_intersect", false]], "least_square_rpc() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.least_square_rpc", false]], "least_square_shot() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.least_square_shot", false]], "local_to_eucli() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.local_to_eucli", false]], "localeuclideanproj (class in borea.geodesy.local_euclidean_proj)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj", false]], "main_stat_and_save() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.main_stat_and_save", false]], "main_stat_image_to_world() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.main_stat_image_to_world", false]], "main_stat_world_to_image() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.main_stat_world_to_image", false]], "manage_image_world() (borea.transform_world_image.transform_worksite.image_world_work.imageworldwork method)": [[15, "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork.manage_image_world", false]], "manager_writer() (in module borea.writer.manage_writer)": [[22, "borea.writer.manage_writer.manager_writer", false]], "mat_eucli_to_mat() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.mat_eucli_to_mat", false]], "mat_eucli_to_mat() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.mat_eucli_to_mat", false]], "mat_obs_axia() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.mat_obs_axia", false]], "mat_rot_euclidean_local() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.mat_rot_euclidean_local", false]], "mat_to_mat_eucli() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.mat_to_mat_eucli", false]], "mat_to_mat_eucli() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.mat_to_mat_eucli", false]], "min_max_pt() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.min_max_pt", false]], "module": [[0, "module-borea", false], [1, "module-borea.datastruct", false], [1, "module-borea.datastruct.camera", false], [1, "module-borea.datastruct.dtm", false], [1, "module-borea.datastruct.gcp", false], [1, "module-borea.datastruct.shot", false], [1, "module-borea.datastruct.workdata", false], [2, "module-borea.format", false], [2, "module-borea.format.conl", false], [2, "module-borea.format.rpc", false], [3, "module-borea.geodesy", false], [3, "module-borea.geodesy.approx_euclidean_proj", false], [3, "module-borea.geodesy.euclidean_proj", false], [3, "module-borea.geodesy.local_euclidean_proj", false], [3, "module-borea.geodesy.proj_engine", false], [3, "module-borea.geodesy.transform_geodesy", false], [4, "module-borea.geodesy.projectionlist", false], [4, "module-borea.geodesy.projectionlist.search_proj", false], [5, "module-borea.process", false], [6, "module-borea.process.p_add_data", false], [6, "module-borea.process.p_add_data.p_add_shot", false], [6, "module-borea.process.p_add_data.p_file_gcp2d", false], [6, "module-borea.process.p_add_data.p_file_gcp3d", false], [6, "module-borea.process.p_add_data.p_gen_param", false], [6, "module-borea.process.p_add_data.p_pt2d", false], [6, "module-borea.process.p_add_data.p_pt3d", false], [6, "module-borea.process.p_add_data.p_unit_shot", false], [6, "module-borea.process.p_add_data.p_write", false], [7, "module-borea.process.p_format", false], [7, "module-borea.process.p_format.p_read_opk", false], [7, "module-borea.process.p_format.p_write_con", false], [7, "module-borea.process.p_format.p_write_opk", false], [7, "module-borea.process.p_format.p_write_rpc", false], [8, "module-borea.process.p_func", false], [8, "module-borea.process.p_func.p_control", false], [8, "module-borea.process.p_func.p_image_world", false], [8, "module-borea.process.p_func.p_spaceresection", false], [8, "module-borea.process.p_func.p_world_image", false], [9, "module-borea.reader", false], [9, "module-borea.reader.reader_camera", false], [9, "module-borea.reader.reader_point", false], [10, "module-borea.reader.orientation", false], [10, "module-borea.reader.orientation.manage_reader", false], [10, "module-borea.reader.orientation.reader_opk", false], [11, "module-borea.stat", false], [11, "module-borea.stat.statistics", false], [12, "module-borea.transform_world_image", false], [13, "module-borea.transform_world_image.transform_dtm", false], [13, "module-borea.transform_world_image.transform_dtm.world_image_dtm", false], [14, "module-borea.transform_world_image.transform_shot", false], [14, "module-borea.transform_world_image.transform_shot.conversion_coor_shot", false], [14, "module-borea.transform_world_image.transform_shot.image_world_shot", false], [14, "module-borea.transform_world_image.transform_shot.world_image_shot", false], [15, "module-borea.transform_world_image.transform_worksite", false], [15, "module-borea.transform_world_image.transform_worksite.image_world_intersection", false], [15, "module-borea.transform_world_image.transform_worksite.image_world_least_square", false], [15, "module-borea.transform_world_image.transform_worksite.image_world_work", false], [15, "module-borea.transform_world_image.transform_worksite.space_resection", false], [15, "module-borea.transform_world_image.transform_worksite.world_image_work", false], [16, "module-borea.utils", false], [17, "module-borea.utils.check", false], [17, "module-borea.utils.check.check_args_opk", false], [17, "module-borea.utils.check.check_args_reader_pt", false], [17, "module-borea.utils.check.check_array", false], [17, "module-borea.utils.check.check_header", false], [17, "module-borea.utils.check.check_order_axe", false], [18, "module-borea.utils.miscellaneous", false], [18, "module-borea.utils.miscellaneous.miscellaneous", false], [18, "module-borea.utils.miscellaneous.param_bundle", false], [18, "module-borea.utils.miscellaneous.sparse", false], [19, "module-borea.utils.singleton", false], [19, "module-borea.utils.singleton.singleton", false], [20, "module-borea.utils.xml", false], [20, "module-borea.utils.xml.xml", false], [21, "module-borea.worksite", false], [21, "module-borea.worksite.worksite", false], [22, "module-borea.writer", false], [22, "module-borea.writer.manage_writer", false], [22, "module-borea.writer.writer_con", false], [22, "module-borea.writer.writer_df_to_txt", false], [22, "module-borea.writer.writer_opk", false], [22, "module-borea.writer.writer_rpc", false]], "name_camera (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.name_camera", false]], "name_gcp (borea.datastruct.gcp.gcp attribute)": [[1, "borea.datastruct.gcp.GCP.name_gcp", false]], "normalize() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.normalize", false]], "normalize_data() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.normalize_data", false]], "ppax (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.ppax", false]], "ppay (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.ppay", false]], "process_add_shot() (in module borea.process.p_add_data.p_add_shot)": [[6, "borea.process.p_add_data.p_add_shot.process_add_shot", false]], "process_args_control() (in module borea.process.p_func.p_control)": [[8, "borea.process.p_func.p_control.process_args_control", false]], "process_args_gen_param() (in module borea.process.p_add_data.p_gen_param)": [[6, "borea.process.p_add_data.p_gen_param.process_args_gen_param", false]], "process_args_read_opk() (in module borea.process.p_format.p_read_opk)": [[7, "borea.process.p_format.p_read_opk.process_args_read_opk", false]], "process_args_write_con() (in module borea.process.p_format.p_write_con)": [[7, "borea.process.p_format.p_write_con.process_args_write_con", false]], "process_args_write_opk() (in module borea.process.p_format.p_write_opk)": [[7, "borea.process.p_format.p_write_opk.process_args_write_opk", false]], "process_args_write_rpc() (in module borea.process.p_format.p_write_rpc)": [[7, "borea.process.p_format.p_write_rpc.process_args_write_rpc", false]], "process_gcp2d() (in module borea.process.p_add_data.p_file_gcp2d)": [[6, "borea.process.p_add_data.p_file_gcp2d.process_gcp2d", false]], "process_gcp3d() (in module borea.process.p_add_data.p_file_gcp3d)": [[6, "borea.process.p_add_data.p_file_gcp3d.process_gcp3d", false]], "process_image_world() (in module borea.process.p_add_data.p_pt2d)": [[6, "borea.process.p_add_data.p_pt2d.process_image_world", false]], "process_image_world() (in module borea.process.p_func.p_image_world)": [[8, "borea.process.p_func.p_image_world.process_image_world", false]], "process_space_resection() (in module borea.process.p_func.p_spaceresection)": [[8, "borea.process.p_func.p_spaceresection.process_space_resection", false]], "process_world_image() (in module borea.process.p_add_data.p_pt3d)": [[6, "borea.process.p_add_data.p_pt3d.process_world_image", false]], "process_world_image() (in module borea.process.p_func.p_world_image)": [[8, "borea.process.p_func.p_world_image.process_world_image", false]], "proj (borea.format.conl.conl attribute)": [[2, "borea.format.conl.Conl.proj", false]], "projengine (class in borea.geodesy.proj_engine)": [[3, "borea.geodesy.proj_engine.ProjEngine", false]], "read() (in module borea.reader.orientation.reader_opk)": [[10, "borea.reader.orientation.reader_opk.read", false]], "read_camera() (in module borea.reader.reader_camera)": [[9, "borea.reader.reader_camera.read_camera", false]], "read_file_pt() (in module borea.reader.reader_point)": [[9, "borea.reader.reader_point.read_file_pt", false]], "read_file_pt_dataframe() (in module borea.reader.reader_point)": [[9, "borea.reader.reader_point.read_file_pt_dataframe", false]], "reader_orientation() (in module borea.reader.orientation.manage_reader)": [[10, "borea.reader.orientation.manage_reader.reader_orientation", false]], "rpc (class in borea.format.rpc)": [[2, "borea.format.rpc.Rpc", false]], "save_conl() (borea.format.conl.conl method)": [[2, "borea.format.conl.Conl.save_conl", false]], "save_stat_txt() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.save_stat_txt", false]], "search_info() (in module borea.geodesy.projectionlist.search_proj)": [[4, "borea.geodesy.projectionlist.search_proj.search_info", false]], "seed_20_point() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.seed_20_point", false]], "set_approx_eucli_proj() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_approx_eucli_proj", false]], "set_camera_xml() (borea.format.conl.conl method)": [[2, "borea.format.conl.Conl.set_camera_xml", false]], "set_cval() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_cval", false]], "set_dtm() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_dtm", false]], "set_dtm() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_dtm", false]], "set_epsg() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.set_epsg", false]], "set_epsg_tf_geog_output() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.set_epsg_tf_geog_output", false]], "set_geometry_xml() (borea.format.conl.conl method)": [[2, "borea.format.conl.Conl.set_geometry_xml", false]], "set_keep_memory() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_keep_memory", false]], "set_linear_alteration() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_linear_alteration", false]], "set_order() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_order", false]], "set_order_axe() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_order_axe", false]], "set_param_bundle_diff() (in module borea.utils.miscellaneous.param_bundle)": [[18, "borea.utils.miscellaneous.param_bundle.set_param_bundle_diff", false]], "set_param_eucli_shot() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_param_eucli_shot", false]], "set_param_shot() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_param_shot", false]], "set_point_image_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_point_image_dataframe", false]], "set_point_world_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_point_world_dataframe", false]], "set_proj() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_proj", false]], "set_rot_shot() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_rot_shot", false]], "set_type_z() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_type_z", false]], "set_type_z_data() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_type_z_data", false]], "set_type_z_shot() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_type_z_shot", false]], "set_unit_angle() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_unit_angle", false]], "set_unit_shot() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_unit_shot", false]], "set_z_nadir() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_z_nadir", false]], "setup_matrix_obs_rpc() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.setup_matrix_obs_rpc", false]], "shot (borea.format.conl.conl attribute)": [[2, "borea.format.conl.Conl.shot", false]], "shot (class in borea.datastruct.shot)": [[1, "borea.datastruct.shot.Shot", false]], "singleton (class in borea.utils.singleton.singleton)": [[19, "borea.utils.singleton.singleton.Singleton", false]], "space_resection_gap() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_gap", false]], "space_resection_on_worksite() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_on_worksite", false]], "space_resection_shot() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_shot", false]], "space_resection_to_worksite() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_to_worksite", false]], "spaceresection (class in borea.transform_world_image.transform_worksite.space_resection)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection", false]], "stat (class in borea.stat.statistics)": [[11, "borea.stat.statistics.Stat", false]], "stat_image_to_world() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.stat_image_to_world", false]], "stat_list() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.stat_list", false]], "stat_world_to_image() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.stat_world_to_image", false]], "take_obs() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.take_obs", false]], "tf_geoid() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tf_geoid", false]], "tf_output() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tf_output", false]], "tranform_altitude() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tranform_altitude", false]], "tranform_height() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tranform_height", false]], "transformgeodesy (class in borea.geodesy.transform_geodesy)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy", false]], "width (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.width", false]], "work (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection attribute)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.work", false]], "work (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare attribute)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.work", false]], "work (borea.transform_world_image.transform_worksite.image_world_work.imageworldwork attribute)": [[15, "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork.work", false]], "work (borea.transform_world_image.transform_worksite.world_image_work.worldimagework attribute)": [[15, "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork.work", false]], "workdata (class in borea.datastruct.workdata)": [[1, "borea.datastruct.workdata.Workdata", false]], "worksite (class in borea.worksite.worksite)": [[21, "borea.worksite.worksite.Worksite", false]], "world_to_eucli() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.world_to_eucli", false]], "world_to_eucli() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.world_to_eucli", false]], "world_to_image() (borea.transform_world_image.transform_dtm.world_image_dtm.worldimagedtm method)": [[13, "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm.world_to_image", false]], "world_to_image() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.world_to_image", false]], "worldimagedtm (class in borea.transform_world_image.transform_dtm.world_image_dtm)": [[13, "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm", false]], "worldimageshot (class in borea.transform_world_image.transform_shot.world_image_shot)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot", false]], "worldimagework (class in borea.transform_world_image.transform_worksite.world_image_work)": [[15, "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork", false]], "worldintersection (class in borea.transform_world_image.transform_worksite.image_world_intersection)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection", false]], "worldleastsquare (class in borea.transform_world_image.transform_worksite.image_world_least_square)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare", false]], "write() (in module borea.writer.writer_con)": [[22, "borea.writer.writer_con.write", false]], "write() (in module borea.writer.writer_opk)": [[22, "borea.writer.writer_opk.write", false]], "write() (in module borea.writer.writer_rpc)": [[22, "borea.writer.writer_rpc.write", false]], "write_df_to_txt() (in module borea.writer.writer_df_to_txt)": [[22, "borea.writer.writer_df_to_txt.write_df_to_txt", false]], "write_stat() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.write_stat", false]], "x_central (borea.geodesy.euclidean_proj.euclideanproj attribute)": [[3, "borea.geodesy.euclidean_proj.EuclideanProj.x_central", false]], "y_central (borea.geodesy.euclidean_proj.euclideanproj attribute)": [[3, "borea.geodesy.euclidean_proj.EuclideanProj.y_central", false]]}, "objects": {"": [[0, 0, 0, "-", "borea"]], "borea": [[1, 0, 0, "-", "datastruct"], [2, 0, 0, "-", "format"], [3, 0, 0, "-", "geodesy"], [5, 0, 0, "-", "process"], [9, 0, 0, "-", "reader"], [11, 0, 0, "-", "stat"], [12, 0, 0, "-", "transform_world_image"], [16, 0, 0, "-", "utils"], [21, 0, 0, "-", "worksite"], [22, 0, 0, "-", "writer"]], "borea.datastruct": [[1, 0, 0, "-", "camera"], [1, 0, 0, "-", "dtm"], [1, 0, 0, "-", "gcp"], [1, 0, 0, "-", "shot"], [1, 0, 0, "-", "workdata"]], "borea.datastruct.camera": [[1, 1, 1, "", "Camera"]], "borea.datastruct.camera.Camera": [[1, 2, 1, "", "focal"], [1, 2, 1, "", "height"], [1, 2, 1, "", "name_camera"], [1, 2, 1, "", "ppax"], [1, 2, 1, "", "ppay"], [1, 2, 1, "", "width"]], "borea.datastruct.dtm": [[1, 1, 1, "", "Dtm"]], "borea.datastruct.dtm.Dtm": [[1, 3, 1, "", "get_z_world"], [1, 3, 1, "", "set_cval"], [1, 3, 1, "", "set_dtm"], [1, 3, 1, "", "set_keep_memory"], [1, 3, 1, "", "set_order"]], "borea.datastruct.gcp": [[1, 1, 1, "", "GCP"]], "borea.datastruct.gcp.GCP": [[1, 2, 1, "", "code"], [1, 2, 1, "", "coor"], [1, 2, 1, "", "name_gcp"]], "borea.datastruct.shot": [[1, 1, 1, "", "Shot"]], "borea.datastruct.shot.Shot": [[1, 3, 1, "", "from_param_euclidean"], [1, 3, 1, "", "get_z_add_scale_factor"], [1, 3, 1, "", "get_z_remove_scale_factor"], [1, 3, 1, "", "set_linear_alteration"], [1, 3, 1, "", "set_order_axe"], [1, 3, 1, "", "set_param_eucli_shot"], [1, 3, 1, "", "set_rot_shot"], [1, 3, 1, "", "set_type_z"], [1, 3, 1, "", "set_unit_angle"], [1, 3, 1, "", "set_z_nadir"]], "borea.datastruct.workdata": [[1, 1, 1, "", "Workdata"]], "borea.datastruct.workdata.Workdata": [[1, 3, 1, "", "add_camera"], [1, 3, 1, "", "add_co_point"], [1, 3, 1, "", "add_gcp2d"], [1, 3, 1, "", "add_gcp3d"], [1, 3, 1, "", "add_shot"], [1, 3, 1, "", "set_approx_eucli_proj"], [1, 3, 1, "", "set_dtm"], [1, 3, 1, "", "set_proj"], [1, 3, 1, "", "set_type_z_data"], [1, 3, 1, "", "set_type_z_shot"]], "borea.format": [[2, 0, 0, "-", "conl"], [2, 0, 0, "-", "rpc"]], "borea.format.conl": [[2, 1, 1, "", "Conl"]], "borea.format.conl.Conl": [[2, 2, 1, "", "cam"], [2, 2, 1, "", "proj"], [2, 3, 1, "", "save_conl"], [2, 3, 1, "", "set_camera_xml"], [2, 3, 1, "", "set_geometry_xml"], [2, 2, 1, "", "shot"]], "borea.format.rpc": [[2, 1, 1, "", "Rpc"]], "borea.format.rpc.Rpc": [[2, 3, 1, "", "create_grid_rpc"], [2, 3, 1, "", "from_shot"], [2, 3, 1, "", "least_square_rpc"], [2, 3, 1, "", "normalize_data"], [2, 3, 1, "", "setup_matrix_obs_rpc"]], "borea.geodesy": [[3, 0, 0, "-", "approx_euclidean_proj"], [3, 0, 0, "-", "euclidean_proj"], [3, 0, 0, "-", "local_euclidean_proj"], [3, 0, 0, "-", "proj_engine"], [4, 0, 0, "-", "projectionlist"], [3, 0, 0, "-", "transform_geodesy"]], "borea.geodesy.approx_euclidean_proj": [[3, 1, 1, "", "ApproxEuclideanProj"]], "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj": [[3, 3, 1, "", "eucli_to_world"], [3, 3, 1, "", "mat_eucli_to_mat"], [3, 3, 1, "", "mat_to_mat_eucli"], [3, 3, 1, "", "world_to_eucli"]], "borea.geodesy.euclidean_proj": [[3, 1, 1, "", "EuclideanProj"]], "borea.geodesy.euclidean_proj.EuclideanProj": [[3, 2, 1, "", "x_central"], [3, 2, 1, "", "y_central"]], "borea.geodesy.local_euclidean_proj": [[3, 1, 1, "", "LocalEuclideanProj"]], "borea.geodesy.local_euclidean_proj.LocalEuclideanProj": [[3, 3, 1, "", "eucli_to_world"], [3, 3, 1, "", "mat_eucli_to_mat"], [3, 3, 1, "", "mat_rot_euclidean_local"], [3, 3, 1, "", "mat_to_mat_eucli"], [3, 3, 1, "", "world_to_eucli"]], "borea.geodesy.proj_engine": [[3, 1, 1, "", "ProjEngine"]], "borea.geodesy.proj_engine.ProjEngine": [[3, 2, 1, "", "epsg"], [3, 2, 1, "", "epsg_output"], [3, 2, 1, "", "geoid"], [3, 3, 1, "", "get_meridian_convergence"], [3, 3, 1, "", "get_scale_factor"], [3, 3, 1, "", "set_epsg"], [3, 3, 1, "", "set_epsg_tf_geog_output"]], "borea.geodesy.projectionlist": [[4, 0, 0, "-", "search_proj"]], "borea.geodesy.projectionlist.search_proj": [[4, 4, 1, "", "convert_line_list"], [4, 4, 1, "", "search_info"]], "borea.geodesy.transform_geodesy": [[3, 1, 1, "", "TransformGeodesy"]], "borea.geodesy.transform_geodesy.TransformGeodesy": [[3, 2, 1, "", "carto_to_geoc"], [3, 2, 1, "", "carto_to_geog"], [3, 2, 1, "", "carto_to_geog_out"], [3, 2, 1, "", "geoc_to_carto"], [3, 2, 1, "", "geog_to_carto"], [3, 2, 1, "", "geog_to_geoid"], [3, 2, 1, "", "geoid_to_geog"], [3, 3, 1, "", "tf_geoid"], [3, 3, 1, "", "tf_output"], [3, 3, 1, "", "tranform_altitude"], [3, 3, 1, "", "tranform_height"]], "borea.process": [[6, 0, 0, "-", "p_add_data"], [7, 0, 0, "-", "p_format"], [8, 0, 0, "-", "p_func"]], "borea.process.p_add_data": [[6, 0, 0, "-", "p_add_shot"], [6, 0, 0, "-", "p_file_gcp2d"], [6, 0, 0, "-", "p_file_gcp3d"], [6, 0, 0, "-", "p_gen_param"], [6, 0, 0, "-", "p_pt2d"], [6, 0, 0, "-", "p_pt3d"], [6, 0, 0, "-", "p_unit_shot"], [6, 0, 0, "-", "p_write"]], "borea.process.p_add_data.p_add_shot": [[6, 4, 1, "", "args_add_shot"], [6, 4, 1, "", "process_add_shot"]], "borea.process.p_add_data.p_file_gcp2d": [[6, 4, 1, "", "args_gcp2d"], [6, 4, 1, "", "process_gcp2d"]], "borea.process.p_add_data.p_file_gcp3d": [[6, 4, 1, "", "args_gcp3d"], [6, 4, 1, "", "process_gcp3d"]], "borea.process.p_add_data.p_gen_param": [[6, 4, 1, "", "args_general_param"], [6, 4, 1, "", "process_args_gen_param"]], "borea.process.p_add_data.p_pt2d": [[6, 4, 1, "", "args_add_pt2d"], [6, 4, 1, "", "process_image_world"]], "borea.process.p_add_data.p_pt3d": [[6, 4, 1, "", "args_add_pt3d"], [6, 4, 1, "", "process_world_image"]], "borea.process.p_add_data.p_unit_shot": [[6, 4, 1, "", "args_input_shot"], [6, 4, 1, "", "args_output_shot"]], "borea.process.p_add_data.p_write": [[6, 4, 1, "", "args_writer"]], "borea.process.p_format": [[7, 0, 0, "-", "p_read_opk"], [7, 0, 0, "-", "p_write_con"], [7, 0, 0, "-", "p_write_opk"], [7, 0, 0, "-", "p_write_rpc"]], "borea.process.p_format.p_read_opk": [[7, 4, 1, "", "args_reading_opk"], [7, 4, 1, "", "process_args_read_opk"]], "borea.process.p_format.p_write_con": [[7, 4, 1, "", "args_write_con"], [7, 4, 1, "", "process_args_write_con"]], "borea.process.p_format.p_write_opk": [[7, 4, 1, "", "args_writing_opk"], [7, 4, 1, "", "process_args_write_opk"]], "borea.process.p_format.p_write_rpc": [[7, 4, 1, "", "args_writing_rpc"], [7, 4, 1, "", "process_args_write_rpc"]], "borea.process.p_func": [[8, 0, 0, "-", "p_control"], [8, 0, 0, "-", "p_image_world"], [8, 0, 0, "-", "p_spaceresection"], [8, 0, 0, "-", "p_world_image"]], "borea.process.p_func.p_control": [[8, 4, 1, "", "args_control"], [8, 4, 1, "", "process_args_control"]], "borea.process.p_func.p_image_world": [[8, 4, 1, "", "args_image_world"], [8, 4, 1, "", "process_image_world"]], "borea.process.p_func.p_spaceresection": [[8, 4, 1, "", "args_space_resection"], [8, 4, 1, "", "process_space_resection"]], "borea.process.p_func.p_world_image": [[8, 4, 1, "", "args_world_image"], [8, 4, 1, "", "process_world_image"]], "borea.reader": [[10, 0, 0, "-", "orientation"], [9, 0, 0, "-", "reader_camera"], [9, 0, 0, "-", "reader_point"]], "borea.reader.orientation": [[10, 0, 0, "-", "manage_reader"], [10, 0, 0, "-", "reader_opk"]], "borea.reader.orientation.manage_reader": [[10, 4, 1, "", "reader_orientation"]], "borea.reader.orientation.reader_opk": [[10, 4, 1, "", "read"]], "borea.reader.reader_camera": [[9, 4, 1, "", "camera_txt"], [9, 4, 1, "", "read_camera"]], "borea.reader.reader_point": [[9, 4, 1, "", "read_file_pt"], [9, 4, 1, "", "read_file_pt_dataframe"]], "borea.stat": [[11, 0, 0, "-", "statistics"]], "borea.stat.statistics": [[11, 1, 1, "", "Stat"]], "borea.stat.statistics.Stat": [[11, 3, 1, "", "main_stat_and_save"], [11, 3, 1, "", "main_stat_image_to_world"], [11, 3, 1, "", "main_stat_world_to_image"], [11, 3, 1, "", "save_stat_txt"], [11, 3, 1, "", "stat_image_to_world"], [11, 3, 1, "", "stat_list"], [11, 3, 1, "", "stat_world_to_image"], [11, 3, 1, "", "write_stat"]], "borea.transform_world_image": [[13, 0, 0, "-", "transform_dtm"], [14, 0, 0, "-", "transform_shot"], [15, 0, 0, "-", "transform_worksite"]], "borea.transform_world_image.transform_dtm": [[13, 0, 0, "-", "world_image_dtm"]], "borea.transform_world_image.transform_dtm.world_image_dtm": [[13, 1, 1, "", "WorldImageDtm"]], "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm": [[13, 3, 1, "", "image_to_world"], [13, 3, 1, "", "world_to_image"]], "borea.transform_world_image.transform_shot": [[14, 0, 0, "-", "conversion_coor_shot"], [14, 0, 0, "-", "image_world_shot"], [14, 0, 0, "-", "world_image_shot"]], "borea.transform_world_image.transform_shot.conversion_coor_shot": [[14, 4, 1, "", "conv_output_z_type"], [14, 4, 1, "", "conv_z_shot_to_z_data"]], "borea.transform_world_image.transform_shot.image_world_shot": [[14, 1, 1, "", "ImageWorldShot"]], "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot": [[14, 3, 1, "", "image_to_bundle"], [14, 3, 1, "", "image_to_world"], [14, 3, 1, "", "image_world_iter"], [14, 3, 1, "", "image_z_to_world"], [14, 3, 1, "", "local_to_eucli"]], "borea.transform_world_image.transform_shot.world_image_shot": [[14, 1, 1, "", "WorldImageShot"]], "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot": [[14, 3, 1, "", "bundle_to_image"], [14, 3, 1, "", "eucli_to_bundle"], [14, 3, 1, "", "eucli_to_image"], [14, 3, 1, "", "world_to_image"]], "borea.transform_world_image.transform_worksite": [[15, 0, 0, "-", "image_world_intersection"], [15, 0, 0, "-", "image_world_least_square"], [15, 0, 0, "-", "image_world_work"], [15, 0, 0, "-", "space_resection"], [15, 0, 0, "-", "world_image_work"]], "borea.transform_world_image.transform_worksite.image_world_intersection": [[15, 1, 1, "", "WorldIntersection"]], "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection": [[15, 3, 1, "", "calculate_image_world_by_intersection"], [15, 3, 1, "", "comput_inter_in_2_more_distant_shot"], [15, 3, 1, "", "intersection_line_3d"], [15, 3, 1, "", "intersection_pt_in_2shot"], [15, 2, 1, "", "work"]], "borea.transform_world_image.transform_worksite.image_world_least_square": [[15, 1, 1, "", "WorldLeastSquare"]], "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare": [[15, 3, 1, "", "compute_image_world_least_square"], [15, 3, 1, "", "create_mat_a_and_vect_residu"], [15, 3, 1, "", "init_eucli_points"], [15, 3, 1, "", "least_square_intersect"], [15, 2, 1, "", "work"]], "borea.transform_world_image.transform_worksite.image_world_work": [[15, 1, 1, "", "ImageWorldWork"]], "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork": [[15, 3, 1, "", "manage_image_world"], [15, 2, 1, "", "work"]], "borea.transform_world_image.transform_worksite.space_resection": [[15, 1, 1, "", "SpaceResection"]], "borea.transform_world_image.transform_worksite.space_resection.SpaceResection": [[15, 3, 1, "", "func_least_square"], [15, 3, 1, "", "init_kappa"], [15, 3, 1, "", "least_square_shot"], [15, 3, 1, "", "mat_obs_axia"], [15, 3, 1, "", "seed_20_point"], [15, 3, 1, "", "space_resection_gap"], [15, 3, 1, "", "space_resection_on_worksite"], [15, 3, 1, "", "space_resection_shot"], [15, 3, 1, "", "space_resection_to_worksite"], [15, 3, 1, "", "take_obs"]], "borea.transform_world_image.transform_worksite.world_image_work": [[15, 1, 1, "", "WorldImageWork"]], "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork": [[15, 3, 1, "", "calculate_world_to_image"], [15, 2, 1, "", "work"]], "borea.utils": [[17, 0, 0, "-", "check"], [18, 0, 0, "-", "miscellaneous"], [19, 0, 0, "-", "singleton"], [20, 0, 0, "-", "xml"]], "borea.utils.check": [[17, 0, 0, "-", "check_args_opk"], [17, 0, 0, "-", "check_args_reader_pt"], [17, 0, 0, "-", "check_array"], [17, 0, 0, "-", "check_header"], [17, 0, 0, "-", "check_order_axe"]], "borea.utils.check.check_args_opk": [[17, 4, 1, "", "check_args_opk"], [17, 4, 1, "", "check_header_file"]], "borea.utils.check.check_args_reader_pt": [[17, 4, 1, "", "check_header_file"]], "borea.utils.check.check_array": [[17, 4, 1, "", "check_array_transfo"]], "borea.utils.check.check_header": [[17, 4, 1, "", "check_h_z"], [17, 4, 1, "", "check_head"], [17, 4, 1, "", "get_type_z_and_header"]], "borea.utils.check.check_order_axe": [[17, 4, 1, "", "check_order_axe"], [17, 4, 1, "", "convert_opk_to_xyz"]], "borea.utils.miscellaneous": [[18, 0, 0, "-", "miscellaneous"], [18, 0, 0, "-", "param_bundle"], [18, 0, 0, "-", "sparse"]], "borea.utils.miscellaneous.miscellaneous": [[18, 4, 1, "", "angle_degree_2vect"], [18, 4, 1, "", "dist_2pts"], [18, 4, 1, "", "min_max_pt"], [18, 4, 1, "", "normalize"]], "borea.utils.miscellaneous.param_bundle": [[18, 4, 1, "", "set_param_bundle_diff"]], "borea.utils.miscellaneous.sparse": [[18, 4, 1, "", "invert_diag_sparse_matrix_3_3"]], "borea.utils.singleton": [[19, 0, 0, "-", "singleton"]], "borea.utils.singleton.singleton": [[19, 1, 1, "", "Singleton"]], "borea.utils.singleton.singleton.Singleton": [[19, 3, 1, "", "clear"]], "borea.utils.xml": [[20, 0, 0, "-", "xml"]], "borea.utils.xml.xml": [[20, 4, 1, "", "add_elem"], [20, 4, 1, "", "format_xml"], [20, 4, 1, "", "indent"]], "borea.worksite": [[21, 0, 0, "-", "worksite"]], "borea.worksite.worksite": [[21, 1, 1, "", "Worksite"]], "borea.worksite.worksite.Worksite": [[21, 3, 1, "", "calculate_barycentre"], [21, 3, 1, "", "get_attr_transfo_pt"], [21, 3, 1, "", "get_coor_pt_img_and_world"], [21, 3, 1, "", "get_point_image_dataframe"], [21, 3, 1, "", "get_point_world_dataframe"], [21, 3, 1, "", "set_param_shot"], [21, 3, 1, "", "set_point_image_dataframe"], [21, 3, 1, "", "set_point_world_dataframe"], [21, 3, 1, "", "set_unit_shot"]], "borea.writer": [[22, 0, 0, "-", "manage_writer"], [22, 0, 0, "-", "writer_con"], [22, 0, 0, "-", "writer_df_to_txt"], [22, 0, 0, "-", "writer_opk"], [22, 0, 0, "-", "writer_rpc"]], "borea.writer.manage_writer": [[22, 4, 1, "", "manager_writer"]], "borea.writer.writer_con": [[22, 4, 1, "", "write"]], "borea.writer.writer_df_to_txt": [[22, 4, 1, "", "write_df_to_txt"]], "borea.writer.writer_opk": [[22, 4, 1, "", "write"]], "borea.writer.writer_rpc": [[22, 4, 1, "", "write"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function"}, "terms": {"": [11, 15, 18, 19], "0": [1, 14, 15, 18, 20], "1": [1, 2, 10, 15, 17], "10": [2, 3, 6, 7, 8, 20], "100": 2, "11": 1, "12": 1, "13": 1, "2": [1, 2, 15, 18], "20": 15, "2154": [1, 3], "2d": [1, 6, 13, 18], "3": [1, 2, 15], "3d": [6, 15], "5": 1, "5f": 20, "6": [8, 15], "A": [1, 2, 3, 10, 15, 17, 18], "And": 1, "For": 15, "If": [1, 2, 15], "It": 19, "NOT": [1, 14], "One": [1, 4], "The": [1, 2, 3, 10, 14, 15, 18, 20, 21, 22], "To": [14, 15], "__init__": 3, "absolut": 11, "account": [10, 17], "acornu": 3, "acquisit": [1, 2, 15], "ad": [1, 6, 15], "add": [1, 2, 6, 7, 8, 10, 15, 20], "add_camera": [0, 1], "add_co_point": [0, 1], "add_elem": [16, 20], "add_gcp2d": [0, 1], "add_gcp3d": [0, 1], "add_pixel": 15, "add_shot": [0, 1], "adjust": 15, "after": 1, "agr": [1, 9], "aim": 19, "all": [1, 4, 11, 15, 17, 21], "allow": [1, 3, 21], "alter": [1, 2, 10, 14, 17, 22], "altitud": [1, 3, 14, 17], "alwai": [1, 2], "an": [1, 3, 10, 14, 15, 17, 18, 22], "angl": [1, 10, 15, 17, 18, 21, 22], "angle_degree_2vect": [16, 18], "ani": [1, 20], "app": 9, "appear": 15, "appli": [6, 7, 8], "approx": [1, 14, 21], "approx_euclidean_proj": [0, 24], "approxeucli": 1, "approxeuclideanproj": [0, 3], "approxim": 3, "apprx": 1, "ar": [1, 3, 17], "aren": 15, "arg": [1, 3, 6, 7, 8, 10, 17, 22], "argpars": [6, 7, 8], "args_add_pt2d": [5, 6], "args_add_pt3d": [5, 6], "args_add_shot": [5, 6], "args_control": [5, 8], "args_gcp2d": [5, 6], "args_gcp3d": [5, 6], "args_general_param": [5, 6], "args_image_world": [5, 8], "args_input_shot": [5, 6], "args_output_shot": [5, 6], "args_reading_opk": [5, 7], "args_space_resect": [5, 8], "args_world_imag": [5, 8], "args_writ": [5, 6], "args_write_con": [5, 7], "args_writing_opk": [5, 7], "args_writing_rpc": [5, 7], "argspars": [6, 7, 8], "argument": [6, 7, 8], "arithmet": 11, "around": 2, "arrai": [1, 2, 3, 13, 14, 15, 17, 18, 21], "arrang": 9, "ask": [3, 14], "attribut": [1, 3, 21], "ax": [1, 10, 17, 22], "axiat": 15, "b": 15, "bad_head": 17, "balis": [2, 20], "barycentr": 21, "base": [1, 2, 3, 11, 13, 14, 15, 19, 21], "bdortho": 4, "beam": 18, "begin": 22, "belong": 19, "between": [1, 3, 15, 17, 18], "bilinear": 1, "block": 18, "bool": [1, 2, 10, 14, 17, 21, 22], "boolean": [1, 17], "borea": 23, "borea_env": 3, "buffer": 2, "build": 1, "bundl": [14, 15, 18], "bundle_to_imag": [12, 14], "c": [2, 14], "c_ob": 15, "calcul": [2, 6, 8, 11, 14, 15, 18, 21, 22], "calculate_barycentr": [0, 21], "calculate_image_world_by_intersect": [12, 15], "calculate_world_to_imag": [12, 15], "calcult": 15, "cam": [0, 2, 14, 15], "camera": [0, 2, 9, 14, 15, 24], "camera_txt": [0, 9], "carto_to_geoc": [0, 3], "carto_to_geog": [0, 3], "carto_to_geog_out": [0, 3], "cartograph": 3, "cartographiqu": 14, "categori": 19, "center": 1, "centr": 3, "central": 3, "chang": [1, 15, 21], "check": [0, 15, 16], "check_args_opk": [0, 16], "check_args_reader_pt": [0, 16], "check_arrai": [0, 16], "check_array_transfo": [16, 17], "check_h_z": [16, 17], "check_head": [0, 16], "check_header_fil": [16, 17], "check_lett": 17, "check_order_ax": [0, 16], "class": [1, 2, 3, 11, 13, 14, 15, 19, 21, 22], "classmethod": [1, 2], "clear": [16, 19], "co": 15, "co_point": [1, 9, 15, 17, 21], "code": [0, 1, 3, 15, 17, 22], "code_gcp": 1, "code_git": 3, "coeffici": 2, "col": [2, 14], "collinear": 3, "column": [1, 2, 9, 10, 13, 15, 17, 21, 22], "combin": 17, "comput": [2, 3, 13], "comput_inter_in_2_more_distant_shot": [12, 15], "compute_image_world_least_squar": [12, 15], "con": 22, "condit": 1, "conic": [2, 7, 22], "conl": [0, 24], "connect": [1, 9, 15], "construct": 1, "contain": [1, 17], "content": 24, "control": [1, 8, 11, 15, 21], "control_typ": [15, 21], "conv_output_z_typ": [12, 14], "conv_z_shot_to_z_data": [12, 14], "converg": [3, 15], "convers": [14, 17], "conversion_coor_shot": [0, 12], "convert": [2, 3, 4, 14, 17, 22], "convert_line_list": [3, 4], "convert_opk_to_xyz": [16, 17], "coodin": 14, "coor": [0, 1, 3, 14], "coor2d": 1, "coor_2d": 1, "coor_eucli": [3, 18], "coor_gcp": 1, "coor_img": 13, "coor_init": 15, "coor_world": [3, 13, 14], "coordin": [1, 2, 3, 6, 8, 13, 14, 15, 18, 22], "coordinn": 18, "coordonne": 15, "copoint": 15, "correct": [1, 2, 10, 17, 21, 22], "correspond": 15, "cr": 3, "creat": [2, 3], "create_grid_rpc": [0, 2], "create_mat_a_and_vect_residu": [12, 15], "creation": [2, 15, 19], "cubic": 1, "cval": 1, "data": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 14, 15, 17, 18, 21, 22], "data_input": 4, "data_list": 11, "datafram": [9, 15, 21, 22], "datastruct": [0, 24], "de": 1, "definit": 1, "degre": [1, 2, 3, 10, 17, 18, 22], "depend": [15, 21], "describ": 2, "design": 19, "df": 22, "dfpt": 15, "dict": [1, 2, 10, 11, 15, 17, 22], "dictionari": [2, 11, 22], "dictionnari": 15, "diff": 17, "differ": 21, "differenti": [1, 18], "digit": 1, "dim": [17, 18], "dimens": 17, "direct": 15, "dist_2pt": [16, 18], "distanc": [15, 18], "distant": 15, "distort": 1, "do": 15, "document": 3, "dtm": [0, 13, 19, 24], "du": 14, "dx": 15, "d\u00e9fault": 14, "e": [10, 17], "each": 15, "edg": 1, "elem": 20, "element": [4, 15, 17, 20], "elementtre": [2, 20], "elev": 1, "enough": 15, "epsg": [0, 1, 3, 4, 22], "epsg_out": 3, "epsg_output": [0, 3, 22], "equat": [3, 15], "error": [1, 17], "et": [2, 20], "etre": [2, 20], "eucli": 15, "eucli_to_bundl": [12, 14], "eucli_to_imag": [12, 14], "eucli_to_world": [0, 3], "euclidean": [1, 3, 14, 15, 18, 21], "euclidean_proj": [0, 24], "euclideanproj": [0, 3], "euclidian": 3, "euclidien": 15, "ex": [1, 3], "extern": [8, 15], "externa": 15, "extract": [1, 3], "fact_rpc": [2, 22], "factor": [1, 2, 3, 15, 22], "fals": [14, 17, 21], "field": 15, "file": [1, 2, 4, 6, 7, 8, 9, 10, 11, 17, 20, 22], "fill": 1, "first": [15, 18], "fisrt": 18, "fix": 15, "flaot": 1, "flip": 18, "float": [1, 3, 14, 15, 17, 18], "focal": [0, 1], "folder": 22, "folder_con": 22, "folder_rpc": 22, "form": 1, "formal": 17, "format": [0, 1, 9, 17, 20, 22, 24], "format_xml": [16, 20], "frame": 18, "frist": 15, "from": [2, 3, 6, 7, 8, 13, 15, 20], "from_param_euclidean": [0, 1], "from_shot": [0, 2], "func_least_squar": [12, 15], "function": [3, 10, 11, 13, 14, 17, 18, 20, 22], "g": [10, 17], "gcp": [0, 6, 15, 21, 24], "gcp2d": [1, 9, 15, 17, 21], "gcp3d": [9, 15, 17], "gdal": 1, "gener": 6, "geoc_to_carto": [0, 3], "geodesi": [0, 24], "geog_to_carto": [0, 3], "geog_to_geoid": [0, 3], "geograph": [2, 3], "geoid": [0, 1, 3], "geoid_to_geog": [0, 3], "geometri": 2, "georeferenc": 1, "geotiff": 1, "geoview": [2, 4, 7], "get": [1, 18, 21], "get_attr_transfo_pt": [0, 21], "get_coor_pt_img_and_world": [0, 21], "get_meridian_converg": [0, 3], "get_point_image_datafram": [0, 21], "get_point_world_datafram": [0, 21], "get_scale_factor": [0, 3], "get_type_z_and_head": [16, 17], "get_z_add_scale_factor": [0, 1], "get_z_remove_scale_factor": [0, 1], "get_z_world": [0, 1], "give": 1, "given": [14, 15], "good": 17, "grid": [1, 2], "grid_img": 2, "grid_world": 2, "ground": [1, 6, 11, 14, 15], "gt": 13, "h": [1, 17], "head": 17, "header": [4, 9, 10, 17, 22], "height": [0, 1, 3, 14, 15, 17], "home": 3, "i": [1, 2, 3, 9, 10, 14, 15, 17, 19, 20, 21, 22], "id_img": [15, 21], "id_pt": [15, 21], "ign": [1, 2, 7], "imag": [1, 2, 6, 8, 11, 13, 14, 15, 18, 21], "image_to_bundl": [12, 14], "image_to_world": [12, 13, 14], "image_world_intersect": [0, 12], "image_world_it": [12, 14], "image_world_least_squar": [0, 12], "image_world_shot": [0, 12], "image_world_work": [0, 12], "image_z_to_world": [12, 14], "imageworldshot": [12, 14], "imageworldwork": [12, 15], "imc_adjust": 15, "img_coor": 14, "img_norm": 2, "implement": [3, 20], "indent": [16, 20], "index": [18, 23], "inform": [1, 10, 17, 22], "init": 3, "init_eucli_point": [12, 15], "init_kappa": [12, 15], "initi": 15, "input": [4, 14], "instanc": 19, "instanti": 19, "int": [1, 2, 3, 15, 20], "inter": 15, "interpol": 1, "intersect": 15, "intersection_line_3d": [12, 15], "intersection_pt_in_2shot": [12, 15], "interv": [10, 17], "invers": 18, "invert_diag_sparse_matrix_3_3": [16, 18], "io": 11, "item": 20, "its": 15, "j": [10, 17], "kappa": [1, 15], "keep_in_memori": 1, "keep_memori": 1, "kei": [1, 2, 10, 17, 22], "known": 3, "kwarg": [1, 3], "l": [2, 14], "l_ob": 15, "la": 14, "lcode": 15, "least": [2, 15], "least_square_intersect": [12, 15], "least_square_rpc": [0, 2], "least_square_shot": [12, 15], "letter": 17, "level": 20, "lib": [2, 3, 6, 7, 8, 20], "light": 2, "linalt": 2, "line": [1, 2, 4, 10, 13, 14, 15, 17, 21], "linear": [1, 2, 10, 14, 17, 22], "linear_alter": [1, 10, 17, 21, 22], "link": [1, 21], "list": [1, 3, 4, 9, 10, 11, 15, 17, 20, 21, 22], "list_data": 4, "list_lett": 17, "list_shot": 15, "local": [3, 14], "local_euclidean_proj": [0, 24], "local_to_eucli": [12, 14], "localeuclideanproj": [0, 3], "m": 18, "maco": 2, "main": 21, "main_stat_and_sav": [0, 11], "main_stat_image_to_world": [0, 11], "main_stat_world_to_imag": [0, 11], "make": 15, "manag": [9, 17], "manage_image_world": [12, 15], "manage_read": [0, 9], "manage_writ": [0, 24], "manager_writ": [0, 22], "manipul": [1, 3], "mapinfo": 4, "marker": 15, "mat": [3, 18], "mat_a": 15, "mat_eucli": 3, "mat_eucli_to_mat": [0, 3], "mat_inv": 18, "mat_obs_axia": [12, 15], "mat_ori_eucli": 1, "mat_rot_eucli": 1, "mat_rot_euclidean_loc": [0, 3], "mat_to_mat_eucli": [0, 3], "math": 18, "matric": [1, 21], "matrix": [1, 2, 3, 10, 15, 17, 18, 22], "max": [11, 18], "me": 9, "mean": [1, 11, 15], "median": 11, "memori": 1, "meridian": 3, "messag": 17, "method": [1, 2, 15], "min": [11, 18], "min_max_pt": [16, 18], "miscellan": [0, 16], "misss": 17, "model": 1, "modifi": [1, 14], "modul": [23, 24], "most": 15, "ms_error": 17, "ms_error_lett": 17, "must": [1, 3, 17], "n": [17, 18], "nadir": [1, 14], "name": [1, 15, 20, 21, 22], "name_cam": 1, "name_camera": [0, 1], "name_gcp": [0, 1], "name_opk": 22, "name_point": [1, 15], "name_pt": 15, "name_shot": [1, 15, 21], "nbr_inc": 15, "nbr_ob": 15, "ndarrai": [1, 2, 3, 13, 14, 15, 17, 18, 21], "nearest": 1, "need": 9, "new": [1, 3], "nodata": 1, "nonadir": 14, "none": [1, 2, 3, 6, 7, 8, 9, 10, 11, 15, 17, 20, 21, 22], "normal": [2, 16, 18], "normalize_data": [0, 2], "np": [1, 2, 3, 13, 14, 15, 17, 18, 21], "number": [15, 20], "numpi": 1, "ob": 15, "object": [1, 2, 3, 4, 10, 11, 13, 14, 15, 19], "obs_imag": [15, 21], "observ": [2, 15], "offset": 18, "omega": [1, 15], "one": [1, 2, 6, 18], "oopk": 17, "opk": [6, 7, 10, 17, 22], "order": [1, 2, 10, 17, 21, 22], "order_ax": [1, 10, 17, 21, 22], "ori": 2, "ori_shot": 1, "orient": [0, 1, 9, 15], "other": [10, 22], "outil_sia": 3, "output": [3, 4, 14, 17, 22], "outsid": 1, "p_add_data": [0, 5], "p_add_shot": [0, 5], "p_bundl": 14, "p_control": [0, 5], "p_eucli": 14, "p_file_gcp2d": [0, 5], "p_file_gcp3d": [0, 5], "p_format": [0, 5], "p_func": [0, 5], "p_gen_param": [0, 5], "p_image_world": [0, 5], "p_pt2d": [0, 5], "p_pt3d": [0, 5], "p_read_opk": [0, 5], "p_spaceresect": [0, 5], "p_unit_shot": [0, 5], "p_world_imag": [0, 5], "p_write": [0, 5], "p_write_con": [0, 5], "p_write_opk": [0, 5], "p_write_rpc": [0, 5], "packag": [23, 24], "page": 23, "panda": 21, "par": 14, "param_bundl": [0, 16], "param_con": 22, "param_rpc": [2, 22], "paramet": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 20, 21, 22], "parent": [3, 13], "parser": [6, 7, 8], "part": 1, "past": 1, "path": [1, 2, 9, 10, 22], "path_con": 2, "path_dtm": 1, "path_geoid": 1, "path_opk": 22, "pathoutput": 11, "pathreturn": 22, "pattern": 19, "pd": [9, 15, 21, 22], "pd_me": [15, 21], "pd_mes_temp": 15, "pd_pnt": 15, "percentag": 15, "perform": 1, "phi": [1, 15], "photogrametriqu": 8, "photogrammetr": [10, 22], "photogrammetri": [10, 22], "pinit": 15, "pixel": [1, 15], "point": [1, 2, 3, 6, 9, 11, 14, 15, 17, 18, 21], "point1": 15, "point2": 15, "polynom": [2, 22], "polynomi": 2, "polynomial_degre": 2, "porject": 1, "pos_eucli": [1, 14], "pos_shot": 1, "pos_shot_eucli": 1, "posit": [1, 14, 15, 18], "possibl": 17, "ppai": [0, 1], "ppax": [0, 1], "prec": 20, "precis": [1, 20], "process": [0, 14, 15, 24], "process_add_shot": [5, 6], "process_args_control": [5, 8], "process_args_gen_param": [5, 6], "process_args_read_opk": [5, 7], "process_args_write_con": [5, 7], "process_args_write_opk": [5, 7], "process_args_write_rpc": [5, 7], "process_gcp2d": [5, 6], "process_gcp3d": [5, 6], "process_image_world": [5, 6, 8], "process_space_resect": [5, 8], "process_world_imag": [5, 6, 8], "proj": [0, 2], "proj4": 4, "proj_engin": [0, 24], "project": [1, 2, 3, 22], "projectionlist": [0, 3], "projengin": [0, 1, 3, 19], "projeucli": 1, "provid": 3, "pt1": 18, "pt2": 18, "pt2d": [9, 15], "pt3d": [9, 15], "pt_bundl": 14, "pt_eucli": 15, "pt_img": 15, "pt_world": [15, 21], "put": 20, "py": [2, 3, 6, 7, 8, 20], "pyproj": 3, "python3": [2, 3, 6, 7, 8, 20], "quintic": 1, "r": 18, "radian": [1, 10, 17, 22], "rais": 1, "random": 15, "ratat": 17, "read": [1, 2, 6, 7, 9, 10, 17], "read_camera": [0, 9], "read_file_pt": [0, 9], "read_file_pt_datafram": [0, 9], "reader": [0, 17, 24], "reader_camera": [0, 24], "reader_opk": [0, 9], "reader_orient": [9, 10], "reader_point": [0, 24], "recalcul": 15, "recalcult": 15, "record": 22, "recov": 21, "refer": [3, 4, 18], "registr": 22, "remov": 1, "replac": 17, "repres": [1, 3], "request": 21, "research": 4, "resect": 15, "residu": [11, 15], "ressourc": 21, "restrict": 19, "result": [1, 15], "retriev": 21, "retun": 17, "return": [1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 17, 18, 20, 21], "rotat": [1, 3, 10, 17, 18, 21, 22], "rpc": [0, 7, 22, 24], "same": 17, "save": [2, 9, 11, 21, 22], "save_conl": [0, 2], "save_stat_txt": [0, 11], "scale": [1, 3, 18], "scipi": 17, "script": [9, 10, 17], "sd": 4, "search": [15, 23], "search_info": [3, 4], "search_proj": [0, 3], "second": [15, 18], "seed_20_point": [12, 15], "self": [1, 13], "set": [1, 15, 17, 18, 21], "set_approx_eucli_proj": [0, 1], "set_camera_xml": [0, 2], "set_cval": [0, 1], "set_dtm": [0, 1], "set_epsg": [0, 3], "set_epsg_tf_geog_output": [0, 3], "set_geometry_xml": [0, 2], "set_keep_memori": [0, 1], "set_linear_alter": [0, 1], "set_ord": [0, 1], "set_order_ax": [0, 1], "set_param_bundle_diff": [16, 18], "set_param_eucli_shot": [0, 1], "set_param_shot": [0, 21], "set_point_image_datafram": [0, 21], "set_point_world_datafram": [0, 21], "set_proj": [0, 1], "set_rot_shot": [0, 1], "set_type_z": [0, 1], "set_type_z_data": [0, 1], "set_type_z_shot": [0, 1], "set_unit_angl": [0, 1], "set_unit_shot": [0, 21], "set_z_nadir": [0, 1], "setter": 3, "setup": [1, 2], "setup_matrix_obs_rpc": [0, 2], "shoot": 15, "shot": [0, 2, 6, 8, 10, 14, 15, 17, 18, 21, 24], "shot1": 15, "shot2": 15, "shot_adjust": 15, "sigma": 11, "singl": 19, "singleton": [0, 16], "site": [3, 10, 11, 22], "size": 2, "size_grid": 2, "slinear": 1, "softwar": 2, "solv": 15, "sourc": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22], "space": 15, "space_resect": [0, 12], "space_resection_gap": [12, 15], "space_resection_on_worksit": [12, 15], "space_resection_shot": [12, 15], "space_resection_to_worksit": [12, 15], "spaceresect": [12, 15], "spars": [0, 16], "squar": [2, 15], "src": [2, 22], "stat": [0, 24], "stat_image_to_world": [0, 11], "stat_list": [0, 11], "stat_world_to_imag": [0, 11], "statist": [0, 24], "store": 1, "str": [1, 2, 4, 9, 10, 11, 14, 15, 17, 18, 20, 21, 22], "string": 21, "structur": 20, "submodul": [0, 5, 12, 16, 24], "subpackag": 24, "support": 1, "symbol": 17, "system": [1, 3, 14, 15, 21], "t": 15, "ta": 4, "tabl": [15, 21], "take": [14, 15, 21], "take_ob": [12, 15], "taken": [10, 17], "terrain": [14, 21], "textiowrapp": 11, "tf_geoid": [0, 3], "tf_output": [0, 3], "thei": [15, 17], "thi": 3, "tool": 21, "topaero": 4, "tranform": 3, "tranform_altitud": [0, 3], "tranform_height": [0, 3], "transform": [2, 3, 10, 13, 14, 15, 21], "transform_dtm": [0, 12], "transform_geodesi": [0, 24], "transform_shot": [0, 12], "transform_worksit": [0, 12], "transform_world_imag": [0, 24], "transformgeodesi": [0, 3], "transit": 3, "true": [1, 2, 10, 14, 17, 21, 22], "tubl": 15, "tupl": [2, 13, 15, 17, 18, 21], "two": [1, 15, 18], "txt": [4, 9, 11, 22], "type": [1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 22], "type_dtm": 1, "type_input": 4, "type_m": 18, "type_output": 4, "type_point": [9, 11, 15, 21], "type_process": 15, "type_pt": 17, "type_z": [1, 17, 21], "type_z_data": [1, 14], "type_z_input": 14, "type_z_output": 14, "type_z_shot": [1, 14], "u": 18, "u1": 18, "u2": 18, "u3": 18, "union": [3, 14, 17], "unit": [1, 6, 10, 17, 21, 22], "unit_angl": [1, 10, 17, 21, 22], "unit_data": 2, "unit_z_data": 2, "unit_z_shot": 2, "uniti": 2, "up": [1, 15, 18, 21], "us": [1, 3, 15, 21], "usr": [2, 6, 7, 8, 20], "util": [0, 24], "v": 18, "val": 20, "valid": 3, "valu": [1, 3, 15], "var": 11, "variabl": 17, "variat": 15, "variou": 17, "vect1": 15, "vect2": 15, "vector": [15, 17, 18], "verif": 17, "visibl": 15, "want": [1, 2, 14, 15, 21], "we": 18, "wgs84": [2, 22], "what": [15, 21], "when": [2, 22], "where": [15, 21], "which": [1, 3, 9, 15, 18], "whit": 1, "whose": 19, "width": [0, 1, 15], "without": [1, 17], "wkt": 4, "woksit": 15, "work": [6, 7, 8, 9, 10, 11, 12, 15, 18, 22], "workdata": [0, 21, 24], "worksid": 10, "worksit": [0, 1, 3, 6, 7, 8, 9, 10, 11, 14, 15, 22, 24], "world": [1, 2, 3, 6, 8, 11, 13, 14, 15, 21, 22], "world_image_dtm": [0, 12], "world_image_shot": [0, 12], "world_image_work": [0, 12], "world_norm": 2, "world_to_eucli": [0, 3], "world_to_imag": [12, 13, 14], "worldimagedtm": [1, 12, 13], "worldimageshot": [12, 14], "worldimagework": [12, 15], "worldintersect": [12, 15], "worldleastsquar": [12, 15], "write": [0, 2, 6, 7, 11, 20, 22], "write_df_to_txt": [0, 22], "write_stat": [0, 11], "writer": [0, 24], "writer_con": [0, 24], "writer_df_to_txt": [0, 24], "writer_opk": [0, 24], "writer_rpc": [0, 24], "x": [1, 2, 3, 13, 14, 15, 17, 21], "x_carto": 3, "x_central": [0, 3], "x_col": 14, "xml": [0, 2, 9, 16], "y": [1, 2, 3, 13, 14, 15, 17, 21], "y_carto": 3, "y_central": [0, 3], "y_line": 14, "you": [1, 2, 14, 15, 21], "your": 21, "z": [1, 2, 3, 14, 15, 17, 21], "z_nadir": 1}, "titles": ["borea package", "borea.datastruct package", "borea.format package", "borea.geodesy package", "borea.geodesy.projectionlist package", "borea.process package", "borea.process.p_add_data package", "borea.process.p_format package", "borea.process.p_func package", "borea.reader package", "borea.reader.orientation package", "borea.stat package", "borea.transform_world_image package", "borea.transform_world_image.transform_dtm package", "borea.transform_world_image.transform_shot package", "borea.transform_world_image.transform_worksite package", "borea.utils package", "borea.utils.check package", "borea.utils.miscellaneous package", "borea.utils.singleton package", "borea.utils.xml package", "borea.worksite package", "borea.writer package", "Welcome to Pink_Lady\u2019s documentation!", "borea"], "titleterms": {"": 23, "approx_euclidean_proj": 3, "borea": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24], "camera": 1, "check": 17, "check_args_opk": 17, "check_args_reader_pt": 17, "check_arrai": 17, "check_head": 17, "check_order_ax": 17, "conl": 2, "content": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "conversion_coor_shot": 14, "datastruct": 1, "document": 23, "dtm": 1, "euclidean_proj": 3, "format": 2, "gcp": 1, "geodesi": [3, 4], "image_world_intersect": 15, "image_world_least_squar": 15, "image_world_shot": 14, "image_world_work": 15, "indic": 23, "local_euclidean_proj": 3, "manage_read": 10, "manage_writ": 22, "miscellan": 18, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "orient": 10, "p_add_data": 6, "p_add_shot": 6, "p_control": 8, "p_file_gcp2d": 6, "p_file_gcp3d": 6, "p_format": 7, "p_func": 8, "p_gen_param": 6, "p_image_world": 8, "p_pt2d": 6, "p_pt3d": 6, "p_read_opk": 7, "p_spaceresect": 8, "p_unit_shot": 6, "p_world_imag": 8, "p_write": 6, "p_write_con": 7, "p_write_opk": 7, "p_write_rpc": 7, "packag": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "param_bundl": 18, "pink_ladi": 23, "process": [5, 6, 7, 8], "proj_engin": 3, "projectionlist": 4, "reader": [9, 10], "reader_camera": 9, "reader_opk": 10, "reader_point": 9, "rpc": 2, "search_proj": 4, "shot": 1, "singleton": 19, "space_resect": 15, "spars": 18, "stat": 11, "statist": 11, "submodul": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22], "subpackag": [0, 3, 5, 9, 12, 16], "tabl": 23, "transform_dtm": 13, "transform_geodesi": 3, "transform_shot": 14, "transform_worksit": 15, "transform_world_imag": [12, 13, 14, 15], "util": [16, 17, 18, 19, 20], "welcom": 23, "workdata": 1, "worksit": 21, "world_image_dtm": 13, "world_image_shot": 14, "world_image_work": 15, "writer": 22, "writer_con": 22, "writer_df_to_txt": 22, "writer_opk": 22, "writer_rpc": 22, "xml": 20}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Contents:": [[23, null]], "Indices and tables": [[23, "indices-and-tables"]], "Module contents": [[0, "module-borea"], [1, "module-borea.datastruct"], [2, "module-borea.format"], [3, "module-borea.geodesy"], [4, "module-borea.geodesy.projectionlist"], [5, "module-borea.process"], [6, "module-borea.process.p_add_data"], [7, "module-borea.process.p_format"], [8, "module-borea.process.p_func"], [9, "module-borea.reader"], [10, "module-borea.reader.orientation"], [11, "module-borea.stat"], [12, "module-borea.transform_world_image"], [13, "module-borea.transform_world_image.transform_dtm"], [14, "module-borea.transform_world_image.transform_shot"], [15, "module-borea.transform_world_image.transform_worksite"], [16, "module-borea.utils"], [17, "module-borea.utils.check"], [18, "module-borea.utils.miscellaneous"], [19, "module-borea.utils.singleton"], [20, "module-borea.utils.xml"], [21, "module-borea.worksite"], [22, "module-borea.writer"]], "Submodules": [[1, "submodules"], [2, "submodules"], [3, "submodules"], [4, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"], [10, "submodules"], [11, "submodules"], [13, "submodules"], [14, "submodules"], [15, "submodules"], [17, "submodules"], [18, "submodules"], [19, "submodules"], [20, "submodules"], [21, "submodules"], [22, "submodules"]], "Subpackages": [[0, "subpackages"], [3, "subpackages"], [5, "subpackages"], [9, "subpackages"], [12, "subpackages"], [16, "subpackages"]], "Welcome to Pink_Lady\u2019s documentation!": [[23, null]], "borea": [[24, null]], "borea package": [[0, null]], "borea.datastruct package": [[1, null]], "borea.datastruct.camera module": [[1, "module-borea.datastruct.camera"]], "borea.datastruct.dtm module": [[1, "module-borea.datastruct.dtm"]], "borea.datastruct.gcp module": [[1, "module-borea.datastruct.gcp"]], "borea.datastruct.shot module": [[1, "module-borea.datastruct.shot"]], "borea.datastruct.workdata module": [[1, "module-borea.datastruct.workdata"]], "borea.format package": [[2, null]], "borea.format.conl module": [[2, "module-borea.format.conl"]], "borea.format.rpc module": [[2, "module-borea.format.rpc"]], "borea.geodesy package": [[3, null]], "borea.geodesy.approx_euclidean_proj module": [[3, "module-borea.geodesy.approx_euclidean_proj"]], "borea.geodesy.euclidean_proj module": [[3, "module-borea.geodesy.euclidean_proj"]], "borea.geodesy.local_euclidean_proj module": [[3, "module-borea.geodesy.local_euclidean_proj"]], "borea.geodesy.proj_engine module": [[3, "module-borea.geodesy.proj_engine"]], "borea.geodesy.projectionlist package": [[4, null]], "borea.geodesy.projectionlist.search_proj module": [[4, "module-borea.geodesy.projectionlist.search_proj"]], "borea.geodesy.transform_geodesy module": [[3, "module-borea.geodesy.transform_geodesy"]], "borea.process package": [[5, null]], "borea.process.p_add_data package": [[6, null]], "borea.process.p_add_data.p_add_shot module": [[6, "module-borea.process.p_add_data.p_add_shot"]], "borea.process.p_add_data.p_file_gcp2d module": [[6, "module-borea.process.p_add_data.p_file_gcp2d"]], "borea.process.p_add_data.p_file_gcp3d module": [[6, "module-borea.process.p_add_data.p_file_gcp3d"]], "borea.process.p_add_data.p_gen_param module": [[6, "module-borea.process.p_add_data.p_gen_param"]], "borea.process.p_add_data.p_pt2d module": [[6, "module-borea.process.p_add_data.p_pt2d"]], "borea.process.p_add_data.p_pt3d module": [[6, "module-borea.process.p_add_data.p_pt3d"]], "borea.process.p_add_data.p_unit_shot module": [[6, "module-borea.process.p_add_data.p_unit_shot"]], "borea.process.p_add_data.p_write module": [[6, "module-borea.process.p_add_data.p_write"]], "borea.process.p_format package": [[7, null]], "borea.process.p_format.p_read_opk module": [[7, "module-borea.process.p_format.p_read_opk"]], "borea.process.p_format.p_write_con module": [[7, "module-borea.process.p_format.p_write_con"]], "borea.process.p_format.p_write_opk module": [[7, "module-borea.process.p_format.p_write_opk"]], "borea.process.p_format.p_write_rpc module": [[7, "module-borea.process.p_format.p_write_rpc"]], "borea.process.p_func package": [[8, null]], "borea.process.p_func.p_control module": [[8, "module-borea.process.p_func.p_control"]], "borea.process.p_func.p_image_world module": [[8, "module-borea.process.p_func.p_image_world"]], "borea.process.p_func.p_spaceresection module": [[8, "module-borea.process.p_func.p_spaceresection"]], "borea.process.p_func.p_world_image module": [[8, "module-borea.process.p_func.p_world_image"]], "borea.reader package": [[9, null]], "borea.reader.orientation package": [[10, null]], "borea.reader.orientation.manage_reader module": [[10, "module-borea.reader.orientation.manage_reader"]], "borea.reader.orientation.reader_opk module": [[10, "module-borea.reader.orientation.reader_opk"]], "borea.reader.reader_camera module": [[9, "module-borea.reader.reader_camera"]], "borea.reader.reader_point module": [[9, "module-borea.reader.reader_point"]], "borea.stat package": [[11, null]], "borea.stat.statistics module": [[11, "module-borea.stat.statistics"]], "borea.transform_world_image package": [[12, null]], "borea.transform_world_image.transform_dtm package": [[13, null]], "borea.transform_world_image.transform_dtm.world_image_dtm module": [[13, "module-borea.transform_world_image.transform_dtm.world_image_dtm"]], "borea.transform_world_image.transform_shot package": [[14, null]], "borea.transform_world_image.transform_shot.conversion_coor_shot module": [[14, "module-borea.transform_world_image.transform_shot.conversion_coor_shot"]], "borea.transform_world_image.transform_shot.image_world_shot module": [[14, "module-borea.transform_world_image.transform_shot.image_world_shot"]], "borea.transform_world_image.transform_shot.world_image_shot module": [[14, "module-borea.transform_world_image.transform_shot.world_image_shot"]], "borea.transform_world_image.transform_worksite package": [[15, null]], "borea.transform_world_image.transform_worksite.image_world_intersection module": [[15, "module-borea.transform_world_image.transform_worksite.image_world_intersection"]], "borea.transform_world_image.transform_worksite.image_world_least_square module": [[15, "module-borea.transform_world_image.transform_worksite.image_world_least_square"]], "borea.transform_world_image.transform_worksite.image_world_work module": [[15, "module-borea.transform_world_image.transform_worksite.image_world_work"]], "borea.transform_world_image.transform_worksite.space_resection module": [[15, "module-borea.transform_world_image.transform_worksite.space_resection"]], "borea.transform_world_image.transform_worksite.world_image_work module": [[15, "module-borea.transform_world_image.transform_worksite.world_image_work"]], "borea.utils package": [[16, null]], "borea.utils.check package": [[17, null]], "borea.utils.check.check_args_opk module": [[17, "module-borea.utils.check.check_args_opk"]], "borea.utils.check.check_args_reader_pt module": [[17, "module-borea.utils.check.check_args_reader_pt"]], "borea.utils.check.check_array module": [[17, "module-borea.utils.check.check_array"]], "borea.utils.check.check_header module": [[17, "module-borea.utils.check.check_header"]], "borea.utils.check.check_order_axe module": [[17, "module-borea.utils.check.check_order_axe"]], "borea.utils.miscellaneous package": [[18, null]], "borea.utils.miscellaneous.miscellaneous module": [[18, "module-borea.utils.miscellaneous.miscellaneous"]], "borea.utils.miscellaneous.param_bundle module": [[18, "module-borea.utils.miscellaneous.param_bundle"]], "borea.utils.miscellaneous.sparse module": [[18, "module-borea.utils.miscellaneous.sparse"]], "borea.utils.singleton package": [[19, null]], "borea.utils.singleton.singleton module": [[19, "module-borea.utils.singleton.singleton"]], "borea.utils.xml package": [[20, null]], "borea.utils.xml.xml module": [[20, "module-borea.utils.xml.xml"]], "borea.worksite package": [[21, null]], "borea.worksite.worksite module": [[21, "module-borea.worksite.worksite"]], "borea.writer package": [[22, null]], "borea.writer.manage_writer module": [[22, "module-borea.writer.manage_writer"]], "borea.writer.writer_con module": [[22, "module-borea.writer.writer_con"]], "borea.writer.writer_df_to_txt module": [[22, "module-borea.writer.writer_df_to_txt"]], "borea.writer.writer_opk module": [[22, "module-borea.writer.writer_opk"]], "borea.writer.writer_rpc module": [[22, "module-borea.writer.writer_rpc"]]}, "docnames": ["borea", "borea.datastruct", "borea.format", "borea.geodesy", "borea.geodesy.projectionlist", "borea.process", "borea.process.p_add_data", "borea.process.p_format", "borea.process.p_func", "borea.reader", "borea.reader.orientation", "borea.stat", "borea.transform_world_image", "borea.transform_world_image.transform_dtm", "borea.transform_world_image.transform_shot", "borea.transform_world_image.transform_worksite", "borea.utils", "borea.utils.check", "borea.utils.miscellaneous", "borea.utils.singleton", "borea.utils.xml", "borea.worksite", "borea.writer", "index", "modules"], "envversion": {"sphinx": 63, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["borea.rst", "borea.datastruct.rst", "borea.format.rst", "borea.geodesy.rst", "borea.geodesy.projectionlist.rst", "borea.process.rst", "borea.process.p_add_data.rst", "borea.process.p_format.rst", "borea.process.p_func.rst", "borea.reader.rst", "borea.reader.orientation.rst", "borea.stat.rst", "borea.transform_world_image.rst", "borea.transform_world_image.transform_dtm.rst", "borea.transform_world_image.transform_shot.rst", "borea.transform_world_image.transform_worksite.rst", "borea.utils.rst", "borea.utils.check.rst", "borea.utils.miscellaneous.rst", "borea.utils.singleton.rst", "borea.utils.xml.rst", "borea.worksite.rst", "borea.writer.rst", "index.rst", "modules.rst"], "indexentries": {"add_camera() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_camera", false]], "add_co_point() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_co_point", false]], "add_elem() (in module borea.utils.xml.xml)": [[20, "borea.utils.xml.xml.add_elem", false]], "add_gcp2d() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_gcp2d", false]], "add_gcp3d() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_gcp3d", false]], "add_shot() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.add_shot", false]], "angle_degree_2vect() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.angle_degree_2vect", false]], "approxeuclideanproj (class in borea.geodesy.approx_euclidean_proj)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj", false]], "args_add_pt2d() (in module borea.process.p_add_data.p_pt2d)": [[6, "borea.process.p_add_data.p_pt2d.args_add_pt2d", false]], "args_add_pt3d() (in module borea.process.p_add_data.p_pt3d)": [[6, "borea.process.p_add_data.p_pt3d.args_add_pt3d", false]], "args_add_shot() (in module borea.process.p_add_data.p_add_shot)": [[6, "borea.process.p_add_data.p_add_shot.args_add_shot", false]], "args_control() (in module borea.process.p_func.p_control)": [[8, "borea.process.p_func.p_control.args_control", false]], "args_gcp2d() (in module borea.process.p_add_data.p_file_gcp2d)": [[6, "borea.process.p_add_data.p_file_gcp2d.args_gcp2d", false]], "args_gcp3d() (in module borea.process.p_add_data.p_file_gcp3d)": [[6, "borea.process.p_add_data.p_file_gcp3d.args_gcp3d", false]], "args_general_param() (in module borea.process.p_add_data.p_gen_param)": [[6, "borea.process.p_add_data.p_gen_param.args_general_param", false]], "args_image_world() (in module borea.process.p_func.p_image_world)": [[8, "borea.process.p_func.p_image_world.args_image_world", false]], "args_input_shot() (in module borea.process.p_add_data.p_unit_shot)": [[6, "borea.process.p_add_data.p_unit_shot.args_input_shot", false]], "args_output_shot() (in module borea.process.p_add_data.p_unit_shot)": [[6, "borea.process.p_add_data.p_unit_shot.args_output_shot", false]], "args_reading_opk() (in module borea.process.p_format.p_read_opk)": [[7, "borea.process.p_format.p_read_opk.args_reading_opk", false]], "args_space_resection() (in module borea.process.p_func.p_spaceresection)": [[8, "borea.process.p_func.p_spaceresection.args_space_resection", false]], "args_world_image() (in module borea.process.p_func.p_world_image)": [[8, "borea.process.p_func.p_world_image.args_world_image", false]], "args_write_con() (in module borea.process.p_format.p_write_con)": [[7, "borea.process.p_format.p_write_con.args_write_con", false]], "args_writer() (in module borea.process.p_add_data.p_write)": [[6, "borea.process.p_add_data.p_write.args_writer", false]], "args_writing_opk() (in module borea.process.p_format.p_write_opk)": [[7, "borea.process.p_format.p_write_opk.args_writing_opk", false]], "args_writing_rpc() (in module borea.process.p_format.p_write_rpc)": [[7, "borea.process.p_format.p_write_rpc.args_writing_rpc", false]], "borea": [[0, "module-borea", false]], "borea.datastruct": [[1, "module-borea.datastruct", false]], "borea.datastruct.camera": [[1, "module-borea.datastruct.camera", false]], "borea.datastruct.dtm": [[1, "module-borea.datastruct.dtm", false]], "borea.datastruct.gcp": [[1, "module-borea.datastruct.gcp", false]], "borea.datastruct.shot": [[1, "module-borea.datastruct.shot", false]], "borea.datastruct.workdata": [[1, "module-borea.datastruct.workdata", false]], "borea.format": [[2, "module-borea.format", false]], "borea.format.conl": [[2, "module-borea.format.conl", false]], "borea.format.rpc": [[2, "module-borea.format.rpc", false]], "borea.geodesy": [[3, "module-borea.geodesy", false]], "borea.geodesy.approx_euclidean_proj": [[3, "module-borea.geodesy.approx_euclidean_proj", false]], "borea.geodesy.euclidean_proj": [[3, "module-borea.geodesy.euclidean_proj", false]], "borea.geodesy.local_euclidean_proj": [[3, "module-borea.geodesy.local_euclidean_proj", false]], "borea.geodesy.proj_engine": [[3, "module-borea.geodesy.proj_engine", false]], "borea.geodesy.projectionlist": [[4, "module-borea.geodesy.projectionlist", false]], "borea.geodesy.projectionlist.search_proj": [[4, "module-borea.geodesy.projectionlist.search_proj", false]], "borea.geodesy.transform_geodesy": [[3, "module-borea.geodesy.transform_geodesy", false]], "borea.process": [[5, "module-borea.process", false]], "borea.process.p_add_data": [[6, "module-borea.process.p_add_data", false]], "borea.process.p_add_data.p_add_shot": [[6, "module-borea.process.p_add_data.p_add_shot", false]], "borea.process.p_add_data.p_file_gcp2d": [[6, "module-borea.process.p_add_data.p_file_gcp2d", false]], "borea.process.p_add_data.p_file_gcp3d": [[6, "module-borea.process.p_add_data.p_file_gcp3d", false]], "borea.process.p_add_data.p_gen_param": [[6, "module-borea.process.p_add_data.p_gen_param", false]], "borea.process.p_add_data.p_pt2d": [[6, "module-borea.process.p_add_data.p_pt2d", false]], "borea.process.p_add_data.p_pt3d": [[6, "module-borea.process.p_add_data.p_pt3d", false]], "borea.process.p_add_data.p_unit_shot": [[6, "module-borea.process.p_add_data.p_unit_shot", false]], "borea.process.p_add_data.p_write": [[6, "module-borea.process.p_add_data.p_write", false]], "borea.process.p_format": [[7, "module-borea.process.p_format", false]], "borea.process.p_format.p_read_opk": [[7, "module-borea.process.p_format.p_read_opk", false]], "borea.process.p_format.p_write_con": [[7, "module-borea.process.p_format.p_write_con", false]], "borea.process.p_format.p_write_opk": [[7, "module-borea.process.p_format.p_write_opk", false]], "borea.process.p_format.p_write_rpc": [[7, "module-borea.process.p_format.p_write_rpc", false]], "borea.process.p_func": [[8, "module-borea.process.p_func", false]], "borea.process.p_func.p_control": [[8, "module-borea.process.p_func.p_control", false]], "borea.process.p_func.p_image_world": [[8, "module-borea.process.p_func.p_image_world", false]], "borea.process.p_func.p_spaceresection": [[8, "module-borea.process.p_func.p_spaceresection", false]], "borea.process.p_func.p_world_image": [[8, "module-borea.process.p_func.p_world_image", false]], "borea.reader": [[9, "module-borea.reader", false]], "borea.reader.orientation": [[10, "module-borea.reader.orientation", false]], "borea.reader.orientation.manage_reader": [[10, "module-borea.reader.orientation.manage_reader", false]], "borea.reader.orientation.reader_opk": [[10, "module-borea.reader.orientation.reader_opk", false]], "borea.reader.reader_camera": [[9, "module-borea.reader.reader_camera", false]], "borea.reader.reader_point": [[9, "module-borea.reader.reader_point", false]], "borea.stat": [[11, "module-borea.stat", false]], "borea.stat.statistics": [[11, "module-borea.stat.statistics", false]], "borea.transform_world_image": [[12, "module-borea.transform_world_image", false]], "borea.transform_world_image.transform_dtm": [[13, "module-borea.transform_world_image.transform_dtm", false]], "borea.transform_world_image.transform_dtm.world_image_dtm": [[13, "module-borea.transform_world_image.transform_dtm.world_image_dtm", false]], "borea.transform_world_image.transform_shot": [[14, "module-borea.transform_world_image.transform_shot", false]], "borea.transform_world_image.transform_shot.conversion_coor_shot": [[14, "module-borea.transform_world_image.transform_shot.conversion_coor_shot", false]], "borea.transform_world_image.transform_shot.image_world_shot": [[14, "module-borea.transform_world_image.transform_shot.image_world_shot", false]], "borea.transform_world_image.transform_shot.world_image_shot": [[14, "module-borea.transform_world_image.transform_shot.world_image_shot", false]], "borea.transform_world_image.transform_worksite": [[15, "module-borea.transform_world_image.transform_worksite", false]], "borea.transform_world_image.transform_worksite.image_world_intersection": [[15, "module-borea.transform_world_image.transform_worksite.image_world_intersection", false]], "borea.transform_world_image.transform_worksite.image_world_least_square": [[15, "module-borea.transform_world_image.transform_worksite.image_world_least_square", false]], "borea.transform_world_image.transform_worksite.image_world_work": [[15, "module-borea.transform_world_image.transform_worksite.image_world_work", false]], "borea.transform_world_image.transform_worksite.space_resection": [[15, "module-borea.transform_world_image.transform_worksite.space_resection", false]], "borea.transform_world_image.transform_worksite.world_image_work": [[15, "module-borea.transform_world_image.transform_worksite.world_image_work", false]], "borea.utils": [[16, "module-borea.utils", false]], "borea.utils.check": [[17, "module-borea.utils.check", false]], "borea.utils.check.check_args_opk": [[17, "module-borea.utils.check.check_args_opk", false]], "borea.utils.check.check_args_reader_pt": [[17, "module-borea.utils.check.check_args_reader_pt", false]], "borea.utils.check.check_array": [[17, "module-borea.utils.check.check_array", false]], "borea.utils.check.check_header": [[17, "module-borea.utils.check.check_header", false]], "borea.utils.check.check_order_axe": [[17, "module-borea.utils.check.check_order_axe", false]], "borea.utils.miscellaneous": [[18, "module-borea.utils.miscellaneous", false]], "borea.utils.miscellaneous.miscellaneous": [[18, "module-borea.utils.miscellaneous.miscellaneous", false]], "borea.utils.miscellaneous.param_bundle": [[18, "module-borea.utils.miscellaneous.param_bundle", false]], "borea.utils.miscellaneous.sparse": [[18, "module-borea.utils.miscellaneous.sparse", false]], "borea.utils.singleton": [[19, "module-borea.utils.singleton", false]], "borea.utils.singleton.singleton": [[19, "module-borea.utils.singleton.singleton", false]], "borea.utils.xml": [[20, "module-borea.utils.xml", false]], "borea.utils.xml.xml": [[20, "module-borea.utils.xml.xml", false]], "borea.worksite": [[21, "module-borea.worksite", false]], "borea.worksite.worksite": [[21, "module-borea.worksite.worksite", false]], "borea.writer": [[22, "module-borea.writer", false]], "borea.writer.manage_writer": [[22, "module-borea.writer.manage_writer", false]], "borea.writer.writer_con": [[22, "module-borea.writer.writer_con", false]], "borea.writer.writer_df_to_txt": [[22, "module-borea.writer.writer_df_to_txt", false]], "borea.writer.writer_opk": [[22, "module-borea.writer.writer_opk", false]], "borea.writer.writer_rpc": [[22, "module-borea.writer.writer_rpc", false]], "bundle_to_image() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.bundle_to_image", false]], "calculate_barycentre() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.calculate_barycentre", false]], "calculate_image_world_by_intersection() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.calculate_image_world_by_intersection", false]], "calculate_world_to_image() (borea.transform_world_image.transform_worksite.world_image_work.worldimagework method)": [[15, "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork.calculate_world_to_image", false]], "cam (borea.format.conl.conl attribute)": [[2, "borea.format.conl.Conl.cam", false]], "camera (class in borea.datastruct.camera)": [[1, "borea.datastruct.camera.Camera", false]], "camera_txt() (in module borea.reader.reader_camera)": [[9, "borea.reader.reader_camera.camera_txt", false]], "carto_to_geoc (borea.geodesy.transform_geodesy.transformgeodesy property)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.carto_to_geoc", false]], "carto_to_geog (borea.geodesy.transform_geodesy.transformgeodesy property)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.carto_to_geog", false]], "check_args_opk() (in module borea.utils.check.check_args_opk)": [[17, "borea.utils.check.check_args_opk.check_args_opk", false]], "check_array_transfo() (in module borea.utils.check.check_array)": [[17, "borea.utils.check.check_array.check_array_transfo", false]], "check_h_z() (in module borea.utils.check.check_header)": [[17, "borea.utils.check.check_header.check_h_z", false]], "check_head() (in module borea.utils.check.check_header)": [[17, "borea.utils.check.check_header.check_head", false]], "check_header_file() (in module borea.utils.check.check_args_opk)": [[17, "borea.utils.check.check_args_opk.check_header_file", false]], "check_header_file() (in module borea.utils.check.check_args_reader_pt)": [[17, "borea.utils.check.check_args_reader_pt.check_header_file", false]], "check_order_axe() (in module borea.utils.check.check_order_axe)": [[17, "borea.utils.check.check_order_axe.check_order_axe", false]], "clear() (borea.utils.singleton.singleton.singleton method)": [[19, "borea.utils.singleton.singleton.Singleton.clear", false]], "code (borea.datastruct.gcp.gcp attribute)": [[1, "borea.datastruct.gcp.GCP.code", false]], "comput_inter_in_2_more_distant_shot() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.comput_inter_in_2_more_distant_shot", false]], "compute_image_world_least_square() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.compute_image_world_least_square", false]], "conl (class in borea.format.conl)": [[2, "borea.format.conl.Conl", false]], "conv_output_z_type() (in module borea.transform_world_image.transform_shot.conversion_coor_shot)": [[14, "borea.transform_world_image.transform_shot.conversion_coor_shot.conv_output_z_type", false]], "conv_z_shot_to_z_data() (in module borea.transform_world_image.transform_shot.conversion_coor_shot)": [[14, "borea.transform_world_image.transform_shot.conversion_coor_shot.conv_z_shot_to_z_data", false]], "convert_line_list() (in module borea.geodesy.projectionlist.search_proj)": [[4, "borea.geodesy.projectionlist.search_proj.convert_line_list", false]], "convert_opk_to_xyz() (in module borea.utils.check.check_order_axe)": [[17, "borea.utils.check.check_order_axe.convert_opk_to_xyz", false]], "coor (borea.datastruct.gcp.gcp attribute)": [[1, "borea.datastruct.gcp.GCP.coor", false]], "create_grid_rpc() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.create_grid_rpc", false]], "create_mat_a_and_vect_residu() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.create_mat_a_and_vect_residu", false]], "dist_2pts() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.dist_2pts", false]], "dtm (class in borea.datastruct.dtm)": [[1, "borea.datastruct.dtm.Dtm", false]], "epsg (borea.geodesy.proj_engine.projengine attribute)": [[3, "borea.geodesy.proj_engine.ProjEngine.epsg", false]], "epsg_output (borea.geodesy.proj_engine.projengine attribute)": [[3, "borea.geodesy.proj_engine.ProjEngine.epsg_output", false]], "eucli_to_bundle() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.eucli_to_bundle", false]], "eucli_to_image() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.eucli_to_image", false]], "eucli_to_world() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.eucli_to_world", false]], "eucli_to_world() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.eucli_to_world", false]], "euclideanproj (class in borea.geodesy.euclidean_proj)": [[3, "borea.geodesy.euclidean_proj.EuclideanProj", false]], "focal (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.focal", false]], "format_xml() (in module borea.utils.xml.xml)": [[20, "borea.utils.xml.xml.format_xml", false]], "from_param_euclidean() (borea.datastruct.shot.shot class method)": [[1, "borea.datastruct.shot.Shot.from_param_euclidean", false]], "from_shot() (borea.format.rpc.rpc class method)": [[2, "borea.format.rpc.Rpc.from_shot", false]], "func_least_square() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.func_least_square", false]], "gcp (class in borea.datastruct.gcp)": [[1, "borea.datastruct.gcp.GCP", false]], "geoc_to_carto (borea.geodesy.transform_geodesy.transformgeodesy property)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geoc_to_carto", false]], "geog_to_carto (borea.geodesy.transform_geodesy.transformgeodesy property)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geog_to_carto", false]], "geog_to_geoid (borea.geodesy.transform_geodesy.transformgeodesy property)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geog_to_geoid", false]], "geoid (borea.geodesy.proj_engine.projengine attribute)": [[3, "borea.geodesy.proj_engine.ProjEngine.geoid", false]], "geoid_to_geog (borea.geodesy.transform_geodesy.transformgeodesy property)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.geoid_to_geog", false]], "get_attr_transfo_pt() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_attr_transfo_pt", false]], "get_coor_pt_img_and_world() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_coor_pt_img_and_world", false]], "get_meridian_convergence() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.get_meridian_convergence", false]], "get_point_image_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_point_image_dataframe", false]], "get_point_world_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.get_point_world_dataframe", false]], "get_scale_factor() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.get_scale_factor", false]], "get_type_z_and_header() (in module borea.utils.check.check_header)": [[17, "borea.utils.check.check_header.get_type_z_and_header", false]], "get_z_add_scale_factor() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.get_z_add_scale_factor", false]], "get_z_remove_scale_factor() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.get_z_remove_scale_factor", false]], "get_z_world() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.get_z_world", false]], "height (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.height", false]], "image_to_bundle() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_to_bundle", false]], "image_to_world() (borea.transform_world_image.transform_dtm.world_image_dtm.worldimagedtm method)": [[13, "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm.image_to_world", false]], "image_to_world() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_to_world", false]], "image_world_iter() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_world_iter", false]], "image_z_to_world() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.image_z_to_world", false]], "imageworldshot (class in borea.transform_world_image.transform_shot.image_world_shot)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot", false]], "imageworldwork (class in borea.transform_world_image.transform_worksite.image_world_work)": [[15, "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork", false]], "indent() (in module borea.utils.xml.xml)": [[20, "borea.utils.xml.xml.indent", false]], "init_eucli_points() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.init_eucli_points", false]], "init_kappa() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.init_kappa", false]], "intersection_line_3d() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.intersection_line_3d", false]], "intersection_pt_in_2shot() (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection method)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.intersection_pt_in_2shot", false]], "invert_diag_sparse_matrix_3_3() (in module borea.utils.miscellaneous.sparse)": [[18, "borea.utils.miscellaneous.sparse.invert_diag_sparse_matrix_3_3", false]], "least_square_intersect() (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare method)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.least_square_intersect", false]], "least_square_rpc() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.least_square_rpc", false]], "least_square_shot() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.least_square_shot", false]], "local_to_eucli() (borea.transform_world_image.transform_shot.image_world_shot.imageworldshot method)": [[14, "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot.local_to_eucli", false]], "localeuclideanproj (class in borea.geodesy.local_euclidean_proj)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj", false]], "main_stat_and_save() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.main_stat_and_save", false]], "main_stat_image_to_world() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.main_stat_image_to_world", false]], "main_stat_world_to_image() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.main_stat_world_to_image", false]], "manage_image_world() (borea.transform_world_image.transform_worksite.image_world_work.imageworldwork method)": [[15, "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork.manage_image_world", false]], "manager_writer() (in module borea.writer.manage_writer)": [[22, "borea.writer.manage_writer.manager_writer", false]], "mat_eucli_to_mat() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.mat_eucli_to_mat", false]], "mat_eucli_to_mat() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.mat_eucli_to_mat", false]], "mat_obs_axia() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.mat_obs_axia", false]], "mat_rot_euclidean_local() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.mat_rot_euclidean_local", false]], "mat_to_mat_eucli() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.mat_to_mat_eucli", false]], "mat_to_mat_eucli() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.mat_to_mat_eucli", false]], "min_max_pt() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.min_max_pt", false]], "module": [[0, "module-borea", false], [1, "module-borea.datastruct", false], [1, "module-borea.datastruct.camera", false], [1, "module-borea.datastruct.dtm", false], [1, "module-borea.datastruct.gcp", false], [1, "module-borea.datastruct.shot", false], [1, "module-borea.datastruct.workdata", false], [2, "module-borea.format", false], [2, "module-borea.format.conl", false], [2, "module-borea.format.rpc", false], [3, "module-borea.geodesy", false], [3, "module-borea.geodesy.approx_euclidean_proj", false], [3, "module-borea.geodesy.euclidean_proj", false], [3, "module-borea.geodesy.local_euclidean_proj", false], [3, "module-borea.geodesy.proj_engine", false], [3, "module-borea.geodesy.transform_geodesy", false], [4, "module-borea.geodesy.projectionlist", false], [4, "module-borea.geodesy.projectionlist.search_proj", false], [5, "module-borea.process", false], [6, "module-borea.process.p_add_data", false], [6, "module-borea.process.p_add_data.p_add_shot", false], [6, "module-borea.process.p_add_data.p_file_gcp2d", false], [6, "module-borea.process.p_add_data.p_file_gcp3d", false], [6, "module-borea.process.p_add_data.p_gen_param", false], [6, "module-borea.process.p_add_data.p_pt2d", false], [6, "module-borea.process.p_add_data.p_pt3d", false], [6, "module-borea.process.p_add_data.p_unit_shot", false], [6, "module-borea.process.p_add_data.p_write", false], [7, "module-borea.process.p_format", false], [7, "module-borea.process.p_format.p_read_opk", false], [7, "module-borea.process.p_format.p_write_con", false], [7, "module-borea.process.p_format.p_write_opk", false], [7, "module-borea.process.p_format.p_write_rpc", false], [8, "module-borea.process.p_func", false], [8, "module-borea.process.p_func.p_control", false], [8, "module-borea.process.p_func.p_image_world", false], [8, "module-borea.process.p_func.p_spaceresection", false], [8, "module-borea.process.p_func.p_world_image", false], [9, "module-borea.reader", false], [9, "module-borea.reader.reader_camera", false], [9, "module-borea.reader.reader_point", false], [10, "module-borea.reader.orientation", false], [10, "module-borea.reader.orientation.manage_reader", false], [10, "module-borea.reader.orientation.reader_opk", false], [11, "module-borea.stat", false], [11, "module-borea.stat.statistics", false], [12, "module-borea.transform_world_image", false], [13, "module-borea.transform_world_image.transform_dtm", false], [13, "module-borea.transform_world_image.transform_dtm.world_image_dtm", false], [14, "module-borea.transform_world_image.transform_shot", false], [14, "module-borea.transform_world_image.transform_shot.conversion_coor_shot", false], [14, "module-borea.transform_world_image.transform_shot.image_world_shot", false], [14, "module-borea.transform_world_image.transform_shot.world_image_shot", false], [15, "module-borea.transform_world_image.transform_worksite", false], [15, "module-borea.transform_world_image.transform_worksite.image_world_intersection", false], [15, "module-borea.transform_world_image.transform_worksite.image_world_least_square", false], [15, "module-borea.transform_world_image.transform_worksite.image_world_work", false], [15, "module-borea.transform_world_image.transform_worksite.space_resection", false], [15, "module-borea.transform_world_image.transform_worksite.world_image_work", false], [16, "module-borea.utils", false], [17, "module-borea.utils.check", false], [17, "module-borea.utils.check.check_args_opk", false], [17, "module-borea.utils.check.check_args_reader_pt", false], [17, "module-borea.utils.check.check_array", false], [17, "module-borea.utils.check.check_header", false], [17, "module-borea.utils.check.check_order_axe", false], [18, "module-borea.utils.miscellaneous", false], [18, "module-borea.utils.miscellaneous.miscellaneous", false], [18, "module-borea.utils.miscellaneous.param_bundle", false], [18, "module-borea.utils.miscellaneous.sparse", false], [19, "module-borea.utils.singleton", false], [19, "module-borea.utils.singleton.singleton", false], [20, "module-borea.utils.xml", false], [20, "module-borea.utils.xml.xml", false], [21, "module-borea.worksite", false], [21, "module-borea.worksite.worksite", false], [22, "module-borea.writer", false], [22, "module-borea.writer.manage_writer", false], [22, "module-borea.writer.writer_con", false], [22, "module-borea.writer.writer_df_to_txt", false], [22, "module-borea.writer.writer_opk", false], [22, "module-borea.writer.writer_rpc", false]], "name_camera (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.name_camera", false]], "name_gcp (borea.datastruct.gcp.gcp attribute)": [[1, "borea.datastruct.gcp.GCP.name_gcp", false]], "normalize() (in module borea.utils.miscellaneous.miscellaneous)": [[18, "borea.utils.miscellaneous.miscellaneous.normalize", false]], "normalize_data() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.normalize_data", false]], "ppax (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.ppax", false]], "ppay (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.ppay", false]], "process_add_shot() (in module borea.process.p_add_data.p_add_shot)": [[6, "borea.process.p_add_data.p_add_shot.process_add_shot", false]], "process_args_control() (in module borea.process.p_func.p_control)": [[8, "borea.process.p_func.p_control.process_args_control", false]], "process_args_gen_param() (in module borea.process.p_add_data.p_gen_param)": [[6, "borea.process.p_add_data.p_gen_param.process_args_gen_param", false]], "process_args_read_opk() (in module borea.process.p_format.p_read_opk)": [[7, "borea.process.p_format.p_read_opk.process_args_read_opk", false]], "process_args_write_con() (in module borea.process.p_format.p_write_con)": [[7, "borea.process.p_format.p_write_con.process_args_write_con", false]], "process_args_write_opk() (in module borea.process.p_format.p_write_opk)": [[7, "borea.process.p_format.p_write_opk.process_args_write_opk", false]], "process_args_write_rpc() (in module borea.process.p_format.p_write_rpc)": [[7, "borea.process.p_format.p_write_rpc.process_args_write_rpc", false]], "process_gcp2d() (in module borea.process.p_add_data.p_file_gcp2d)": [[6, "borea.process.p_add_data.p_file_gcp2d.process_gcp2d", false]], "process_gcp3d() (in module borea.process.p_add_data.p_file_gcp3d)": [[6, "borea.process.p_add_data.p_file_gcp3d.process_gcp3d", false]], "process_image_world() (in module borea.process.p_add_data.p_pt2d)": [[6, "borea.process.p_add_data.p_pt2d.process_image_world", false]], "process_image_world() (in module borea.process.p_func.p_image_world)": [[8, "borea.process.p_func.p_image_world.process_image_world", false]], "process_space_resection() (in module borea.process.p_func.p_spaceresection)": [[8, "borea.process.p_func.p_spaceresection.process_space_resection", false]], "process_world_image() (in module borea.process.p_add_data.p_pt3d)": [[6, "borea.process.p_add_data.p_pt3d.process_world_image", false]], "process_world_image() (in module borea.process.p_func.p_world_image)": [[8, "borea.process.p_func.p_world_image.process_world_image", false]], "proj (borea.format.conl.conl attribute)": [[2, "borea.format.conl.Conl.proj", false]], "projengine (class in borea.geodesy.proj_engine)": [[3, "borea.geodesy.proj_engine.ProjEngine", false]], "read() (in module borea.reader.orientation.reader_opk)": [[10, "borea.reader.orientation.reader_opk.read", false]], "read_camera() (in module borea.reader.reader_camera)": [[9, "borea.reader.reader_camera.read_camera", false]], "read_file_pt() (in module borea.reader.reader_point)": [[9, "borea.reader.reader_point.read_file_pt", false]], "read_file_pt_dataframe() (in module borea.reader.reader_point)": [[9, "borea.reader.reader_point.read_file_pt_dataframe", false]], "reader_orientation() (in module borea.reader.orientation.manage_reader)": [[10, "borea.reader.orientation.manage_reader.reader_orientation", false]], "rpc (class in borea.format.rpc)": [[2, "borea.format.rpc.Rpc", false]], "save_conl() (borea.format.conl.conl method)": [[2, "borea.format.conl.Conl.save_conl", false]], "save_stat_txt() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.save_stat_txt", false]], "search_info() (in module borea.geodesy.projectionlist.search_proj)": [[4, "borea.geodesy.projectionlist.search_proj.search_info", false]], "seed_20_point() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.seed_20_point", false]], "set_approx_eucli_proj() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_approx_eucli_proj", false]], "set_camera_xml() (borea.format.conl.conl method)": [[2, "borea.format.conl.Conl.set_camera_xml", false]], "set_cval() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_cval", false]], "set_dtm() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_dtm", false]], "set_dtm() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_dtm", false]], "set_epsg() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.set_epsg", false]], "set_epsg_tf_geog_output() (borea.geodesy.proj_engine.projengine method)": [[3, "borea.geodesy.proj_engine.ProjEngine.set_epsg_tf_geog_output", false]], "set_geometry_xml() (borea.format.conl.conl method)": [[2, "borea.format.conl.Conl.set_geometry_xml", false]], "set_keep_memory() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_keep_memory", false]], "set_linear_alteration() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_linear_alteration", false]], "set_order() (borea.datastruct.dtm.dtm method)": [[1, "borea.datastruct.dtm.Dtm.set_order", false]], "set_order_axe() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_order_axe", false]], "set_param_bundle_diff() (in module borea.utils.miscellaneous.param_bundle)": [[18, "borea.utils.miscellaneous.param_bundle.set_param_bundle_diff", false]], "set_param_eucli_shot() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_param_eucli_shot", false]], "set_param_shot() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_param_shot", false]], "set_point_image_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_point_image_dataframe", false]], "set_point_world_dataframe() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_point_world_dataframe", false]], "set_proj() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_proj", false]], "set_rot_shot() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_rot_shot", false]], "set_type_z() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_type_z", false]], "set_type_z_data() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_type_z_data", false]], "set_type_z_shot() (borea.datastruct.workdata.workdata method)": [[1, "borea.datastruct.workdata.Workdata.set_type_z_shot", false]], "set_unit_angle() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_unit_angle", false]], "set_unit_shot() (borea.worksite.worksite.worksite method)": [[21, "borea.worksite.worksite.Worksite.set_unit_shot", false]], "set_z_nadir() (borea.datastruct.shot.shot method)": [[1, "borea.datastruct.shot.Shot.set_z_nadir", false]], "setup_matrix_obs_rpc() (borea.format.rpc.rpc method)": [[2, "borea.format.rpc.Rpc.setup_matrix_obs_rpc", false]], "shot (borea.format.conl.conl attribute)": [[2, "borea.format.conl.Conl.shot", false]], "shot (class in borea.datastruct.shot)": [[1, "borea.datastruct.shot.Shot", false]], "singleton (class in borea.utils.singleton.singleton)": [[19, "borea.utils.singleton.singleton.Singleton", false]], "space_resection_gap() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_gap", false]], "space_resection_on_worksite() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_on_worksite", false]], "space_resection_shot() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_shot", false]], "space_resection_to_worksite() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.space_resection_to_worksite", false]], "spaceresection (class in borea.transform_world_image.transform_worksite.space_resection)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection", false]], "stat (class in borea.stat.statistics)": [[11, "borea.stat.statistics.Stat", false]], "stat_image_to_world() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.stat_image_to_world", false]], "stat_list() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.stat_list", false]], "stat_world_to_image() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.stat_world_to_image", false]], "take_obs() (borea.transform_world_image.transform_worksite.space_resection.spaceresection method)": [[15, "borea.transform_world_image.transform_worksite.space_resection.SpaceResection.take_obs", false]], "tf_output() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tf_output", false]], "tranform_altitude() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tranform_altitude", false]], "tranform_height() (borea.geodesy.transform_geodesy.transformgeodesy method)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy.tranform_height", false]], "transformgeodesy (class in borea.geodesy.transform_geodesy)": [[3, "borea.geodesy.transform_geodesy.TransformGeodesy", false]], "width (borea.datastruct.camera.camera attribute)": [[1, "borea.datastruct.camera.Camera.width", false]], "work (borea.transform_world_image.transform_worksite.image_world_intersection.worldintersection attribute)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection.work", false]], "work (borea.transform_world_image.transform_worksite.image_world_least_square.worldleastsquare attribute)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare.work", false]], "work (borea.transform_world_image.transform_worksite.image_world_work.imageworldwork attribute)": [[15, "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork.work", false]], "work (borea.transform_world_image.transform_worksite.world_image_work.worldimagework attribute)": [[15, "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork.work", false]], "workdata (class in borea.datastruct.workdata)": [[1, "borea.datastruct.workdata.Workdata", false]], "worksite (class in borea.worksite.worksite)": [[21, "borea.worksite.worksite.Worksite", false]], "world_to_eucli() (borea.geodesy.approx_euclidean_proj.approxeuclideanproj method)": [[3, "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj.world_to_eucli", false]], "world_to_eucli() (borea.geodesy.local_euclidean_proj.localeuclideanproj method)": [[3, "borea.geodesy.local_euclidean_proj.LocalEuclideanProj.world_to_eucli", false]], "world_to_image() (borea.transform_world_image.transform_dtm.world_image_dtm.worldimagedtm method)": [[13, "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm.world_to_image", false]], "world_to_image() (borea.transform_world_image.transform_shot.world_image_shot.worldimageshot method)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot.world_to_image", false]], "worldimagedtm (class in borea.transform_world_image.transform_dtm.world_image_dtm)": [[13, "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm", false]], "worldimageshot (class in borea.transform_world_image.transform_shot.world_image_shot)": [[14, "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot", false]], "worldimagework (class in borea.transform_world_image.transform_worksite.world_image_work)": [[15, "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork", false]], "worldintersection (class in borea.transform_world_image.transform_worksite.image_world_intersection)": [[15, "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection", false]], "worldleastsquare (class in borea.transform_world_image.transform_worksite.image_world_least_square)": [[15, "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare", false]], "write() (in module borea.writer.writer_con)": [[22, "borea.writer.writer_con.write", false]], "write() (in module borea.writer.writer_opk)": [[22, "borea.writer.writer_opk.write", false]], "write() (in module borea.writer.writer_rpc)": [[22, "borea.writer.writer_rpc.write", false]], "write_df_to_txt() (in module borea.writer.writer_df_to_txt)": [[22, "borea.writer.writer_df_to_txt.write_df_to_txt", false]], "write_stat() (borea.stat.statistics.stat method)": [[11, "borea.stat.statistics.Stat.write_stat", false]], "x_central (borea.geodesy.euclidean_proj.euclideanproj attribute)": [[3, "borea.geodesy.euclidean_proj.EuclideanProj.x_central", false]], "y_central (borea.geodesy.euclidean_proj.euclideanproj attribute)": [[3, "borea.geodesy.euclidean_proj.EuclideanProj.y_central", false]]}, "objects": {"": [[0, 0, 0, "-", "borea"]], "borea": [[1, 0, 0, "-", "datastruct"], [2, 0, 0, "-", "format"], [3, 0, 0, "-", "geodesy"], [5, 0, 0, "-", "process"], [9, 0, 0, "-", "reader"], [11, 0, 0, "-", "stat"], [12, 0, 0, "-", "transform_world_image"], [16, 0, 0, "-", "utils"], [21, 0, 0, "-", "worksite"], [22, 0, 0, "-", "writer"]], "borea.datastruct": [[1, 0, 0, "-", "camera"], [1, 0, 0, "-", "dtm"], [1, 0, 0, "-", "gcp"], [1, 0, 0, "-", "shot"], [1, 0, 0, "-", "workdata"]], "borea.datastruct.camera": [[1, 1, 1, "", "Camera"]], "borea.datastruct.camera.Camera": [[1, 2, 1, "", "focal"], [1, 2, 1, "", "height"], [1, 2, 1, "", "name_camera"], [1, 2, 1, "", "ppax"], [1, 2, 1, "", "ppay"], [1, 2, 1, "", "width"]], "borea.datastruct.dtm": [[1, 1, 1, "", "Dtm"]], "borea.datastruct.dtm.Dtm": [[1, 3, 1, "", "get_z_world"], [1, 3, 1, "", "set_cval"], [1, 3, 1, "", "set_dtm"], [1, 3, 1, "", "set_keep_memory"], [1, 3, 1, "", "set_order"]], "borea.datastruct.gcp": [[1, 1, 1, "", "GCP"]], "borea.datastruct.gcp.GCP": [[1, 2, 1, "", "code"], [1, 2, 1, "", "coor"], [1, 2, 1, "", "name_gcp"]], "borea.datastruct.shot": [[1, 1, 1, "", "Shot"]], "borea.datastruct.shot.Shot": [[1, 3, 1, "", "from_param_euclidean"], [1, 3, 1, "", "get_z_add_scale_factor"], [1, 3, 1, "", "get_z_remove_scale_factor"], [1, 3, 1, "", "set_linear_alteration"], [1, 3, 1, "", "set_order_axe"], [1, 3, 1, "", "set_param_eucli_shot"], [1, 3, 1, "", "set_rot_shot"], [1, 3, 1, "", "set_type_z"], [1, 3, 1, "", "set_unit_angle"], [1, 3, 1, "", "set_z_nadir"]], "borea.datastruct.workdata": [[1, 1, 1, "", "Workdata"]], "borea.datastruct.workdata.Workdata": [[1, 3, 1, "", "add_camera"], [1, 3, 1, "", "add_co_point"], [1, 3, 1, "", "add_gcp2d"], [1, 3, 1, "", "add_gcp3d"], [1, 3, 1, "", "add_shot"], [1, 3, 1, "", "set_approx_eucli_proj"], [1, 3, 1, "", "set_dtm"], [1, 3, 1, "", "set_proj"], [1, 3, 1, "", "set_type_z_data"], [1, 3, 1, "", "set_type_z_shot"]], "borea.format": [[2, 0, 0, "-", "conl"], [2, 0, 0, "-", "rpc"]], "borea.format.conl": [[2, 1, 1, "", "Conl"]], "borea.format.conl.Conl": [[2, 2, 1, "", "cam"], [2, 2, 1, "", "proj"], [2, 3, 1, "", "save_conl"], [2, 3, 1, "", "set_camera_xml"], [2, 3, 1, "", "set_geometry_xml"], [2, 2, 1, "", "shot"]], "borea.format.rpc": [[2, 1, 1, "", "Rpc"]], "borea.format.rpc.Rpc": [[2, 3, 1, "", "create_grid_rpc"], [2, 3, 1, "", "from_shot"], [2, 3, 1, "", "least_square_rpc"], [2, 3, 1, "", "normalize_data"], [2, 3, 1, "", "setup_matrix_obs_rpc"]], "borea.geodesy": [[3, 0, 0, "-", "approx_euclidean_proj"], [3, 0, 0, "-", "euclidean_proj"], [3, 0, 0, "-", "local_euclidean_proj"], [3, 0, 0, "-", "proj_engine"], [4, 0, 0, "-", "projectionlist"], [3, 0, 0, "-", "transform_geodesy"]], "borea.geodesy.approx_euclidean_proj": [[3, 1, 1, "", "ApproxEuclideanProj"]], "borea.geodesy.approx_euclidean_proj.ApproxEuclideanProj": [[3, 3, 1, "", "eucli_to_world"], [3, 3, 1, "", "mat_eucli_to_mat"], [3, 3, 1, "", "mat_to_mat_eucli"], [3, 3, 1, "", "world_to_eucli"]], "borea.geodesy.euclidean_proj": [[3, 1, 1, "", "EuclideanProj"]], "borea.geodesy.euclidean_proj.EuclideanProj": [[3, 2, 1, "", "x_central"], [3, 2, 1, "", "y_central"]], "borea.geodesy.local_euclidean_proj": [[3, 1, 1, "", "LocalEuclideanProj"]], "borea.geodesy.local_euclidean_proj.LocalEuclideanProj": [[3, 3, 1, "", "eucli_to_world"], [3, 3, 1, "", "mat_eucli_to_mat"], [3, 3, 1, "", "mat_rot_euclidean_local"], [3, 3, 1, "", "mat_to_mat_eucli"], [3, 3, 1, "", "world_to_eucli"]], "borea.geodesy.proj_engine": [[3, 1, 1, "", "ProjEngine"]], "borea.geodesy.proj_engine.ProjEngine": [[3, 2, 1, "", "epsg"], [3, 2, 1, "", "epsg_output"], [3, 2, 1, "", "geoid"], [3, 3, 1, "", "get_meridian_convergence"], [3, 3, 1, "", "get_scale_factor"], [3, 3, 1, "", "set_epsg"], [3, 3, 1, "", "set_epsg_tf_geog_output"]], "borea.geodesy.projectionlist": [[4, 0, 0, "-", "search_proj"]], "borea.geodesy.projectionlist.search_proj": [[4, 4, 1, "", "convert_line_list"], [4, 4, 1, "", "search_info"]], "borea.geodesy.transform_geodesy": [[3, 1, 1, "", "TransformGeodesy"]], "borea.geodesy.transform_geodesy.TransformGeodesy": [[3, 5, 1, "", "carto_to_geoc"], [3, 5, 1, "", "carto_to_geog"], [3, 5, 1, "", "geoc_to_carto"], [3, 5, 1, "", "geog_to_carto"], [3, 5, 1, "", "geog_to_geoid"], [3, 5, 1, "", "geoid_to_geog"], [3, 3, 1, "", "tf_output"], [3, 3, 1, "", "tranform_altitude"], [3, 3, 1, "", "tranform_height"]], "borea.process": [[6, 0, 0, "-", "p_add_data"], [7, 0, 0, "-", "p_format"], [8, 0, 0, "-", "p_func"]], "borea.process.p_add_data": [[6, 0, 0, "-", "p_add_shot"], [6, 0, 0, "-", "p_file_gcp2d"], [6, 0, 0, "-", "p_file_gcp3d"], [6, 0, 0, "-", "p_gen_param"], [6, 0, 0, "-", "p_pt2d"], [6, 0, 0, "-", "p_pt3d"], [6, 0, 0, "-", "p_unit_shot"], [6, 0, 0, "-", "p_write"]], "borea.process.p_add_data.p_add_shot": [[6, 4, 1, "", "args_add_shot"], [6, 4, 1, "", "process_add_shot"]], "borea.process.p_add_data.p_file_gcp2d": [[6, 4, 1, "", "args_gcp2d"], [6, 4, 1, "", "process_gcp2d"]], "borea.process.p_add_data.p_file_gcp3d": [[6, 4, 1, "", "args_gcp3d"], [6, 4, 1, "", "process_gcp3d"]], "borea.process.p_add_data.p_gen_param": [[6, 4, 1, "", "args_general_param"], [6, 4, 1, "", "process_args_gen_param"]], "borea.process.p_add_data.p_pt2d": [[6, 4, 1, "", "args_add_pt2d"], [6, 4, 1, "", "process_image_world"]], "borea.process.p_add_data.p_pt3d": [[6, 4, 1, "", "args_add_pt3d"], [6, 4, 1, "", "process_world_image"]], "borea.process.p_add_data.p_unit_shot": [[6, 4, 1, "", "args_input_shot"], [6, 4, 1, "", "args_output_shot"]], "borea.process.p_add_data.p_write": [[6, 4, 1, "", "args_writer"]], "borea.process.p_format": [[7, 0, 0, "-", "p_read_opk"], [7, 0, 0, "-", "p_write_con"], [7, 0, 0, "-", "p_write_opk"], [7, 0, 0, "-", "p_write_rpc"]], "borea.process.p_format.p_read_opk": [[7, 4, 1, "", "args_reading_opk"], [7, 4, 1, "", "process_args_read_opk"]], "borea.process.p_format.p_write_con": [[7, 4, 1, "", "args_write_con"], [7, 4, 1, "", "process_args_write_con"]], "borea.process.p_format.p_write_opk": [[7, 4, 1, "", "args_writing_opk"], [7, 4, 1, "", "process_args_write_opk"]], "borea.process.p_format.p_write_rpc": [[7, 4, 1, "", "args_writing_rpc"], [7, 4, 1, "", "process_args_write_rpc"]], "borea.process.p_func": [[8, 0, 0, "-", "p_control"], [8, 0, 0, "-", "p_image_world"], [8, 0, 0, "-", "p_spaceresection"], [8, 0, 0, "-", "p_world_image"]], "borea.process.p_func.p_control": [[8, 4, 1, "", "args_control"], [8, 4, 1, "", "process_args_control"]], "borea.process.p_func.p_image_world": [[8, 4, 1, "", "args_image_world"], [8, 4, 1, "", "process_image_world"]], "borea.process.p_func.p_spaceresection": [[8, 4, 1, "", "args_space_resection"], [8, 4, 1, "", "process_space_resection"]], "borea.process.p_func.p_world_image": [[8, 4, 1, "", "args_world_image"], [8, 4, 1, "", "process_world_image"]], "borea.reader": [[10, 0, 0, "-", "orientation"], [9, 0, 0, "-", "reader_camera"], [9, 0, 0, "-", "reader_point"]], "borea.reader.orientation": [[10, 0, 0, "-", "manage_reader"], [10, 0, 0, "-", "reader_opk"]], "borea.reader.orientation.manage_reader": [[10, 4, 1, "", "reader_orientation"]], "borea.reader.orientation.reader_opk": [[10, 4, 1, "", "read"]], "borea.reader.reader_camera": [[9, 4, 1, "", "camera_txt"], [9, 4, 1, "", "read_camera"]], "borea.reader.reader_point": [[9, 4, 1, "", "read_file_pt"], [9, 4, 1, "", "read_file_pt_dataframe"]], "borea.stat": [[11, 0, 0, "-", "statistics"]], "borea.stat.statistics": [[11, 1, 1, "", "Stat"]], "borea.stat.statistics.Stat": [[11, 3, 1, "", "main_stat_and_save"], [11, 3, 1, "", "main_stat_image_to_world"], [11, 3, 1, "", "main_stat_world_to_image"], [11, 3, 1, "", "save_stat_txt"], [11, 3, 1, "", "stat_image_to_world"], [11, 3, 1, "", "stat_list"], [11, 3, 1, "", "stat_world_to_image"], [11, 3, 1, "", "write_stat"]], "borea.transform_world_image": [[13, 0, 0, "-", "transform_dtm"], [14, 0, 0, "-", "transform_shot"], [15, 0, 0, "-", "transform_worksite"]], "borea.transform_world_image.transform_dtm": [[13, 0, 0, "-", "world_image_dtm"]], "borea.transform_world_image.transform_dtm.world_image_dtm": [[13, 1, 1, "", "WorldImageDtm"]], "borea.transform_world_image.transform_dtm.world_image_dtm.WorldImageDtm": [[13, 3, 1, "", "image_to_world"], [13, 3, 1, "", "world_to_image"]], "borea.transform_world_image.transform_shot": [[14, 0, 0, "-", "conversion_coor_shot"], [14, 0, 0, "-", "image_world_shot"], [14, 0, 0, "-", "world_image_shot"]], "borea.transform_world_image.transform_shot.conversion_coor_shot": [[14, 4, 1, "", "conv_output_z_type"], [14, 4, 1, "", "conv_z_shot_to_z_data"]], "borea.transform_world_image.transform_shot.image_world_shot": [[14, 1, 1, "", "ImageWorldShot"]], "borea.transform_world_image.transform_shot.image_world_shot.ImageWorldShot": [[14, 3, 1, "", "image_to_bundle"], [14, 3, 1, "", "image_to_world"], [14, 3, 1, "", "image_world_iter"], [14, 3, 1, "", "image_z_to_world"], [14, 3, 1, "", "local_to_eucli"]], "borea.transform_world_image.transform_shot.world_image_shot": [[14, 1, 1, "", "WorldImageShot"]], "borea.transform_world_image.transform_shot.world_image_shot.WorldImageShot": [[14, 3, 1, "", "bundle_to_image"], [14, 3, 1, "", "eucli_to_bundle"], [14, 3, 1, "", "eucli_to_image"], [14, 3, 1, "", "world_to_image"]], "borea.transform_world_image.transform_worksite": [[15, 0, 0, "-", "image_world_intersection"], [15, 0, 0, "-", "image_world_least_square"], [15, 0, 0, "-", "image_world_work"], [15, 0, 0, "-", "space_resection"], [15, 0, 0, "-", "world_image_work"]], "borea.transform_world_image.transform_worksite.image_world_intersection": [[15, 1, 1, "", "WorldIntersection"]], "borea.transform_world_image.transform_worksite.image_world_intersection.WorldIntersection": [[15, 3, 1, "", "calculate_image_world_by_intersection"], [15, 3, 1, "", "comput_inter_in_2_more_distant_shot"], [15, 3, 1, "", "intersection_line_3d"], [15, 3, 1, "", "intersection_pt_in_2shot"], [15, 2, 1, "", "work"]], "borea.transform_world_image.transform_worksite.image_world_least_square": [[15, 1, 1, "", "WorldLeastSquare"]], "borea.transform_world_image.transform_worksite.image_world_least_square.WorldLeastSquare": [[15, 3, 1, "", "compute_image_world_least_square"], [15, 3, 1, "", "create_mat_a_and_vect_residu"], [15, 3, 1, "", "init_eucli_points"], [15, 3, 1, "", "least_square_intersect"], [15, 2, 1, "", "work"]], "borea.transform_world_image.transform_worksite.image_world_work": [[15, 1, 1, "", "ImageWorldWork"]], "borea.transform_world_image.transform_worksite.image_world_work.ImageWorldWork": [[15, 3, 1, "", "manage_image_world"], [15, 2, 1, "", "work"]], "borea.transform_world_image.transform_worksite.space_resection": [[15, 1, 1, "", "SpaceResection"]], "borea.transform_world_image.transform_worksite.space_resection.SpaceResection": [[15, 3, 1, "", "func_least_square"], [15, 3, 1, "", "init_kappa"], [15, 3, 1, "", "least_square_shot"], [15, 3, 1, "", "mat_obs_axia"], [15, 3, 1, "", "seed_20_point"], [15, 3, 1, "", "space_resection_gap"], [15, 3, 1, "", "space_resection_on_worksite"], [15, 3, 1, "", "space_resection_shot"], [15, 3, 1, "", "space_resection_to_worksite"], [15, 3, 1, "", "take_obs"]], "borea.transform_world_image.transform_worksite.world_image_work": [[15, 1, 1, "", "WorldImageWork"]], "borea.transform_world_image.transform_worksite.world_image_work.WorldImageWork": [[15, 3, 1, "", "calculate_world_to_image"], [15, 2, 1, "", "work"]], "borea.utils": [[17, 0, 0, "-", "check"], [18, 0, 0, "-", "miscellaneous"], [19, 0, 0, "-", "singleton"], [20, 0, 0, "-", "xml"]], "borea.utils.check": [[17, 0, 0, "-", "check_args_opk"], [17, 0, 0, "-", "check_args_reader_pt"], [17, 0, 0, "-", "check_array"], [17, 0, 0, "-", "check_header"], [17, 0, 0, "-", "check_order_axe"]], "borea.utils.check.check_args_opk": [[17, 4, 1, "", "check_args_opk"], [17, 4, 1, "", "check_header_file"]], "borea.utils.check.check_args_reader_pt": [[17, 4, 1, "", "check_header_file"]], "borea.utils.check.check_array": [[17, 4, 1, "", "check_array_transfo"]], "borea.utils.check.check_header": [[17, 4, 1, "", "check_h_z"], [17, 4, 1, "", "check_head"], [17, 4, 1, "", "get_type_z_and_header"]], "borea.utils.check.check_order_axe": [[17, 4, 1, "", "check_order_axe"], [17, 4, 1, "", "convert_opk_to_xyz"]], "borea.utils.miscellaneous": [[18, 0, 0, "-", "miscellaneous"], [18, 0, 0, "-", "param_bundle"], [18, 0, 0, "-", "sparse"]], "borea.utils.miscellaneous.miscellaneous": [[18, 4, 1, "", "angle_degree_2vect"], [18, 4, 1, "", "dist_2pts"], [18, 4, 1, "", "min_max_pt"], [18, 4, 1, "", "normalize"]], "borea.utils.miscellaneous.param_bundle": [[18, 4, 1, "", "set_param_bundle_diff"]], "borea.utils.miscellaneous.sparse": [[18, 4, 1, "", "invert_diag_sparse_matrix_3_3"]], "borea.utils.singleton": [[19, 0, 0, "-", "singleton"]], "borea.utils.singleton.singleton": [[19, 1, 1, "", "Singleton"]], "borea.utils.singleton.singleton.Singleton": [[19, 3, 1, "", "clear"]], "borea.utils.xml": [[20, 0, 0, "-", "xml"]], "borea.utils.xml.xml": [[20, 4, 1, "", "add_elem"], [20, 4, 1, "", "format_xml"], [20, 4, 1, "", "indent"]], "borea.worksite": [[21, 0, 0, "-", "worksite"]], "borea.worksite.worksite": [[21, 1, 1, "", "Worksite"]], "borea.worksite.worksite.Worksite": [[21, 3, 1, "", "calculate_barycentre"], [21, 3, 1, "", "get_attr_transfo_pt"], [21, 3, 1, "", "get_coor_pt_img_and_world"], [21, 3, 1, "", "get_point_image_dataframe"], [21, 3, 1, "", "get_point_world_dataframe"], [21, 3, 1, "", "set_param_shot"], [21, 3, 1, "", "set_point_image_dataframe"], [21, 3, 1, "", "set_point_world_dataframe"], [21, 3, 1, "", "set_unit_shot"]], "borea.writer": [[22, 0, 0, "-", "manage_writer"], [22, 0, 0, "-", "writer_con"], [22, 0, 0, "-", "writer_df_to_txt"], [22, 0, 0, "-", "writer_opk"], [22, 0, 0, "-", "writer_rpc"]], "borea.writer.manage_writer": [[22, 4, 1, "", "manager_writer"]], "borea.writer.writer_con": [[22, 4, 1, "", "write"]], "borea.writer.writer_df_to_txt": [[22, 4, 1, "", "write_df_to_txt"]], "borea.writer.writer_opk": [[22, 4, 1, "", "write"]], "borea.writer.writer_rpc": [[22, 4, 1, "", "write"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function", "5": "py:property"}, "terms": {"": [11, 15, 18, 19], "0": [1, 14, 15, 18, 20], "1": [1, 2, 10, 15, 17], "10": [2, 6, 7, 8, 20], "100": 2, "11": 1, "12": 1, "13": 1, "2": [1, 2, 15, 18], "20": 15, "2154": [1, 3], "2d": [1, 6, 13, 18], "3": [1, 2, 15], "3d": [6, 15], "5": 1, "5f": 20, "6": [8, 15], "A": [1, 2, 3, 10, 15, 17, 18], "And": 1, "For": 15, "If": [1, 2, 15], "It": 19, "NOT": [1, 14], "One": [1, 4], "The": [1, 2, 3, 10, 14, 15, 18, 20, 21, 22], "To": [14, 15], "absolut": 11, "account": [10, 17], "acquisit": [1, 2, 15], "ad": [1, 6, 15], "add": [1, 2, 6, 7, 8, 10, 15, 20], "add_camera": [0, 1], "add_co_point": [0, 1], "add_elem": [16, 20], "add_gcp2d": [0, 1], "add_gcp3d": [0, 1], "add_pixel": 15, "add_shot": [0, 1], "adjust": 15, "after": 1, "agr": [1, 9], "aim": 19, "all": [1, 4, 11, 15, 17, 21], "allow": [1, 3, 21], "alter": [1, 2, 10, 14, 17, 22], "altitud": [1, 3, 14, 17], "alwai": [1, 2], "an": [1, 3, 10, 14, 15, 17, 18, 22], "angl": [1, 10, 15, 17, 18, 21, 22], "angle_degree_2vect": [16, 18], "ani": [1, 20], "app": 9, "appear": 15, "appli": [6, 7, 8], "approx": [1, 14, 21], "approx_euclidean_proj": [0, 24], "approxeucli": 1, "approxeuclideanproj": [0, 3], "approxim": 3, "apprx": 1, "ar": [1, 3, 17], "aren": 15, "arg": [1, 3, 6, 7, 8, 10, 17, 22], "argpars": [6, 7, 8], "args_add_pt2d": [5, 6], "args_add_pt3d": [5, 6], "args_add_shot": [5, 6], "args_control": [5, 8], "args_gcp2d": [5, 6], "args_gcp3d": [5, 6], "args_general_param": [5, 6], "args_image_world": [5, 8], "args_input_shot": [5, 6], "args_output_shot": [5, 6], "args_reading_opk": [5, 7], "args_space_resect": [5, 8], "args_world_imag": [5, 8], "args_writ": [5, 6], "args_write_con": [5, 7], "args_writing_opk": [5, 7], "args_writing_rpc": [5, 7], "argspars": [6, 7, 8], "argument": [6, 7, 8], "arithmet": 11, "around": 2, "arrai": [1, 2, 3, 13, 14, 15, 17, 18, 21], "arrang": 9, "ask": [3, 14], "attribut": [1, 21], "ax": [1, 10, 17, 22], "axiat": 15, "b": 15, "bad_head": 17, "balis": [2, 20], "barycentr": 21, "base": [1, 2, 3, 11, 13, 14, 15, 19, 21], "bdortho": 4, "beam": 18, "befor": 3, "begin": 22, "belong": 19, "between": [1, 3, 15, 17, 18], "bilinear": 1, "block": 18, "bool": [1, 2, 10, 14, 17, 21, 22], "boolean": [1, 17], "borea": 23, "buffer": 2, "build": 1, "bundl": [14, 15, 18], "bundle_to_imag": [12, 14], "c": [2, 14], "c_ob": 15, "calcul": [2, 6, 8, 11, 14, 15, 18, 21, 22], "calculate_barycentr": [0, 21], "calculate_image_world_by_intersect": [12, 15], "calculate_world_to_imag": [12, 15], "calcult": 15, "cam": [0, 2, 14, 15], "camera": [0, 2, 9, 14, 15, 24], "camera_txt": [0, 9], "carto_to_geoc": [0, 3], "carto_to_geog": [0, 3], "cartograph": 3, "cartographiqu": 14, "categori": 19, "center": 1, "centr": 3, "central": 3, "chang": [1, 15, 21], "check": [0, 15, 16], "check_args_opk": [0, 16], "check_args_reader_pt": [0, 16], "check_arrai": [0, 16], "check_array_transfo": [16, 17], "check_h_z": [16, 17], "check_head": [0, 16], "check_header_fil": [16, 17], "check_lett": 17, "check_order_ax": [0, 16], "class": [1, 2, 3, 11, 13, 14, 15, 19, 21, 22], "classmethod": [1, 2], "clear": [16, 19], "co": 15, "co_point": [1, 9, 15, 17, 21], "code": [0, 1, 3, 15, 17, 22], "code_gcp": 1, "coeffici": 2, "col": [2, 14], "collinear": 3, "column": [1, 2, 9, 10, 13, 15, 17, 21, 22], "combin": 17, "comput": [2, 3, 13], "comput_inter_in_2_more_distant_shot": [12, 15], "compute_image_world_least_squar": [12, 15], "con": 22, "condit": 1, "conic": [2, 7, 22], "conl": [0, 24], "connect": [1, 9, 15], "construct": 1, "contain": [1, 17], "content": 24, "control": [1, 8, 11, 15, 21], "control_typ": [15, 21], "conv_output_z_typ": [12, 14], "conv_z_shot_to_z_data": [12, 14], "converg": [3, 15], "convers": [14, 17], "conversion_coor_shot": [0, 12], "convert": [2, 3, 4, 14, 17, 22], "convert_line_list": [3, 4], "convert_opk_to_xyz": [16, 17], "coodin": 14, "coor": [0, 1, 3, 14], "coor2d": 1, "coor_2d": 1, "coor_eucli": [3, 18], "coor_gcp": 1, "coor_img": 13, "coor_init": 15, "coor_world": [3, 13, 14], "coordin": [1, 2, 3, 6, 8, 13, 14, 15, 18, 22], "coordinn": 18, "coordonne": 15, "copoint": 15, "correct": [1, 2, 10, 17, 21, 22], "correspond": 15, "cr": 3, "creat": [2, 3], "create_grid_rpc": [0, 2], "create_mat_a_and_vect_residu": [12, 15], "creation": [2, 15, 19], "cubic": 1, "cval": 1, "data": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 14, 15, 17, 18, 21, 22], "data_input": 4, "data_list": 11, "datafram": [9, 15, 21, 22], "datastruct": [0, 24], "de": 1, "definit": 1, "degre": [1, 2, 3, 10, 17, 18, 22], "depend": [15, 21], "describ": 2, "design": 19, "df": 22, "dfpt": 15, "dict": [1, 2, 10, 11, 15, 17, 22], "dictionari": [2, 11, 22], "dictionnari": 15, "diff": 17, "differ": 21, "differenti": [1, 18], "digit": 1, "dim": [17, 18], "dimens": 17, "direct": 15, "dist_2pt": [16, 18], "distanc": [15, 18], "distant": 15, "distort": 1, "do": 15, "dtm": [0, 13, 19, 24], "du": 14, "dx": 15, "d\u00e9fault": 14, "e": [10, 17], "each": 15, "edg": 1, "elem": 20, "element": [4, 15, 17, 20], "elementtre": [2, 20], "elev": 1, "enough": 15, "epsg": [0, 1, 3, 4, 22], "epsg_out": 3, "epsg_output": [0, 3, 22], "equat": [3, 15], "error": [1, 17], "et": [2, 20], "etre": [2, 20], "eucli": 15, "eucli_to_bundl": [12, 14], "eucli_to_imag": [12, 14], "eucli_to_world": [0, 3], "euclidean": [1, 3, 14, 15, 18, 21], "euclidean_proj": [0, 24], "euclideanproj": [0, 3], "euclidian": 3, "euclidien": 15, "ex": [1, 3], "extern": [8, 15], "externa": 15, "extract": [1, 3], "fact_rpc": [2, 22], "factor": [1, 2, 3, 15, 22], "fals": [14, 17, 21], "field": 15, "file": [1, 2, 4, 6, 7, 8, 9, 10, 11, 17, 20, 22], "fill": 1, "first": [15, 18], "fisrt": 18, "fix": 15, "flaot": 1, "flip": 18, "float": [1, 3, 14, 15, 17, 18], "focal": [0, 1], "folder": 22, "folder_con": 22, "folder_rpc": 22, "form": 1, "formal": 17, "format": [0, 1, 9, 17, 20, 22, 24], "format_xml": [16, 20], "frame": 18, "frist": 15, "from": [2, 3, 6, 7, 8, 13, 15, 20], "from_param_euclidean": [0, 1], "from_shot": [0, 2], "func_least_squar": [12, 15], "function": [3, 10, 11, 13, 14, 17, 18, 20, 22], "g": [10, 17], "gcp": [0, 6, 15, 21, 24], "gcp2d": [1, 9, 15, 17, 21], "gcp3d": [9, 15, 17], "gdal": 1, "gener": 6, "geoc_to_carto": [0, 3], "geodesi": [0, 24], "geog_to_carto": [0, 3], "geog_to_geoid": [0, 3], "geograph": [2, 3], "geoid": [0, 1, 3], "geoid_to_geog": [0, 3], "geometri": 2, "georeferenc": 1, "geotiff": 1, "geoview": [2, 4, 7], "get": [1, 18, 21], "get_attr_transfo_pt": [0, 21], "get_coor_pt_img_and_world": [0, 21], "get_meridian_converg": [0, 3], "get_point_image_datafram": [0, 21], "get_point_world_datafram": [0, 21], "get_scale_factor": [0, 3], "get_type_z_and_head": [16, 17], "get_z_add_scale_factor": [0, 1], "get_z_remove_scale_factor": [0, 1], "get_z_world": [0, 1], "give": 1, "given": [14, 15], "good": 17, "grid": [1, 2], "grid_img": 2, "grid_world": 2, "ground": [1, 6, 11, 14, 15], "gt": 13, "h": [1, 17], "head": 17, "header": [4, 9, 10, 17, 22], "height": [0, 1, 3, 14, 15, 17], "i": [1, 2, 3, 9, 10, 14, 15, 17, 19, 20, 21, 22], "id_img": [15, 21], "id_pt": [15, 21], "ign": [1, 2, 7], "imag": [1, 2, 6, 8, 11, 13, 14, 15, 18, 21], "image_to_bundl": [12, 14], "image_to_world": [12, 13, 14], "image_world_intersect": [0, 12], "image_world_it": [12, 14], "image_world_least_squar": [0, 12], "image_world_shot": [0, 12], "image_world_work": [0, 12], "image_z_to_world": [12, 14], "imageworldshot": [12, 14], "imageworldwork": [12, 15], "imc_adjust": 15, "img_coor": 14, "img_norm": 2, "implement": [3, 20], "indent": [16, 20], "index": [18, 23], "inform": [1, 10, 17, 22], "init": 3, "init_eucli_point": [12, 15], "init_kappa": [12, 15], "initi": 15, "input": [4, 14], "instanc": 19, "instanti": [3, 19], "int": [1, 2, 3, 15, 20], "inter": 15, "interpol": 1, "intersect": 15, "intersection_line_3d": [12, 15], "intersection_pt_in_2shot": [12, 15], "interv": [10, 17], "invers": 18, "invert_diag_sparse_matrix_3_3": [16, 18], "io": 11, "item": 20, "its": 15, "j": [10, 17], "kappa": [1, 15], "keep_in_memori": 1, "keep_memori": 1, "kei": [1, 2, 10, 17, 22], "known": 3, "kwarg": [1, 3], "l": [2, 14], "l_ob": 15, "la": 14, "lcode": 15, "least": [2, 15], "least_square_intersect": [12, 15], "least_square_rpc": [0, 2], "least_square_shot": [12, 15], "letter": 17, "level": 20, "lib": [2, 6, 7, 8, 20], "light": 2, "linalt": 2, "line": [1, 2, 4, 10, 13, 14, 15, 17, 21], "linear": [1, 2, 10, 14, 17, 22], "linear_alter": [1, 10, 17, 21, 22], "link": [1, 21], "list": [1, 3, 4, 9, 10, 11, 15, 17, 20, 21, 22], "list_data": 4, "list_lett": 17, "list_shot": 15, "local": [3, 14], "local_euclidean_proj": [0, 24], "local_to_eucli": [12, 14], "localeuclideanproj": [0, 3], "m": 18, "maco": 2, "main": 21, "main_stat_and_sav": [0, 11], "main_stat_image_to_world": [0, 11], "main_stat_world_to_imag": [0, 11], "make": 15, "manag": [9, 17], "manage_image_world": [12, 15], "manage_read": [0, 9], "manage_writ": [0, 24], "manager_writ": [0, 22], "manipul": [1, 3], "mapinfo": 4, "marker": 15, "mat": [3, 18], "mat_a": 15, "mat_eucli": 3, "mat_eucli_to_mat": [0, 3], "mat_inv": 18, "mat_obs_axia": [12, 15], "mat_ori_eucli": 1, "mat_rot_eucli": 1, "mat_rot_euclidean_loc": [0, 3], "mat_to_mat_eucli": [0, 3], "math": 18, "matric": [1, 21], "matrix": [1, 2, 3, 10, 15, 17, 18, 22], "max": [11, 18], "me": 9, "mean": [1, 11, 15], "median": 11, "memori": 1, "meridian": 3, "messag": 17, "method": [1, 2, 15], "min": [11, 18], "min_max_pt": [16, 18], "miscellan": [0, 16], "misss": 17, "model": 1, "modifi": [1, 14], "modul": [23, 24], "most": 15, "ms_error": 17, "ms_error_lett": 17, "must": [1, 3, 17], "n": [17, 18], "nadir": [1, 14], "name": [1, 15, 20, 21, 22], "name_cam": 1, "name_camera": [0, 1], "name_gcp": [0, 1], "name_opk": 22, "name_point": [1, 15], "name_pt": 15, "name_shot": [1, 15, 21], "nbr_inc": 15, "nbr_ob": 15, "ndarrai": [1, 2, 3, 13, 14, 15, 17, 18, 21], "nearest": 1, "need": 9, "new": [1, 3], "nodata": 1, "nonadir": 14, "none": [1, 2, 3, 6, 7, 8, 9, 10, 11, 15, 17, 20, 21, 22], "normal": [2, 16, 18], "normalize_data": [0, 2], "np": [1, 2, 3, 13, 14, 15, 17, 18, 21], "number": [15, 20], "numpi": 1, "ob": 15, "object": [1, 2, 3, 4, 10, 11, 13, 14, 15, 19], "obs_imag": [15, 21], "observ": [2, 15], "offset": 18, "omega": [1, 15], "one": [1, 2, 6, 18], "oopk": 17, "opk": [6, 7, 10, 17, 22], "order": [1, 2, 10, 17, 21, 22], "order_ax": [1, 10, 17, 21, 22], "ori": 2, "ori_shot": 1, "orient": [0, 1, 9, 15], "other": [10, 22], "output": [3, 4, 14, 17, 22], "outsid": 1, "p_add_data": [0, 5], "p_add_shot": [0, 5], "p_bundl": 14, "p_control": [0, 5], "p_eucli": 14, "p_file_gcp2d": [0, 5], "p_file_gcp3d": [0, 5], "p_format": [0, 5], "p_func": [0, 5], "p_gen_param": [0, 5], "p_image_world": [0, 5], "p_pt2d": [0, 5], "p_pt3d": [0, 5], "p_read_opk": [0, 5], "p_spaceresect": [0, 5], "p_unit_shot": [0, 5], "p_world_imag": [0, 5], "p_write": [0, 5], "p_write_con": [0, 5], "p_write_opk": [0, 5], "p_write_rpc": [0, 5], "packag": [23, 24], "page": 23, "panda": 21, "par": 14, "param_bundl": [0, 16], "param_con": 22, "param_rpc": [2, 22], "paramet": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 20, 21, 22], "parent": [3, 13], "parser": [6, 7, 8], "part": 1, "past": 1, "path": [1, 2, 9, 10, 22], "path_con": 2, "path_dtm": 1, "path_geoid": 1, "path_opk": 22, "pathoutput": 11, "pathreturn": 22, "pattern": 19, "pd": [9, 15, 21, 22], "pd_me": [15, 21], "pd_mes_temp": 15, "pd_pnt": 15, "percentag": 15, "perform": 1, "phi": [1, 15], "photogrametriqu": 8, "photogrammetr": [10, 22], "photogrammetri": [10, 22], "pinit": 15, "pixel": [1, 15], "point": [1, 2, 3, 6, 9, 11, 14, 15, 17, 18, 21], "point1": 15, "point2": 15, "polynom": [2, 22], "polynomi": 2, "polynomial_degre": 2, "porject": 1, "pos_eucli": [1, 14], "pos_shot": 1, "pos_shot_eucli": 1, "posit": [1, 14, 15, 18], "possibl": 17, "ppai": [0, 1], "ppax": [0, 1], "prec": 20, "precis": [1, 20], "process": [0, 14, 15, 24], "process_add_shot": [5, 6], "process_args_control": [5, 8], "process_args_gen_param": [5, 6], "process_args_read_opk": [5, 7], "process_args_write_con": [5, 7], "process_args_write_opk": [5, 7], "process_args_write_rpc": [5, 7], "process_gcp2d": [5, 6], "process_gcp3d": [5, 6], "process_image_world": [5, 6, 8], "process_space_resect": [5, 8], "process_world_imag": [5, 6, 8], "proj": [0, 2], "proj4": 4, "proj_engin": [0, 24], "project": [1, 2, 3, 22], "projectionlist": [0, 3], "projengin": [0, 1, 3, 19], "projeucli": 1, "properti": 3, "provid": 3, "pt1": 18, "pt2": 18, "pt2d": [9, 15], "pt3d": [9, 15], "pt_bundl": 14, "pt_eucli": 15, "pt_img": 15, "pt_world": [15, 21], "put": 20, "py": [2, 6, 7, 8, 20], "pyproj": 3, "python3": [2, 6, 7, 8, 20], "quintic": 1, "r": 18, "radian": [1, 10, 17, 22], "rais": 1, "random": 15, "ratat": 17, "read": [1, 2, 6, 7, 9, 10, 17], "read_camera": [0, 9], "read_file_pt": [0, 9], "read_file_pt_datafram": [0, 9], "reader": [0, 17, 24], "reader_camera": [0, 24], "reader_opk": [0, 9], "reader_orient": [9, 10], "reader_point": [0, 24], "recalcul": 15, "recalcult": 15, "record": 22, "recov": 21, "refer": [3, 4, 18], "registr": 22, "remov": 1, "replac": 17, "repres": [1, 3], "request": 21, "research": 4, "resect": 15, "residu": [11, 15], "ressourc": 21, "restrict": 19, "result": [1, 15], "retriev": 21, "retun": 17, "return": [1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 17, 18, 20, 21], "rotat": [1, 3, 10, 17, 18, 21, 22], "rpc": [0, 7, 22, 24], "same": 17, "save": [2, 9, 11, 21, 22], "save_conl": [0, 2], "save_stat_txt": [0, 11], "scale": [1, 3, 18], "scipi": 17, "script": [9, 10, 17], "sd": 4, "search": [15, 23], "search_info": [3, 4], "search_proj": [0, 3], "second": [15, 18], "seed_20_point": [12, 15], "self": [1, 13], "set": [1, 15, 17, 18, 21], "set_approx_eucli_proj": [0, 1], "set_camera_xml": [0, 2], "set_cval": [0, 1], "set_dtm": [0, 1], "set_epsg": [0, 3], "set_epsg_tf_geog_output": [0, 3], "set_geometry_xml": [0, 2], "set_keep_memori": [0, 1], "set_linear_alter": [0, 1], "set_ord": [0, 1], "set_order_ax": [0, 1], "set_param_bundle_diff": [16, 18], "set_param_eucli_shot": [0, 1], "set_param_shot": [0, 21], "set_point_image_datafram": [0, 21], "set_point_world_datafram": [0, 21], "set_proj": [0, 1], "set_rot_shot": [0, 1], "set_type_z": [0, 1], "set_type_z_data": [0, 1], "set_type_z_shot": [0, 1], "set_unit_angl": [0, 1], "set_unit_shot": [0, 21], "set_z_nadir": [0, 1], "setter": 3, "setup": [1, 2], "setup_matrix_obs_rpc": [0, 2], "shoot": 15, "shot": [0, 2, 6, 8, 10, 14, 15, 17, 18, 21, 24], "shot1": 15, "shot2": 15, "shot_adjust": 15, "sigma": 11, "singl": 19, "singleton": [0, 16], "site": [10, 11, 22], "size": 2, "size_grid": 2, "slinear": 1, "softwar": 2, "solv": 15, "sourc": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22], "space": 15, "space_resect": [0, 12], "space_resection_gap": [12, 15], "space_resection_on_worksit": [12, 15], "space_resection_shot": [12, 15], "space_resection_to_worksit": [12, 15], "spaceresect": [12, 15], "spars": [0, 16], "squar": [2, 15], "src": [2, 22], "stat": [0, 24], "stat_image_to_world": [0, 11], "stat_list": [0, 11], "stat_world_to_imag": [0, 11], "statist": [0, 24], "store": 1, "str": [1, 2, 4, 9, 10, 11, 14, 15, 17, 18, 20, 21, 22], "string": 21, "structur": 20, "submodul": [0, 5, 12, 16, 24], "subpackag": 24, "support": 1, "symbol": 17, "system": [1, 3, 14, 15, 21], "t": 15, "ta": 4, "tabl": [15, 21], "take": [14, 15, 21], "take_ob": [12, 15], "taken": [10, 17], "terrain": [14, 21], "textiowrapp": 11, "tf_output": [0, 3], "thei": [15, 17], "thi": 3, "tool": 21, "topaero": 4, "tranform": 3, "tranform_altitud": [0, 3], "tranform_height": [0, 3], "transform": [2, 3, 10, 13, 14, 15, 21], "transform_dtm": [0, 12], "transform_geodesi": [0, 24], "transform_shot": [0, 12], "transform_worksit": [0, 12], "transform_world_imag": [0, 24], "transformgeodesi": [0, 3], "transit": 3, "true": [1, 2, 10, 14, 17, 21, 22], "tubl": 15, "tupl": [2, 13, 15, 17, 18, 21], "two": [1, 15, 18], "txt": [4, 9, 11, 22], "type": [1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 22], "type_dtm": 1, "type_input": 4, "type_m": 18, "type_output": 4, "type_point": [9, 11, 15, 21], "type_process": 15, "type_pt": 17, "type_z": [1, 17, 21], "type_z_data": [1, 14], "type_z_input": 14, "type_z_output": 14, "type_z_shot": [1, 14], "u": 18, "u1": 18, "u2": 18, "u3": 18, "union": [3, 14, 17], "unit": [1, 6, 10, 17, 21, 22], "unit_angl": [1, 10, 17, 21, 22], "unit_data": 2, "unit_z_data": 2, "unit_z_shot": 2, "uniti": 2, "up": [1, 15, 18, 21], "us": [1, 3, 15, 21], "usr": [2, 6, 7, 8, 20], "util": [0, 24], "v": 18, "val": 20, "valid": 3, "valu": [1, 3, 15], "var": 11, "variabl": 17, "variat": 15, "variou": 17, "vect1": 15, "vect2": 15, "vector": [15, 17, 18], "verif": 17, "visibl": 15, "want": [1, 2, 14, 15, 21], "we": 18, "wgs84": [2, 22], "what": [15, 21], "when": [2, 22], "where": [15, 21], "which": [1, 3, 9, 15, 18], "whit": 1, "whose": 19, "width": [0, 1, 15], "without": [1, 17], "wkt": 4, "woksit": 15, "work": [6, 7, 8, 9, 10, 11, 12, 15, 18, 22], "workdata": [0, 21, 24], "worksid": 10, "worksit": [0, 1, 3, 6, 7, 8, 9, 10, 11, 14, 15, 22, 24], "world": [1, 2, 3, 6, 8, 11, 13, 14, 15, 21, 22], "world_image_dtm": [0, 12], "world_image_shot": [0, 12], "world_image_work": [0, 12], "world_norm": 2, "world_to_eucli": [0, 3], "world_to_imag": [12, 13, 14], "worldimagedtm": [1, 12, 13], "worldimageshot": [12, 14], "worldimagework": [12, 15], "worldintersect": [12, 15], "worldleastsquar": [12, 15], "write": [0, 2, 6, 7, 11, 20, 22], "write_df_to_txt": [0, 22], "write_stat": [0, 11], "writer": [0, 24], "writer_con": [0, 24], "writer_df_to_txt": [0, 24], "writer_opk": [0, 24], "writer_rpc": [0, 24], "x": [1, 2, 3, 13, 14, 15, 17, 21], "x_carto": 3, "x_central": [0, 3], "x_col": 14, "xml": [0, 2, 9, 16], "y": [1, 2, 3, 13, 14, 15, 17, 21], "y_carto": 3, "y_central": [0, 3], "y_line": 14, "you": [1, 2, 14, 15, 21], "your": 21, "z": [1, 2, 3, 14, 15, 17, 21], "z_nadir": 1}, "titles": ["borea package", "borea.datastruct package", "borea.format package", "borea.geodesy package", "borea.geodesy.projectionlist package", "borea.process package", "borea.process.p_add_data package", "borea.process.p_format package", "borea.process.p_func package", "borea.reader package", "borea.reader.orientation package", "borea.stat package", "borea.transform_world_image package", "borea.transform_world_image.transform_dtm package", "borea.transform_world_image.transform_shot package", "borea.transform_world_image.transform_worksite package", "borea.utils package", "borea.utils.check package", "borea.utils.miscellaneous package", "borea.utils.singleton package", "borea.utils.xml package", "borea.worksite package", "borea.writer package", "Welcome to Pink_Lady\u2019s documentation!", "borea"], "titleterms": {"": 23, "approx_euclidean_proj": 3, "borea": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24], "camera": 1, "check": 17, "check_args_opk": 17, "check_args_reader_pt": 17, "check_arrai": 17, "check_head": 17, "check_order_ax": 17, "conl": 2, "content": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "conversion_coor_shot": 14, "datastruct": 1, "document": 23, "dtm": 1, "euclidean_proj": 3, "format": 2, "gcp": 1, "geodesi": [3, 4], "image_world_intersect": 15, "image_world_least_squar": 15, "image_world_shot": 14, "image_world_work": 15, "indic": 23, "local_euclidean_proj": 3, "manage_read": 10, "manage_writ": 22, "miscellan": 18, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "orient": 10, "p_add_data": 6, "p_add_shot": 6, "p_control": 8, "p_file_gcp2d": 6, "p_file_gcp3d": 6, "p_format": 7, "p_func": 8, "p_gen_param": 6, "p_image_world": 8, "p_pt2d": 6, "p_pt3d": 6, "p_read_opk": 7, "p_spaceresect": 8, "p_unit_shot": 6, "p_world_imag": 8, "p_write": 6, "p_write_con": 7, "p_write_opk": 7, "p_write_rpc": 7, "packag": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "param_bundl": 18, "pink_ladi": 23, "process": [5, 6, 7, 8], "proj_engin": 3, "projectionlist": 4, "reader": [9, 10], "reader_camera": 9, "reader_opk": 10, "reader_point": 9, "rpc": 2, "search_proj": 4, "shot": 1, "singleton": 19, "space_resect": 15, "spars": 18, "stat": 11, "statist": 11, "submodul": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22], "subpackag": [0, 3, 5, 9, 12, 16], "tabl": 23, "transform_dtm": 13, "transform_geodesi": 3, "transform_shot": 14, "transform_worksit": 15, "transform_world_imag": [12, 13, 14, 15], "util": [16, 17, 18, 19, 20], "welcom": 23, "workdata": 1, "worksit": 21, "world_image_dtm": 13, "world_image_shot": 14, "world_image_work": 15, "writer": 22, "writer_con": 22, "writer_df_to_txt": 22, "writer_opk": 22, "writer_rpc": 22, "xml": 20}}) \ No newline at end of file From fc913ae828585610b66fe3a4814c574485549335 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 12:03:04 +0200 Subject: [PATCH 08/11] fix: debug multi epsg with type param change --- borea/process/p_add_data/p_gen_param.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/borea/process/p_add_data/p_gen_param.py b/borea/process/p_add_data/p_gen_param.py index fc1a3c26..838d8838 100644 --- a/borea/process/p_add_data/p_gen_param.py +++ b/borea/process/p_add_data/p_gen_param.py @@ -18,7 +18,7 @@ def args_general_param(parser: argparse) -> argparse: argsparse: Parser with argument. """ parser.add_argument('-e', '--epsg', - type=list, default=None, + type=int, nargs='*', default=None, help='EPSG codifier number of the reference system used e.g. "2154".') parser.add_argument('-y', '--pathgeoid', type=str, nargs='*', default=None, From bdfdce0b12bd3d8e5f200d6d46659f3543ab80f6 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 12:03:32 +0200 Subject: [PATCH 09/11] docs: change doc function to change None by 0 --- borea_tools/docs_tools/README_opk_control.md | 4 ++-- borea_tools/docs_tools/README_opk_to_conl.md | 4 ++-- borea_tools/docs_tools/README_opk_to_opk.md | 4 ++-- borea_tools/docs_tools/README_opk_to_rpc.md | 4 ++-- borea_tools/docs_tools/README_pt_image_to_world.md | 4 ++-- borea_tools/docs_tools/README_pt_world_to_image.md | 4 ++-- borea_tools/docs_tools/README_ptfile_image_to_world.md | 4 ++-- borea_tools/docs_tools/README_ptfile_world_to_image.md | 4 ++-- borea_tools/docs_tools/README_spaceresection_opk.md | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/borea_tools/docs_tools/README_opk_control.md b/borea_tools/docs_tools/README_opk_control.md index 125a0122..90ff53ee 100644 --- a/borea_tools/docs_tools/README_opk_control.md +++ b/borea_tools/docs_tools/README_opk_control.md @@ -126,9 +126,9 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ## Detail for process diff --git a/borea_tools/docs_tools/README_opk_to_conl.md b/borea_tools/docs_tools/README_opk_to_conl.md index fc9a68e9..27220914 100644 --- a/borea_tools/docs_tools/README_opk_to_conl.md +++ b/borea_tools/docs_tools/README_opk_to_conl.md @@ -102,8 +102,8 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_opk_to_opk.md b/borea_tools/docs_tools/README_opk_to_opk.md index 323e8b42..d9a1d3b6 100644 --- a/borea_tools/docs_tools/README_opk_to_opk.md +++ b/borea_tools/docs_tools/README_opk_to_opk.md @@ -107,8 +107,8 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_opk_to_rpc.md b/borea_tools/docs_tools/README_opk_to_rpc.md index d614b2e4..46af5490 100644 --- a/borea_tools/docs_tools/README_opk_to_rpc.md +++ b/borea_tools/docs_tools/README_opk_to_rpc.md @@ -107,8 +107,8 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_pt_image_to_world.md b/borea_tools/docs_tools/README_pt_image_to_world.md index 8bc62bf7..f1ebe6ec 100644 --- a/borea_tools/docs_tools/README_pt_image_to_world.md +++ b/borea_tools/docs_tools/README_pt_image_to_world.md @@ -83,8 +83,8 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_pt_world_to_image.md b/borea_tools/docs_tools/README_pt_world_to_image.md index 54bad80a..2dc57662 100644 --- a/borea_tools/docs_tools/README_pt_world_to_image.md +++ b/borea_tools/docs_tools/README_pt_world_to_image.md @@ -83,8 +83,8 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file diff --git a/borea_tools/docs_tools/README_ptfile_image_to_world.md b/borea_tools/docs_tools/README_ptfile_image_to_world.md index 214e7162..58edf769 100644 --- a/borea_tools/docs_tools/README_ptfile_image_to_world.md +++ b/borea_tools/docs_tools/README_ptfile_image_to_world.md @@ -123,9 +123,9 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ## Detail for process diff --git a/borea_tools/docs_tools/README_ptfile_world_to_image.md b/borea_tools/docs_tools/README_ptfile_world_to_image.md index e21ea8af..2798532d 100644 --- a/borea_tools/docs_tools/README_ptfile_world_to_image.md +++ b/borea_tools/docs_tools/README_ptfile_world_to_image.md @@ -130,9 +130,9 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ## Detail for approx system diff --git a/borea_tools/docs_tools/README_spaceresection_opk.md b/borea_tools/docs_tools/README_spaceresection_opk.md index 759626df..2beedf05 100644 --- a/borea_tools/docs_tools/README_spaceresection_opk.md +++ b/borea_tools/docs_tools/README_spaceresection_opk.md @@ -117,8 +117,8 @@ You can therefore specify as parameters the epsg ( -e ) you want to use for each [data_projection, geographic, geocentric] e.g. in commande line for 4326 error GeocentricCRS ``` --e 4326 None 4328 +-e 4326 0 4328 ``` -None allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. +0 allows you to ignore a system if it is found by pyproj, after you just need to find the right epsg. ![logo ign](../../docs/image/logo_ign.png) ![logo fr](../../docs/image/Republique_Francaise_Logo.png) \ No newline at end of file From 9734a54b665251e44682263ed449b9e2a94fe2c6 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 12:03:56 +0200 Subject: [PATCH 10/11] docs: new upgrade to sphinx python doc --- .../sphinx/_build/doctrees/environment.pickle | Bin 481688 -> 481698 bytes .../borea/process/p_add_data/p_gen_param.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sphinx/_build/doctrees/environment.pickle b/docs/sphinx/_build/doctrees/environment.pickle index b31080d2b1e0f4112275eeb580854a4e503b905d..48e45d0f73750b05ff8456e7f7b02d794580003a 100644 GIT binary patch delta 17062 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 delta 16954 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 TI@t2Mqh00O(Ux6SMMVD}5r(rE diff --git a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html index 1f809e38..6e8a1ed2 100644 --- a/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html +++ b/docs/sphinx/_build/html/_modules/borea/process/p_add_data/p_gen_param.html @@ -294,7 +294,7 @@

          Source code for borea.process.p_add_data.p_gen_param

          argsparse: Parser with argument. """ parser.add_argument('-e', '--epsg', - type=list, default=None, + type=int, nargs='*', default=None, help='EPSG codifier number of the reference system used e.g. "2154".') parser.add_argument('-y', '--pathgeoid', type=str, nargs='*', default=None, From fb124c86f9fff61f27b058fae33c54f2daa2d012 Mon Sep 17 00:00:00 2001 From: ACornuIGN Date: Fri, 20 Sep 2024 12:04:14 +0200 Subject: [PATCH 11/11] test: add test workflows for multi epsg --- .github/workflows/test_ubu.yml | 3 +++ .github/workflows/test_win.yml | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/test_ubu.yml b/.github/workflows/test_ubu.yml index 1d2db75c..7b907dd1 100644 --- a/.github/workflows/test_ubu.yml +++ b/.github/workflows/test_ubu.yml @@ -35,6 +35,9 @@ jobs: - name: Run regression test opk to opk run: python3 ./borea_tools/opk_to_opk.py -r ./dataset/23FD1305_alt_test.OPK -i NXYZOPKC -f 2 -e 2154 -y ./dataset/fr_ign_RAF20.tif -c ./dataset/Camera1.txt -m ./dataset/MNT_France_25m_h_crop.tif --fm height -n Test -w ./test/tmp/ -o NXYHPOKC -ou radian -oa False + - name: Run regression test opk to opk with multi epsg + run : python3 ./borea_tools/opk_to_opk.py -r ./dataset/23FD1305_alt_test.OPK -i NXYZOPKC -f 2 -e 2154 0 4964 -y ./dataset/fr_ign_RAF20.tif -c ./dataset/Camera1.txt -m ./dataset/MNT_France_25m_h_crop.tif --fm height -n Test -w ./test/tmp/ -o NXYHPOKC -ou radian -oa False + - name: Run regression test control opk run: python3 ./borea_tools/opk_control.py -r ./dataset/23FD1305_alt_test.OPK -i NXYZOPKC -f 2 -c ./dataset/Camera1.txt -e 2154 -y ./dataset/fr_ign_RAF20.tif -m ./dataset/MNT_France_25m_h_crop.tif --fm height -t ./dataset/terrain_test.mes -g ./dataset/GCP_test.app -d 13 -l PTXYH -p inter -w ./test/tmp/ diff --git a/.github/workflows/test_win.yml b/.github/workflows/test_win.yml index 906c9a23..5292539f 100644 --- a/.github/workflows/test_win.yml +++ b/.github/workflows/test_win.yml @@ -37,6 +37,10 @@ jobs: shell: bash -el {0} run: python ./borea_tools/opk_to_opk.py -r ./dataset/23FD1305_alt_test.OPK -i NXYZOPKC -f 2 -e 2154 -y ./dataset/fr_ign_RAF20.tif -c ./dataset/Camera1.txt -m ./dataset/MNT_France_25m_h_crop.tif --fm height -n Test -w ./test/tmp/ -o NXYHPOKC -ou radian -oa False + - name: Run regression test opk to opk with multi epsg + shell: bash -el {0} + run : python ./borea_tools/opk_to_opk.py -r ./dataset/23FD1305_alt_test.OPK -i NXYZOPKC -f 2 -e 2154 0 4964 -y ./dataset/fr_ign_RAF20.tif -c ./dataset/Camera1.txt -m ./dataset/MNT_France_25m_h_crop.tif --fm height -n Test -w ./test/tmp/ -o NXYHPOKC -ou radian -oa False + - name: Run regression test control opk shell: bash -el {0} run: python ./borea_tools/opk_control.py -r ./dataset/23FD1305_alt_test.OPK -i NXYZOPKC -f 2 -c ./dataset/Camera1.txt -e 2154 -y ./dataset/fr_ign_RAF20.tif -m ./dataset/MNT_France_25m_h_crop.tif --fm height -t ./dataset/terrain_test.mes -g ./dataset/GCP_test.app -d 13 -l PTXYH -p inter -w ./test/tmp/

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 z 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'J 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