From 62c4e1fa49eb543f3e64a2e37326f24aaa315452 Mon Sep 17 00:00:00 2001 From: j042 Date: Tue, 7 May 2024 14:56:11 +0000 Subject: [PATCH] deploy: e6137ea455bde4beca3c17adc842dbb2797a9fe8 --- .buildinfo | 4 + .doctrees/CONTRIBUTING.doctree | Bin 0 -> 11733 bytes .doctrees/_generated/gustaf.create.doctree | Bin 0 -> 9481 bytes .../_generated/gustaf.create.edges.doctree | Bin 0 -> 7812 bytes .../gustaf.create.edges.from_data.doctree | Bin 0 -> 12687 bytes .../gustaf.create.edges.from_vertices.doctree | Bin 0 -> 10155 bytes .../gustaf.create.faces.box.doctree | Bin 0 -> 14133 bytes .../_generated/gustaf.create.faces.doctree | Bin 0 -> 11895 bytes .../gustaf.create.faces.edges_as_quad.doctree | Bin 0 -> 8497 bytes .../gustaf.create.faces.to_quad.doctree | Bin 0 -> 7486 bytes .../gustaf.create.faces.to_simplex.doctree | Bin 0 -> 10025 bytes ...gustaf.create.faces.vertex_normals.doctree | Bin 0 -> 13400 bytes .../_generated/gustaf.create.vertices.doctree | Bin 0 -> 6787 bytes .../gustaf.create.vertices.raster.doctree | Bin 0 -> 9491 bytes .../gustaf.create.volumes.box.doctree | Bin 0 -> 11679 bytes .../_generated/gustaf.create.volumes.doctree | Bin 0 -> 6507 bytes .doctrees/_generated/gustaf.doctree | Bin 0 -> 14315 bytes .../gustaf.edges.Edges.centers.doctree | Bin 0 -> 6181 bytes .../gustaf.edges.Edges.const_edges.doctree | Bin 0 -> 6032 bytes .../gustaf.edges.Edges.const_elements.doctree | Bin 0 -> 6325 bytes .../gustaf.edges.Edges.dashed.doctree | Bin 0 -> 7613 bytes .../_generated/gustaf.edges.Edges.doctree | Bin 0 -> 28623 bytes .../gustaf.edges.Edges.edges.doctree | Bin 0 -> 6172 bytes .../gustaf.edges.Edges.elements.doctree | Bin 0 -> 6576 bytes .../gustaf.edges.Edges.kind.doctree | Bin 0 -> 4096 bytes ...af.edges.Edges.referenced_vertices.doctree | Bin 0 -> 6211 bytes ...Edges.remove_unreferenced_vertices.doctree | Bin 0 -> 6512 bytes .../gustaf.edges.Edges.shrink.doctree | Bin 0 -> 8171 bytes .../gustaf.edges.Edges.single_edges.doctree | Bin 0 -> 6281 bytes .../gustaf.edges.Edges.sorted_edges.doctree | Bin 0 -> 6279 bytes .../gustaf.edges.Edges.to_vertices.doctree | Bin 0 -> 5761 bytes .../gustaf.edges.Edges.unique_edges.doctree | Bin 0 -> 6179 bytes .../gustaf.edges.Edges.update_edges.doctree | Bin 0 -> 4971 bytes ...gustaf.edges.Edges.update_elements.doctree | Bin 0 -> 7579 bytes .../gustaf.edges.Edges.whatami.doctree | Bin 0 -> 5635 bytes .../gustaf.edges.EdgesShowOption.doctree | Bin 0 -> 6198 bytes .doctrees/_generated/gustaf.edges.doctree | Bin 0 -> 7284 bytes .../_generated/gustaf.faces.Faces.BC.doctree | Bin 0 -> 3627 bytes .../gustaf.faces.Faces.const_edges.doctree | Bin 0 -> 6032 bytes .../gustaf.faces.Faces.const_faces.doctree | Bin 0 -> 6002 bytes .../gustaf.faces.Faces.dashed.doctree | Bin 0 -> 6901 bytes .../_generated/gustaf.faces.Faces.doctree | Bin 0 -> 27129 bytes .../gustaf.faces.Faces.edges.doctree | Bin 0 -> 6214 bytes .../gustaf.faces.Faces.faces.doctree | Bin 0 -> 5211 bytes .../gustaf.faces.Faces.kind.doctree | Bin 0 -> 4096 bytes .../gustaf.faces.Faces.single_faces.doctree | Bin 0 -> 6297 bytes .../gustaf.faces.Faces.sorted_faces.doctree | Bin 0 -> 6121 bytes .../gustaf.faces.Faces.to_edges.doctree | Bin 0 -> 6767 bytes .../gustaf.faces.Faces.to_subelements.doctree | Bin 0 -> 7451 bytes .../gustaf.faces.Faces.unique_faces.doctree | Bin 0 -> 6045 bytes .../gustaf.faces.Faces.update_edges.doctree | Bin 0 -> 4210 bytes .../gustaf.faces.Faces.update_faces.doctree | Bin 0 -> 4971 bytes .../gustaf.faces.Faces.whatami.doctree | Bin 0 -> 5246 bytes .../gustaf.faces.Faces.whatareyou.doctree | Bin 0 -> 6792 bytes .../gustaf.faces.FacesShowOption.doctree | Bin 0 -> 6198 bytes .doctrees/_generated/gustaf.faces.doctree | Bin 0 -> 7133 bytes ...lpers.data.ComputedData.depends_on.doctree | Bin 0 -> 8632 bytes .../gustaf.helpers.data.ComputedData.doctree | Bin 0 -> 7979 bytes ...staf.helpers.data.ComputedMeshData.doctree | Bin 0 -> 6904 bytes ...staf.helpers.data.DataHolder.clear.doctree | Bin 0 -> 4432 bytes .../gustaf.helpers.data.DataHolder.doctree | Bin 0 -> 15056 bytes ...gustaf.helpers.data.DataHolder.get.doctree | Bin 0 -> 7931 bytes ...staf.helpers.data.DataHolder.items.doctree | Bin 0 -> 5477 bytes ...ustaf.helpers.data.DataHolder.keys.doctree | Bin 0 -> 5447 bytes ...gustaf.helpers.data.DataHolder.pop.doctree | Bin 0 -> 7637 bytes ...taf.helpers.data.DataHolder.update.doctree | Bin 0 -> 6221 bytes ...taf.helpers.data.DataHolder.values.doctree | Bin 0 -> 5495 bytes ...taf.helpers.data.TrackedArray.copy.doctree | Bin 0 -> 5072 bytes .../gustaf.helpers.data.TrackedArray.doctree | Bin 0 -> 10896 bytes ...helpers.data.TrackedArray.modified.doctree | Bin 0 -> 4423 bytes ...taf.helpers.data.TrackedArray.view.doctree | Bin 0 -> 5092 bytes ...gustaf.helpers.data.Unique2DFloats.doctree | Bin 0 -> 14134 bytes ...af.helpers.data.Unique2DFloats.ids.doctree | Bin 0 -> 4187 bytes ...s.data.Unique2DFloats.intersection.doctree | Bin 0 -> 4464 bytes ...elpers.data.Unique2DFloats.inverse.doctree | Bin 0 -> 4243 bytes ...helpers.data.Unique2DFloats.values.doctree | Bin 0 -> 4229 bytes ...lpers.data.Unique2DIntegers.counts.doctree | Bin 0 -> 4250 bytes ...staf.helpers.data.Unique2DIntegers.doctree | Bin 0 -> 13414 bytes ....helpers.data.Unique2DIntegers.ids.doctree | Bin 0 -> 4208 bytes ...pers.data.Unique2DIntegers.inverse.doctree | Bin 0 -> 4264 bytes ...lpers.data.Unique2DIntegers.values.doctree | Bin 0 -> 4259 bytes ...f.helpers.data.VertexData.as_arrow.doctree | Bin 0 -> 12187 bytes ....helpers.data.VertexData.as_scalar.doctree | Bin 0 -> 8615 bytes .../gustaf.helpers.data.VertexData.doctree | Bin 0 -> 9923 bytes .../_generated/gustaf.helpers.data.doctree | Bin 0 -> 15937 bytes ...af.helpers.data.make_tracked_array.doctree | Bin 0 -> 10128 bytes .doctrees/_generated/gustaf.helpers.doctree | Bin 0 -> 9419 bytes ...helpers.notebook.K3DPlotterN.clear.doctree | Bin 0 -> 5101 bytes ...helpers.notebook.K3DPlotterN.close.doctree | Bin 0 -> 4471 bytes ...lpers.notebook.K3DPlotterN.display.doctree | Bin 0 -> 5386 bytes ...ustaf.helpers.notebook.K3DPlotterN.doctree | Bin 0 -> 14003 bytes ....helpers.notebook.K3DPlotterN.show.doctree | Bin 0 -> 10039 bytes .../gustaf.helpers.notebook.doctree | Bin 0 -> 9174 bytes .../gustaf.helpers.notebook.get_shape.doctree | Bin 0 -> 8225 bytes ...lpers.options.Option.allowed_types.doctree | Bin 0 -> 3886 bytes ...af.helpers.options.Option.backends.doctree | Bin 0 -> 3819 bytes ...taf.helpers.options.Option.default.doctree | Bin 0 -> 3806 bytes ...helpers.options.Option.description.doctree | Bin 0 -> 3858 bytes .../gustaf.helpers.options.Option.doctree | Bin 0 -> 17469 bytes .../gustaf.helpers.options.Option.key.doctree | Bin 0 -> 3754 bytes ...helpers.options.SetDefault.default.doctree | Bin 0 -> 3862 bytes .../gustaf.helpers.options.SetDefault.doctree | Bin 0 -> 9627 bytes ...taf.helpers.options.SetDefault.key.doctree | Bin 0 -> 3810 bytes ...f.helpers.options.ShowOption.clear.doctree | Bin 0 -> 5468 bytes ...ions.ShowOption.copy_valid_options.doctree | Bin 0 -> 8054 bytes .../gustaf.helpers.options.ShowOption.doctree | Bin 0 -> 18699 bytes ...taf.helpers.options.ShowOption.get.doctree | Bin 0 -> 7851 bytes ...f.helpers.options.ShowOption.items.doctree | Bin 0 -> 5896 bytes ...af.helpers.options.ShowOption.keys.doctree | Bin 0 -> 5872 bytes ...taf.helpers.options.ShowOption.pop.doctree | Bin 0 -> 6570 bytes ....helpers.options.ShowOption.update.doctree | Bin 0 -> 6283 bytes ...pers.options.ShowOption.valid_keys.doctree | Bin 0 -> 5980 bytes ....helpers.options.ShowOption.values.doctree | Bin 0 -> 5914 bytes .../_generated/gustaf.helpers.options.doctree | Bin 0 -> 11230 bytes ...helpers.options.make_valid_options.doctree | Bin 0 -> 6804 bytes ...elpers.raise_if.ModuleImportRaiser.doctree | Bin 0 -> 9584 bytes .../gustaf.helpers.raise_if.doctree | Bin 0 -> 9231 bytes ...rs.raise_if.invalid_inherited_attr.doctree | Bin 0 -> 14547 bytes .../_generated/gustaf.io.default.doctree | Bin 0 -> 6093 bytes .../_generated/gustaf.io.default.load.doctree | Bin 0 -> 7343 bytes .doctrees/_generated/gustaf.io.doctree | Bin 0 -> 11649 bytes .../gustaf.io.ioutils.abs_fname.doctree | Bin 0 -> 6440 bytes ...staf.io.ioutils.check_and_makedirs.doctree | Bin 0 -> 6062 bytes .../_generated/gustaf.io.ioutils.doctree | Bin 0 -> 7748 bytes .doctrees/_generated/gustaf.io.meshio.doctree | Bin 0 -> 7803 bytes .../gustaf.io.meshio.export.doctree | Bin 0 -> 14508 bytes .../_generated/gustaf.io.meshio.load.doctree | Bin 0 -> 7634 bytes .doctrees/_generated/gustaf.io.mfem.doctree | Bin 0 -> 7859 bytes .../_generated/gustaf.io.mfem.export.doctree | Bin 0 -> 6956 bytes .../_generated/gustaf.io.mfem.load.doctree | Bin 0 -> 5886 bytes .doctrees/_generated/gustaf.io.mixd.doctree | Bin 0 -> 9189 bytes .../_generated/gustaf.io.mixd.export.doctree | Bin 0 -> 9660 bytes .../_generated/gustaf.io.mixd.load.doctree | Bin 0 -> 13459 bytes .../gustaf.io.mixd.make_mrng.doctree | Bin 0 -> 7374 bytes .doctrees/_generated/gustaf.io.nutils.doctree | Bin 0 -> 9040 bytes .../gustaf.io.nutils.export.doctree | Bin 0 -> 7197 bytes .../_generated/gustaf.io.nutils.load.doctree | Bin 0 -> 6727 bytes ...gustaf.io.nutils.to_nutils_simplex.doctree | Bin 0 -> 7219 bytes .doctrees/_generated/gustaf.settings.doctree | Bin 0 -> 4430 bytes .doctrees/_generated/gustaf.show.doctree | Bin 0 -> 9141 bytes ...staf.show.interpolate_vedo_dictcam.doctree | Bin 0 -> 9227 bytes .../gustaf.show.make_showable.doctree | Bin 0 -> 9263 bytes .doctrees/_generated/gustaf.show.show.doctree | Bin 0 -> 8957 bytes .../gustaf.utils.arr.bounds.doctree | Bin 0 -> 7418 bytes .../gustaf.utils.arr.bounds_diagonal.doctree | Bin 0 -> 7584 bytes .../gustaf.utils.arr.bounds_mean.doctree | Bin 0 -> 7352 bytes .../gustaf.utils.arr.bounds_norm.doctree | Bin 0 -> 7063 bytes .../gustaf.utils.arr.close_rows.doctree | Bin 0 -> 13676 bytes .../gustaf.utils.arr.cross3d.doctree | Bin 0 -> 9233 bytes ...f.utils.arr.derivatives_to_normals.doctree | Bin 0 -> 9434 bytes .doctrees/_generated/gustaf.utils.arr.doctree | Bin 0 -> 25843 bytes .../gustaf.utils.arr.enforce_len.doctree | Bin 0 -> 8544 bytes .../gustaf.utils.arr.is_one_of_shapes.doctree | Bin 0 -> 9045 bytes .../gustaf.utils.arr.is_shape.doctree | Bin 0 -> 8509 bytes ...gustaf.utils.arr.make_c_contiguous.doctree | Bin 0 -> 8537 bytes .../gustaf.utils.arr.rotate.doctree | Bin 0 -> 13647 bytes .../gustaf.utils.arr.rotation_matrix.doctree | Bin 0 -> 9699 bytes ...ls.arr.rotation_matrix_around_axis.doctree | Bin 0 -> 11709 bytes ...ustaf.utils.arr.select_with_ranges.doctree | Bin 0 -> 8018 bytes .../gustaf.utils.arr.unique_rows.doctree | Bin 0 -> 13048 bytes .../_generated/gustaf.utils.connec.doctree | Bin 0 -> 22664 bytes ...gustaf.utils.connec.faces_to_edges.doctree | Bin 0 -> 9769 bytes .../gustaf.utils.connec.hexa_to_quad.doctree | Bin 0 -> 9011 bytes ...taf.utils.connec.make_hexa_volumes.doctree | Bin 0 -> 7621 bytes ...ustaf.utils.connec.make_quad_faces.doctree | Bin 0 -> 7404 bytes ...gustaf.utils.connec.range_to_edges.doctree | Bin 0 -> 13192 bytes ...taf.utils.connec.sequence_to_edges.doctree | Bin 0 -> 8722 bytes ...f.utils.connec.sequentialize_edges.doctree | Bin 0 -> 13212 bytes .../gustaf.utils.connec.sorted_unique.doctree | Bin 0 -> 11035 bytes ...ustaf.utils.connec.subdivide_edges.doctree | Bin 0 -> 8509 bytes ...gustaf.utils.connec.subdivide_quad.doctree | Bin 0 -> 9190 bytes .../gustaf.utils.connec.subdivide_tri.doctree | Bin 0 -> 10208 bytes .../gustaf.utils.connec.tet_to_tri.doctree | Bin 0 -> 8639 bytes ...staf.utils.connec.volumes_to_faces.doctree | Bin 0 -> 9283 bytes .doctrees/_generated/gustaf.utils.doctree | Bin 0 -> 9185 bytes .../gustaf.utils.log.configure.doctree | Bin 0 -> 7327 bytes .../_generated/gustaf.utils.log.debug.doctree | Bin 0 -> 6325 bytes .doctrees/_generated/gustaf.utils.log.doctree | Bin 0 -> 10752 bytes .../_generated/gustaf.utils.log.info.doctree | Bin 0 -> 6309 bytes .../gustaf.utils.log.prepended_log.doctree | Bin 0 -> 7480 bytes .../gustaf.utils.log.warning.doctree | Bin 0 -> 6357 bytes .../gustaf.utils.tictoc.Tic.doctree | Bin 0 -> 10813 bytes .../gustaf.utils.tictoc.Tic.now.doctree | Bin 0 -> 4074 bytes .../gustaf.utils.tictoc.Tic.summary.doctree | Bin 0 -> 12152 bytes .../gustaf.utils.tictoc.Tic.toc.doctree | Bin 0 -> 7720 bytes .../_generated/gustaf.utils.tictoc.doctree | Bin 0 -> 6560 bytes .../gustaf.vertices.Vertices.bounds.doctree | Bin 0 -> 6145 bytes ....vertices.Vertices.bounds_diagonal.doctree | Bin 0 -> 6517 bytes ...ices.Vertices.bounds_diagonal_norm.doctree | Bin 0 -> 6052 bytes .../gustaf.vertices.Vertices.concat.doctree | Bin 0 -> 8222 bytes ...f.vertices.Vertices.const_vertices.doctree | Bin 0 -> 5685 bytes .../gustaf.vertices.Vertices.copy.doctree | Bin 0 -> 5996 bytes .../gustaf.vertices.Vertices.doctree | Bin 0 -> 30361 bytes .../gustaf.vertices.Vertices.kind.doctree | Bin 0 -> 4172 bytes ...f.vertices.Vertices.merge_vertices.doctree | Bin 0 -> 7637 bytes ....vertices.Vertices.remove_vertices.doctree | Bin 0 -> 7298 bytes ....vertices.Vertices.select_vertices.doctree | Bin 0 -> 7686 bytes .../gustaf.vertices.Vertices.show.doctree | Bin 0 -> 5770 bytes ...taf.vertices.Vertices.show_options.doctree | Bin 0 -> 6096 bytes .../gustaf.vertices.Vertices.showable.doctree | Bin 0 -> 6577 bytes ....vertices.Vertices.unique_vertices.doctree | Bin 0 -> 9203 bytes ....vertices.Vertices.update_vertices.doctree | Bin 0 -> 10334 bytes ...staf.vertices.Vertices.vertex_data.doctree | Bin 0 -> 6034 bytes .../gustaf.vertices.Vertices.vertices.doctree | Bin 0 -> 6235 bytes .../gustaf.vertices.Vertices.whatami.doctree | Bin 0 -> 6372 bytes ...gustaf.vertices.VerticesShowOption.doctree | Bin 0 -> 6294 bytes .doctrees/_generated/gustaf.vertices.doctree | Bin 0 -> 7405 bytes ...gustaf.volumes.Volumes.const_faces.doctree | Bin 0 -> 6058 bytes ...staf.volumes.Volumes.const_volumes.doctree | Bin 0 -> 6780 bytes .../_generated/gustaf.volumes.Volumes.doctree | Bin 0 -> 21647 bytes .../gustaf.volumes.Volumes.faces.doctree | Bin 0 -> 6712 bytes .../gustaf.volumes.Volumes.kind.doctree | Bin 0 -> 4148 bytes ...taf.volumes.Volumes.sorted_volumes.doctree | Bin 0 -> 6190 bytes .../gustaf.volumes.Volumes.to_faces.doctree | Bin 0 -> 6831 bytes ...taf.volumes.Volumes.unique_volumes.doctree | Bin 0 -> 6145 bytes ...ustaf.volumes.Volumes.update_faces.doctree | Bin 0 -> 4254 bytes ...taf.volumes.Volumes.update_volumes.doctree | Bin 0 -> 5065 bytes .../gustaf.volumes.Volumes.volumes.doctree | Bin 0 -> 6632 bytes .../gustaf.volumes.Volumes.whatareyou.doctree | Bin 0 -> 6876 bytes .../gustaf.volumes.VolumesShowOption.doctree | Bin 0 -> 6262 bytes .doctrees/_generated/gustaf.volumes.doctree | Bin 0 -> 7235 bytes .doctrees/details.doctree | Bin 0 -> 3087 bytes .doctrees/environment.pickle | Bin 0 -> 2580744 bytes .doctrees/index.doctree | Bin 0 -> 24662 bytes .doctrees/python_api.doctree | Bin 0 -> 3947 bytes .doctrees/references.doctree | Bin 0 -> 3054 bytes .doctrees/show_options.doctree | Bin 0 -> 116947 bytes .nojekyll | 0 CONTRIBUTING.html | 605 ++++++ _generated/gustaf.create.edges.from_data.html | 818 +++++++++ .../gustaf.create.edges.from_vertices.html | 810 ++++++++ _generated/gustaf.create.edges.html | 787 ++++++++ _generated/gustaf.create.faces.box.html | 807 ++++++++ .../gustaf.create.faces.edges_as_quad.html | 806 ++++++++ _generated/gustaf.create.faces.html | 796 ++++++++ _generated/gustaf.create.faces.to_quad.html | 819 +++++++++ .../gustaf.create.faces.to_simplex.html | 828 +++++++++ .../gustaf.create.faces.vertex_normals.html | 816 +++++++++ _generated/gustaf.create.html | 791 ++++++++ _generated/gustaf.create.vertices.html | 784 ++++++++ _generated/gustaf.create.vertices.raster.html | 809 ++++++++ _generated/gustaf.create.volumes.box.html | 806 ++++++++ _generated/gustaf.create.volumes.html | 784 ++++++++ _generated/gustaf.edges.Edges.centers.html | 803 ++++++++ .../gustaf.edges.Edges.const_edges.html | 800 ++++++++ .../gustaf.edges.Edges.const_elements.html | 803 ++++++++ _generated/gustaf.edges.Edges.dashed.html | 810 ++++++++ _generated/gustaf.edges.Edges.edges.html | 803 ++++++++ _generated/gustaf.edges.Edges.elements.html | 805 ++++++++ _generated/gustaf.edges.Edges.html | 853 +++++++++ _generated/gustaf.edges.Edges.kind.html | 791 ++++++++ ...ustaf.edges.Edges.referenced_vertices.html | 803 ++++++++ ...es.Edges.remove_unreferenced_vertices.html | 804 ++++++++ _generated/gustaf.edges.Edges.shrink.html | 806 ++++++++ .../gustaf.edges.Edges.single_edges.html | 804 ++++++++ .../gustaf.edges.Edges.sorted_edges.html | 803 ++++++++ .../gustaf.edges.Edges.to_vertices.html | 803 ++++++++ .../gustaf.edges.Edges.unique_edges.html | 804 ++++++++ .../gustaf.edges.Edges.update_edges.html | 792 ++++++++ .../gustaf.edges.Edges.update_elements.html | 803 ++++++++ _generated/gustaf.edges.Edges.whatami.html | 803 ++++++++ _generated/gustaf.edges.EdgesShowOption.html | 798 ++++++++ _generated/gustaf.edges.html | 787 ++++++++ _generated/gustaf.faces.Faces.BC.html | 791 ++++++++ .../gustaf.faces.Faces.const_edges.html | 800 ++++++++ .../gustaf.faces.Faces.const_faces.html | 803 ++++++++ _generated/gustaf.faces.Faces.dashed.html | 810 ++++++++ _generated/gustaf.faces.Faces.edges.html | 803 ++++++++ _generated/gustaf.faces.Faces.faces.html | 800 ++++++++ _generated/gustaf.faces.Faces.html | 850 +++++++++ _generated/gustaf.faces.Faces.kind.html | 791 ++++++++ .../gustaf.faces.Faces.single_faces.html | 804 ++++++++ .../gustaf.faces.Faces.sorted_faces.html | 803 ++++++++ _generated/gustaf.faces.Faces.to_edges.html | 803 ++++++++ .../gustaf.faces.Faces.to_subelements.html | 805 ++++++++ .../gustaf.faces.Faces.unique_faces.html | 803 ++++++++ .../gustaf.faces.Faces.update_edges.html | 792 ++++++++ .../gustaf.faces.Faces.update_faces.html | 792 ++++++++ _generated/gustaf.faces.Faces.whatami.html | 800 ++++++++ _generated/gustaf.faces.Faces.whatareyou.html | 804 ++++++++ _generated/gustaf.faces.FacesShowOption.html | 798 ++++++++ _generated/gustaf.faces.html | 786 ++++++++ ....helpers.data.ComputedData.depends_on.html | 811 ++++++++ .../gustaf.helpers.data.ComputedData.html | 800 ++++++++ .../gustaf.helpers.data.ComputedMeshData.html | 799 ++++++++ .../gustaf.helpers.data.DataHolder.clear.html | 792 ++++++++ .../gustaf.helpers.data.DataHolder.get.html | 808 ++++++++ .../gustaf.helpers.data.DataHolder.html | 818 +++++++++ .../gustaf.helpers.data.DataHolder.items.html | 800 ++++++++ .../gustaf.helpers.data.DataHolder.keys.html | 800 ++++++++ .../gustaf.helpers.data.DataHolder.pop.html | 806 ++++++++ ...gustaf.helpers.data.DataHolder.update.html | 800 ++++++++ ...gustaf.helpers.data.DataHolder.values.html | 800 ++++++++ ...gustaf.helpers.data.TrackedArray.copy.html | 792 ++++++++ .../gustaf.helpers.data.TrackedArray.html | 813 ++++++++ ...af.helpers.data.TrackedArray.modified.html | 792 ++++++++ ...gustaf.helpers.data.TrackedArray.view.html | 792 ++++++++ .../gustaf.helpers.data.Unique2DFloats.html | 818 +++++++++ ...ustaf.helpers.data.Unique2DFloats.ids.html | 793 ++++++++ ...pers.data.Unique2DFloats.intersection.html | 794 ++++++++ ...f.helpers.data.Unique2DFloats.inverse.html | 793 ++++++++ ...af.helpers.data.Unique2DFloats.values.html | 793 ++++++++ ....helpers.data.Unique2DIntegers.counts.html | 793 ++++++++ .../gustaf.helpers.data.Unique2DIntegers.html | 816 +++++++++ ...taf.helpers.data.Unique2DIntegers.ids.html | 793 ++++++++ ...helpers.data.Unique2DIntegers.inverse.html | 793 ++++++++ ....helpers.data.Unique2DIntegers.values.html | 793 ++++++++ ...staf.helpers.data.VertexData.as_arrow.html | 807 ++++++++ ...taf.helpers.data.VertexData.as_scalar.html | 807 ++++++++ .../gustaf.helpers.data.VertexData.html | 809 ++++++++ _generated/gustaf.helpers.data.html | 810 ++++++++ ...ustaf.helpers.data.make_tracked_array.html | 810 ++++++++ _generated/gustaf.helpers.html | 791 ++++++++ ...af.helpers.notebook.K3DPlotterN.clear.html | 792 ++++++++ ...af.helpers.notebook.K3DPlotterN.close.html | 792 ++++++++ ....helpers.notebook.K3DPlotterN.display.html | 794 ++++++++ .../gustaf.helpers.notebook.K3DPlotterN.html | 817 +++++++++ ...taf.helpers.notebook.K3DPlotterN.show.html | 803 ++++++++ .../gustaf.helpers.notebook.get_shape.html | 807 ++++++++ _generated/gustaf.helpers.notebook.html | 795 ++++++++ ....helpers.options.Option.allowed_types.html | 791 ++++++++ ...ustaf.helpers.options.Option.backends.html | 791 ++++++++ ...gustaf.helpers.options.Option.default.html | 791 ++++++++ ...af.helpers.options.Option.description.html | 791 ++++++++ _generated/gustaf.helpers.options.Option.html | 829 +++++++++ .../gustaf.helpers.options.Option.key.html | 791 ++++++++ ...af.helpers.options.SetDefault.default.html | 791 ++++++++ .../gustaf.helpers.options.SetDefault.html | 809 ++++++++ ...gustaf.helpers.options.SetDefault.key.html | 791 ++++++++ ...staf.helpers.options.ShowOption.clear.html | 800 ++++++++ ...options.ShowOption.copy_valid_options.html | 803 ++++++++ ...gustaf.helpers.options.ShowOption.get.html | 807 ++++++++ .../gustaf.helpers.options.ShowOption.html | 830 +++++++++ ...staf.helpers.options.ShowOption.items.html | 803 ++++++++ ...ustaf.helpers.options.ShowOption.keys.html | 803 ++++++++ ...gustaf.helpers.options.ShowOption.pop.html | 803 ++++++++ ...taf.helpers.options.ShowOption.update.html | 800 ++++++++ ...helpers.options.ShowOption.valid_keys.html | 803 ++++++++ ...taf.helpers.options.ShowOption.values.html | 803 ++++++++ _generated/gustaf.helpers.options.html | 798 ++++++++ ...af.helpers.options.make_valid_options.html | 803 ++++++++ ...f.helpers.raise_if.ModuleImportRaiser.html | 802 ++++++++ _generated/gustaf.helpers.raise_if.html | 793 ++++++++ ...lpers.raise_if.invalid_inherited_attr.html | 808 ++++++++ _generated/gustaf.html | 804 ++++++++ _generated/gustaf.io.default.html | 782 ++++++++ _generated/gustaf.io.default.load.html | 804 ++++++++ _generated/gustaf.io.html | 801 ++++++++ _generated/gustaf.io.ioutils.abs_fname.html | 803 ++++++++ .../gustaf.io.ioutils.check_and_makedirs.html | 800 ++++++++ _generated/gustaf.io.ioutils.html | 787 ++++++++ _generated/gustaf.io.meshio.export.html | 854 +++++++++ _generated/gustaf.io.meshio.html | 788 ++++++++ _generated/gustaf.io.meshio.load.html | 807 ++++++++ _generated/gustaf.io.mfem.export.html | 805 ++++++++ _generated/gustaf.io.mfem.html | 789 ++++++++ _generated/gustaf.io.mfem.load.html | 801 ++++++++ _generated/gustaf.io.mixd.export.html | 806 ++++++++ _generated/gustaf.io.mixd.html | 790 ++++++++ _generated/gustaf.io.mixd.load.html | 814 +++++++++ _generated/gustaf.io.mixd.make_mrng.html | 804 ++++++++ _generated/gustaf.io.nutils.export.html | 804 ++++++++ _generated/gustaf.io.nutils.html | 790 ++++++++ _generated/gustaf.io.nutils.load.html | 805 ++++++++ .../gustaf.io.nutils.to_nutils_simplex.html | 805 ++++++++ _generated/gustaf.settings.html | 776 ++++++++ _generated/gustaf.show.html | 790 ++++++++ .../gustaf.show.interpolate_vedo_dictcam.html | 808 ++++++++ _generated/gustaf.show.make_showable.html | 810 ++++++++ _generated/gustaf.show.show.html | 798 ++++++++ _generated/gustaf.utils.arr.bounds.html | 803 ++++++++ .../gustaf.utils.arr.bounds_diagonal.html | 804 ++++++++ _generated/gustaf.utils.arr.bounds_mean.html | 803 ++++++++ _generated/gustaf.utils.arr.bounds_norm.html | 803 ++++++++ _generated/gustaf.utils.arr.close_rows.html | 815 +++++++++ _generated/gustaf.utils.arr.cross3d.html | 807 ++++++++ ...staf.utils.arr.derivatives_to_normals.html | 805 ++++++++ _generated/gustaf.utils.arr.enforce_len.html | 807 ++++++++ _generated/gustaf.utils.arr.html | 835 +++++++++ .../gustaf.utils.arr.is_one_of_shapes.html | 808 ++++++++ _generated/gustaf.utils.arr.is_shape.html | 807 ++++++++ .../gustaf.utils.arr.make_c_contiguous.html | 807 ++++++++ _generated/gustaf.utils.arr.rotate.html | 808 ++++++++ .../gustaf.utils.arr.rotation_matrix.html | 810 ++++++++ ...utils.arr.rotation_matrix_around_axis.html | 810 ++++++++ .../gustaf.utils.arr.select_with_ranges.html | 804 ++++++++ _generated/gustaf.utils.arr.unique_rows.html | 814 +++++++++ .../gustaf.utils.connec.faces_to_edges.html | 820 +++++++++ .../gustaf.utils.connec.hexa_to_quad.html | 827 +++++++++ _generated/gustaf.utils.connec.html | 822 +++++++++ ...gustaf.utils.connec.make_hexa_volumes.html | 815 +++++++++ .../gustaf.utils.connec.make_quad_faces.html | 810 ++++++++ .../gustaf.utils.connec.range_to_edges.html | 809 ++++++++ ...gustaf.utils.connec.sequence_to_edges.html | 806 ++++++++ ...staf.utils.connec.sequentialize_edges.html | 823 +++++++++ .../gustaf.utils.connec.sorted_unique.html | 807 ++++++++ .../gustaf.utils.connec.subdivide_edges.html | 817 +++++++++ .../gustaf.utils.connec.subdivide_quad.html | 809 ++++++++ .../gustaf.utils.connec.subdivide_tri.html | 831 +++++++++ .../gustaf.utils.connec.tet_to_tri.html | 823 +++++++++ .../gustaf.utils.connec.volumes_to_faces.html | 803 ++++++++ _generated/gustaf.utils.html | 791 ++++++++ _generated/gustaf.utils.log.configure.html | 803 ++++++++ _generated/gustaf.utils.log.debug.html | 800 ++++++++ _generated/gustaf.utils.log.html | 796 ++++++++ _generated/gustaf.utils.log.info.html | 800 ++++++++ .../gustaf.utils.log.prepended_log.html | 806 ++++++++ _generated/gustaf.utils.log.warning.html | 800 ++++++++ _generated/gustaf.utils.tictoc.Tic.html | 807 ++++++++ _generated/gustaf.utils.tictoc.Tic.now.html | 793 ++++++++ .../gustaf.utils.tictoc.Tic.summary.html | 811 ++++++++ _generated/gustaf.utils.tictoc.Tic.toc.html | 804 ++++++++ _generated/gustaf.utils.tictoc.html | 784 ++++++++ .../gustaf.vertices.Vertices.bounds.html | 803 ++++++++ ...taf.vertices.Vertices.bounds_diagonal.html | 803 ++++++++ ...ertices.Vertices.bounds_diagonal_norm.html | 803 ++++++++ .../gustaf.vertices.Vertices.concat.html | 803 ++++++++ ...staf.vertices.Vertices.const_vertices.html | 801 ++++++++ _generated/gustaf.vertices.Vertices.copy.html | 803 ++++++++ _generated/gustaf.vertices.Vertices.html | 856 +++++++++ _generated/gustaf.vertices.Vertices.kind.html | 791 ++++++++ ...staf.vertices.Vertices.merge_vertices.html | 803 ++++++++ ...taf.vertices.Vertices.remove_vertices.html | 803 ++++++++ ...taf.vertices.Vertices.select_vertices.html | 803 ++++++++ _generated/gustaf.vertices.Vertices.show.html | 800 ++++++++ ...gustaf.vertices.Vertices.show_options.html | 804 ++++++++ .../gustaf.vertices.Vertices.showable.html | 803 ++++++++ ...taf.vertices.Vertices.unique_vertices.html | 807 ++++++++ ...taf.vertices.Vertices.update_vertices.html | 808 ++++++++ .../gustaf.vertices.Vertices.vertex_data.html | 804 ++++++++ .../gustaf.vertices.Vertices.vertices.html | 803 ++++++++ .../gustaf.vertices.Vertices.whatami.html | 806 ++++++++ .../gustaf.vertices.VerticesShowOption.html | 798 ++++++++ _generated/gustaf.vertices.html | 787 ++++++++ .../gustaf.volumes.Volumes.const_faces.html | 803 ++++++++ .../gustaf.volumes.Volumes.const_volumes.html | 803 ++++++++ _generated/gustaf.volumes.Volumes.faces.html | 803 ++++++++ _generated/gustaf.volumes.Volumes.html | 835 +++++++++ _generated/gustaf.volumes.Volumes.kind.html | 791 ++++++++ ...gustaf.volumes.Volumes.sorted_volumes.html | 803 ++++++++ .../gustaf.volumes.Volumes.to_faces.html | 803 ++++++++ ...gustaf.volumes.Volumes.unique_volumes.html | 804 ++++++++ .../gustaf.volumes.Volumes.update_faces.html | 792 ++++++++ ...gustaf.volumes.Volumes.update_volumes.html | 792 ++++++++ .../gustaf.volumes.Volumes.volumes.html | 803 ++++++++ .../gustaf.volumes.Volumes.whatareyou.html | 804 ++++++++ .../gustaf.volumes.VolumesShowOption.html | 798 ++++++++ _generated/gustaf.volumes.html | 786 ++++++++ _images/gustaf-logo.png | Bin 0 -> 38336 bytes _images/quad.png | Bin 0 -> 80395 bytes _images/tet.png | Bin 0 -> 80535 bytes _images/tet_quad.png | Bin 0 -> 69461 bytes _images/tet_vertex_data.png | Bin 0 -> 138366 bytes _modules/gustaf/create/edges.html | 616 +++++++ _modules/gustaf/create/faces.html | 845 +++++++++ _modules/gustaf/create/vertices.html | 527 ++++++ _modules/gustaf/create/volumes.html | 523 ++++++ _modules/gustaf/edges.html | 1008 ++++++++++ _modules/gustaf/faces.html | 843 +++++++++ _modules/gustaf/helpers/data.html | 1250 +++++++++++++ _modules/gustaf/helpers/notebook.html | 652 +++++++ _modules/gustaf/helpers/options.html | 1029 +++++++++++ _modules/gustaf/helpers/raise_if.html | 585 ++++++ _modules/gustaf/io/default.html | 519 ++++++ _modules/gustaf/io/ioutils.html | 536 ++++++ _modules/gustaf/io/meshio.html | 674 +++++++ _modules/gustaf/io/mfem.html | 688 +++++++ _modules/gustaf/io/mixd.html | 798 ++++++++ _modules/gustaf/io/nutils.html | 642 +++++++ _modules/gustaf/show.html | 1016 ++++++++++ _modules/gustaf/utils/arr.html | 1134 ++++++++++++ _modules/gustaf/utils/connec.html | 1346 ++++++++++++++ _modules/gustaf/utils/log.html | 612 +++++++ _modules/gustaf/utils/tictoc.html | 613 +++++++ _modules/gustaf/vertices.html | 1097 +++++++++++ _modules/gustaf/volumes.html | 784 ++++++++ _modules/index.html | 500 +++++ _sources/CONTRIBUTING.rst.txt | 4 + .../gustaf.create.edges.from_data.rst.txt | 6 + .../gustaf.create.edges.from_vertices.rst.txt | 6 + .../_generated/gustaf.create.edges.rst.txt | 33 + .../gustaf.create.faces.box.rst.txt | 6 + .../gustaf.create.faces.edges_as_quad.rst.txt | 6 + .../_generated/gustaf.create.faces.rst.txt | 36 + .../gustaf.create.faces.to_quad.rst.txt | 6 + .../gustaf.create.faces.to_simplex.rst.txt | 6 + ...gustaf.create.faces.vertex_normals.rst.txt | 6 + _sources/_generated/gustaf.create.rst.txt | 37 + .../gustaf.create.vertices.raster.rst.txt | 6 + .../_generated/gustaf.create.vertices.rst.txt | 32 + .../gustaf.create.volumes.box.rst.txt | 6 + .../_generated/gustaf.create.volumes.rst.txt | 32 + .../gustaf.edges.Edges.centers.rst.txt | 6 + .../gustaf.edges.Edges.const_edges.rst.txt | 6 + .../gustaf.edges.Edges.const_elements.rst.txt | 6 + .../gustaf.edges.Edges.dashed.rst.txt | 6 + .../gustaf.edges.Edges.edges.rst.txt | 6 + .../gustaf.edges.Edges.elements.rst.txt | 6 + .../gustaf.edges.Edges.kind.rst.txt | 6 + ...af.edges.Edges.referenced_vertices.rst.txt | 6 + ...Edges.remove_unreferenced_vertices.rst.txt | 6 + .../_generated/gustaf.edges.Edges.rst.txt | 142 ++ .../gustaf.edges.Edges.shrink.rst.txt | 6 + .../gustaf.edges.Edges.single_edges.rst.txt | 6 + .../gustaf.edges.Edges.sorted_edges.rst.txt | 6 + .../gustaf.edges.Edges.to_vertices.rst.txt | 6 + .../gustaf.edges.Edges.unique_edges.rst.txt | 6 + .../gustaf.edges.Edges.update_edges.rst.txt | 6 + ...gustaf.edges.Edges.update_elements.rst.txt | 6 + .../gustaf.edges.Edges.whatami.rst.txt | 6 + .../gustaf.edges.EdgesShowOption.rst.txt | 50 + _sources/_generated/gustaf.edges.rst.txt | 34 + .../_generated/gustaf.faces.Faces.BC.rst.txt | 6 + .../gustaf.faces.Faces.const_edges.rst.txt | 6 + .../gustaf.faces.Faces.const_faces.rst.txt | 6 + .../gustaf.faces.Faces.dashed.rst.txt | 6 + .../gustaf.faces.Faces.edges.rst.txt | 6 + .../gustaf.faces.Faces.faces.rst.txt | 6 + .../gustaf.faces.Faces.kind.rst.txt | 6 + .../_generated/gustaf.faces.Faces.rst.txt | 166 ++ .../gustaf.faces.Faces.single_faces.rst.txt | 6 + .../gustaf.faces.Faces.sorted_faces.rst.txt | 6 + .../gustaf.faces.Faces.to_edges.rst.txt | 6 + .../gustaf.faces.Faces.to_subelements.rst.txt | 6 + .../gustaf.faces.Faces.unique_faces.rst.txt | 6 + .../gustaf.faces.Faces.update_edges.rst.txt | 6 + .../gustaf.faces.Faces.update_faces.rst.txt | 6 + .../gustaf.faces.Faces.whatami.rst.txt | 6 + .../gustaf.faces.Faces.whatareyou.rst.txt | 6 + .../gustaf.faces.FacesShowOption.rst.txt | 50 + _sources/_generated/gustaf.faces.rst.txt | 34 + ...lpers.data.ComputedData.depends_on.rst.txt | 6 + .../gustaf.helpers.data.ComputedData.rst.txt | 49 + ...staf.helpers.data.ComputedMeshData.rst.txt | 47 + ...staf.helpers.data.DataHolder.clear.rst.txt | 6 + ...gustaf.helpers.data.DataHolder.get.rst.txt | 6 + ...staf.helpers.data.DataHolder.items.rst.txt | 6 + ...ustaf.helpers.data.DataHolder.keys.rst.txt | 6 + ...gustaf.helpers.data.DataHolder.pop.rst.txt | 6 + .../gustaf.helpers.data.DataHolder.rst.txt | 58 + ...taf.helpers.data.DataHolder.update.rst.txt | 6 + ...taf.helpers.data.DataHolder.values.rst.txt | 6 + ...taf.helpers.data.TrackedArray.copy.rst.txt | 6 + ...helpers.data.TrackedArray.modified.rst.txt | 6 + .../gustaf.helpers.data.TrackedArray.rst.txt | 219 +++ ...taf.helpers.data.TrackedArray.view.rst.txt | 6 + ...af.helpers.data.Unique2DFloats.ids.rst.txt | 6 + ...s.data.Unique2DFloats.intersection.rst.txt | 6 + ...elpers.data.Unique2DFloats.inverse.rst.txt | 6 + ...gustaf.helpers.data.Unique2DFloats.rst.txt | 47 + ...helpers.data.Unique2DFloats.values.rst.txt | 6 + ...lpers.data.Unique2DIntegers.counts.rst.txt | 6 + ....helpers.data.Unique2DIntegers.ids.rst.txt | 6 + ...pers.data.Unique2DIntegers.inverse.rst.txt | 6 + ...staf.helpers.data.Unique2DIntegers.rst.txt | 47 + ...lpers.data.Unique2DIntegers.values.rst.txt | 6 + ...f.helpers.data.VertexData.as_arrow.rst.txt | 6 + ....helpers.data.VertexData.as_scalar.rst.txt | 6 + .../gustaf.helpers.data.VertexData.rst.txt | 54 + ...af.helpers.data.make_tracked_array.rst.txt | 6 + .../_generated/gustaf.helpers.data.rst.txt | 46 + ...helpers.notebook.K3DPlotterN.clear.rst.txt | 6 + ...helpers.notebook.K3DPlotterN.close.rst.txt | 6 + ...lpers.notebook.K3DPlotterN.display.rst.txt | 6 + ...ustaf.helpers.notebook.K3DPlotterN.rst.txt | 182 ++ ....helpers.notebook.K3DPlotterN.show.rst.txt | 6 + .../gustaf.helpers.notebook.get_shape.rst.txt | 6 + .../gustaf.helpers.notebook.rst.txt | 40 + ...lpers.options.Option.allowed_types.rst.txt | 6 + ...af.helpers.options.Option.backends.rst.txt | 6 + ...taf.helpers.options.Option.default.rst.txt | 6 + ...helpers.options.Option.description.rst.txt | 6 + .../gustaf.helpers.options.Option.key.rst.txt | 6 + .../gustaf.helpers.options.Option.rst.txt | 44 + ...helpers.options.SetDefault.default.rst.txt | 6 + ...taf.helpers.options.SetDefault.key.rst.txt | 6 + .../gustaf.helpers.options.SetDefault.rst.txt | 35 + ...f.helpers.options.ShowOption.clear.rst.txt | 6 + ...ions.ShowOption.copy_valid_options.rst.txt | 6 + ...taf.helpers.options.ShowOption.get.rst.txt | 6 + ...f.helpers.options.ShowOption.items.rst.txt | 6 + ...af.helpers.options.ShowOption.keys.rst.txt | 6 + ...taf.helpers.options.ShowOption.pop.rst.txt | 6 + .../gustaf.helpers.options.ShowOption.rst.txt | 68 + ....helpers.options.ShowOption.update.rst.txt | 6 + ...pers.options.ShowOption.valid_keys.rst.txt | 6 + ....helpers.options.ShowOption.values.rst.txt | 6 + ...helpers.options.make_valid_options.rst.txt | 6 + .../_generated/gustaf.helpers.options.rst.txt | 42 + ...elpers.raise_if.ModuleImportRaiser.rst.txt | 23 + ...rs.raise_if.invalid_inherited_attr.rst.txt | 6 + .../gustaf.helpers.raise_if.rst.txt | 40 + _sources/_generated/gustaf.helpers.rst.txt | 37 + .../_generated/gustaf.io.default.load.rst.txt | 6 + _sources/_generated/gustaf.io.default.rst.txt | 32 + .../gustaf.io.ioutils.abs_fname.rst.txt | 6 + ...staf.io.ioutils.check_and_makedirs.rst.txt | 6 + _sources/_generated/gustaf.io.ioutils.rst.txt | 33 + .../gustaf.io.meshio.export.rst.txt | 6 + .../_generated/gustaf.io.meshio.load.rst.txt | 6 + _sources/_generated/gustaf.io.meshio.rst.txt | 33 + .../_generated/gustaf.io.mfem.export.rst.txt | 6 + .../_generated/gustaf.io.mfem.load.rst.txt | 6 + _sources/_generated/gustaf.io.mfem.rst.txt | 33 + .../_generated/gustaf.io.mixd.export.rst.txt | 6 + .../_generated/gustaf.io.mixd.load.rst.txt | 6 + .../gustaf.io.mixd.make_mrng.rst.txt | 6 + _sources/_generated/gustaf.io.mixd.rst.txt | 34 + .../gustaf.io.nutils.export.rst.txt | 6 + .../_generated/gustaf.io.nutils.load.rst.txt | 6 + _sources/_generated/gustaf.io.nutils.rst.txt | 34 + ...gustaf.io.nutils.to_nutils_simplex.rst.txt | 6 + _sources/_generated/gustaf.io.rst.txt | 39 + _sources/_generated/gustaf.rst.txt | 43 + _sources/_generated/gustaf.settings.rst.txt | 25 + ...staf.show.interpolate_vedo_dictcam.rst.txt | 6 + .../gustaf.show.make_showable.rst.txt | 6 + _sources/_generated/gustaf.show.rst.txt | 34 + _sources/_generated/gustaf.show.show.rst.txt | 6 + .../gustaf.utils.arr.bounds.rst.txt | 6 + .../gustaf.utils.arr.bounds_diagonal.rst.txt | 6 + .../gustaf.utils.arr.bounds_mean.rst.txt | 6 + .../gustaf.utils.arr.bounds_norm.rst.txt | 6 + .../gustaf.utils.arr.close_rows.rst.txt | 6 + .../gustaf.utils.arr.cross3d.rst.txt | 6 + ...f.utils.arr.derivatives_to_normals.rst.txt | 6 + .../gustaf.utils.arr.enforce_len.rst.txt | 6 + .../gustaf.utils.arr.is_one_of_shapes.rst.txt | 6 + .../gustaf.utils.arr.is_shape.rst.txt | 6 + ...gustaf.utils.arr.make_c_contiguous.rst.txt | 6 + .../gustaf.utils.arr.rotate.rst.txt | 6 + .../gustaf.utils.arr.rotation_matrix.rst.txt | 6 + ...ls.arr.rotation_matrix_around_axis.rst.txt | 6 + _sources/_generated/gustaf.utils.arr.rst.txt | 47 + ...ustaf.utils.arr.select_with_ranges.rst.txt | 6 + .../gustaf.utils.arr.unique_rows.rst.txt | 6 + ...gustaf.utils.connec.faces_to_edges.rst.txt | 6 + .../gustaf.utils.connec.hexa_to_quad.rst.txt | 6 + ...taf.utils.connec.make_hexa_volumes.rst.txt | 6 + ...ustaf.utils.connec.make_quad_faces.rst.txt | 6 + ...gustaf.utils.connec.range_to_edges.rst.txt | 6 + .../_generated/gustaf.utils.connec.rst.txt | 44 + ...taf.utils.connec.sequence_to_edges.rst.txt | 6 + ...f.utils.connec.sequentialize_edges.rst.txt | 6 + .../gustaf.utils.connec.sorted_unique.rst.txt | 6 + ...ustaf.utils.connec.subdivide_edges.rst.txt | 6 + ...gustaf.utils.connec.subdivide_quad.rst.txt | 6 + .../gustaf.utils.connec.subdivide_tri.rst.txt | 6 + .../gustaf.utils.connec.tet_to_tri.rst.txt | 6 + ...staf.utils.connec.volumes_to_faces.rst.txt | 6 + .../gustaf.utils.log.configure.rst.txt | 6 + .../_generated/gustaf.utils.log.debug.rst.txt | 6 + .../_generated/gustaf.utils.log.info.rst.txt | 6 + .../gustaf.utils.log.prepended_log.rst.txt | 6 + _sources/_generated/gustaf.utils.log.rst.txt | 36 + .../gustaf.utils.log.warning.rst.txt | 6 + _sources/_generated/gustaf.utils.rst.txt | 37 + .../gustaf.utils.tictoc.Tic.now.rst.txt | 6 + .../gustaf.utils.tictoc.Tic.rst.txt | 38 + .../gustaf.utils.tictoc.Tic.summary.rst.txt | 6 + .../gustaf.utils.tictoc.Tic.toc.rst.txt | 6 + .../_generated/gustaf.utils.tictoc.rst.txt | 33 + .../gustaf.vertices.Vertices.bounds.rst.txt | 6 + ....vertices.Vertices.bounds_diagonal.rst.txt | 6 + ...ices.Vertices.bounds_diagonal_norm.rst.txt | 6 + .../gustaf.vertices.Vertices.concat.rst.txt | 6 + ...f.vertices.Vertices.const_vertices.rst.txt | 6 + .../gustaf.vertices.Vertices.copy.rst.txt | 6 + .../gustaf.vertices.Vertices.kind.rst.txt | 6 + ...f.vertices.Vertices.merge_vertices.rst.txt | 6 + ....vertices.Vertices.remove_vertices.rst.txt | 6 + .../gustaf.vertices.Vertices.rst.txt | 107 ++ ....vertices.Vertices.select_vertices.rst.txt | 6 + .../gustaf.vertices.Vertices.show.rst.txt | 6 + ...taf.vertices.Vertices.show_options.rst.txt | 6 + .../gustaf.vertices.Vertices.showable.rst.txt | 6 + ....vertices.Vertices.unique_vertices.rst.txt | 6 + ....vertices.Vertices.update_vertices.rst.txt | 6 + ...staf.vertices.Vertices.vertex_data.rst.txt | 6 + .../gustaf.vertices.Vertices.vertices.rst.txt | 6 + .../gustaf.vertices.Vertices.whatami.rst.txt | 6 + ...gustaf.vertices.VerticesShowOption.rst.txt | 50 + _sources/_generated/gustaf.vertices.rst.txt | 34 + ...gustaf.volumes.Volumes.const_faces.rst.txt | 6 + ...staf.volumes.Volumes.const_volumes.rst.txt | 6 + .../gustaf.volumes.Volumes.faces.rst.txt | 6 + .../gustaf.volumes.Volumes.kind.rst.txt | 6 + .../_generated/gustaf.volumes.Volumes.rst.txt | 172 ++ ...taf.volumes.Volumes.sorted_volumes.rst.txt | 6 + .../gustaf.volumes.Volumes.to_faces.rst.txt | 6 + ...taf.volumes.Volumes.unique_volumes.rst.txt | 6 + ...ustaf.volumes.Volumes.update_faces.rst.txt | 6 + ...taf.volumes.Volumes.update_volumes.rst.txt | 6 + .../gustaf.volumes.Volumes.volumes.rst.txt | 6 + .../gustaf.volumes.Volumes.whatareyou.rst.txt | 6 + .../gustaf.volumes.VolumesShowOption.rst.txt | 50 + _sources/_generated/gustaf.volumes.rst.txt | 34 + _sources/details.rst.txt | 8 + _sources/index.rst.txt | 32 + _sources/python_api.rst.txt | 6 + _sources/references.rst.txt | 7 + _sources/show_options.rst.txt | 4 + _static/basic.css | 925 ++++++++++ _static/doctools.js | 156 ++ _static/documentation_options.js | 13 + _static/favicon.ico | Bin 0 -> 15406 bytes _static/file.png | Bin 0 -> 286 bytes _static/gus_dark_mode.png | Bin 0 -> 20953 bytes _static/gus_light_mode.png | Bin 0 -> 18440 bytes _static/language_data.js | 199 ++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 152 ++ _static/quad.png | Bin 0 -> 80395 bytes _static/scripts/bootstrap.js | 3 + _static/scripts/bootstrap.js.LICENSE.txt | 5 + _static/scripts/bootstrap.js.map | 1 + _static/scripts/pydata-sphinx-theme.js | 2 + _static/scripts/pydata-sphinx-theme.js.map | 1 + _static/searchtools.js | 619 +++++++ _static/sphinx_highlight.js | 154 ++ _static/style.css | 3 + _static/styles/bootstrap.css | 6 + _static/styles/bootstrap.css.map | 1 + _static/styles/pydata-sphinx-theme.css | 2 + _static/styles/pydata-sphinx-theme.css.map | 1 + _static/styles/theme.css | 2 + _static/tet.png | Bin 0 -> 80535 bytes _static/tet_quad.png | Bin 0 -> 69461 bytes _static/tet_vertex_data.png | Bin 0 -> 138366 bytes _static/vendor/fontawesome/6.5.1/LICENSE.txt | 165 ++ .../vendor/fontawesome/6.5.1/css/all.min.css | 5 + .../vendor/fontawesome/6.5.1/js/all.min.js | 2 + .../6.5.1/js/all.min.js.LICENSE.txt | 5 + .../6.5.1/webfonts/fa-brands-400.ttf | Bin 0 -> 207972 bytes .../6.5.1/webfonts/fa-brands-400.woff2 | Bin 0 -> 117372 bytes .../6.5.1/webfonts/fa-regular-400.ttf | Bin 0 -> 68004 bytes .../6.5.1/webfonts/fa-regular-400.woff2 | Bin 0 -> 25452 bytes .../6.5.1/webfonts/fa-solid-900.ttf | Bin 0 -> 419720 bytes .../6.5.1/webfonts/fa-solid-900.woff2 | Bin 0 -> 156496 bytes .../6.5.1/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10832 bytes .../6.5.1/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4792 bytes _static/webpack-macros.html | 31 + details.html | 531 ++++++ genindex.html | 1336 ++++++++++++++ index.html | 688 +++++++ objects.inv | Bin 0 -> 5270 bytes py-modindex.html | 610 ++++++ python_api.html | 770 ++++++++ references.html | 1627 +++++++++++++++++ search.html | 479 +++++ searchindex.js | 1 + show_options.html | 1031 +++++++++++ 753 files changed, 208744 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/CONTRIBUTING.doctree create mode 100644 .doctrees/_generated/gustaf.create.doctree create mode 100644 .doctrees/_generated/gustaf.create.edges.doctree create mode 100644 .doctrees/_generated/gustaf.create.edges.from_data.doctree create mode 100644 .doctrees/_generated/gustaf.create.edges.from_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.box.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.edges_as_quad.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.to_quad.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.to_simplex.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.vertex_normals.doctree create mode 100644 .doctrees/_generated/gustaf.create.vertices.doctree create mode 100644 .doctrees/_generated/gustaf.create.vertices.raster.doctree create mode 100644 .doctrees/_generated/gustaf.create.volumes.box.doctree create mode 100644 .doctrees/_generated/gustaf.create.volumes.doctree create mode 100644 .doctrees/_generated/gustaf.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.centers.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.const_edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.const_elements.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.dashed.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.elements.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.kind.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.referenced_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.shrink.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.single_edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.sorted_edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.to_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.unique_edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.update_edges.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.update_elements.doctree create mode 100644 .doctrees/_generated/gustaf.edges.Edges.whatami.doctree create mode 100644 .doctrees/_generated/gustaf.edges.EdgesShowOption.doctree create mode 100644 .doctrees/_generated/gustaf.edges.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.BC.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.const_edges.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.const_faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.dashed.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.edges.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.kind.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.single_faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.sorted_faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.to_edges.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.to_subelements.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.unique_faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.update_edges.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.update_faces.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.whatami.doctree create mode 100644 .doctrees/_generated/gustaf.faces.Faces.whatareyou.doctree create mode 100644 .doctrees/_generated/gustaf.faces.FacesShowOption.doctree create mode 100644 .doctrees/_generated/gustaf.faces.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.ComputedData.depends_on.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.ComputedData.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.ComputedMeshData.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.clear.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.get.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.items.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.keys.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.pop.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.update.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.DataHolder.values.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.TrackedArray.copy.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.TrackedArray.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.TrackedArray.modified.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.TrackedArray.view.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DFloats.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DFloats.ids.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DFloats.intersection.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DFloats.inverse.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DFloats.values.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.counts.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.ids.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.values.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.VertexData.as_arrow.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.VertexData.as_scalar.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.VertexData.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.data.make_tracked_array.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.close.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.display.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.show.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.notebook.get_shape.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.Option.allowed_types.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.Option.backends.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.Option.default.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.Option.description.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.Option.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.Option.key.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.SetDefault.default.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.SetDefault.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.SetDefault.key.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.clear.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.get.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.items.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.keys.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.pop.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.update.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.valid_keys.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.ShowOption.values.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.options.make_valid_options.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.raise_if.doctree create mode 100644 .doctrees/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.doctree create mode 100644 .doctrees/_generated/gustaf.io.default.doctree create mode 100644 .doctrees/_generated/gustaf.io.default.load.doctree create mode 100644 .doctrees/_generated/gustaf.io.doctree create mode 100644 .doctrees/_generated/gustaf.io.ioutils.abs_fname.doctree create mode 100644 .doctrees/_generated/gustaf.io.ioutils.check_and_makedirs.doctree create mode 100644 .doctrees/_generated/gustaf.io.ioutils.doctree create mode 100644 .doctrees/_generated/gustaf.io.meshio.doctree create mode 100644 .doctrees/_generated/gustaf.io.meshio.export.doctree create mode 100644 .doctrees/_generated/gustaf.io.meshio.load.doctree create mode 100644 .doctrees/_generated/gustaf.io.mfem.doctree create mode 100644 .doctrees/_generated/gustaf.io.mfem.export.doctree create mode 100644 .doctrees/_generated/gustaf.io.mfem.load.doctree create mode 100644 .doctrees/_generated/gustaf.io.mixd.doctree create mode 100644 .doctrees/_generated/gustaf.io.mixd.export.doctree create mode 100644 .doctrees/_generated/gustaf.io.mixd.load.doctree create mode 100644 .doctrees/_generated/gustaf.io.mixd.make_mrng.doctree create mode 100644 .doctrees/_generated/gustaf.io.nutils.doctree create mode 100644 .doctrees/_generated/gustaf.io.nutils.export.doctree create mode 100644 .doctrees/_generated/gustaf.io.nutils.load.doctree create mode 100644 .doctrees/_generated/gustaf.io.nutils.to_nutils_simplex.doctree create mode 100644 .doctrees/_generated/gustaf.settings.doctree create mode 100644 .doctrees/_generated/gustaf.show.doctree create mode 100644 .doctrees/_generated/gustaf.show.interpolate_vedo_dictcam.doctree create mode 100644 .doctrees/_generated/gustaf.show.make_showable.doctree create mode 100644 .doctrees/_generated/gustaf.show.show.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.bounds.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.bounds_diagonal.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.bounds_mean.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.bounds_norm.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.close_rows.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.cross3d.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.derivatives_to_normals.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.enforce_len.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.is_one_of_shapes.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.is_shape.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.make_c_contiguous.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.rotate.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.rotation_matrix.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.rotation_matrix_around_axis.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.select_with_ranges.doctree create mode 100644 .doctrees/_generated/gustaf.utils.arr.unique_rows.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.faces_to_edges.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.hexa_to_quad.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.make_hexa_volumes.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.make_quad_faces.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.range_to_edges.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.sequence_to_edges.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.sequentialize_edges.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.sorted_unique.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.subdivide_edges.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.subdivide_quad.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.subdivide_tri.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.tet_to_tri.doctree create mode 100644 .doctrees/_generated/gustaf.utils.connec.volumes_to_faces.doctree create mode 100644 .doctrees/_generated/gustaf.utils.doctree create mode 100644 .doctrees/_generated/gustaf.utils.log.configure.doctree create mode 100644 .doctrees/_generated/gustaf.utils.log.debug.doctree create mode 100644 .doctrees/_generated/gustaf.utils.log.doctree create mode 100644 .doctrees/_generated/gustaf.utils.log.info.doctree create mode 100644 .doctrees/_generated/gustaf.utils.log.prepended_log.doctree create mode 100644 .doctrees/_generated/gustaf.utils.log.warning.doctree create mode 100644 .doctrees/_generated/gustaf.utils.tictoc.Tic.doctree create mode 100644 .doctrees/_generated/gustaf.utils.tictoc.Tic.now.doctree create mode 100644 .doctrees/_generated/gustaf.utils.tictoc.Tic.summary.doctree create mode 100644 .doctrees/_generated/gustaf.utils.tictoc.Tic.toc.doctree create mode 100644 .doctrees/_generated/gustaf.utils.tictoc.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.bounds.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.bounds_diagonal.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.concat.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.const_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.copy.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.kind.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.merge_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.remove_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.select_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.show.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.show_options.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.showable.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.unique_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.update_vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.vertex_data.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.vertices.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.Vertices.whatami.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.VerticesShowOption.doctree create mode 100644 .doctrees/_generated/gustaf.vertices.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.const_faces.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.const_volumes.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.faces.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.kind.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.sorted_volumes.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.to_faces.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.unique_volumes.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.update_faces.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.update_volumes.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.volumes.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.Volumes.whatareyou.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.VolumesShowOption.doctree create mode 100644 .doctrees/_generated/gustaf.volumes.doctree create mode 100644 .doctrees/details.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/python_api.doctree create mode 100644 .doctrees/references.doctree create mode 100644 .doctrees/show_options.doctree create mode 100644 .nojekyll create mode 100644 CONTRIBUTING.html create mode 100644 _generated/gustaf.create.edges.from_data.html create mode 100644 _generated/gustaf.create.edges.from_vertices.html create mode 100644 _generated/gustaf.create.edges.html create mode 100644 _generated/gustaf.create.faces.box.html create mode 100644 _generated/gustaf.create.faces.edges_as_quad.html create mode 100644 _generated/gustaf.create.faces.html create mode 100644 _generated/gustaf.create.faces.to_quad.html create mode 100644 _generated/gustaf.create.faces.to_simplex.html create mode 100644 _generated/gustaf.create.faces.vertex_normals.html create mode 100644 _generated/gustaf.create.html create mode 100644 _generated/gustaf.create.vertices.html create mode 100644 _generated/gustaf.create.vertices.raster.html create mode 100644 _generated/gustaf.create.volumes.box.html create mode 100644 _generated/gustaf.create.volumes.html create mode 100644 _generated/gustaf.edges.Edges.centers.html create mode 100644 _generated/gustaf.edges.Edges.const_edges.html create mode 100644 _generated/gustaf.edges.Edges.const_elements.html create mode 100644 _generated/gustaf.edges.Edges.dashed.html create mode 100644 _generated/gustaf.edges.Edges.edges.html create mode 100644 _generated/gustaf.edges.Edges.elements.html create mode 100644 _generated/gustaf.edges.Edges.html create mode 100644 _generated/gustaf.edges.Edges.kind.html create mode 100644 _generated/gustaf.edges.Edges.referenced_vertices.html create mode 100644 _generated/gustaf.edges.Edges.remove_unreferenced_vertices.html create mode 100644 _generated/gustaf.edges.Edges.shrink.html create mode 100644 _generated/gustaf.edges.Edges.single_edges.html create mode 100644 _generated/gustaf.edges.Edges.sorted_edges.html create mode 100644 _generated/gustaf.edges.Edges.to_vertices.html create mode 100644 _generated/gustaf.edges.Edges.unique_edges.html create mode 100644 _generated/gustaf.edges.Edges.update_edges.html create mode 100644 _generated/gustaf.edges.Edges.update_elements.html create mode 100644 _generated/gustaf.edges.Edges.whatami.html create mode 100644 _generated/gustaf.edges.EdgesShowOption.html create mode 100644 _generated/gustaf.edges.html create mode 100644 _generated/gustaf.faces.Faces.BC.html create mode 100644 _generated/gustaf.faces.Faces.const_edges.html create mode 100644 _generated/gustaf.faces.Faces.const_faces.html create mode 100644 _generated/gustaf.faces.Faces.dashed.html create mode 100644 _generated/gustaf.faces.Faces.edges.html create mode 100644 _generated/gustaf.faces.Faces.faces.html create mode 100644 _generated/gustaf.faces.Faces.html create mode 100644 _generated/gustaf.faces.Faces.kind.html create mode 100644 _generated/gustaf.faces.Faces.single_faces.html create mode 100644 _generated/gustaf.faces.Faces.sorted_faces.html create mode 100644 _generated/gustaf.faces.Faces.to_edges.html create mode 100644 _generated/gustaf.faces.Faces.to_subelements.html create mode 100644 _generated/gustaf.faces.Faces.unique_faces.html create mode 100644 _generated/gustaf.faces.Faces.update_edges.html create mode 100644 _generated/gustaf.faces.Faces.update_faces.html create mode 100644 _generated/gustaf.faces.Faces.whatami.html create mode 100644 _generated/gustaf.faces.Faces.whatareyou.html create mode 100644 _generated/gustaf.faces.FacesShowOption.html create mode 100644 _generated/gustaf.faces.html create mode 100644 _generated/gustaf.helpers.data.ComputedData.depends_on.html create mode 100644 _generated/gustaf.helpers.data.ComputedData.html create mode 100644 _generated/gustaf.helpers.data.ComputedMeshData.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.clear.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.get.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.items.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.keys.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.pop.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.update.html create mode 100644 _generated/gustaf.helpers.data.DataHolder.values.html create mode 100644 _generated/gustaf.helpers.data.TrackedArray.copy.html create mode 100644 _generated/gustaf.helpers.data.TrackedArray.html create mode 100644 _generated/gustaf.helpers.data.TrackedArray.modified.html create mode 100644 _generated/gustaf.helpers.data.TrackedArray.view.html create mode 100644 _generated/gustaf.helpers.data.Unique2DFloats.html create mode 100644 _generated/gustaf.helpers.data.Unique2DFloats.ids.html create mode 100644 _generated/gustaf.helpers.data.Unique2DFloats.intersection.html create mode 100644 _generated/gustaf.helpers.data.Unique2DFloats.inverse.html create mode 100644 _generated/gustaf.helpers.data.Unique2DFloats.values.html create mode 100644 _generated/gustaf.helpers.data.Unique2DIntegers.counts.html create mode 100644 _generated/gustaf.helpers.data.Unique2DIntegers.html create mode 100644 _generated/gustaf.helpers.data.Unique2DIntegers.ids.html create mode 100644 _generated/gustaf.helpers.data.Unique2DIntegers.inverse.html create mode 100644 _generated/gustaf.helpers.data.Unique2DIntegers.values.html create mode 100644 _generated/gustaf.helpers.data.VertexData.as_arrow.html create mode 100644 _generated/gustaf.helpers.data.VertexData.as_scalar.html create mode 100644 _generated/gustaf.helpers.data.VertexData.html create mode 100644 _generated/gustaf.helpers.data.html create mode 100644 _generated/gustaf.helpers.data.make_tracked_array.html create mode 100644 _generated/gustaf.helpers.html create mode 100644 _generated/gustaf.helpers.notebook.K3DPlotterN.clear.html create mode 100644 _generated/gustaf.helpers.notebook.K3DPlotterN.close.html create mode 100644 _generated/gustaf.helpers.notebook.K3DPlotterN.display.html create mode 100644 _generated/gustaf.helpers.notebook.K3DPlotterN.html create mode 100644 _generated/gustaf.helpers.notebook.K3DPlotterN.show.html create mode 100644 _generated/gustaf.helpers.notebook.get_shape.html create mode 100644 _generated/gustaf.helpers.notebook.html create mode 100644 _generated/gustaf.helpers.options.Option.allowed_types.html create mode 100644 _generated/gustaf.helpers.options.Option.backends.html create mode 100644 _generated/gustaf.helpers.options.Option.default.html create mode 100644 _generated/gustaf.helpers.options.Option.description.html create mode 100644 _generated/gustaf.helpers.options.Option.html create mode 100644 _generated/gustaf.helpers.options.Option.key.html create mode 100644 _generated/gustaf.helpers.options.SetDefault.default.html create mode 100644 _generated/gustaf.helpers.options.SetDefault.html create mode 100644 _generated/gustaf.helpers.options.SetDefault.key.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.clear.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.copy_valid_options.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.get.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.items.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.keys.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.pop.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.update.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.valid_keys.html create mode 100644 _generated/gustaf.helpers.options.ShowOption.values.html create mode 100644 _generated/gustaf.helpers.options.html create mode 100644 _generated/gustaf.helpers.options.make_valid_options.html create mode 100644 _generated/gustaf.helpers.raise_if.ModuleImportRaiser.html create mode 100644 _generated/gustaf.helpers.raise_if.html create mode 100644 _generated/gustaf.helpers.raise_if.invalid_inherited_attr.html create mode 100644 _generated/gustaf.html create mode 100644 _generated/gustaf.io.default.html create mode 100644 _generated/gustaf.io.default.load.html create mode 100644 _generated/gustaf.io.html create mode 100644 _generated/gustaf.io.ioutils.abs_fname.html create mode 100644 _generated/gustaf.io.ioutils.check_and_makedirs.html create mode 100644 _generated/gustaf.io.ioutils.html create mode 100644 _generated/gustaf.io.meshio.export.html create mode 100644 _generated/gustaf.io.meshio.html create mode 100644 _generated/gustaf.io.meshio.load.html create mode 100644 _generated/gustaf.io.mfem.export.html create mode 100644 _generated/gustaf.io.mfem.html create mode 100644 _generated/gustaf.io.mfem.load.html create mode 100644 _generated/gustaf.io.mixd.export.html create mode 100644 _generated/gustaf.io.mixd.html create mode 100644 _generated/gustaf.io.mixd.load.html create mode 100644 _generated/gustaf.io.mixd.make_mrng.html create mode 100644 _generated/gustaf.io.nutils.export.html create mode 100644 _generated/gustaf.io.nutils.html create mode 100644 _generated/gustaf.io.nutils.load.html create mode 100644 _generated/gustaf.io.nutils.to_nutils_simplex.html create mode 100644 _generated/gustaf.settings.html create mode 100644 _generated/gustaf.show.html create mode 100644 _generated/gustaf.show.interpolate_vedo_dictcam.html create mode 100644 _generated/gustaf.show.make_showable.html create mode 100644 _generated/gustaf.show.show.html create mode 100644 _generated/gustaf.utils.arr.bounds.html create mode 100644 _generated/gustaf.utils.arr.bounds_diagonal.html create mode 100644 _generated/gustaf.utils.arr.bounds_mean.html create mode 100644 _generated/gustaf.utils.arr.bounds_norm.html create mode 100644 _generated/gustaf.utils.arr.close_rows.html create mode 100644 _generated/gustaf.utils.arr.cross3d.html create mode 100644 _generated/gustaf.utils.arr.derivatives_to_normals.html create mode 100644 _generated/gustaf.utils.arr.enforce_len.html create mode 100644 _generated/gustaf.utils.arr.html create mode 100644 _generated/gustaf.utils.arr.is_one_of_shapes.html create mode 100644 _generated/gustaf.utils.arr.is_shape.html create mode 100644 _generated/gustaf.utils.arr.make_c_contiguous.html create mode 100644 _generated/gustaf.utils.arr.rotate.html create mode 100644 _generated/gustaf.utils.arr.rotation_matrix.html create mode 100644 _generated/gustaf.utils.arr.rotation_matrix_around_axis.html create mode 100644 _generated/gustaf.utils.arr.select_with_ranges.html create mode 100644 _generated/gustaf.utils.arr.unique_rows.html create mode 100644 _generated/gustaf.utils.connec.faces_to_edges.html create mode 100644 _generated/gustaf.utils.connec.hexa_to_quad.html create mode 100644 _generated/gustaf.utils.connec.html create mode 100644 _generated/gustaf.utils.connec.make_hexa_volumes.html create mode 100644 _generated/gustaf.utils.connec.make_quad_faces.html create mode 100644 _generated/gustaf.utils.connec.range_to_edges.html create mode 100644 _generated/gustaf.utils.connec.sequence_to_edges.html create mode 100644 _generated/gustaf.utils.connec.sequentialize_edges.html create mode 100644 _generated/gustaf.utils.connec.sorted_unique.html create mode 100644 _generated/gustaf.utils.connec.subdivide_edges.html create mode 100644 _generated/gustaf.utils.connec.subdivide_quad.html create mode 100644 _generated/gustaf.utils.connec.subdivide_tri.html create mode 100644 _generated/gustaf.utils.connec.tet_to_tri.html create mode 100644 _generated/gustaf.utils.connec.volumes_to_faces.html create mode 100644 _generated/gustaf.utils.html create mode 100644 _generated/gustaf.utils.log.configure.html create mode 100644 _generated/gustaf.utils.log.debug.html create mode 100644 _generated/gustaf.utils.log.html create mode 100644 _generated/gustaf.utils.log.info.html create mode 100644 _generated/gustaf.utils.log.prepended_log.html create mode 100644 _generated/gustaf.utils.log.warning.html create mode 100644 _generated/gustaf.utils.tictoc.Tic.html create mode 100644 _generated/gustaf.utils.tictoc.Tic.now.html create mode 100644 _generated/gustaf.utils.tictoc.Tic.summary.html create mode 100644 _generated/gustaf.utils.tictoc.Tic.toc.html create mode 100644 _generated/gustaf.utils.tictoc.html create mode 100644 _generated/gustaf.vertices.Vertices.bounds.html create mode 100644 _generated/gustaf.vertices.Vertices.bounds_diagonal.html create mode 100644 _generated/gustaf.vertices.Vertices.bounds_diagonal_norm.html create mode 100644 _generated/gustaf.vertices.Vertices.concat.html create mode 100644 _generated/gustaf.vertices.Vertices.const_vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.copy.html create mode 100644 _generated/gustaf.vertices.Vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.kind.html create mode 100644 _generated/gustaf.vertices.Vertices.merge_vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.remove_vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.select_vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.show.html create mode 100644 _generated/gustaf.vertices.Vertices.show_options.html create mode 100644 _generated/gustaf.vertices.Vertices.showable.html create mode 100644 _generated/gustaf.vertices.Vertices.unique_vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.update_vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.vertex_data.html create mode 100644 _generated/gustaf.vertices.Vertices.vertices.html create mode 100644 _generated/gustaf.vertices.Vertices.whatami.html create mode 100644 _generated/gustaf.vertices.VerticesShowOption.html create mode 100644 _generated/gustaf.vertices.html create mode 100644 _generated/gustaf.volumes.Volumes.const_faces.html create mode 100644 _generated/gustaf.volumes.Volumes.const_volumes.html create mode 100644 _generated/gustaf.volumes.Volumes.faces.html create mode 100644 _generated/gustaf.volumes.Volumes.html create mode 100644 _generated/gustaf.volumes.Volumes.kind.html create mode 100644 _generated/gustaf.volumes.Volumes.sorted_volumes.html create mode 100644 _generated/gustaf.volumes.Volumes.to_faces.html create mode 100644 _generated/gustaf.volumes.Volumes.unique_volumes.html create mode 100644 _generated/gustaf.volumes.Volumes.update_faces.html create mode 100644 _generated/gustaf.volumes.Volumes.update_volumes.html create mode 100644 _generated/gustaf.volumes.Volumes.volumes.html create mode 100644 _generated/gustaf.volumes.Volumes.whatareyou.html create mode 100644 _generated/gustaf.volumes.VolumesShowOption.html create mode 100644 _generated/gustaf.volumes.html create mode 100644 _images/gustaf-logo.png create mode 100644 _images/quad.png create mode 100644 _images/tet.png create mode 100644 _images/tet_quad.png create mode 100644 _images/tet_vertex_data.png create mode 100644 _modules/gustaf/create/edges.html create mode 100644 _modules/gustaf/create/faces.html create mode 100644 _modules/gustaf/create/vertices.html create mode 100644 _modules/gustaf/create/volumes.html create mode 100644 _modules/gustaf/edges.html create mode 100644 _modules/gustaf/faces.html create mode 100644 _modules/gustaf/helpers/data.html create mode 100644 _modules/gustaf/helpers/notebook.html create mode 100644 _modules/gustaf/helpers/options.html create mode 100644 _modules/gustaf/helpers/raise_if.html create mode 100644 _modules/gustaf/io/default.html create mode 100644 _modules/gustaf/io/ioutils.html create mode 100644 _modules/gustaf/io/meshio.html create mode 100644 _modules/gustaf/io/mfem.html create mode 100644 _modules/gustaf/io/mixd.html create mode 100644 _modules/gustaf/io/nutils.html create mode 100644 _modules/gustaf/show.html create mode 100644 _modules/gustaf/utils/arr.html create mode 100644 _modules/gustaf/utils/connec.html create mode 100644 _modules/gustaf/utils/log.html create mode 100644 _modules/gustaf/utils/tictoc.html create mode 100644 _modules/gustaf/vertices.html create mode 100644 _modules/gustaf/volumes.html create mode 100644 _modules/index.html create mode 100644 _sources/CONTRIBUTING.rst.txt create mode 100644 _sources/_generated/gustaf.create.edges.from_data.rst.txt create mode 100644 _sources/_generated/gustaf.create.edges.from_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.create.edges.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.box.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.edges_as_quad.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.to_quad.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.to_simplex.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.vertex_normals.rst.txt create mode 100644 _sources/_generated/gustaf.create.rst.txt create mode 100644 _sources/_generated/gustaf.create.vertices.raster.rst.txt create mode 100644 _sources/_generated/gustaf.create.vertices.rst.txt create mode 100644 _sources/_generated/gustaf.create.volumes.box.rst.txt create mode 100644 _sources/_generated/gustaf.create.volumes.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.centers.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.const_edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.const_elements.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.dashed.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.elements.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.kind.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.referenced_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.shrink.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.single_edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.sorted_edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.to_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.unique_edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.update_edges.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.update_elements.rst.txt create mode 100644 _sources/_generated/gustaf.edges.Edges.whatami.rst.txt create mode 100644 _sources/_generated/gustaf.edges.EdgesShowOption.rst.txt create mode 100644 _sources/_generated/gustaf.edges.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.BC.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.const_edges.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.const_faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.dashed.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.edges.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.kind.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.single_faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.sorted_faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.to_edges.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.to_subelements.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.unique_faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.update_edges.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.update_faces.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.whatami.rst.txt create mode 100644 _sources/_generated/gustaf.faces.Faces.whatareyou.rst.txt create mode 100644 _sources/_generated/gustaf.faces.FacesShowOption.rst.txt create mode 100644 _sources/_generated/gustaf.faces.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.ComputedData.depends_on.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.ComputedData.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.ComputedMeshData.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.clear.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.get.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.items.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.keys.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.pop.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.update.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.DataHolder.values.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.TrackedArray.copy.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.TrackedArray.modified.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.TrackedArray.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.TrackedArray.view.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DFloats.ids.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DFloats.intersection.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DFloats.inverse.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DFloats.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DFloats.values.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DIntegers.counts.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DIntegers.ids.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DIntegers.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.Unique2DIntegers.values.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.VertexData.as_arrow.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.VertexData.as_scalar.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.VertexData.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.make_tracked_array.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.data.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.K3DPlotterN.close.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.K3DPlotterN.display.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.K3DPlotterN.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.K3DPlotterN.show.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.get_shape.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.notebook.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.Option.allowed_types.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.Option.backends.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.Option.default.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.Option.description.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.Option.key.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.Option.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.SetDefault.default.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.SetDefault.key.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.SetDefault.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.clear.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.get.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.items.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.keys.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.pop.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.update.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.valid_keys.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.ShowOption.values.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.make_valid_options.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.options.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.raise_if.rst.txt create mode 100644 _sources/_generated/gustaf.helpers.rst.txt create mode 100644 _sources/_generated/gustaf.io.default.load.rst.txt create mode 100644 _sources/_generated/gustaf.io.default.rst.txt create mode 100644 _sources/_generated/gustaf.io.ioutils.abs_fname.rst.txt create mode 100644 _sources/_generated/gustaf.io.ioutils.check_and_makedirs.rst.txt create mode 100644 _sources/_generated/gustaf.io.ioutils.rst.txt create mode 100644 _sources/_generated/gustaf.io.meshio.export.rst.txt create mode 100644 _sources/_generated/gustaf.io.meshio.load.rst.txt create mode 100644 _sources/_generated/gustaf.io.meshio.rst.txt create mode 100644 _sources/_generated/gustaf.io.mfem.export.rst.txt create mode 100644 _sources/_generated/gustaf.io.mfem.load.rst.txt create mode 100644 _sources/_generated/gustaf.io.mfem.rst.txt create mode 100644 _sources/_generated/gustaf.io.mixd.export.rst.txt create mode 100644 _sources/_generated/gustaf.io.mixd.load.rst.txt create mode 100644 _sources/_generated/gustaf.io.mixd.make_mrng.rst.txt create mode 100644 _sources/_generated/gustaf.io.mixd.rst.txt create mode 100644 _sources/_generated/gustaf.io.nutils.export.rst.txt create mode 100644 _sources/_generated/gustaf.io.nutils.load.rst.txt create mode 100644 _sources/_generated/gustaf.io.nutils.rst.txt create mode 100644 _sources/_generated/gustaf.io.nutils.to_nutils_simplex.rst.txt create mode 100644 _sources/_generated/gustaf.io.rst.txt create mode 100644 _sources/_generated/gustaf.rst.txt create mode 100644 _sources/_generated/gustaf.settings.rst.txt create mode 100644 _sources/_generated/gustaf.show.interpolate_vedo_dictcam.rst.txt create mode 100644 _sources/_generated/gustaf.show.make_showable.rst.txt create mode 100644 _sources/_generated/gustaf.show.rst.txt create mode 100644 _sources/_generated/gustaf.show.show.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.bounds.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.bounds_diagonal.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.bounds_mean.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.bounds_norm.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.close_rows.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.cross3d.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.derivatives_to_normals.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.enforce_len.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.is_one_of_shapes.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.is_shape.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.make_c_contiguous.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.rotate.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.rotation_matrix.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.rotation_matrix_around_axis.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.select_with_ranges.rst.txt create mode 100644 _sources/_generated/gustaf.utils.arr.unique_rows.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.faces_to_edges.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.hexa_to_quad.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.make_hexa_volumes.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.make_quad_faces.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.range_to_edges.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.sequence_to_edges.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.sequentialize_edges.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.sorted_unique.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.subdivide_edges.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.subdivide_quad.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.subdivide_tri.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.tet_to_tri.rst.txt create mode 100644 _sources/_generated/gustaf.utils.connec.volumes_to_faces.rst.txt create mode 100644 _sources/_generated/gustaf.utils.log.configure.rst.txt create mode 100644 _sources/_generated/gustaf.utils.log.debug.rst.txt create mode 100644 _sources/_generated/gustaf.utils.log.info.rst.txt create mode 100644 _sources/_generated/gustaf.utils.log.prepended_log.rst.txt create mode 100644 _sources/_generated/gustaf.utils.log.rst.txt create mode 100644 _sources/_generated/gustaf.utils.log.warning.rst.txt create mode 100644 _sources/_generated/gustaf.utils.rst.txt create mode 100644 _sources/_generated/gustaf.utils.tictoc.Tic.now.rst.txt create mode 100644 _sources/_generated/gustaf.utils.tictoc.Tic.rst.txt create mode 100644 _sources/_generated/gustaf.utils.tictoc.Tic.summary.rst.txt create mode 100644 _sources/_generated/gustaf.utils.tictoc.Tic.toc.rst.txt create mode 100644 _sources/_generated/gustaf.utils.tictoc.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.bounds.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.bounds_diagonal.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.concat.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.const_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.copy.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.kind.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.merge_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.remove_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.select_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.show.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.show_options.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.showable.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.unique_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.update_vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.vertex_data.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.vertices.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.Vertices.whatami.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.VerticesShowOption.rst.txt create mode 100644 _sources/_generated/gustaf.vertices.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.const_faces.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.const_volumes.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.faces.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.kind.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.sorted_volumes.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.to_faces.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.unique_volumes.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.update_faces.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.update_volumes.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.volumes.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.Volumes.whatareyou.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.VolumesShowOption.rst.txt create mode 100644 _sources/_generated/gustaf.volumes.rst.txt create mode 100644 _sources/details.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/python_api.rst.txt create mode 100644 _sources/references.rst.txt create mode 100644 _sources/show_options.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/favicon.ico create mode 100644 _static/file.png create mode 100644 _static/gus_dark_mode.png create mode 100644 _static/gus_light_mode.png create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/quad.png create mode 100644 _static/scripts/bootstrap.js create mode 100644 _static/scripts/bootstrap.js.LICENSE.txt create mode 100644 _static/scripts/bootstrap.js.map create mode 100644 _static/scripts/pydata-sphinx-theme.js create mode 100644 _static/scripts/pydata-sphinx-theme.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/style.css create mode 100644 _static/styles/bootstrap.css create mode 100644 _static/styles/bootstrap.css.map create mode 100644 _static/styles/pydata-sphinx-theme.css create mode 100644 _static/styles/pydata-sphinx-theme.css.map create mode 100644 _static/styles/theme.css create mode 100644 _static/tet.png create mode 100644 _static/tet_quad.png create mode 100644 _static/tet_vertex_data.png create mode 100644 _static/vendor/fontawesome/6.5.1/LICENSE.txt create mode 100644 _static/vendor/fontawesome/6.5.1/css/all.min.css create mode 100644 _static/vendor/fontawesome/6.5.1/js/all.min.js create mode 100644 _static/vendor/fontawesome/6.5.1/js/all.min.js.LICENSE.txt create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.ttf create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.woff2 create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.ttf create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.woff2 create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.ttf create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.woff2 create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-v4compatibility.ttf create mode 100644 _static/vendor/fontawesome/6.5.1/webfonts/fa-v4compatibility.woff2 create mode 100644 _static/webpack-macros.html create mode 100644 details.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 python_api.html create mode 100644 references.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 show_options.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..b72a7ca2c --- /dev/null +++ b/.buildinfo @@ -0,0 +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: 84cf3550a94947108bc515d701c92eb8 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/CONTRIBUTING.doctree b/.doctrees/CONTRIBUTING.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ff5f5b1f2a58b5d6a1d890e39f2a5dbfa9b341e9 GIT binary patch literal 11733 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 P*zm|@71rJKTD1NRJ?Nv@ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.doctree b/.doctrees/_generated/gustaf.create.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0552e6e59fdfd6be89030acceb913d99a433ec7 GIT binary patch literal 9481 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.edges.doctree b/.doctrees/_generated/gustaf.create.edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e93d3eef402a320d2d1c711a12714f177075f807 GIT binary patch literal 7812 zcmcgx&2J<}6<>dh?U}W`UMCwu5+@xmY`jW5cEX3ii6W#xfOU2d5h6?CRi~!AW~#?M z-A#A(+E!R891^Xe5JcNVNQ4vo0|*pA0VxMS2spz%oC1g|$MAbq-7`J25mW_wAP z#tzTaDNs1V^WB&S*;Tw;Bzo!jNj=|SMzXlg`^!Z|-CeI+b~{ZZYt@~YGs)}RZS!O+ z6SG${Rbx`dUNeMGZtVmD#y!5J& zXkas~J5W!5jqj7TM-#o0X&VYlJS-j*Q)0Ct9%!UZCYGRSv3xZXcjEsp{NIiLd#+}w zxL;fZ`2|BR&Wi`Or@`|nRq+Cs@0Zvz93Q!pnuTIxPg`wGO-Ia&Gj(q_bW@){ZjEq< zOxtW*RbM#NOk5_SAF7StqxZ@r4cT3-#z=i;M>5g0>a5M)IQ7Bu<+UD6Dg| ztQ9W-@7WD;pSVOk*2L=nleg`OLI>KNs_2TL>9@si=uV?BbBi|zE zuV>9=i3+Kwc-K0JARmO7r$Wu7f-`9 zDewOUDmrGfws(yO{Vj`RS{W86H(FKA$aWm2(Jl6*ggpyu-=?wWuw>73rO38xlrMe^ z`~C*NATv>?pQ{tO;{$z1Xv@^~8ug zUGKeq^2Hr%hwQ&Y4zOcvzViYev=0;$+6#8B?p)M1SVN(ik9goBHQW100ws3UC*B7S zg=J@bPogsWrTxU8sN#xERqgSd^>e{rkIn_CW|}oM869M3Ar96dV8(~b=$~QJKaQ)l zY6b!#STlA1_{Jea4@Q(-<^`GfyPCyF9z^KJrs!mK8e?Qe-*Y^f-O#W1SR7=BstT)_ zqIyJwpyoiK8?CINPs!UiwKCSYIw}1gMeajLM!Gt@jo{c+=TDGNN;Z7EY(suz^``it zO7x$+68&zR(TMmhSoYUo=(k09fzZz8f+88T1g9)Q36k`%sL1L0uG16Jf)E1=R^oirc z6q%;8VmLcG*{l}H=C}rDQ=NpgpHf~J5^p@OltK@4*{N1h4?sxsIBw_@a%tbLzczliP zn)zLA6c^UIEE^yq9V%`fJKXrkM`1vh-ZG4~6 zZ{9NX$Vo_h(aHyI`;E>|VgFaNM(1bxm#euh+jn_{e)rOQ_*2tuKWw7om~~jBfslr( z0cPqW2C!1+b#gzebMqKq>U-y<`dDu4Rr+%X|vBu!9jt&^gt(ZUfn5U79>6+ z<=9aiw&6qu9;?VuqL1A^rD_EYcQH)Ku_x4`lg0#T**SpKQ1iu%2E7_;F5wclqc+gK zv*K_ubA&65sb9pUjsw=~Mi`uq!%%`% zxZ8fFCN|KP8WwDvy9W-K@VeHxnY4{9|A(*eBX3!e7 zASN{8xrHl;8MR3H&F)XBNy2Ft+_W3nJ!gbs^@ImMj01*T-B4%rjCOOfet#-TcT|0R707_f(F3cl!b>Y$a$2UI-eJ;i=XJ~tx z>2H6b*q*Q$a@k!T*F7#<`V6Fk4I#Te4y&T@A&N9SF{f7GlU=(PoV^qWfQvljP%R|~ zfn@u(@Y=%1Km2!^%4eqL6Cg^`{$`4(PN1ke^w6*R_NIqiCET)#f8qBREaJCCVf6t3uS9+b`}5~m|}x7%?t%?L1zRh z&yc6-Sy;c@1l&15dgst&kGeWQRxM7|J1r0FkNg`;`bKkZc(42o3LsL76Q-0fP;JoP z`A|KSjLJ6qR6c)`bn#!vzCDq=l0Azs0a%WJ!{?*~osEn;f9 zm$M6%lA_l-mqB0LZihjWe7vbX`z82rOo3V`HdpDuC%sk6ODwbt7927ER8VLL;)XaV zIp#YTsl`7=Ew?D7)5eMs>X<0hkv2~z<>zjd^61ZBl}DGzjYwzwqbKsbE#Lz%PRS7+N}Q%y%T(H literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.edges.from_data.doctree b/.doctrees/_generated/gustaf.create.edges.from_data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d1defa9bddc0640ffb358d0f5979dd74ab7e9725 GIT binary patch literal 12687 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.edges.from_vertices.doctree b/.doctrees/_generated/gustaf.create.edges.from_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..03f70f7cc48839e2bfb6c1f5246b0f3ab9be4e0a GIT binary patch literal 10155 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.faces.doctree b/.doctrees/_generated/gustaf.create.faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fc3064d842c1de5d015562adcdb4545ccee47c01 GIT binary patch literal 11895 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 BONRge literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.faces.edges_as_quad.doctree b/.doctrees/_generated/gustaf.create.faces.edges_as_quad.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7b7c41bdfdb61c2d73cdcf1feb41211fac9c8ecd GIT binary patch literal 8497 zcmcgx-D@OS6;CqLNjjgC`G_l-j5V&a+nG&wkFJOggDfnwpwS?U_~MLZb=B>@RjIBj zt8QgF;4bUK$_6g@FeUy6`Ufa1`ZuiXg9s`JvM(ZnE~xMR&b?J#)!j+w1J{9`RNZ^- zz32SS$31nc7Bw-l{I8Nww@(n z8rv+BGoY}!>pL+EvZt9`BXZ&TNh@E!kT6@gVK7|IYkZzBJk1)sE^ERSKC4X07kgRzV9|_T^lqlPpN}l?Dl)zy z>*i26enrmbGVRN&z8kP?KkZm@$r2)VJE;H`B>NTDNl4BG+qaSggLtk5R$o6YI%!nC zbS(QIW?iC5<$|z!G?npnzQtGgZGMGs%O`Cf_E|elgMh{DXJLHM)&LZLz+lqWjJ3@k z0~KI#^4Swmg1k!HR-8b@J9~3!htJ5G8#ruG!C9+-e+DA)y8!b={O;lRGJZQG9uSIM zB~$~zxIqtUl5M4k;)uqM(QpH!A3CYej1%;>lgYa$3~O~3yJUQRUu0IwU*XLXn0M_CbVw4yd5izoFI zR?chk=1I(J5xLiGJ<5G@i!8lOcvY!Vv&UH*h{_+E(ve+rY=99~x(!q)+@V6pGQA1b=N zb)r!WZ9*H@aCLQMO|8_z&1l_`6`JEj5K;~hkwz@3 zN>spc2*MajdZwc_?09X|@-^#kO`qPJSXHwAv(s7U$0suW`~r-#sS?Uh_fucECPip- zs2{vSy~l)8G-(a;Mt-Z|x@aA`?3s;595lG&kB!qgmq!XJti`F+td*- zDMEJD$8b4-)Wwz6k@I+hzh!dwB7t1F`Y%hNbU>+q^vI&bkGDT<;&?3qB2fXv+47Vl?Y1dpI@%YA$;`VjE ztsN0uzecvALWT~rb{L3iGEvP2>ZH$JY(>1H3i;siAhH4{G1O6p2o25#mhsFL+~~Q7 zEEo&yts?GRd|_$gf0|PCTi$j20VhD5 zg{?eX&B$v7=d2%bD{+$wk*p~k3a#dE<$0gK5btfx`>x{s^h*if3KaDEmK$VpE;`EO zG6vWn@?G0S#Fh(q6-N=$;@>LTJgR!HVq-;{M9g-(uARLn>quDgAjUsHGIaD%$EYXBw8ckd2Std2URn*`97MC3bXbRacepJeFDOh_U6Zp8*_+w5ml~Ql#D* z{uHL2E4(yybM%Tg8ad}d)CwFcj;$kQ|KG9vlqHCrzHfAxktWQcfSRNo5nHxsBMGK= zHh_CkQdl^Oj;RgrQxzU25`^3-# z{tAme2{651W8+KUxl`ha$5OZtFC*OfOj9nEQJ_#}b*NgJX%{_`YXf1ndm>CN6@hTY8J6!Y!|Mj$N-PQvPw;nYtza2hz8{ zBSHD+=$&8=Rla-B#}3FR1R{FC3vu!!gb#w1e6o1o07YIjNQOk~ zL0F6xbhHzlmoP!8t1bq8Rf$LC_6bCa(sWaoYnrMg+Eg`$rj;~RpFvetC@(FDrxe^# zvCE6+@LRqFY_H_l?&>o9>B;7>^T2oIO(fz$;#<@*F{3!_q2jAM4>b`A%g^>^#!4}wyBTsZhXzfZ4eEQSE=?C-xG2atnVi@6-|&l3&WEXp zQjzWR^?g~-dk-j+;l)7{0&SXpgqP(w3xU+li4##Ge}gGm{0VF_Ia|dMdijFE>?j?)K=U$>KPSO^%DpXE8KD ztfFow*ERB$U21BVOm2_OjBVllm3(ha?_2UvtiC-uF}7GJ>Nu?WR?thW z9s}Z3Go3@1Pu_@`9mbC7Fseu37-|&l%XzqD7d1#A;yQ&vpq{v9r6M%TAvuS7C<^Ck zKQf0V31HQL3u}x6^k=Zmx*Ac&PTDVrqJ*VRXreO$s%yB^!-SdDmC8zNVII1PE0oEu zn~s}U9iIfrxm+k*1#Y(jVd#@r`5iW0&B@HJ>#Hu9+@vQQg8qy0P4sTCn*)_Eqa6xW z>DRqkxuI&)J_~vW{A z&E!hbN8K3hNO*Mupl+yl{c8Flwc}L(blc`AI@(aY_BWucAjIl}G{T)gO=Z<7&cnbl ztS7YHpbHzwf_Q`hr(9+IGjopI`Ce!br6PSo2aKIU=_{Z{=4XOi^ zp;YCYsDn`4Ra|f64Q$w|-_SymaaB=T_{Flf&4XaBJL~7zV;djx~ zRr9#@9`VPiT&*fkZMTZro4#RigdQOuE$B4g)e$l*H40_-JE1?c2Q_$eY;Z_jAK9^9 zoT?UGAK4$_HWnG2=hpaM`3!D7L=ZbnDL&weu|rgdRaSyKWa0IE{5f!VH+vJ_fK~$h r3a}#3O!aI} zchg$L^q0kP6-cbz&_ zb?&Fm=?`l^xwSc?{^V*La@XJMT8`rf4vSN{-~@IuX1++Dr0pN3AEYhWh^*Z>NFtl1 zat0VScReR!e)=$#D}*jwFYadR>oK#18~DX?UgPt;{xEIvhO7x!c&sudFAtMgSc9$| zF-x%Sz_MA~6~P1Z`-$bGv<}PWzRmWCo|CX=H1^|E(>otppiZQGO*YJe9e!5MXIyN_ zInVW3x|Q@T*|da++hpl{jR5gQOrBJ08$ z(p1V<`37I&m-$(~Dc|k!V9a_^;`=P>?FP|yPqUmqKw#X{g!RlJ0~Q3~WV6$9QH*w@ z7|dO{cP8oc8Ci3EhwW8ls>RJe2WI$H$nOjIy@=n-__c{K$R=_XJ1vOB^@mW2Y>Pl` z-f9~y*Ehz2lX%QHMmz0PZX5%K(lVXRZ;8}O_?LL66vGz30%3#NIT)FJgxD5lR%phI zUC2-*(S(sK<+OqBwlWG@u%s4{<&w~IYvnb0@i_9dEv=t0nVAjTh>#@^Vw8;7uGcnp@rEZSiyiRCSv@@8fo=4sZE*@||Lo_3FL z|1KE~gy9d3U~rt0N^M-ZH>(8SP|}(fRlU#}dD=Q`IMZS&kVj7w$N~vOOJji!I4TJK zJ^p~We!t|JKZNmWs?IB_;I9yhjd(cRCe-0 z7P%1_yE`u1wGqBkxthP4mT&VQsz~Xyu+Tst6IL{20&&*V{vYQ-s%n1-hd^}^o%?bg zZ?MHwzVvLNOF6*LOLnxIu~Lq&Sro4jg`vSzHp#q#{s<{0opi5xO<*c79OLYuP`PEw z=jFm6@jPV;Ah&6Xz$OukIOU)4{*O~+2m)ynZsc*Mt>}E6Z)#HoyxL_gIP_dm zK~V1BbbS#Rf=7%Qlq3xWHTwI8>m$er3JR7V2+ks7hsMaLn8FI|>^cq(3I>%+RqtA@KG;YWdQiy$pN71*5r)8K~n#(gl$;e zuQRLrt-gsNw_SMjsO7WWw(%`e{nwzkM~}2p8nO<3;r8HFtd4)Gu2Ac8b!t^w^8V*% z=lxHh>5oqfXPJQb9}wYd6$Tn|IU~;Odx5=OA@RN5?99x4Hn?lF=n84#I@7+cjGA7X zO(Xwnz0xiRy&O96>>002jA_ui)9yXMv-hBNJKq4S9~j4N(KBus#zE`V_K|IRCjA}Y zchj7lY~3L2)-AQBb+g@Uk~Mc2l-2<)5Kx=?*QlCGF~6=>> zRQUF25x(`z?mcP{_Qq(Q9y;~SAmue=Mnykx_K#4>%h)ux6`-h6^x(Rd`#bKbfj_LQ zlNG%6Y*14C#pj~<^P1u-c$^-VHbxt#Taplxe&uE|RYpPGqdAQ_t58QZJn}f5 zX>io6z-0YCLuKO^Dl5h%_g|+SRpEGC0Wy_}a(%r)iwb>>K3h36yY!Vh`UYJYOm+3> zbc}a=57&mlvt3EL#yfPW*mYxe-5^zWm9D9-pFgVP~{ZuXj!1i!+wq2A@vW}q^$S)OcUgGE@6?Pml+a0)e`jKp)w$3UG z{t4>#{kyu5*dj6fjHuce{S=Q=l&p;5$?15xF_2`R%NU++ivP^h58pgeU>yx({8vC% z^-ZQ+l;)HBw?-d>Kq{qt-P@b0#WMM8tUBs7CGgRwY7tfV)v+IRbjJ$1@q_$zB?ot? zJGBqREoGDWcnug?)fE>=tA3Efay;6J&Wo9#T1Z#WUr|Aox^hP(l6SK@y2kCOa;hVO z4uvX|{+YmXv|~GRK+C#obPH%go@aFw=htQ3>@?)(X$Da}W2hF}!nydS0Pv2V-hb z$JlT~Lzu@D#N2fSH}l3V&dU~Lo!l+C6tOUfgz2#z263K|O>TL`uqM~oo-0gnCz3cv zs>zze`pFQ-t?cR&85rnSj{#{w9X2DDh(6bc%uME^8AGNg8;KZnzT8p0jLVagCX1pV zGP&iWB9EW}A{A{8xvC{!*`=m-N#*9$%+wa63uoY@D|+9OhJ5wq$%(1O@*MF1+l$dy z2tDwG{$_sbg~X}3bOtSdc_CtU5ILs9D5&EY>LhQ;dAQ*KEgMM0b#jA1`(?#S&{Qcw z@(dbB=$t0w&@4<6f>i)?Hdy3a9&Na)Aj;TD`z0uhS>gmH+N;1ihe#j9RBV+im6h1S z+;L-9D3e_^9XGc69s?s8mG#_J;C4%3CPu7Keuqt$Gc*Xa$1sQwCk6AfVO z=0N3(_%>1u@6F0J)x`6dKZGHA?ie}f?Q<{7m5_xdB_?!!(2v0($cZ7W9ki2c$j@*g z!uW2l2XNdC_XQ99ZV(OOQI`l)5dch6urbslppFH=J1^e24SB9a1AA(Ff|T38ly48` zwa8?*S=4oz7^pK45PDpUJsj2$Rv%vE2%g?skejf{u~|50!GNh7+lTU8yzdKZ&n&7T z6i6Oj_vKPNMw<-&vHq@v64N_Jj#Om!NL>{0oOzN{y z76uMsJ%R1|1K2~I{GXA#j-(QmFR$^CJtkM z6(4=nJTl#D{LMrzSCyx>TgJUeXBZrzA>^Yuo~FABA;VHoD0|!wyuuz7@ZuD(z-~H!JV+WcMGmRIp243$4v*9O@CNi> t;a3oA3x(2;6`#lU%yiG}%+4meG0x7W5{=ulneL9!54t28iHU?IgT!EvY^<%Wy4_VZ z)m4>x%p+uFgQz=jK_ulPK0bzE1QC1?@bxdKV8pNcSxC$W5mfMZ?yXnXbob6|RB&Oo zt8SgT_uSuk-gD}D?VIN>Oo@MdCG<_p-D_)x;d%xO6TV=0dOToml)RE`yqsK1n!Fxp zyP+2cI!pKzD0I_ujDWex^9f%j^2l<+cKZH&$n?na-28R3X3m-O&nHc@&TEksIjr=E z-_wu7Nb9xrfN2qH_cWb_?Z~^LhStD$*j_@f;>{D!usvdF+zV6r3tvej*K@uG9;3uu z<#jdRlsU`i(!Ff)6OQGwWGn7!yrD%=V0GgN7|@<)EhD7;&FhX9h8VjbguvY@l;1=}6D@$3f-h8@XR zN9{9E0S+U5T16+@YdZ+Bzw?)8;;uQxYnE#OuuN1NG#leuy+*?fFd?D71O+|Ae7J!gF@`UDuY(r=b&9WqB zA?+rS6wvTHN3kuH?d+I`sbXOlm!(wYF0>(ln|u*Gw|uA`t;kOj144(yJsT20eQ)4g z3VrB2tO~D$EZAWQVf7?dc|6sf?yYnu)g);`9ce=T{v}c=$k**FUT>7}hNN`<^0W|0 zT>w@^t5G1HVN@O}khwYunFT^d!m>ci97e=^&b&g~|6;Ly^LZ$^D^tQTKF<*K&e-PLN5fG*Ynq?eQ#|2O}ANMd-+?kOLv) z`Q)d(pbX~pBiW+3Di(Wv{9=6CJB-h3*fuR!=W~`T{B%jwHDTu2I_X`p)|(U7fpghzX;*pc*`C4?T zJSO~(5#Ae23O|d8!xwt7;|TKw#|<^|bV4}_6Z37e`_%*q0S!r4v{d-E=7wPPF>_sl z4wfG!RT5e+Ly7LWQ8_uvqAX=Mb&_O1(0sFO51;&uwZmM6T#O=o^QK~0THkXu$9j<| zk;w*11U!*|i)8$w25SU8dlfqPa$6$I_Xy!-7z2 zE6)-^zy#PDz1KoUXKpH1PqAD-jufmSp^qIcXg5ABokdAv8YQ=i<9XYm;#k`xKr6hI z3F-fY+gugwrRk}uV`+oENN=3KJX?}hou70p2u5?%F3F~>{vU6CWJ9^wYPBvZ&4)G` z3jV#MD4mzmtB#Uhbuiv&KA6*fSSE4iS^geokoz>(>~ml`yhX6(wVp?3oCCh#!1iLT z5BGW^qH_mdHm$zt;4f0)FzJW@jqtT`o3}@#9_j`kel>f zrDr#S}98LvZLiOzKe+CbB+p%91)gSJ?`p z)`~cjs|f21hZg96DbJcuxyjsHO)yuQk5%RypU#rK=tR9{6B7ujXZfk>E=x04IkgSE zl`HXL36G4qQ8})?`<@tVl&~&*W|g&4CQ~_Lrx7&s5NjoUsPjh8VvZq`z5?@7u|zyC ziKBRwzFIw?G(MZ1jgaY3-Q+AU4;4H3-my@5m8jS3Z_$s;j7WU>2D+ZHe~3#wUhEn3P#?ljCifiTgXaD9{i2h0< z`X+vaA z8~#*TZ?X~pQS$x=!TWepak?0_U}s! zN$~8qN<;hvftFd6yeT-lP?>EqXQ@GbP;fS$v}{oJU%<;z4Qc}u+wb6o8}?uEzxlTP zE`G|UlY=s3I#o;%O%9pP2%6pFYthZ?-%s`E=Jg-kwk8$$SGl^ibuHck{6p3?aZ3Bg zg!7vHBm7J%@zJb5l%y0~!Kf~tTw7**#KZ5xtY6hn5LNhIT>uN-abMyMd2*sqP%xF(#~JJi1#jD%U9 z+8Y%>#(N%8(^U4a(@RH`eJSf0;ZDh$$h4$j>92{rAw&rAi_)8&}iGT=Mzj z0IIVos++PCJ6>(_&a=76?~DS?MKVRzL>1XkAEgM{d9FoXq&dmuDc;Cvn1S1v)|=+b zdK^$+Tg|)JOWBC*X7hy<6g2Z!sqZbi^Ed`k;o3;}+~=wBQJfF>oEJwZeI{Gx$`-Gu zy=OEMaATmQiuU}#$IW8kc@bDeBVaG#(;X!Ak_GBwY=fYY-o}B0yOUI5r<9SNf|Z&S z9Y5W}G%gw|rH428N&0HQjR)!;GR^@q{$*-i`l{{?=v#yk6Ryb-hP07J)Lknw)vP;@ z_0kv8cKsG#!U>UDIS$)lfOCd7Oys=TZH=$8Jqsw}{1}JDXw6{VxR2$Qk@vcE;=;U4 z8(^dkap;V;MEr?zv5JC;N9QuM6ym7Y`WW;H*XM>Gsw@b+KsAv>J1l?%h*dN<_=-fn zG)qm)lJND)lgbqKL$k2DWjSxbL-zK$;RltM`Ki3n1&AE%32o}E;t9m5t2BeJJ2*<0 zx)&I#!RYjfW$0UhEj|Zh>|vWg#4<94K+|Pei_uCchWHFRMrfzT17FQm62OW99Kxw% z@6d!RVnirANxvBKLlzsJiY_^*PT}n6g-k8KDYQgKFV6}sYC~c!)v!V;j$tDym-Csa z!0eW=nGhaB*d54Eretc*La&8B@;FOZSOmRzVVmgVV>SaKU&LoH5S6^WJk3|h-k>>d zAByN$1DtA~I(30B`^+z@X|x#}-hF60cqh}~?=z#w4=;5(7!KS1eq?%X+Y9=zs53+< z7yzY;!U)6@K^zMhZ{7dkM}g;Z(9hqCEmyc((OHVfJoi+W-WIE0QF4IC_1 zkF+kV$cW73@&aFnP7c)EIO(h|%7Lo-UYs`Xe)lg3CN_G~9mnL(Esu;6`gU^4VM5BM2$kF;%-p)ld7_%MY0E+l`0ucjX^ zL06rg^l1ltmbp9hfe>Gi-UQ|gO+-8s)mc?`PlevBf+=WL1a}LMjwUmCbAEbgla*+UP@w(LK}o2nCP}=8j}&crhOq bGF-G=-H8p-nLe3)!ysRmx&;d8aku?%U>HKE literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.faces.vertex_normals.doctree b/.doctrees/_generated/gustaf.create.faces.vertex_normals.doctree new file mode 100644 index 0000000000000000000000000000000000000000..68747d777e7a2b1c36998e536629d8971b43a219 GIT binary patch literal 13400 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.vertices.raster.doctree b/.doctrees/_generated/gustaf.create.vertices.raster.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe1ad2cbccc9b716a70dbf3b561177d8d272da06 GIT binary patch literal 9491 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.volumes.box.doctree b/.doctrees/_generated/gustaf.create.volumes.box.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7001cf46e85b3227eb1fc4cc2c9f6486d4d18f55 GIT binary patch literal 11679 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.volumes.doctree b/.doctrees/_generated/gustaf.create.volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eb0aa9db4ed1a52ee851ea771a5acddf038ceb91 GIT binary patch literal 6507 zcmcgw?Qa}M8TZ@SzKh?Rq)mzG;g(>l`0Stxf)o0IqEc*PP=z2QHk-NKxtl%j?JhgB z@ma-E_)rwXfP}I|NQ6HEAt9uK)DH+D#CN{;4?qGWzLwuJyL-33_-qFRC!OwQ=9y=n z_qT_o_wHXAG9NuFL*e?J8gm>!aJWqLq!ZY2oBJwxoUD95IZT#yIb!=Vh$EXPdI%7< za6KpDezJ?h8G=`?CuUtbeJo3BN&@AGJFKZy3$(iid{ z+>&c4^qSS=fC7_FcG|~tEs`pU>!PeDB)63t_+3$pk{Bm}EaR}GT;=h?QO;E#IwL{A zk9~u8Na};Y-c5`)MOC~iJ|RZM(zbYMJFYV^2Z@V?-9%i(_cFdO;QQik5{r+E6@Xt$ z!NtqsrL8g0J)}#n@9<86w3O;K{9 zp6T5kV0xSEBxuCMeL2e= z2s^dHaiZr7D+??ik793C@Tmu#<$LuY_8s}@YQ!b70R=+2yHcsVVKPJ&?ikxDj<{15 zyu$={qQI}#y};h9A`ysM9{5WAPh_Gj>v7eLf;fCi$`oEFpo3>r!6dHiyN(jcR)swJ z7m)hTq1Y$q4G9GVcZ&!p*w+K+;3+~u=V%n{Kecc21I5%6u6#SEMt^w&fi0-FHts{* z)mtY9(i)ClzrR!6S>DO?v2#ozJG(n8M$pTM`%@wJ9mGhh1OF=!rB}}VQm(WK&s9j0 zUIB~v6Qw?}u17&r(sR4N40byt6GMs~2@ewF@q<;coACZD_Gc*SkEf+NJr0K87l}rl za(eboP!17no4I}>{;DUiQU@VQqfvTWU%(n+$a8I1C6CPUK8yV1NSC3FG^Y*B(Rvav zrsheu%{y5wrLPQBp7H-bAh-Nq{N9A(4`B1_`uPD4T+rMHMa}VnsghiQLjB*eQ2+bW zR7Jq=L!Z9|5x>h#J@fdU=`TN95LwsfztA;DC6*>b8>jP%zgtg z{Q4|RzeXpC{bn6RbJJr?(eohlu>$3o8eU6}T>4v$~C#Ifem&GD=PS+6tvyx;`FTkkAAAFb< z|F1wLqp5+X#XtDy)?FxU#bMI=4v{n^MGGa?BL2kn9z8h~c|+0dr^L(pqKcR=Jw^hu z!YF9M7Si6YqymM!ur;JBIShBOjLANS^^6@y)U8=*w*@&*1lJ?K=GiEy^tlo$-Ee9&rL~>qwEc1m28U@1l=tB2N6YJ2VESx)^>=+g(wIVNQKpO z5D(RBL>v0p$%}~CgEDyY#wXsu%B5Y2~5Phx>X;~<~1F8j(4`bC>y|F4? z{J(nq(Be@PM3!K_<8kzS<3y^h52 ztmlXaSe+CQk!PaNw8#8r%$gh$cMz3EFxSw}McfV|$AVkKX7CL4uG@Ot4*Uk#ghX5? zHw7`SXDCcry)8XLLx^c7ZiiOa7$I1*;ld6hpCROK>shm7%$&5}+X^L*oxno01k@br zi9m9zc+*%38leZSbd@pIS<7)H729AWqjDm55;)uxn2~S`<8eSboq<{1Ab6Sn;St1S z(j|g41OU=fybbjzlO%Y!`pNazAkUeoVfUe@ogVsYIeNG) zBa_|ZQO)J5VctL}SQD!4;juFE7re++@{@WIHrcki&e;ud=+MYQj`W;7@D=M=!fgr< zU)b*$Wx+&GNi;;t`fd!bmJrl)W}PlAbSf;%FN?N7D{e#aslP$WMufP%hyLWqOwr7| zCkq2du%5tn{RV6xiwg@BC=g%!z}z<3t{1S>8EL4sm%wD&b@awk9e@JCF^)UZmux`o zSsazCXJOz+5!X;XpN*klt6n3GW=DFI`wtRiVLh2f6Syxd5rZEWzM;_8(U8v!-R40Q zEK8XV4pxRy9D4DEW4r0N4%@)i=q{-0rb!R#Y|RTo}J zeM~jgc9rD6QC&K*7g@^s@pXOcECe4ud~za+4s;<8i9lhc-8-p^v(2d)vlH?PwTt;B{;>ggDJY$4Qf|&>0X@Yr5 zB&{jjI6)x8xj^Fj`S|?e(|n#b*FBxx+Bw;M^}l5ITe~ejft8WtvFJw&wVs8_A R*A<6qhAh33-NyCWzX6%>slxyO literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.doctree b/.doctrees/_generated/gustaf.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3259c64476d9ea1e64da84f024d5f6972eee5446 GIT binary patch literal 14315 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.const_elements.doctree b/.doctrees/_generated/gustaf.edges.Edges.const_elements.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2ede6f5be52cb757335d671998ea4d5be1ff9d8f GIT binary patch literal 6325 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 Fe*i0=TC)HE literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.dashed.doctree b/.doctrees/_generated/gustaf.edges.Edges.dashed.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d10848d7b7230e7042c94d8b143a6926028610e9 GIT binary patch literal 7613 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 B^G^T( literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b4444fcc166b073fae24e6f40382e1ea60061c1 GIT binary patch literal 28623 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.kind.doctree b/.doctrees/_generated/gustaf.edges.Edges.kind.doctree new file mode 100644 index 0000000000000000000000000000000000000000..57b0bc6325d2a660e5c0d0cffa36d28f7320927a GIT binary patch literal 4096 zcmai1&2A&d5!N3`k)p_zyt@hD)kcQltQN6IA94s5b`ZeWLm)&4!^kDsOqw%I_Eyx9kUW9`KSJ*Ls(WTQq@eWzTuoQkR9AiVRaMVlI)DG) zc+34W<02Pvww$mi%4Ea~YxW}hiJhN}C z8IihZ|NSDcv7rb4ECs>&?m zYI-Bp)zk-C|AB+W)H^l}793hk^QhXrhsHz|2<-XAPB{}>rUQKVvW21tSo{oui1z^7 z`}lo;-wXU+Qc%D}#V(XHz!7H)B*DB-IG>)~Przw|&C9poF1nZ6vQqp)oUa1E6wd)K zeB1+>!h0^BVP`};K@kHrU8*%Q3^wvl>O-ea{3MWTPKu7{dSy?Pr_HjW16;cBx$rKr zHFVC*0US8bK^U@X4(Sk=dAH_k==GOr@~X%g(SIMW6kJ_%OM(9ur@XE*{`rq(yvn~P zdVc$g7=Wx~i&Hs2y`O}MuY%_n+YZmZgJBbcy;Z3^HGZ**|IcrWf1l#_!S9pl`*Dju zh(A)0e_918-hhMNpRrF%mPySv%H4EdP>?TNX4WzucobVn+&-=Iho_b6%ZFVz+c%cA z^Fuyf!$;+CdhGl{a6w*Xp)T(^xBW?T;wP;W@7{J|e*eU8suOQ~j|3kd2<0CS8y0_i zFc9#$0&xY3YFpxKd~V}W=PkdVx7JG^GwKrPdw|NC0kJ{OzCi1?>*VjIGAgNC4BHe% zZ*+yhRazC2M5AVehW{UuD1z6BvTe=R{Y2GfRVn<(d_?= zL5Z?y7MVQvUHQ)RGFd;4YVkRB;9GlVhSg@hK7vLSR?#SpGg-@OJ+efH6^H?jE6^X0BAXjpM*6D|BN26;b_F~HnY8@V7S<-piW)zl+MtRT-?qMzQ1KjLa zFyOv&)LcO3%F!dTru%!Alo)q)qcL4s>b%tUQj9N6zZ$nvSu7&VUEDy@9E$@brG~3~ z9xtugo?46vckc;s?iCaU)v{CxR)<7gx(v`RT%I^l?xmd zU!A*-@oarF;7Umq2$n?&SI7Xlie_TQ9{HA)jsZ$De# z*m&7Iq8PxvLI9$~jqbyQWs8z6I1rD}&~|WvHSZ`MN)-hW&p9qtSxC2}OVdU9&CwWv zNF3FK5M483rIx`;WOicE?Jz3SJZLBhV4WaFvr-vL$l%yX9N8)RD^XtXGLiwV7|?pe zm$@u>(0&L@)(3e`nKAfI zrD1+5w9boH(<#KoB)`={W)rCvsHi8T=^TJ&pm~b)Xm_*X`S}MQ{StVN)I8iUPm-1S zpV#J5yo@M&#nmL{dhX6ZLzoJkCOE9G*$h<_X<;w+%?UV}22F7`0aVwLJM*Zx%`{sE zB3_6DKk#=ikwpDrkz#}eUzVuq0zkdv)_xfzGGrCBC!t{Q2Z{If29zCyc>Ai%(f{dt z$$bP>ZQu^c#*+|Q zR{_V=N&?)RsqZ?kkE(Aoa5b6xo_1$;d3H_TL}uT26O=EQhzS;>HguqwT5xnH%!?y9 z1!ie{?}0TDeF1%C&GDL)Cb<*C+PqnGsioor3+g=*`e*Tj_`WcG61dTZZSlihA>O0! znC~&wJ{GS_bJ$LpGjSNk{?bV#@e-=bTF?91mUulxfCQ&AnKT@5s*g8>jdp*{V!uAs zy>z^0A1zjCi-LKwX{*}7q(j#TWl22&V& lB;6m_G>Jh!sJ~UMz~81O{|DDQJ{tf4 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.referenced_vertices.doctree b/.doctrees/_generated/gustaf.edges.Edges.referenced_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9c5e95d07b4fbe8dcd92bda02e270dcc438ee7c2 GIT binary patch literal 6211 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 I9o?D#0*3>&kpKVy literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.shrink.doctree b/.doctrees/_generated/gustaf.edges.Edges.shrink.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9a9ac41fc0c947879750a203113c6dd36a0b2349 GIT binary patch literal 8171 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 tt}EgSW{m*=y>e?3ZlHby-@Vf}Zqy{{g>epJD(2 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.single_edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.single_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..34f261f0da8313f4a9e3a30cc94ce9162b7fd178 GIT binary patch literal 6281 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.sorted_edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.sorted_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e55941b9fe19c11e8af7052347bf2532f1233301 GIT binary patch literal 6279 zcmcIo-D_k?6;Cqh?sVsSKH@+oyIEx2PMmaf5z%24VHre&L1q^pbjEA-z13Z}bHBW| zZqfk<^kHy<^|mGJs|f0Upn?jkFM?0*f)C;!;=_XePSw5Lw>uw`5e;;wtLjwM`S_i4 z>YN|ee)@yEGv-gNW{L2lVTXBM6ni|=YQc-$Jmito@9CW%>8HA_nkhTU;yiV^Rx_Y* zg&%k+kMt9*R)}2sLDnhuH!|)@KaNJ*MNQO2N2 z&36{3l6#LGGpA`Uw$8uHhs4trJ7$U<&$Q*co-lAJwOCh8XC#)mq3VS+hiX3XBd!ng zE>kTgW$Jfx2`!M+H+(N62^(&}vJ8{>U5i*~e=T@p8()Hfovp%y>t!#rx&TEO1W-q~)S zH_~>UNuj)W&F7;04SbSYuh{*o4~JY7wmLB|sFNs+Q>z z0}V6g6KZV^!{9-dF!GoMY{__f%r&XtYq;fM0g1;if4DrD~w@J*{q@N2ykIEW(a(vgxFx$(6z}QjzM710lyAJFlGcDd9 z(M)3H#~Lw~=qwN}c2L5=+hWVw9^!n3U}Z3BUDk~wS^i!6IinY|;caST# zjo!Ce5W_Rr(9gc~*-q)>mlKT9{p-uoUG-|>{+Ed4|9`iIYJO3urm0#zp9h{Z|Yw&s6VWT3s&gB;SL_4y{{r>iwJKIsxi9D93 z?9>>fjr={^)?-G#KE(*Vj1nGsct1EpWTA?871-ENjpBmJG4D5 zh`-GNNeks|sJZ*w74D~%Fn9-aQ!W9$y;<23|5pMJy4ZGIfpOoU5Blc=L6^Nh@bPaj zz}JNm?Yz81tqMBEka$M7nR?`+CvG*_Rc-lFqE#=xu8dcQQ1bP!l4@QMv=NVuD_zsw zufFs*2%{zki>-67tqa2Z&p~cpGv(`Mnu)emV%?Ta)6cTPX)H|xPdDQwgWp1G6y$hQ zSI1GjXUjY|R1}v#SIX%KrYy<=MvVw3N#j0BFk98vWGq>r4`x)Wq~RWhIo&s_R@^+Lo&mC=>31BerE6!>U< zgb4Tzvu`Atzwv`0Y=O8)TXWjt%8-BHJ-ZJ!!c1Td1djr zTBe>%l!wl+7pEcO>I#*SiQ~p0b$T)!xM^p2z|D+v;!EL_oe$hsY$#eGP)o`aJiVQO zA9JX4PPGIJM#Gv~=R+S_lqlV^lBlL?9`ELTT(@$<(ufif&gCq`OcUmCIf+F4`4M#H z@Cfx9K~Obw+1vZVo+)qcO)fe-P2j5)h)UR#+}$XFR3msKi|M@-T5mkc48*gby^P5ew+RRWoD2PSzh! zB^l4X*g>lTRBK4namJnMPJ&zIO9RoJ%SP!caJwZ4lObjpzr&%+ z1)0$1b5lu#z$_@`^)jIhbkQ4O*#J~^nfcVDR8)_xt zi9@dnc&Td?hBr+Dw1anY4Ru#YnPd<4_c5KJX@V|Q)QQtRJn9Zn8U{e=NFKsG(sXEe zviJIDJ_miSq&;`)c$yg>|EcnLI4>i}9`Ur}bJ;U@ARz1u83wqlDOnd@cnW>XsSXp%cU|D^$DX z3Y2v&3~&7nS~e=g?xQ?GKA={u>Ax0X;0)-AT|epp14Uf8Nr58EyHjL-NZ1WxW}T6m zrbil(3A@~b2cLoi!O;;pQ+HfY9XT9tz`#KVj^eK2dc9~11FJ#L#9?k-JCcd;Wm{T&U0t_tYQUO4-v$TbBYg0F>V|L z&@^<49MX8Zn12s?c%~o08_;usUqP)I0AMd11(J#B#nH5};i4b8LGBS|`sDU4k78XB L7AT?T-OhgiyJ|=8 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.to_vertices.doctree b/.doctrees/_generated/gustaf.edges.Edges.to_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..27c0b9c00d444c06e37ad53bb8e279fd626d987f GIT binary patch literal 5761 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.unique_edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.unique_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..34083fa30482f315d06807f82c721ba1bc98ae4a GIT binary patch literal 6179 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 w9npY38gT_!Q#gP|y*yQ)rAoy&J_ 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.doctree b/.doctrees/_generated/gustaf.edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..56650bfb50cca1e94e0ec1c4883f2287da1f1bc7 GIT binary patch literal 7284 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.const_faces.doctree b/.doctrees/_generated/gustaf.faces.Faces.const_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3827104fb8fbcb4c25b5a787d213fc2ef93e746f GIT binary patch literal 6002 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 SklcPLpjcOi1-j7lLGPb9EE2i^ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.doctree b/.doctrees/_generated/gustaf.faces.Faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..370aa2b12abc94a7bb21eb3f4c5e7dc8c86ec699 GIT binary patch literal 27129 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 VAj}NO?b`vxx-u+KLeKlX{{Z4EC}aQt literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.faces.doctree b/.doctrees/_generated/gustaf.faces.Faces.faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..624397b5b50f0ad348444f153a01ccc9414f757d GIT binary patch literal 5211 zcmcIo-D@mK70=g9W+urbxgT-m-mJ4+*5u+%#s>unmy58hAi=Qiy1vNL)O1%*^`yJ2 z?XJF=JS@5oiyNpH+4e=jClOZv0})hE{{j_!So~Ag->K^E>6w_^ycn3w)TvXa&d2YZ zI#oYy{oKJnywU9mAu6=GXF5}V?&SQY#F zy`hj1AEtR6^K^J2)AOMC=pp1@N27(>XwFEMkE8w+%mwW2x8zxb!!F z^!$keMotC?mCgq*o(-N?TR2$)RGkcJuED{J7x0RKGB`@NN7I z2>5vzTD|5nM)w>gT?ds=Wrg@<&0kvmvjU}&7|c@fYjWjVV&A$D27H@*(TKDwW7Rwh zn#H_}P1rbPiD&|$|1L*L$JxL_tn&IIdFKA#-|YTo;7QZZP*?wt2#5W@E$#2>o*(eg zbHV^+cZT!EQD)}<=Ty1WxOlcy_uhfOBCdFf$k5@oH%FRz(5QiO90t&eg$_!AjK__2O}@QyFjMqDcUSatDEe<4yEhg% z8{bFbU$0{N2bp|ZsU%5%0@EMik3UxiSAqLmMbH}-r~`GGl#bY&r`2{&R+g8R?rti@ z?EmsKnvq z0Qxt&iG{LW`rdM_qx2hRPrh#!(ZSLj$MVSbcZf?YtDpUfd_=w6C4#nDPFCYxaFi80 ztC_ZAS0@t72`aa{M6yogj3f=x83v;y2RV~+TnX4pM#hKVX)7`Rn zmuZ24hbA5unkd0wBb8D?RqhAVLN5=IbXEnND)BiOdgU-rLyWfQT&9}^%|exy4VS*> zLkv1!-kAJEZ_zy~&Ld~)%QQkt_Nk9c99Kqkd&?m3k)`mE8;WxgDB)DM8|+suD6czb zdNbvTOqCPzmmKa~(LKS!df3vtd>X)uXu&pqkjt^lqb)OVS2r@7Lg#8uAAAPba%?6%_t85@OUNU7y|l`2TPO&F7* zO4xfBP*buweh`}Lq~4=n*aSBcx|<<3B+Wy}H}G&!4^Nl%F6A4L6ORGJFoxuC{8h}GwLf)jwAU(B0ISq83v9_a?L4-Axb;T{!=EFUef1rcF4l*}e0 zJ&c?efJ`*v9y0h68VHUK;7UJq!FBF%G!LPJha#%GM(f@3sRvjMeOuG6^eT^E(gTa` z*lL3G1rl+F1;`EM*uKI%uIxf7AWPx-2&nPsIpxDb-g?icc8+Wx7jbbHstkOk8E+4LpvRd7N?2#oM{wY6j1U+d?;FPZ(@rDU_oXpVhlb zAz&FQf*p-ySmVJEA1n}S?(Uq#ZndjfbZ<^R%5AC&B+tV|S>+5)JyZ}^=2RbW#JDmH z;c563XUO_nCH+(Q;p5_6WCLz($Sb%t0|4xXbs?D}Z`5QH!;K(z!`vgxjOlHx=TWUI L%K{zf`RMq+W;f3; literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.kind.doctree b/.doctrees/_generated/gustaf.faces.Faces.kind.doctree new file mode 100644 index 0000000000000000000000000000000000000000..80a629a280b9d6dfc3e5e90842fd78d9dd3ce955 GIT binary patch literal 4096 zcmai1-EQN?751MbOO~azv%4*j_0~al0O zI~>~bMSuoDkQkV|On|&fFM8D{XdfX!9-;UB&J0OWGQ3?tYtGE!nRCALoge;0vmeQ@OnIj5xAx^1_H%n?`ik8YvQ#0rW(yLbh?7Y1%)Yi} zMB+M5ib?f;ui&AMW!AhdI-)CjukD%Wn~sik!dpk?CyTPsY(AN@kQbBRx&N=?EVA?p z-q`z;FUgdL1;4W1%5KhJleXf>^n=C;v1_`O?U!aRi8F35%Na8RrnQP^rH0Ss<8B-k zd;SntDg;KQOSEdc&r{fZL3_w(}#i^X1-VegWXTkG}ZHH&y!LW(J-YQj|8oyZi|JOJ9zfb;q=l4nVeZR$@ z#GlE@zpR`TufaiY&)A10%cN!->2A6&$jKKjGHVeJJc_L#ZlBii!_&(2<-?|%?HkM5 z@gW!~N+_dRI6n6}B+ zG+Xh$d8`%7io|7LkSn=B>GaLEqfs>yd$DB(wG5B2Ea|>&GYU&ZtvqNN_psja4czQk zFkoIeY6g(Ga`cF->Hd)=CE8tGXiQg@Ixn@o6yr2pdLtYU-d#YpRw7A0G7AReKh?O=d4Zz$KH`Ifkk%q$%mrbdi2@6hQct*Nj-HWw6>ZJ2B{X7?o)rG?WCeZX-sqQW;A~;n?jsvQzX|TY16DNCp@&AoYkZ zb6N19{ib6{sDtach_$2aIEdnc%@T5?va(mF3es)}XA0B^-}%6rN-UVii5mgUQ+mQB z7-Xn*BQ~ThLdXv=={L)ZZF5BV2Igc75HX31eo_1F1 ze_pFc@-m|A6<3p(>$$rF1z{?5n&7g&W;0|_q=miMHz(j^8Z^n-I8coxcji%Xn`yQT zM7$6Qe&Fw3B8mFLB1H=e{#GKZ3jp<&Tl-~@$dFago`izI9t7U!8&Gx-;_a(4NByVo zCHE0jm4Q33M}~1W2M4OUa7=}wC}$gDaZ21xB=gBg-!fMglu2hiLI&T$0>Qb)9Zy0? zT?HInD+w?;Q{8n|A64IG;A%4WHSNyq^6Z+viOjyQCP-f}5gjZ>Zsf~-4+UCuoOC=Q_SP<{grhgVciXRHorw!NIa4dejE5tkW z9rFXa+6Us}(j2w}=2RSpu^&2#Bz}kTvX=9&L8n922xUn%0c|CeNdk0%Bl$FaP5uXVZaseh literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.single_faces.doctree b/.doctrees/_generated/gustaf.faces.Faces.single_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1c16c99f189dcc231e41803ed877b4274e79455d GIT binary patch literal 6297 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.sorted_faces.doctree b/.doctrees/_generated/gustaf.faces.Faces.sorted_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e6afcaea32280546783c792a0e377532f5519da4 GIT binary patch literal 6121 zcmcIo-HRki5ucCkp6Q53H#<%;)=le?KRNU4n2(JgO$EwQYd3FH=iv`^XlYpPq^y^eFUdDyQE70R7@Oc%V*YP=^%RxU`Xs^_TTEb)q^XPld0`7$F zL8m)!q)yD0kimh`FV9c*>g$bYo+!f#@kwzw(Z`8+30jB9H-I{SPU0?RHfhGoLnu=f z*%WGS*MU-rX^}z;*X=@rG+Cj7v1sU~Tjn6OJ06yJfpEvpSWY-LrM9kKgD8h75JkJ{ z4LZa^!;blsT3csvbU#mlX1EKMLwr*_q|1M6a(VG+ zEZrS5?<*kvHDc2DPb*SE^}hS<@29P%eVf}GJ?)lZKlzK~h% zxEDE03vRAhHss3aJ6HM)sO*bz>4eJ8ibc{;hC!zZ8M z^G!ycjhF>f7~Lj=$o>d{*i7TH=>#@^s}zI$t1IS&TZD^<|>!FHimHXc0h$8B0aYTKctj z!Z?gr)={#vcxNE9j`N+$1IDel>h&`G}QLfQf)2W z9)vs!ycw6Ny|;G0rm)FWxzw7g=56h-RelI#yP!}fO%(H|>nr9Dkoote*%x5$vD|$b zoX-g-e(ur^#OoU;60frr1J6MeB08|hLkN_~u(qzww_6S-g8t+Bg8m(X{tdan#Ia`H zOK0Xi@z)nI{h6*@^lL8qoSl9Prr$sxzpE}>S?7-xL9aaEc>9vEEym-?{r-LZ`;j3& ztQq1j)j4Iy?YgCrZ*T%JK9}bSh%*pqua#2H`@Lvi{OWQ zqYbRMj*UM2AJ}Nk*{Gw=(-N$^dWtr={pUW?MPRPcXK00snB+Q_TWr6Z^Qg+BbHP%6 z&`Hu>60j^|=hiG;yzq-%GZE)2GvZM0l=37%hT)yzovQg*iI82rJ$p=TzjtT$yWEjb zQ_wRQvoJAwDLprO4FrCcMxh@nbD>u-bPD~E<*nY_`Qz=%Jmr2k2z~QRw~#26&m3N> zRg9(|H~8@A0SUS{qWeRsyL#!MQ@h5jT1M}HZ^l)2b-SkBiAv>vrGil(%dV?}`oW_i z7CsvZI`xB5h<~FIzUJ-`4TOALFhwNvw*y&(_DS%uMv#wOD6W`@|ouZ%O8W? z<_lH+Fe^mYDY5Aali9?l#G2z-L2_ilHTnr|jgl8xYki!^Lsv)vhl#9yZdT+&Dw@s# z()Dt(8t;Ik%wh5|(^euYTE#~@(Rn#n3chA8=w11|4U1GT&grA7u?}rEQ+~Td#|@0l z|0p4;Sj&RZr9V@tKC6m9I8BRFxx9vmJ#Ky3RJ9B(xRKPP-&seiP$>Pt+H}PQjbA^5*qD=IK^NslTtxclM1!e^JPrE zlpGuGISP-srFc(5CA_M)fb+@)WwQZl$#{xJh!^q49O_)sZNZ}Pu%UPOSqLpE6vuhR z)XZgaSGCmV@<8v@5V% z0F$qwjR#Y?;qjv0A%6pMk|BT?p^j4KtJ|;Z&6KAeJ;v}-^yF{|a)K0ShwS7U`r|^W zG{1jz1agkH1o}WpPi8}S)E(lq0)W#~JcfCc?Sb(0@YPR!8v5MK2L8=TD3i# zml0%7dDaWL8rU-s5RQb3BOKOJtPd{=lrYDudLNjKy|HtSFW|X0%mosc^F*;TPlQ7e z;RF2Mh^UZ2*CR%8>wTwySLaaFEjxBYFOohhRlDyC6h}S`@B9r~wkpKx(;~%tK+RCw z;Vi?z1<)h?Fc|;?Wn8#Pfg&&ZGi+f@*o`D}&PZ*^Qv=AveICGr&mn=}=s8^IJ3hEh zJ&x2V^3da=xND`}DI2fAYBX>$?Lsf}adZTVUyWIwILHEMo2uC3wt@xbWbqWE?Qeo`4FQYLYEb;aXam?MC+Obug zY8Ty{+8^OIQwGj+XLhf02Cp6>h%XC@4|rmH8AZ@Ebc#1*<*kzbKJ@UOc>r%fR|9?p pwdMeTJ8&FGrpRk!vbEt_nD|i<5N3wt_U(XTT^SbWK`;8f{{XE>7#aWo literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.to_edges.doctree b/.doctrees/_generated/gustaf.faces.Faces.to_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c2eeb305d51e2167b8792936fa685ae5c3fc0f36 GIT binary patch literal 6767 zcmcIoTW=&s74~h$9^dWVH5aeLL@0^9tj7UGQM5`B(y~aAg$b)DLLy7k(_J&w?VhgQ z?rN_s0SZVf)}jy(+q@#)k@y7&9`ec$2(J+m@COh=g7BTH>gk?wJnKbZX*^S>PF0=j zSEtSgjbHkopVEJ7ElYS1pLSf|kA=^&LM`~h%Lgo$#nWQ%$HfneUDZn6N14b|j}>YP z93BrMKV@<8piryCE`uoR*!A-n^JF06;d0*KO+Npi*ySzNkb#U?ZA#tj=b3bSou2El ztn&^1UyAn~=Jz2Dt;4dpciAb)a|!p9<$hckd7Fs~>14q-RLdEv!)H~~YH_6Iq9A6) zQQmdcqAO(@baRRGNZZ-K&q%X*FLJXCMEq{V?!f$7@bjb^bY1T_Wj*4_)x323G*$35 zzRj2UO+L$a)O!b94A?=M$1zI}9*Ok$z^Gh)LBQ<52zKD~8Ms`@d^1lI~(=m1dkQfB|Km zjzq|I85CB$JPsb_?5%gxobBlVq4mppJw-7&pp0DJP))PiMAFu9XhQ`u9vVLx8Ql@9 z?W!e6w4WfDXjipDhv=x#V>V*d*6AR+lO+gXWC)gIEInZbS>kP+a?eJ?cb*juHa1K; zBxiRhI^eCi-xj_0M9aT$IIWG`(xw=bZF&of9|04kJpcYgwKoB9%@ya8vm(7X*;!r2DUo zFl;1Q>INzU;RK8+Fm@uN`rH5_1P*EC41J9u;zJ*oU>BP|WjH}Nb8q2Z=$r)Xk%!Bx zP;2E+$BjKc;)rK~Vhb=X-L%hSp>8+>;pY*{N{H6kh+6%fO4tpY&^$Mb1 z0<_4*{nSl(Jxw<6GvI!lweQir--fcCGN3=;5&2(DVTkMXt^v~aZdZtCuf4zD{~IZQtPGcY>;p_3$hxMnj`C!@oWZ_vtEBL$zL;)e_2a@Ik2K;CrBE& zL0qVrC}So3BH^MYRB6;D(Pb%+HT;Kc$) zqws>{3J;82LyJ!DO)}_~YP3K8;Awj@&sYA7SgPzwqSU=ugV(W&*nq=!c>NhhB|SH_ zp8S)%J9)oV7 z!2iZaOU6fSlP#ur9-&oc`0ev(RQl>SwCJk7($}MQL-;Dzm4RfPinKBel}I06S)@8- zgojvmMaU@648MgnPr`TTz>mUj<14(6f8-Mj4u7EGglZ71+ReXvHlNMIkc@XlH&4#j zf0TDO-?>nYeF|KB40c`hlvU8U5WB{NP4jFXFWW3K8=iSoJ36?+ze5`|VDPxAk7KcK zp7=oRSd>3kOY%NF=g$D?%XYFHZ-B#AV%d;sEfyuMxO%8dP}$-Q(0q@cOw}!~nj)7;E{h|+cBERikAo)&20j`(XmSk_43<(MBt*qa z;}n3<4IPVe4r% z0dDS9>K!DGCkE8f%dp|Lp|FT)it{Lt+$lRmrva=e(YDDdYQtyUypQ8nAGv8vbrbew?f{e)+~F}&iR24n*vw%u-ft9os+G&$ z{u}%H*>iJr(qU;TQir>-AF&i3AW`umQftQYwOtx|mqP7~&5UgkzCMF|TQ&PuGL)-t zj!uj%R_mk#VlU$`QKb7mE0G)bbGOf6ae9x=phv2%rOXql@A!;rNE}10w(PKv~>pqKP8!b=J;;8yAP9!|nns&$Icm{fKyva9M zS(^~t$9aN#fLijp&u(Gh9ML1ZAnqXsEG}#kP-J;`j4c>Y>_);h$w*D|;{qWw=rSJ} zd@YkqA_r|(!d-ajiQ2I3f5d9kGnjU+W?6hf&33h5&;;p=NW@JR zAUC9A-X1z`HXsxtO9F0z=x9$7nybwbDm{xe8N2m{1M0z0=N|0yL^Qv{7E(NH;$Nm( zMAjD_nDoSX#$QC2T+idCdz0VG)k@uYdb<_8n9L1>BMgOdwB$2#*C`ZOnhIwRx*{6J zgC<@dBM!M+BRjUrQ}v?Fk^KR;sVtB@H^%p}Gr0ADAfCtxA8^HZB8p&X*c5lj{9Q|b z3OhV5?jsw}lR;j=tQi8p95@7$5%SWItbMo?#9oy96f=EF`$eCy&cXs+=y|vEAEPnm A>;M1& literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.to_subelements.doctree b/.doctrees/_generated/gustaf.faces.Faces.to_subelements.doctree new file mode 100644 index 0000000000000000000000000000000000000000..434f18dd44176ab0f25361061978689185f83622 GIT binary patch literal 7451 zcmcgxO>Z1Y8MYnI*fajlCKkwX=&*zx2YZYVhb7t|P}r4L5f)l4iv&qJJ>4}^-R|k? zbXWUB0<;`f#8Ry|q!AJa#1V-D;t%i(xFB&@t`P`w1pWZeTh%??GfwPyg*K8iQ&n%h z^?rZNhmBvZZcgccY9)=iA02fa&x?e|(p=4Z!p(*(lKIno>u32-@{VdH&S5ID#AUgf z0))%`&`Vg9KgiWGflEJ3yT$#vl)2Iu(dasF@Ft&okau`XHKZ>?Ry$H(9Av3<`rW?c zvb6h-{$GmwcAE8A$cTOxLWiacRyi$g2~jJ zbOv;k^A*0q7x^`QiEpa=yIc&}Zjwb2OLh-MvcGHCFF!zFx@!pAwFeAPj$~eOIw7Mv zyWJ!Oi`VbXWIaBm8h+%lqnebB0{9oe62AdizK*|}_ zJM|$_nI&WPbE7nwF;cV0f1I&9?KbW%)d-Mpci28Xe;_0h60Ay9hH z=+98V zXC;Nr7?+8UZ4aed`spaQ)u27I;ewWKtT-lS(7+TUV3Ym2@7RC7pSajuFi~ zJ$G6v{73vgiQr)+0{#HDY-qf!X@nC)x{@WK4@0l1ZlR`WqrcKxMpw=RC%e!pBkQs! zMbR|aM}|=>E7pJda@N&!lsk3p6OTUzk4IYeYnm^5RK(=vBB|3keW!dA->T<+an^I< z^m88<&$U$3k93r)iEfs>qkP6Js+WFy#!HY_-^oI0A2=Z}j4`QROS3o@iL}$9lgP)J zpip{3y#K}!!^YgFE}+s74gi=S8lMTMK0gErzD-=&BVA(&`_RwDz*2ZrX-*){WIN=M z?t#w^U8KBRt(0GFCvy3iBF+n(Ed+e&Bm*XMb=4jUFAG^(26OG7$QOX|yu6YRIzA6Q%$ySITYoQ!C+#!YLgd=UVzk`kB6kDAv#x!^}qqDbqvF& zrW)a@pM|0J5B_J>wxw`M>Xe*68Np13h@a=kxddtafBi)Q=xk|L?($8eC9w1@vOVo2 zCStoHlJ$C|UQo11^@GHTdEI?JevctfM5*Ow31xq)EG4Xj>97lgp5>&LFH@^0vdD9i z;}XcyoOj#rh{Vz=+_oh50h?OvapuG538NI&BLqt34OrUQdSt*4M2ONU-PT9?E*)tf z>mY=(&xEX6ym(&sVpLEoy8NSZG%)*3ka9j`rnlN>2Z8=<_*r zxvo|wL{!5!PUe41)rq{UNh-xyC#l%0Py~(Xsi{vx)pWN)!pG>S`O-wWM11`d)!b*1 zry;(-7w*tf?Y_@K&&0S&bG7PPpVyRH9Tit66I}ayWnwL=>~&S&8s&rF)23aZ9^o>2#rAQDl6E$Xxs&>74M@$BbV{!o@` zLCRG_$B%L~6CdYlfkMeq9Qv-0w5#T@l*ciuioa>tA~gmNfmp+)F?0RC@8(Zb3x#Wu zdyqoru^P`f@Ur0hhOUuBr?<`$=(=iH&pv!=oelG~Phm@yTqm`7UX<7fZl5Dm;`2?z zC;1E7-j~)r1p2xGwKQn(C47`_Q#gCDRohc@Man7dWVEhW`ZZzH{ppMPn|gsp?-#E9 zE4nmt?cf`=Hw){n+-bKDQBv9AA4}f;D%#skRC2I9(3QDISrC}7PF86^Z!XTh__(Uzy zoH)vc_EBFXLlgwdG{cH*R}9V6cTa7Yow9ke4}HmP9eltH-YYH?quD*Ri0+O?4lp`Jf3g-$fcoB@NxX$mrfdA@orVXjC#+hbIk;u#tW z@2MtSvX40eB;tFeLGY$pb}}@G)s~u}LC2Dp4P$#`k`S!k@L`Qf7h8X%o6usYFeM2qB zEUubrVg{9c3~LANP8|VjguxGJr>2B}h#GAZ>|49}z;2hgrOH z^Q&KnJeQNcJAs~dD)e72(ZhKiGTD8WbbTiK`V9nxT`q?q9&1Ub2QTs@&+pBvP1xkn z9yuqK@_H&@n+f%aT1}55=^WYIAMg-=u;1B`dMLH1r+aoW-g|<=`+fO&8fNXE7oM%!A43x4E=nMXD=Ah&OO O6zhtxKnXqTb^iyLQQbuV literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.unique_faces.doctree b/.doctrees/_generated/gustaf.faces.Faces.unique_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a12ad719a075f6957288a0f826020c73f8e80654 GIT binary patch literal 6045 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.whatami.doctree b/.doctrees/_generated/gustaf.faces.Faces.whatami.doctree new file mode 100644 index 0000000000000000000000000000000000000000..65406d53744c5d4e97510ca548d0f6cd5f33231c GIT binary patch literal 5246 zcmcIoTW=#t70zXRP2wbT3744+Uaf{?#Kh(SBovKCNXsIjhzJ%I9?+^)?k>C9>F#Q} zt0&IG3ie^eMyeOI%?n68A*6+WfRF$Q_yvH(1LCJF->K?ux1C8QFGOFqQYel!~}&x@qT(_FVb>1H91RQ_@P^n?8U{7`oicAm;Cae1y+z~Kr% z@Dd*7@8!Bj?8*<)L9xD-a##5>s+Nm}Xo}W*`Jw3OhVoUwYg793lPpziJQy>Vr-N^r z|L1}!7Wz4@!lFCh=QEP#M&1u|D{C`mkWA%bS9hFB6|t_Hg$AekPT)s8Kg~u=cbQU& zKgtv|Cr#IVFD0#7ZotwMMEq_Bj%nZd`vuXu&+FdbUKhR%e8iz)6Ev#-KrkfhM<@yS{?5-YmlM;@Qm z;Iv4KFF+UZ2Ecn0pC|Yn;PaI90yK$lv^fMKel&qK^pgVc{^3<)^y5UvJW&@pQRoZd%io zaFoM2Ch~er4)q4y;RtG(UG)|nV&c(^c^wHc6=$S&I9FQ)2oEb>$B4HqTdPuo(#xK% z#&hXDxJkM;NoPfC(*f5@^^>bo)r|U_QFtQfV82{@f{q)CJBp0-68IMgDakdNW5vkz<*GB$1CUN#`yj9#;Cgj$@~d&?*G;6 zfyHkNEIPV7_Icnrfsd3t_x)P2GxM*UDwZ0!=Sy|>JHRd^q+loOopsV2lfT~{lfOdd zzZAAyfekCUN7B2vBAoc0t@()IJEsz5(ujdH9r%!n1r8E~j3%{pb-uk~Fc}Kqh^9))fM!opS!hG=<)d2lOgk? zT(89!x!wSQ&*H#$eU)G87KRpwUm0G-k_lINVQ|Bp#@zMCzMFrfJE$f_+Csi*W3-s8 zV1VgoNVtd7d-!^tK|cZC&Mo-J@Son&@U=|5)FqL3`~f?eNEiFI^54w<8?c)sStiY8 zAr7YpkiXVoEamtDddt;99WYo=ziSpzm8p*-d1MGJWE=a2Lbn*?Co8&J@^BBs zjLuutJvU3}+Tc`|gw2v-FAKU|fPov*Zgu4uBNw6&dbw`?fCU-)>N1(@rp#2Fsr*!I zpXyH0+RG%zz(bFZJ5Ly6u#rfqASxgGvs|wZ5qDMul$GcV4BcXwB>_fTRHW(RL9-C0 zVNIs*j?qEXqP>HkL_4KMH!-tl_18ykJxvzv%UVd<1 zv7opOo$Aem$1+h)z+ZB}xu&~<1=X;jclpc*is;OXp*rB2jU*aYq&D& zdkJ@C;yE6tY>s2-I(Dj?2*NQMK_KFLr9+6O?y*csXHL>EH?ht{tR!nR2JT(s+rhoR@y;E90`;j_0Rr6p$i?l&vyU z5O$kTCPk*O*D-ia!RCzpz}z+U9{s{0xTw&T4Yr}(JeYg~ZwuA%WL57{yuov#2^=x- zLlmEH?;Pk}%wvZt5~36j1&|!YFow57b_xysS)o*%9uJ2gr-S%H2^kG!GC@Q=AWkCy zI32}9m`A}JZP1UNeEBQDvzLtBrR|9_-~Nl`_6S}^E_=q4fzQ?0oPmTe6eqlewK#>>jQldz+(Gr^< zlJ5qR*f};tz)DK*6ojDx+L*U>oiSn+IdbfBDg0BW+o6|1! zI*(q``-^VdY=ZEGC!&t|hz;e~*228K>_RAbmck1YyvC!~miKdgcY#Vxv>{`+aW!aC zO2uOi*jq%jzo#BTe9G`I)g2<6G6yCzahZxY@N#12QRkkEw==y}H=fyU3k{L2FgU_e zC`L;@D|ekjj%BDYb~utj=8?}# S=;^HMQLZb}0u}UZH25F-=icf7 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.whatareyou.doctree b/.doctrees/_generated/gustaf.faces.Faces.whatareyou.doctree new file mode 100644 index 0000000000000000000000000000000000000000..45858c8b1bbd9faddf7f58414eae7076b75f491c GIT binary patch literal 6792 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.doctree b/.doctrees/_generated/gustaf.faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1e154129e8d09cb2e5dd302e4d709c1763e3c6b3 GIT binary patch literal 7133 zcmcgxTW=&s6}H!&@nwDATiC40#G7oqA|5*nNWqCBp+re`%}%6nTNYcLn(msZ9`|%N z-PLPb!O|iWv`#7#Xgdgrgx>&)1V{lX4}cKx!~?u1Ph5n=F9_eMzD&>9Gj_O*G@94jQqo5Sywo(_vwVK|GgS)=r+rt;p}Z)S0;*@J2#|2iuC(RC30OJ|m9Q zm}E^_5sOJR>ew!iH-=T&XW(7NVnj_Cxv+REXEMI9D!evd4I_29jEJS0c&HZDnV5q%#lluB&f-v{u$xD`j@lj17KuO#H+ zvUq4?6kHCelI>c2x4=lkW8aAb%@B|8M0@jY=#+#s$d z#nOM5n~mX2P7R9*z>qZq=8J;T)rD@LWnxwnAguMD??B;pA1K^lN1@@CSQ1|V3UcPu zC-|-p#2WA^4o5M$Wz_c!?MC~tx^UzyoNqrCH^j|Q%T^AedSIJH!N#6VU7CQu9 zVchM*_z@U(GF5_m!tfc5;W^3bk;4MR^c*9E5CsN~gY&4SS96=UUVUQ!)oc6NuXdSl zc8*iGjzj1PgTwl@&#phsBI$)uyUl{VXJQRlbv}*AaQJFrI#%AQe2PoUf;&Fvn4+Gb8S6@a*p7ObCA+i~}aK!>!>XDP2m0cZUjxBLNIfV_xZ&N2MX};o)3;v9$T=^`$g;UzE>H+ox=J*(y;!^LFORh_h7T1gOy)oXimL4NB1$o zGdZv#K04t+gIWJ6xOo@c{H&Xs<^Jrc=eixD6Wfk*!_I8tkV*K<{qEP-)J z@y01a%J)HizZbmfTp{bJIG)=~G7#2#?|cud-|SsoBvKQ*ZD&37ks_gl^#dOA;11WZ z{tc|nDk3Ng6_j{g%@z(eB<`!M9L`G#cnrp6z>D?UF`-gT*{NBWnm@iyDFxR0Fb#z*+5(Wc|oaUG7COy_)foJ6JH zsq0{s)^`bRmDZcbV5fBeg4XLqg+*`ZMLjz0z+hP{QmOw0vWGOc@2P7U)vJfb()#rg zSZgG4=%juH*LkUe`c3S|t#^rmsZg{~l`P^Rs&`J$&dh4!yzUp5)ma%ZH*^@~#fBev zO~52+O_Zc3kwk3_smY9nTX>BKy2EP5i~{N^7-1z}?c$)@d4QidxY#598)ItLrxSr&N;d^SDnig){8OZ#A>l;re}-RhX9F78YSo*+_6JjYOu~4mK{>j2tiUV$1*2@!%ab$5N@G84x3J=WJVSr)p>ftAqdyn zE4fR%p-}_qvmKZ!c|~Jyo;(f6!5txh{x+(En{$t;8K3)|W(Em^!paBQ!8lEQPVUeJUuog+%k04NQ~+c1yR_Xqb^9$otk^f?nW%%1IOq_h2%YQRfPKo81<;S+y@mbD78dK;zuf$r_< z24xxs4uBrdwA}_Ukj8}t3KWR1J!E#9u}N#ZXPq z7}ck=LXX}H#e!ZeuC#tkH_;We#%@Pyx@b+!&NNEc6jGJxj z*>wCq>EfS|ePcL$Eq)npf_5hy4z2tU$e@GK7@7(9LO4}6nqPi-ij`NOYW2B@Dt>rh z#fBGB?O#c(T_OFiSC)#U$Wq=g{q%9`KDhgKapebh->DXghmBJ(U*Dpvm|s#Ja0{8z zi&!xz57mfZs+3-X!)i3?ZH!*8J^vEjMads6h>ht#7Ne9=Jx_devedM1&(uO5r86ax zYL{CtfIh1~`&9F5>e`DyZ9uM>sWMe!@(0RN#SSaT3@X4}+6m57137J+5FYba1L>o2 zj6M!&qQ$V{2t5pEdWh;L6Yq0}#XI7Uh`~~R`-D>7{ST%5YG&<%lw6(8t*hhQ>9lr0 UTy4V2YSN;7AiX*XrBS{5FR?Rvd;kCd literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.ComputedData.depends_on.doctree b/.doctrees/_generated/gustaf.helpers.data.ComputedData.depends_on.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ac4e16fd1cc9e0d6415dd30d94abc67361c9a51 GIT binary patch literal 8632 zcmc&)O>87b6}G)QV~>B=-o&u-dg&z!Yb)zaJ+B!L4&t)A|hsUG)q zH{I2?=YU8KfwfczP#QrFkUJ755aNoEqDY7{LI?>(LgD~ix$?cL{vCV9-UW$B&UC+i zRrTKYe(Ke$eY^3aU)-Eh|H+j&&5MC{A|o@;Rb#&oHuxr&%Tvz@s?}|S9q-QN#5=y zv9P*r&b*LCaoe$k)qW`$go$9z%k<)~koivhEfaInJecP48|;|myZGoS8vSmn^=XC{ zq!%e)l`XSSmtT_2Ov`ioC?k62f&Rar6ZU^$j3XMyy6O-n%wr9mLhle1k9Y>--Yml-*q(4A^dz_&$qvkAmo6S3{EjK)`rc z3$|-S(nc{j5Q=HJ>jw$3x7q0ll0Oz^}j_)dx3 zKEDC`K%vX>`P3e)rs2K1RA6T9K&?c-t6Q2h0qk0FEh!FT84b zG22!yNOP~Kxh>xhgf-&t^7(JxeL}!R?-;j~+FI*d_ih_NO-p3Pp=Gl>M!{&@x_1wN zt3X+o3zc!X-$M00?KFkzg@Ssz3J7xA(9yC^PnqXqhBvD-ST&=|>7&%DTAl!ZomNdc ztj1YolC9%`cSmW1)DT82X3-%_Y3zNBeI;}A;5;|aoIc9~yDATa!#m{t@IJq11YP5y zeCEd9v~rI{Z73u-ioHCk@rGQgxj>HA2(?5m7?0eRT!549KzX%>T%skF1=TyN;>G*? zfWR4);BXJYsfBGRVMisMFJmnivq~yud}or3b0nh{aE_K4FWYy|lxw`1!G5AQN%+&%Gx9~I_0I~Xr5aOi%@JxT{%^*M&wqX@SV{O_DW_jmwj$gp zds!lgs@P4xkS~mmAQEOgup;s8B%poygd*yXTAcBzYQ%Jt8RfMBL~u>g%PhPVukd=c z+z+u_mfi9IhH$!^Lhf%Ly6nhCO_j=({L!?0o7YTn-rn0n^&qUM$3!Zxn}fhfJQnAb zK{Z#R1_7(i;g)*4t18#=9034_opQ950pgly8Dg zAN62bOM$Yf6-njQGcr0fQK>VPi&agqxpWiHQ%S4en4X%F^QH)FGL4AS{wh&M22^w8 z_fyn*#IF?C&Ji)wjXt#4c8D80xEc{SXwz0B-D z1)*WZx)9P8K|2qR2^>Yp^gj(1$45>k47!ZET${ipz1oW0i=lCiVZ}J z+jVVKY8ruWSW#pRW58mG0!SU}_}ZQ~cJ5(8;AdE#X9P5h#tYIQySlzhHS5{ZK;p+n zcuvW6{}JUHBNm+vFQcZY>Hh4at&#i1^J@6VZ@>Sr;FUXK{~HhG25%DgX6^<}xWQLJ zLF#Bpq@o=3ig~s5>jAPh1|q&L&-zrlZ2zHT)#)LZbr!Prl&s?mA4)2$rXh{e8dmmz zk<%lM`f_a);qt``to7QdQLkQL)XS$veSs({h4){+Zq|Fze3>4t!$(rQQN zE9Tq79K8t~C3L_1FQA*RNU8&~>oU(7n+O}~^Qn-fd^N8}s(PYK=yLum`2i`;wW^Xz zHU98WYW!ZK{1N@=+9XRXT8d8K3{Oc3As0HRnV2|RzpYw8oRy4L@&lQ%McY%^{aE&} zQ$?0%;&2}Ly~@&ZE+3PtUlK~?|MgJH|3fSPcl^L;>vG1}sw8P5SL-4)XBMeth>$jq z;kFgwvT}P$UdiQWgOFRX8&{a9`9}>i>NT!sFQw$OGxgOb2X2G7H~KU9nG~&Pu~KP1 zuv|ZtGvP3m3m~xL&~t4U=M6cFR~3@|HE65YvtvQOg}D`b95S0~g!F-Ip>vYe*t#;F z1L4f7nj&~g3t7NBy*&Zl@ri?`Qi*D#|2Ji+$z_3%Wr|6CJCgN7 z&HB3w%=%l+nwRzYwl!Jm4K+xgpz;&ds7zb^>wpSJLe&`_Jt$@|p?PL;nAAaVNJCT; ztNQK-JG!@xc=3b$aXBaNP#=4UU|P&R=I^WE$WC=}!L;HBIW6a-nP|P334!FI+W_~J z7g0Yy+sR8v@+S9Ac2M7;rY2U>mmBIOJD%_0c0!$<=@gd_tM~S+!zu?>49oiTFeu0N zhD!zI*8H~a_>T|5;<|(1mXC=Drz=k#FR10+Ls_J+I~oEFZZF-#c{}G}4qg*lZ(1(f z2}&p*?HGMQv@aKPioQaTa~WK?TUw>d7Ij(F#jb%oLhqom<`_pv{eT66u zZB)6|#Wd*Qv&zQ@a)~anPz9OC-2jJ@2XdL3(4h$<(A8Ls2{$x_c}!8vBUf-!rC2C~ z^|Ark9T8xOm}*;j?2rM@89C1_w79a@hFoRGE>Of}LK2tMhQm5Z5A!V_S&>gW8s=rz z0F)NYVKY*RHB>mNo2%PXVG*qwuznbncXOKkKl-Pom;E9NpCH?}$+DUwM! zn}-U*ZV}4F$R+v)30{-2nOzrsKDt?4rzb3eTNQO;#|;B!b71lX+{(gK`gLzwuBuL@ z$NU}~(Q^l=8@_bqmRt^5Xi_nOD76(}D2_sSJ7lNOke}p2gz=r-U6A8;IK%~=-wvW4 zBI8}*vwkP z573k?JH@6K*j5JZrp-~R+c3P2H=wK_1ouG_VxOS9ZFOOtrGXQ8Phh)#7e0{Xg*8eP zanc!Ka|h(RUSR29q}$|!6fQI9Fb5Glgan+Sr+XqFx50H_GL(LviCcKeyRgy&xtiUh z!&kko&S@v|67vt~R$9*KY=ZEGCt{~_5gWqPC86@0RR{&o5=gh`^Pu}c*<7yGsC0Bu zWX#qrUZ_ht<~m7x{XAN;CXy> zuIvkTJ!B9&NGLyGi?IV7r_{f1z#cODQbvCdIJ}#F4bg!9FX9TY#&7_=V39~_^ovx>7{Q&s~9O8@VeiULGYLM)Y#!gja`!YksL2b6z+koXt;1D*rlsp{^j8GGzqK(RFLuBua~PM!NX z{j=GRThC6YKe?R7+za>Hw(EwG%hFuVxsj9gSt#wAZ-`>>nU@D7lqY!KFe#o{vcoH4LK`35iny(wt87A>~5R0AZAJ0 zc5Pv|Uyb^4CYXB{gPita>&*ArKGF09JKoPV-L=>Tl_KXWvSC%%;?uHL+-6(O1YXGU z?W|+VrY%I`b#QK~ZawX}Dc!K{1a_KY67RF2-Pdn(ZWa#)9oyMWSeIZjSr>MXmU6z# zFYyI_nNRaId4H2feYTloVaSrry(rn;)K@PbATZt3gl$?q1}GaWC|1Ywr=6s@;gx$+ zS%*)^Sub?izQJJ4d;Tos$e#lvpU3Y7{I246jcx}9C7!y|I{4y+J;+DiFeT7hR~%@0 z;c>#c_9PPFwQZ5x8Nb0d1}xd;SHO4>Jp;vaj?lc0l_grSQV;wTSu&(J&zdBzEA?SF zTi35!yL)!hORp)tAsovJhaHBIutyYA-nxJLc>%rJYF$-#yn5$m>vnmjmBzNiwptZP z>*}35V4KqARXMA61 z_vqBD!-gPDAlcaO2V3eMu-iCcDN7!)oc4YjdtWPb(>+Z$3r#JIbW<5=e6U3-3+)Me zt*CpPZj2c6m3xy)-V0hHa5-cprJLci^89hmpybr?iv#9G0mT{l&5`X#w{_p_yrAcon(nslDFmuV)~^Bh7|Qh<9kQTHjmi~NS6ordA;KfX8e2q(dCRHm*GtjS>wxG_ zPa--xO7ver%U?jtClxLA!YP&btMTBFzl}eH|M`gF6JKz|c*7sz%gKQ9Vm}LnXHhJ) zDh%K!aya3}4t4IbULDNe4-Y3NEWn`Dzw z$46e154j3i(^Tg2+%b*|Wa2dmrRTPiU$DAdbJv z*EFX=<;$cRhU0XiP?-6dnP4?Ye7(euxvAQ>Ua^tDY_+!FvlUHS4}WqD#cj&BUXKEo zB@YXuS(Wu-@4z7Z`N@e1Q(X~c7h)E=2n5zX1Y#b2<7v-Cs#gy@_%1sz@c7TrnUo2x z%I1JfgQ!a*L=F3lbvdIblT+~lMZ$v(Et?^Eg7N-ELUYN#fX7LGr&2urFQmt$gMHfz zbN@x`lXXmpgBa#eXn>r@4BL+b&+%YV3IJJ3h}Q;0QfLwXj0n>LBHcC(;>yY5B8~RX z5$S94^9$zS6RE;Ueu(I5D7yS_(gSf6yK3~RmAU~=W}U<{^FLXCg9#oX{VpV4jVpiY z-z`w^HEq4a;x+?1k?;yZ56*>g-2^F%%Bao=yORZWVmVQOOpTe8oaVD;6udmM^P{)F z{Lb6A-YK6-9&e5wDudJVtpA|~*t+$Vt=o1cqBQIG?d0GNiUOq9a@FwD#&RxKjFAN% z4A*6^H}PktHEoxXji*)=u0H~|$XTWLZ?@X)_JeE9=3VAQDx|jTw54nd2?%7^)-t5h zZ{&!Aw@?7lOQI|`tX(fr!B~e-o>C@r*s|xjg6H>|B>T6t7(zUod-Kbk>sB@Pyg=!`E;cK{uhlS{NH0xnD#Scs5U(NCj_mE=;KU%-G2e= z+OOB(*TJ{pC{2X?%q_eTVN$^V4{ z^?!-Su<;HX&c#!_(5gHEVh~&YL5Gf2xY5{BT+E_P`eJ`q)IP<%$NMbC&2o1 z4XSD_se-PW}qEz;JZh$H7CnP%M_?6+jdPPFevihfz6K!VxAqFJ(fY?$CAW9c8uDb1kyM z0Y}QV@kUWeZcq;kC+S8r4N%AzZmWbHZn}=Z77bKzmN!wPO>2jt@=CN~#~XjueC9Xh zd6C#*8mP9U6(>;-4LaR?o)zd;2Kl`S*(_n0i(y9RP0A%FOQ^MNRgLV0az;0_fa*@6pgjwI( z??y>K|4=SbYcWPv-lwk-DX?AAGb~_g#@h1)w^Xi)o8YiwL(#6^mJ11sqeNH%d&I!Y zDcR(9Pz`703fuR-!vo7moJ>XlS5{+tF;AM6nGY!bXVRRp&&kMmYi-qWX zkOs;|Cb}ChZK$5X<>5t(B}tT6+z#D7^q&GHQ00g9J$uqeQta=94TVK1|L3>>FU&J@1y$a4v$^{%CJe;h+!3bthp z*4RaB1RU|)QXA0bSR%J=4W{H2x-{q)X8qWz^bw3z6CS!4NoXSuZKFp|AWG9o`h%%B zWtkgU=wbuv3`*!IWtO>9X^A7OM_%etLl3wt*Gs9^z(oow>!qE*<`!_76fQ%53xL)X zU{)0rR_P6gpjS>#8?qs6E<`>L=Uol&P0AHAHfRpwB8LI=QQW_A=BiwZS!_|o4-<71 z!_Xdyq3xiZ>_UEl3lXPVo12(U+wlPkrLY|(J($x4f>Z@d$`x4)Yr?eCey; z=Tg#jM$psD0R4+4dU9)|vb!v4drWlI8Sn<1T=WAR)<8Ii6{%WjPOd>G`&MO~)dh;r z7l-mpdJqbG-{M}62lzpMXDBJiKkF<1`eS;k>iD3=s@8Y&XS`@v(5;Z*C*W#B3m0Hec0R0p)&mr zb78>;pnx;<77yhG2T;2fL&qkt@Zpo3uA+LS_;d+f4Z7N)9m;7IKB5nVa!z{_m@hOD z0nLML2o%oLu~f;#3W$Pc3HVxQ4YCY!FRReGuJVh+4 zzgo;c1|Qzf--I=w;|aS$Ga`io=mRT9GBiD3O)DAB7s()WrboG8)732u9E2#Sx>N1{ E0JN5qga7~l literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.ComputedMeshData.doctree b/.doctrees/_generated/gustaf.helpers.data.ComputedMeshData.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d2a67705c0215ca9f887979673f9ec5e73f90373 GIT binary patch literal 6904 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.clear.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.clear.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e3263c7f3e87519cd11c2f19b7af6b5178c26844 GIT binary patch literal 4432 zcmcgvTaP3+6`sp>&-C19HoHQ~PM8QnW<(d~6?o=Q|hwx%anU9Iu6c z?$A^+EAK`;O-q#u+xf^JHYgDZh;oTZE5}Dsw_f;jIdDCj*<5s{-1ld-v3xp`BCmutqm)}ddLMs&sq$3l zQIZR;J*~&`N52zyWY;%b^@)%6_bU!-t(V7cz~dHOJvr_o0dcxffw^nD9 z+5!!_{brULy6IMub7LUHcdz6{{Mt_IYB8AbC|q^@)=Eec_?3(d-9pwl&6l3 zr7FZ&*JUa6_*UubafG1#4+ffXG;GXf0$SXPw3&T1P9tq_%Qr4J>WN%)y{t^dT?g#w z2l-vxO1=p|zlYyj_`Qwa1>F!J=`7sq9N1*#48C&X;DYmuv-4NG>Z}k}s`TQUdPnxJ ztmn1-p&WMLkzWT-16ISAao|gJ|C~^R@#XAHP0wC!Xv?WL;BLV52((XLLg^ec2Q z1~1xLFVXg7m7?btfuyu-FD#>oBImbJBztbRvnW#f>9VXLEa3QcWXqK#Bl(ic&fP9d z8djh*?eF&KxWLUY7E3N2+!gtAQ*jF2Z7eZD-w02j{|cvk&~Wnq3Hs%FKz$HET1BYW z3HPV287)xZuR>*;P>GOi)8;RuA^#v>(AC-E>hg~WmuS&Run4IFs9K@(46)R4-bUl$ zC0}&0Zg>Ca<=x%mCe0#!jczh=n;_SEci4V1UM5oM&T(HCssm&h%k@lH@1C(jrFAY$ zn?bsthOmgBbsoi6$`UPm7C2o{9xF?{dm6NS<(tcRS=7HTe*g z!7uZ(A5Hh}@t4FbY!AG~1`FH4<7u7e!MoDA9cER+;5BQ!{QI(E!=Jx;qd-`owECS-+UmXx#YSQ)oh3oy4$d2p%GhS~wudFWkM~g#? zOFij0ICyuXy7#Uh^Zu%1Q&sS+^zuJ$3!b<473$!B(On=i=YvuWV~u)nTcv704_fh% z>e0P_aC^;UJ3fX+;}SDhIxJNyYxQU+I?M=bfw_MmAbu7wqkMMQHTr@!9lE}%ZB<);B@eIMplMQ&z%an&1vb~^mYFr>(5%acrK ztu&LoOmm^(0WuZI!W~BBJG=D4F5aE4%&ctj;rjX-TAH};!iIMBv*n4E#qNmi0PYzH zi1N@*?B~3k)qEy^I90O^JP6!lEfS?umWoQC`z#Y`C$C%|kvT;r03uo15<>Rf0k5rM z3z6HPO0}QXMaAZn1h7GnAqVS{=d|HrkOZ=m_ZOndh&ojaZ4b1L#9gI~VBM90C5dG> znaOOR>>*1t!zVdiq_J|V4Hbml9xh{$K0@4K)BQ$`O*7P7dJR0KFC2pAD#RulGwhba z<-2$}!Bug1x$cfB-oTu41|sHJky-znqqp5bB`Ss}5s1K=`DIZ}Fth86)PY^|^mHu+uor04En+NCo0xUM15AMj^mzLi#nayO5ANczy zS490iQ=nwCk7`7<0Z@;_I1X8^65c?2nn;w_1dfmK29yJYSbberC=K-f43Ekt4LpE7 zD#^+zIMC#U6G{}Oo~)>41#vf5JO(4Z0I$&{iDDvBMDRTzWA^w49-@ zr@R}iK5pK+;A%dNIqku1it>hDl5RU@6NE3Ah~kzZHY|%>Tj0$xi~_SP(k(K2O7F&x zy*pWwQqK~^*lju=P~%3=QmAi{Fn-G~ND!(XrsWq8M!rc8zRywc-jyHJZoliW zu*H6o!R=%Nwv7^s%T_Pi+Lc5-Fdq&sCMutEAgI2!BAjavmUbMpr-nr*OZy|mYU>d& zPgeJ8W>D#nH4;@*PC!{nRGtG}+yQlC>%B()84&oy{}vH|CJnI!C=Hw*51c2DCGqZD b9Q?MMl}TQw#FH6?`c6vutw{y3iyHk8lit6$ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4726bb040fd7e89dcebd54eada4518888bc34a37 GIT binary patch literal 15056 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.get.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.get.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2711705d18860d0ec6863f90170c90bab981d42f GIT binary patch literal 7931 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 V2r~l;`vs43U6B^3pl7}Ae*m*-Xr=%F literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.items.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.items.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4d1d5367ea97968247565b8ad30e2dc8b1f6a194 GIT binary patch literal 5477 zcmcgw&2J+~70<`mj-Bt!hmdA6WVO3&GOTS59MEWmkd~D|5jm_72Vk}-cb8r5baypf z)roT$2@WeZqQqqz!4)Ab{09gLkbu7ckT@Xzl$GH3s=DpAlg*e5k?go$y{dZk-tT?Y zj~YM!?!y)PXLeO8!er88L6FFRtHNvq($8a_=;Gtz2 zX1%ZD>l-o(c-9Lwk5xhIvHae*`Gn+Ja@B{0lfRiVNUIC6Z`$7UdScx)%Uhk9dr_G1 z;w&F9(_va?;UL%02Hk!=3>4k8FHWN z5G$q;CIO$+lqwlaNdg5#5;I?v|7bg&4V;}Z)V zTDE1E5zfgZ6}CmgY}OVzpgo$Wl`w*kr_P2>NH(X)W3vg7x+#E0`=QbrE7fhCG(7rY=qkeY*Mwv#X020I`$kz)A!M zhE_Gtq7VqL8E>t$@SH8`x~_IlZ|-jHm%$G~rFRkXOCJ%iFuT=Hk0rj4S?#!2IZzwE zuUR(Yx-d_?SO$5-Rpr-pGa-V2H4F-~S3{putZ8BjHiYN>kM3^~^m2Alhf_Y&%{z>I z9w7}zDNKhtY_CO(%L`?%x6*$Zm0s4Q8?f$HP2|taZgtO~=#H_h2=R*!_!n z#u7h2DG-c_%YoxI*CkZED-InRaILQq&@4`!Gy5{p^+Z+AG;M;+C}XLp+0VTGK1a+* z)R9#+`3E`8kwC5?e+fcg_o^7M6z|Lne*4*8P{$+P=@X=Z|F3gHdA}}|*EXGD$fLkp zaHU$3w(~W$&8Etw)?_s=Y?W%QR5u;Z)brQn)$?aa`=`?ED=_y|;(-jVZipp*Lx)FPI*F}=1maeYKAEnL%{l?set20t1BzZ$%tZ=qG!y)q%dpg zRbe(k;FB~8{ZJRzriGzX$uBK$6|d(`wu@BC{csri#Yd)%v|7eQgtHBdZV7=f-uM9t z`gpvDf3LDLz%brkf{*a<>5_Q38#KSePBsjP!yBpL7L5H0>^9_9A$U=U7j=QlLIgWY<-zFi;|^pF0(~OO@#rthZH8R^xqelxaXsnRXLd z(JDULiOy48Yv8ZACQtjSg%p+MH}p|;7~L{!cPUTUFUl1>>$+TR^C^Y*ihsU7r$vsx zEVNivYt!)^=y%pb-m2O0^NcznZ`${4RTS6%n2l0FXax7EQ?i}i5MdOF7S&4gJ1)XjvEMXhuG3r> zXJYrvw99SZNEF zqBNWt&A|}cBvSL*g-6^{yvtAvuj=P; zUb&!b@XpLu##5PTFX9&*>RdA&!J_G~VfOhXgcdbA5LGcXOe5ffe1zk6E?JgPn8UuD z#h|od4xiJNNWL(E&ODx=;3P1bcCLrruXJry_GEt2<5?y%Pp~A2cm@lQs3_RXuG4&N zmxkS?Foz2>3tNnTMjp81_MOR4t$s2;v9Q?e(H($2C7`0nb}-u!OGY^xacG2YH-&Q%FLwmJkAs zS;8XPaMw~S*va}cQmS|!NDrMBxb~0$q~czEr9}y4s8EI4LUz{+Ld6CVU8Iz zZVQ)Dh#uDOu<3Tm<_$xX`SdLCh<@P^^mEoX(FJ@5BHR=xBJ9e2``*$5u>kT|UX z;PlX=!93bFm^|&i`K2#IpF7#mU)Y`~v+ci7ZBLPlAbU2Wz=N+Kf#7KAuFXRqT<0D~brE@ZN}#xFrQR(D7fs;4Kq7Km2;b12D?BW2_8}CIr4eos(F1xwdRdr*IV#oMmW{2l2TOdgK%8>7=XPvYr`kmabNeIQX1aj$JY3wXoI%z@1o34~ z@c}8umr(>wL#N0gt#?cM$I!!v#ryCEw21I4s8s;~?!ajvnImsb$<~IOVd6)5K$sbk R+jjzrb!Awfgq{z2{{?0ZJH-G1 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.keys.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.keys.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4f358b569b4c3e5e8217e73d034ac5da1bb26d80 GIT binary patch literal 5447 zcmcgwTW{n@70#`1xpXcw6CurH$g(V(4BOp2@PI}mgtV*#ipawX@d7iZ+OF<$$95UJ zoOB*Wf`=6wQQ~Ed;1wY)`~!ppNWd=uBp%TIl$GE+Rd(Cm$<8z{jFe2O>QvRK?|kRx zA2)vS?7@opr+3p>_|de_JTHP`HAi%>?)O6;__UtK*AM% z;3YiDpXa(u;>r)wezCuma##5>nr#;i(G;!c`HAT0hVoUwYfJjgah57J>I)vkJW2Z= zQ>_0@{Q8y*Jf8F~_;s4ocI@8xE}xQG%We7~x7s&j23=Jy_I1aZJx;9aX7Q$Ty%G2k z&(E_V)0<4G#2;n~SkT+oeJ`bVw%mZFDJJoEBVwWbtLXf|V|0Xn%n-C#Qxr zv}@b!B8HPWN>+=8-m2}f96Ow!D<}jV&#e8dj%*Ia6TJnEdND{w=j$E1&alOd`5elf zX&5|BV@9sj#+H;PmpmsVzKvVnD_Amq9ZL$%6izcRP7_~0CGxa=qkNO6Y%rMk?u`450&rS8@(jmHx6Bdh_?erJk=ZF5zx4fOL@WOP?z8z{XCl4mV?_S{t4{;D-xSDo^ybLtf#)pvP%SB& z^%`c?QnA&TtLA>K0@D(>*|{9}m!6ZJ&ph70+YXz_P?cs8v0>K#IV zgwP*=%Ad+-m)7}fIia_#IgZtJjByLal|4?_3K#LHF=+(yPj)(`dP41JL4<~#0?{yXi4JJEF z$Pp7hU6Ki}rpxbfl5u@;bSo3w!LDCJ+{D;2<}NC6GWjC(*G*gCEvAgZ1XiYnv|=!y zoYNMQ_v_a=Z_TBJQU%q1{N9bEO=eME9j!DR3{p zAs_p?Aruwhx9}+2h+dJRdz2Z>FUk%)=@~|w>`4K=6rV4`X^$1R6%{KBYPx(A=&oBv zi+5~k{@D>>){lsH^nI1EC=D1jQcj%6F)Bsdk2I82EXdDR^kyl;Jq$CtZ&i2QETL}4 zne{f?<&5odbi05Dt=>L$L#B5dA#@_IqA+QGj|CaJfHKGR6p=jdH^>)Hz znJ6dVmmF}e=}p0c*|4Ga`P2uB3XMiu3N>`Y>$+Dgi73F~T+TwwbYKpb)00R) zKLTbBk5F3@6?G?5qu$qgrUZL5zv%EJk%=Q%EUu`vhYR4cEc_t*Cl?#je-JWjzL z*HH6#uA6Yn5h_g};(H|_L{oQJrleC%={2f@cf2f&of#zoteNn^#w20^9k^>|4B5&0 z)l{7F%##i}DoE`i_{)?#^__+#$V``h>MKLpUB~lNHVo(?g_f<-Rp55pcub1eVf+q< z?i6Cq$VWv_t^XnYg-g)48Q((>Ii=<0{no#8v)g0dOHo#5;#A~;MFOBx@X3A=mgSb1++)5 zK>hB*@YdgevVjo0FR~bUfj%{v??*)#xB+{l>qjGSpoj|x6e!YcxFF_-#N9wL>x}fd z=OPDX!XfwI!Pn40aCC1s`hg3n3x}h!2poJeptx(a-Y-6DfvdsD#1OOd-Rd$Wv&nAW~s_H(>QH38&F?J-=HAgqDlMr zgu%rpFYqhX9hx?Y4?hrlu9$?Z2iigiU; KpoE?c`~L;c{V!zz literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.pop.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.pop.doctree new file mode 100644 index 0000000000000000000000000000000000000000..77411b8eca6625c870ba0f9d7fd55b257422df29 GIT binary patch literal 7637 zcmcgxTW=&s74~Ik?D5^+tOyr3lG&DsM}K(NXNP>2MwuwX#}0ZXT+yJo7}J>8w| zYF{LR;9-R=)!R1W4S^8iA0U1MKY$k`o_Ite2=RiD;5${-mzlB0-UwmIGgGHeRh`Rs z&Z#>6kmZM2*Om*m5Q*2#1S~le2L%XvwT}V>F{X4I!P9WEa{v?$x%nEUwlEpw4(*CoA;CN(CA&6F4QmYWy$u|YSc|$JN*3fv{9HtpOLFNPPOf9oL zWYe}>goJxB5J&6FW!g?bM~&H#&0D8~;9(lu6jk$>lCtEOWov61n*?~I7UOJdoE@&wejoN3njKfW-epmK*calBk$sXDm^R)1| z9r*Y7_etp=R7&$FK(dx*LrH@ehCKyK0uL~+xov&S*QKj9V9J^GS+kg>ojj#oM7XlX zR4%!oGX1Vp{?XMc%jqz;>wYHPehA%8kzaZQqy@}mRfAI~DKtP+M80>Ns#7~7dBF8~kWbU8+$+duZ$iG!M)%hlqiWrq$Q za>R9sy@iS-?4-{`F7H}{$jt(l7S*PnGf>yS>ba=swNyw^FPnIPbb@;DTqQ}RvOiWz z>V#P{+8Z|2Arx7FESC$EDWa~A(?dR-D4SaBT;9GUk3nvgV6i|YHxg}10=j7+Ig=3aUO~@+q7+sQy zNVsok;Yy=U?@q93EkTZ)(slH1`JcT;N!s#tz2&DBtN$5%70A+#83x;$DVRHLoq!GI z{5Na!WO=qQI4j4M&m`@tt~!^Ujz=<)Z?JZ*WE{g9k?U*uk88phCB9uF$)+hDM!aHJ zN%yOf6|aU#4Njmm~V=xUxU|w4K)Cxp;-M*d<}!P?Qhj+a_%w1RWK~` zemSmO{%2b8#(*?Q|4%fjO#1$7wLLEjo`ybUD%jy1JD!|d_wOr~`}d1fXQotg{`0xy z{0DJw`G0$!NvQi<{$DZUIusaxkrDpK{#w-j+R^z{*Xki!WsetUK7`-y(4?FDtw<2$ zxJ!}?5>mlY$+dT5xjt-OC^x-6H|#=~YrLtv{>t@yzVSMl@VUG`IiS}RQ1$tbZ;xF7 zE~#(-Dh}7hVS7}XwobB5-E)ZpKhV9xt4m_N3%-zM;js%c90)T$%TT4xfo`&-?UtDvV^*?R@rM^Dk!?=D(8)H(0E>_ z?yTx0_i(($bqaUU<~wwQua1m}j!eXv$PfAIp=_BBDQ?6VKy`*z@*u`wF^M7pQE{U^ z&E<3l=R7R}UB{2WuwaH+5@57UcR%Xi(o=}i&@Pl4JuDNVLr{BoE|;mp9cBaTv==1< z90XU8^S#(|q5<{IQ!KcpDJ)=$Vx4$`TSX5U`_ktZWd_`js+ThZ%QG8D7# z4nG)~EZ0Z}U@zq`QJ|Wo%YhyCGrP}VacYmu;7x?QoiHa#T+3y2A;C7(%|4V(1Z5BH z1z5y$3qbIuT(L6|SrtjnQ0rsa%?7bmLK22m1P^FTLOY-ZR~1EpoxER>;*@1>WTB}G zt~FdKqLf+nnF=M2u#Uadqi!13vRp55)FXELAT&0Hx({f$4p#m260mQ%?;Ii|zwO8dz%wmgfK!{RD z84UNi7-)y=6dLkHE<~I@>~ug*_v15k`osMw=_8`<5T_CVoEC1haF0;EY!>gm{HfQe zm6Y_Hk>!a}E&ocfJmoEd>=9o1cue%v9!LlsE(QTMYYDrHC~^hQ59Z}IFgdWw;4Bre zbUXb*uBB(8uum=S^?87Q;P+NQcV@Yy+J2Vl`<!xf=rR`( zduiGX1rkx$ zJj8~u^i@{jW*tHSSpw-686B5D%I0!oh)RtXMaF8qazMR6dM5_z@#2rr2HOUJgMiXdvEZ!Gr3%Mo?31h7jRu+u!W{jj23)a?mC5lrKoWBpc@4x z9u)C~5n{>R8d|Yc?5ZYh46ToJn}{62b7yod^8{578N`V)$`2?pPK4%&>NPCWQe?2l9dk^z0e6VmoU?(uwQT~*O|0H1wHHT{})>r B`a}Q# literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.DataHolder.update.doctree b/.doctrees/_generated/gustaf.helpers.data.DataHolder.update.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ed6e90c8be21806413bd000c1f239ea75535d0eb GIT binary patch literal 6221 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 P_UjSlx+*RB=4$Xipv|gP literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.TrackedArray.doctree b/.doctrees/_generated/gustaf.helpers.data.TrackedArray.doctree new file mode 100644 index 0000000000000000000000000000000000000000..60f672a79d39ed25d0108e82c697b5e866f51157 GIT binary patch literal 10896 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.TrackedArray.modified.doctree b/.doctrees/_generated/gustaf.helpers.data.TrackedArray.modified.doctree new file mode 100644 index 0000000000000000000000000000000000000000..31c3ddd7e510ea538acf0332b8f191aac20be186 GIT binary patch literal 4423 zcmcgvON%7O5uR7S=DD*k1lo~X2zh4lcDD{Pm|<8WY;^Egb1;i8Mikjq*`1}Ssw`z? z?aUkmvO!1#c~ko2gHOg_{4eaEAkg3O7nxPn)x8?6bkV}Fosp4|kzaiAs4qHyJ3Cx+ z|I9&=i#WR;vna}B#0zWskqpa}XWD*apZ>*uZcofWv8zIsD&*FzK_e7#5-Fb9PpsJ| zbsZQb2EVlxhh`8o4;7oHTfOhXY$b8V?L|3d zW}9iP;%TXY3*oRCM+LpP7bdJIAjI!Z#!~;QAC>uHF~tiMpOH>!dYa8?%ZdZ>rq~rv z#HKhh(L~6UPgI#@TurW|x}110>i^(iG4YN~f;op4(>$tne*|JRkzjyI>jK8P!OdzFV_qY=P6lZgU&b(j8V|enq&<%4X5mbHi z^d|*NbT71JrTCQ?wa`jmhgOAMMWl%%QhswvAmSO>d?;tb*LmC`+gqRjP}@RMgs*^h zf}MTZ35pnz)umb@^`pB9OeYWANtR_&vz1gazy9;tI~oK(9Uj-{9Y23IJgYAYikyY~ zbl7MOkDotBz+8eoHvRgLttbx!|LFO4A*v@ej(c0J$C>q^&$7q#YhmHzwgtAt7_)w5 zS(`Q#w-!9eEy`{j`SglAGxaD`_c4Brwoe`ey?l60FrK>A$&D&^+OOX&X*#a7oBCox(1Ly3j zr~NujYbO_ig@1qjA^-a1pLecLSKRH_7q9x&3jGO~Nic(sbc* zNfqY7_hcywtpmrJ-F65-o>`eB-pf0(&TI!-h5;(SF0AqdtjHNb6bu2?SG?0NW6)yjsmgw2O@t~FP6e7=8k5v%{) z9ji81$mxH>>F2}`IQ=j0^m5X!9{6Ydy85-NxqD(Z@*9__zM!v$E|MvWGb{dUdWfyQ z$=-#tM$kdT~+{A zlzV$iQ2f@RMm^U-f||ZyW<5ZRs+KXLmNC+P_Fy!7j2dn@4ijwkq2>15KD6i|tZt>` z$u=ArQd zAC`)youHX*c58{BaZJC$3S-}4Gsn%8<8@?B_hXin=>K&AG+kNhywvtW99)<|HIYbV zu>f`)gItX{AqRR^je?!xRU zo=c^Jgumo~bHi*4mNd(bIpo(dP(-sXi(08;IuW0ib6mH7#Z(5yK|^ttLNXveaC#E? z7iYjM;8}?52QST_)U(lVMy?z_S>6n|Qc?wiWl@6C02<(JsFdcwBj2*paaOE3TG?4K z@#)t38fF!5ci}^Q`pNRf%3*Vl-T>|u0uUv5lQnw@%jPAUb08jJy@Brl^FZ-Xswjwf z&M{?XA&rd}ri&b%q3Q#XII0ODx@Mo1S_TV|*@!{6y{Js{prIsyb%GdGR%I+9g9lFH z$WGB;i1LD$kqj_ZKtzp5~s1YAKg1P z`#H}8WC=%>h7Pb@l1v$Vr_?ZS2(9ztbTWas80R-y$ZRat92xb9G@S#`3^Y#>9*uDH zAs@Z_-uu9FU(Lc5^CVfA|7C5S3LjDSlB;pd^~~LYf-n&}O>o&jvnjGD(!!qi%@H`6 z22FA{52(h;TXV0t$uzqTL_8M>{=na@L=yFPixh1*_^d=$7Xa#kTl-~@$dFag9)$u8 zG(_Niz5!(iAx>YGIhq80cDirLstnwMJu-~588}eYh5J+}igLQ57N^ABL^7X@^tpFw zL78;QBV_OmJP@2~-0>)c)@8ua+L8bt$W(Wo*N4?7F1VV^d`-JGn>>3-pN*#Ps|nH< zOhlWDksCVDOrhU9-WC9rl~jC#LcK>q|66<~ zzAemv1g`&KTYPt0h_~s(?pw6JGx1?*_Syk+CicSEe}523yoBMtiViaZumt4&7g}j}oi2MZ!Eq))1hjFvZR`Twi3!D0lL5ueWUlg zO8yNH_|pCf8GtbixdbQ+1l?cQ6ptnGP9t`4+ljLZPe8MeKivB#h5b#?{HZkT{JvCYm*4jj-b0!5%bVDJH=oLD+F-8EBfcXxHF ztJn5n`8Y(xs02tUPMkUL3-}?NIPwEHBP4`)-m31No^jURToTFIuBx}H-uHQ*_oL?5 zoj?6!f64u4c8grZ*~O4WQ6?i^ShF6^d!`pO28uhTTiJDDR+Bj6 z_M{v$v%$1h@wn8$gY3T(M+Mos7ACAHFp2L@#!~;a9+mlQFox!ePe`UTYnn}I$%#U1g;d^{2|5BF)H=Cck`2z(M_N+Lx35ZMs&(dJ8TGQmY_; zcnzontnAQAP{i=0F4Y`)zj=+Q2S-dzizoe~qqB4RI&{pXW47Ee6lX+;I<`c|Y|kCy znf_pLwjwex`mtxxi6F(O~$>1ahDEY#|vU~a1CVQY<=6R8_X{J<4qT4*Dw6NzmU&yw5?SQ z`#A&)Xm;W24Ps)wj-LvmUp6Z%M-3YEIn(a1uhvfd?hC>A3$FY_b8y!OY;Al!oL%s@ z8!q_swF}62T=3e)-z;dpo|cJ@1FBI$!zc_v#Vc~|C%CSP*_yd#zpCvhnJ(9bDDc+o zQXJ7|z_L)xG3~bE&_iLnR<~2=hI+(=sbaZkr;DSXaos;xvF2=?@ctxW)1t3s{~1dP45jL8!TaQjVNLcg zvtLFo~z~PB)YHQTBA4d0sDOi9yNsy8PxI_jqC1qP{q`M`kR6FO);aUc;F(*k)4pM zH_Z2j?G3)!VRfHJ5N`nDJKlxjiSHO+?USZa7EjC@I5;a3MqPf8D>+5;;2Y(RmYOB@ zc*$(kGCabtr2Cf5PFN~x!-J;j-l}JO^KI5EjPMTGqc+_=EGEi@0J2Hn$f)+~=K8YTChp@ez{fsJZdssy8L z3R!C8X%(t;yeG}Q369C6=B>rg%r-rEvN8=W5L>DJ%>2 z&SNct`Z0m~stwia;>2tzo=c^Jgumc`bH!{3mNdhT+2a>6P}FEhi(05-IuRe2Q(U)$ z)-wasAfY%*G1DV1a59PXi!)#r@C;Re_-J~io(#S_a5?kg{9?eBk}41^ixRHj0a6v| z)a-iXTc>o~Db_q%SXnsY^dkzw9e?gjhkEzJ`Gtke<}TR)?iB(MC9ZkhPFOZA*^~ou zDsU@!n3{dXL#d)5;yK3?C=2OLb7H!P%?U~a5Q(Fj5Ta{#SgB<&n=&g@ytbn<&4Y%L z0M<>!NXRNfHpMZ!ZpM+Fyg!@D3tmPtK$8uryZj=T1rORg9ZNzTyoigK8a|vAL~%hm z8-`R`uGOJ}u-k$$1rmshJBV*rV!aYo8n^;`WEf`?aG=Ty z_b5@I&s`9UQ{rwSnGZ(#9pcP_GU=E{h~P_TAUImCD|0`D)LFn$+mZk;Ny@uU>%HnX z7jQM1_?&iS?(pmd{hndgeKtY(f{7?^F=9gpzL9gh*@IGGmPWcoMvv&%i?6@6$ts_~|?NUtxMQ?W!My+`?5M-p0=lZXM;X6d-+Yg`c4qt>wJl?HMnJD1fumu}m61IMFv2CL8JA+=;#VR=4Ti-1$hiN?Qca z{l&AY6;wTBkWiMCA5daKnIu3OHlT*A{h*rv95{Sxe~M^8_lCFvtOW?*FKiOY-1KHM c?R>ZyXJJyJfluU=!hR#7Tvw$9-&_s<4<1dg(*OVf literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b2ac2a5df2953a8a013806a5b16f0ab95182f1ab GIT binary patch literal 14134 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 SlR1TKkWhWAOF@{Z#{UDKAA0Qo literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.values.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.values.doctree new file mode 100644 index 0000000000000000000000000000000000000000..442b1dc8290b788726254c2849975a272d1cc1f4 GIT binary patch literal 4229 zcmbVP?QSGT72UOW#-6b~WAA2HNLdF56k>~=nFs+ws|bXM_6G+4K!IN@oto~Nsm9$^ zo$6}uI8qQu1Y)Hmgi^c+JVKcK-3v;T`|a z4$DHMaxrE}B2~gmXLl17S2>r)eeTZw zXU6DsS{Xb}IBcg$Nj~qy87oT&@w+2g9)9g6Rk2)5S$wJajLuYc$FMnVIWZKki+%A} zY>Q)?OoYn$L|0OBJ$a$@ z316&WAHpKO3D?A%fcD$?dkcSW}y3! zbT5o!mH4h0t-$p|f&&K0`H7mHy!!Q)Hg6!9@c$m@9p7^Q6gvajiOLi)GL>GV=fjs% zk#6q$o0L2h-6ml~#|}5{1@b<+Ew7mgKYtNuaUsZFwicFCy9et=1-MJ^*aLdjlhCjE zTG)DvJbPLejIwnXS4yt0xFa-wj#r-5o7S~Vz?;xDt^-<_~#5UpT zuBP}S+boyhu>S_mE`bw}*(LS2K@q&sCOUTR?#5ySBC;d zN4+}n2XgK`aU7h2lRqWAJm7(%v65!BrZ+_y^|XiA*j%$htP=QJADqf3C&}4~EXFcn zTC?j9`p;6HB`31Vr(B=B<2g-Ledw!tgmTBhQ1EUg5gvSno+cTNZav|a5&!$kBfd&^ za{O;__%k?*^x8CWsqeE@eJerVsCuOD20;Fp*a5wN2|%vrQ$ z?-*rR=FacfeshK=SXT7jT|0;?P2)n;4hQ>2dWsDyZFdzG1uel+q``tkZ^#I;sB5=;8LX!}6(Sm`86c)>BF$(V+&3)@A4&d`YfN18Nj5M4W9l~K`BWVcdq?I5Z0B5L^v zRJ|ZY-Pe+3q;TjZp6L|&rKl)*m8b}V15O?CMWIR_t={w$iA{8smZ|Z49Y#r7vS~(+ z)K=~^d4inVhchLrh)+5wJ*baGvos6i@+10%M=+lF#KdR=Z3*JNhtCbfDJ;+L+9OIf z&_>R|!Ys{G<9>PgwjC6_SoR!pW}hTe2HPnw>^FolMfr3xfw&wO*G4EgR(g(fdPpa| z0XP{Mo+CWQ&r7@*z4gxbf#*Qa;tlmAS*rg|qn@fB@%57HamvlizkzBn5hl;@SkJI2 zQYbOPo$uOX5HgS2%xs%x6h^iidstpe!xoW9=OV)&$a^nS#QXg+$6yeBSRtiL0QJDH z!!pWL%xY+lV}X_)Bk&>FfU<`Ww=b fCgELeCC0;0EkbaVlrvKwT8>QBg}% zC+?!MhfJi8rAr6OU?ND6zSpooaBlF%!x*P7BaXh7MVOGO=z6P<>JLP4HJgQkc4N1> zyrPdTyBkUgau-ZQk4upoCNfOVIZ6}S#}SMIvkYo2%6UScSRXrke@#k5krzYTtX*`e zp5hA*$9G5=ev2=~7p3iyz&Af^i!X0V@g{v1eSyCBu6S12gVlg}6$f#Ou#*i?8zhvM z&ADLfswA9)2MBOJRawgcfAqBtVSBo_rm@$&>Mz}2(~tV9jYGmb+|*U?pv|Fb#Hym2 zfSwYoECagm0Zn7)XSMuuAn=L%6*2&WA#w>&mI!)yuq_^I;=NYvC|-BOf}nG z)v2zwXOV(HB9K)|icpFdfk%jx7vcptx2n76!*+0lrIn{{-MV$_+;czr&z*mMesshC zv!k*Qsa#H2l1P>C(%HR4#Z}IwabLIxe{mnXGuzkfX{jn5b7yZrBNl0vXfEAjXNRP2 z(yW}+=X)iOO{!#jTy#WN^d7r2(YGCwnvAb)*|!%}Y1n)scvf&-P7-F=C0&Vr1=jHmeb(aG+JM zn2GL%ajX(=i}4z0?-D3*N-j>-{Pbl!XbJQhf(jIFf$H%yAe>=mNIOxPB37o-8&v() z*U^&B9{97AN)+cNeMH9|KXWor`QGz(YM$b~zYHX~5ac!62+^6{hmYd|Os2c+Azke$ z>DPQCg#BfnJuC}G`MZZBCD%{5BUFEZTOQR^RR4>LH8JZ`6HWLt$d6i|s(-$(#4kDxC2$hSf;2)o7rord$ z4rPs$y-D#WdgA-yBs>jI{VAd5VGneT6^iUywQtHb>TDnPv4v)ZSSR!AAD+nvr?QyH zglWyLJ{&wsd6t~YDxYzE`U6jGD)u8^>?2e_4w`~|YZ-C0ZKO$v;ihr73im%=9PV|t z(|bS1J3qr4@7d9|b1QqFt=n6R_*MZVd)L74$3zX-{ae6qGaa`b_-g}n1N;W3JfU`q zD@3ZTjN5cdRL)ZA#J_A0d^1-C8pprUoI&MwA=Nlk^K09as`)u=#AB-5SMJ&#)SJ!v z7#elh%T{S5RU>Qk$P!&va$`_z-8EtH6Av48Fpmi;(+az$A&=`CF{TY2}hCqsULX&%OWZDid-m$M3&19J|8dah~s|Ctp z=znyAY!b+pl}P(hdvY$1xt|1s3~SDFaveJY70_bL!9n{7@F*-b*M9 z>Sd)ftPZIL&;&xeaHSKXYH!bBMk>SCHb1q8G_@gvqvc%b+EOzJN9Mz{^n-HwN^S3OePuE zhyb~Y3T{UM`86vYZ^hY@t(`3s;y-p6jIJDLj^5wg*g9#C=m8*JDS%Jrd-7q%eCk59IlPWKw zmXAQy3n&w{WEmM8d5LE_g?=R}N?s)@!t4O8BfczD$)oj?o+7b{o}^`JJYPpql9p_i z(L-u4drh7o=MM0g5|zX!9gH5ACx(!g6N|PDP01n zJANIOQKn*6Lwgbnbn_U256K3UJ%l)YSrzCK^d%QMcBlc@V2_GZIR^*oqHvq4L|M(Y z)Y6=|n<*ADk-nZTG3s#40}0ai3LXf~4eq!bL+di)=xteqL79rK_xia0Y6Mrac_?Vt zc9+X1^c80JLMcJ+f{EyJDRRR^hUo=IX+i@zhErgcL9InOPw1QLV`pz~NNFDOVpyBE zi!Rkue9}R^N5b%1d?mgtZJz|b0b*NxbzO=#=qu?<^uG7Rqsktx2h5u|j8lZ2e1O>? zp}cJLg0Jh6pobSA!1+vNEeE{nD_g==yT4(v-`wgC-QKW|`l^jX!ra}qRqvq9p=$V+ zOto=8R#^sg@dh-F-p{C2L;eL2_{4pH48Tl?TmqCOf*vkxi^qm|zZLtq?WZ!%s)Ts5 QppXp`s&92E2s72>ze8exRR910 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f741f39f7997886da8847fda86ead6507e843510 GIT binary patch literal 13414 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c119b6a5ff3c66bfc2e9087be4233b23deef6eeb GIT binary patch literal 4264 zcmbtX-EJJW6}Bbsu68BuN_K1nh?OWP(#VK+w+MQX7(t7ofq_=7E{e8Sbtl{z?sB3T za>C)rQh*dK(6kXkpeVv#_9fa!2#^=*3-mkW%+5U)iz`7gcH4d?I*Oa9vIkX4vF6GX13D z?|%3*Y50Pqsl32{+>srax%F#)N&bDu)1SNWo^HY5y>a5u_M`T>V%v7>SDx8hSt_|Z zt7gm&m@zt?RR-t~8rx}7(#v~s#>x^x{O(AWhhIBMRV)`X7N2WAC!Nan3|r8a6C?4O z*c11~wm7njsZcqe>Pkwkr%#nWp9V;p|KMOb4USEt1&0R=oHZfhlK#+-7TGI(6n^4f|KelK&N^YIK4FWiNB>VaPH*~n z^gVE!sP)#8|DJ8vON7|BA+$pX1$cJof@hHtzY|XghG+?c_&w4EUhyT|A23P`31_WhZWm)j_#VoUf$f!6%2{WY=pFYn{ zi_l*k3LI&Bqv8+r$PdL)cpM)46T;0yA2=H;6x@}{-;{2Y+&(U33(X3#%IG&fI>{d# z%VHuErZv0zXz)1YS#m6^e8%nUs@V~z} z;H#9U_x=s<{1R`xXGfdPE$w}|YHuax8&_0RLudENMbI_p);rtgxwe+Grc04O134?;b*0}_L-JA z+x;!eDzw%nA8c1url^cN6QeWRulv2y4hta2F)ZZ;7Q0$016TPxy>#~G)S(mj5iP>K z=TI2b%SvZh?Nb$?X@qv+N+-nC-k!sZREDo?eqr}%hC>cVmvg0a_k|r&r!AsbcrX_d>4b52&Ngv^eIX#K|OC>OiP+1hHh4S35%zXUb*q7@2>zfhRTIonI znPgle0^};HxE%%LSFCir6=#n&b~a3i|JY$Lx^$p9dVhUm)CwF4A<4b_6)mq+x^T+99iqik2d~m4a*g zNtG8-%SWK<1(b_gvWyIlyu>q|LcbIhC9e_{VT6Fz0lzF%$)nYio+7b{F48hJp0A@Q zNlP}%=pnV2y(UkPb9;D9iCW^54o3HDwP>DZe%7@2=oc=*pyCq~Lk_GZi1#kOND!y6 zJiTcTDcL|9xd02ZG*6BD<-yx_Sny)mbLcU9B$+YzPI+Np6~+|hqv;gla#CCwq2xsA z1=8s*X?h2s85y1ycoargC7FVp`OPZ=1H-Z{bhj+Ryi7&cdwp1cLxQW> zJQTERyUpbVeUaInP)d-yU?MtQirg@fVS2$)n$STG;S`u|?@?4$`ujf)E^b=2Hlg^;MC3WTU4fx&-Nz+Vm9x!t*&#k(`x z*;(g|R0I-*S{(_Y4icXOK0>8_A-(|5JF~m@BT1WzNLFs%dFP#Xp7(iw?4LUS{MX?P z|IZG~LZosrW=SGd!b@j&6BSoEm&SeW9{kyT>`rY@v!|u1bj+Q-0gYIsS)#dgPn;c) zx=FKgT%X@5d2CW8+vB1mx?<;vI~6_KF{#P;%9ed=UX_N;#)4-B*X1~2hK+wC(~m0t zgZF+e4WE(_ii?tQbvpSbXvZo%NYapK7KqV}<3+ji?Wp4(elD!Dta zrp)%4F*==A2GtaR$1cM6D7IY$8Pk3vLFPG2T`CoP5# zzG2Kn_uM#EiMPaP1+;ev6gVa4Cu(-`G9I)9dJRDZ3b#P@_!$sRu`{5Zs7w(nQ|UFT ze(S4fNoV){SxO~}bCW)zV~?IW8K`{kc{?>v@!nqslAH_jnyrQC)b7E@Q2{2?UG{*k z_LTH%z81pXBF`R`1*81k#gUThOYR8OU*ML`Jw7$~Ee25BIUTW`$TK^LIZyl@Cvn z2Pd)^%Y6M9r#OwcoTs& za(QNL6;}vZTOv1km8hJh(usfD9T3l473d)UL6-)n+l5r4P}Z;Qj#SOhK_ebf3BPjJ zcE8?i)<@8&<6pK)L#Y~BqeqtLvXUEvs_U)^i=TMdsFit4P@7mE=Ui%}KY zdXm;{eN<<-PccHSIkw){Hjg#MoHad)yy*kz?GQ-uFm$^YN2YD{;-P)TXeP^y(aaJR zTFp@(L#yu?Wmx9UZrFaK!xJnky6>hP#FeH&B5KEm{YDbT2fJJ2g{kU@1`R(Z&9qOr z#M$m|!&KAcgzc)z6qRx3Vt8(Qb+cF6VFCO&=A^v9Voxh&;3}V`3ukXm9D0GD&LZ4< z0fm0OtaOIe0TlxpMQ9hUbV5|^?HSBSW%$bGr}luxH{@}&m?@pRPwjv@Z4t#Pr=hTf z!B>NXXWUDor>PN9GY;Xt`anG&o!foQ3#Cnz@kjqDmmS7z;G-o*^J%l6X^d#~xmB1`Qbx|M|YILtMv(Y;vU$5`4Z$?~er6a*) zl5vd)kgF)=b{LRfvC{EYoIT#y*)SpgYX`yT(t+ma{q>EFllG7v0OFMb_+-90A7o6< zD>mnVJ3%km!i;V2XdWw_LDrAp%;5d{L;9N2@12MPd_Ore$h8Ux!hW zmTa2QLuxN~nmj?y?c*^eDv3`z7(J-fqFI`SLHZv3!X+40d}3nEfwctj-owWT;uMx= zH|-H68)zfvU}2W#sd2wLeA5mJUM%|#J!YRIQwHBDFYLF4F-7@kGJ&`p7gt6oIaYd( zbh=BL-T`PvhUW;6@v{>zMsK|RL*O~kvv|WiNtWin-#&S66|)-J<5-}r#|V5#HlXYw#OaHwK$oCTy3n^n4Y&q-RGi8gI8Yab+f*gW zYPzA8=EU7hv5<-M8Fhh~hhr*8kiJ*&KyYqw$K4oO7ZFEq%OXt7RCK-9NA>3;xSGvE zLA$owTwc=WnB5Jf1i1?)qR*ws4HFrr=NzR84de(;fmsH%7UevlkFSrNy}c%-!N`kY zZPqTjR8R432lX8ihTq~#@kMESB=8Lo+v3aXQoK%|OJAV(y(=D9_Fy$&-o!ziBJAV? z%mxYNWuq5-U6lkqyZ`~trz&eX;8kDQ5VqRAHH*FGR)6UBntjw)Z5$Hj?xwAJ2W<{j zBUTmF1oV_xWf{=L8_+a%epbsr2LhkC_mKe@4v|ZMvP96sg>CUz6YsTRAGf_!##xmR SPv#V|enR!FE(Kwx8vhT#Ac4sM literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.VertexData.as_arrow.doctree b/.doctrees/_generated/gustaf.helpers.data.VertexData.as_arrow.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e936fda60723eb511db04873592a74d62a3635c4 GIT binary patch literal 12187 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.VertexData.as_scalar.doctree b/.doctrees/_generated/gustaf.helpers.data.VertexData.as_scalar.doctree new file mode 100644 index 0000000000000000000000000000000000000000..02545d25e60717d0e578f91f716db65761e910e3 GIT binary patch literal 8615 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.doctree b/.doctrees/_generated/gustaf.helpers.data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..843e91ad725725944e28eacffc554abf2ef90556 GIT binary patch literal 15937 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.make_tracked_array.doctree b/.doctrees/_generated/gustaf.helpers.data.make_tracked_array.doctree new file mode 100644 index 0000000000000000000000000000000000000000..089671fdf1bde7a40c3b1e5607a7f3457b5add24 GIT binary patch literal 10128 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.doctree b/.doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5f017f406fc4f81e7cf0862eb3edc3caee270c45 GIT binary patch literal 5101 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 ZZ7bw&vr~~BySzrcc(>e*kmZU%(x~lhL4px zAD+Db@R3x;aD6(A;yjb=sw6hxa_cd_B=KJD<(PbM=Ob^B`acMmkGx=`V9G(o43DbQm$KSW=TP?b zla*pDmTV_ZBYxTPfOn2~1ImdvVcxg!dmF!Z@H-|&VJjUw^^RboIGw_Q_Is5}j*k0B zFX6#{!i`YT@hiGabWcsm3h}NOv}~4tmCY&(R*)JskjkzekU61FI_;}T|0M*ULGN|I z0rtCvAPJu_-w{rB=p@Kvc-a(s4&-lq37C&UsdE0|V_ooL2W;Z8<#n~_6dk+O z=HTPt-oj>uZy4&Q9$cq_WM*@&J+hmSaF8Ja=mxt@7dj}rHJ@{R?=q1O@{Cd3uj7@R z>!-XVcl-pmd{jaBYjVfQvhzpJS!~fCS)-?U<3-d26z4YrTd=5l$MLQqQmtlc z|LXZ_+vT)mZ2*vdpFzJXXX$;X6J4p0shLr_E#&ft^_6& z=OUQKU<| zTR#RY4aJ-zzAByfP>>AMQ*KJz4-yp>lIL}?Sz&b&oi}s#%kI714i`-RTr=;?FL1q8lR!TDCaX(*DF%mZ#*ZbLlc+fO1s(81Zizj zNa;dI{KakrMup@Wlb7PJ3zSU?`E7~5fe3wmxZC1aSBs-#r`bbs=p6|Se?;(fapZG+ zs8Z8zvf5ozkI*sIEEDYryYtX@L46~5Kl828u#Sc=Kb%F!zn&i*ZJZM7{{g9gK$#3u z|Gkp>pS}}BA-aAn;=GT)Dd!Q7`f=J1S*GgP=nc~TMJ#3C=&Qa_U`fw()1*jUJ4w40?%YA6`TvhVGi(3*)vdicvvv#r3(Xk0 z=WjKbYH$_f`4^7tN_JJ+u5Y;(10_-ki_`LKcX?^at|6GrRmRJ+JzBa_*IuV;;M>I; zyOyf@ai`uMP-}Qq-q@|`uwL(jq5^o{5bdU_-mB?|6Wy0{V*nGM27l;`M=i3$AzGN3 zes#w`s4~@{?(GKW??+Wkq=Py?x#U6cu3vk$Uv9lt2QSJ))%%jUH(>5n?@sZa@1o~B zs&@D^BZPR*-Z7e`xnwj81({Y;^iO_-=on>~EKio~Moq&bEDO4C+3tjerU4~r#*wXh z$B!j;y|NdkwS5|3-1s%oE~6k%hE27kSo0iRI<)Nuu&}wEwS3B97rP$okEn3_o_XZfDQSjb$D&JX)H{O zB)FU?os`#hhx+g=2vtJEW)6n0`5i8~+X*gWBZ7L&!hO{X)!cPzw={QkTk@wI=3KEG zf}zG&%Z}aWmocnp(2nP`-A=^E#T3`=Triyib)e9kCD`e~9U&)`NWM6Q%>tgHuQ zE-Vs9H6TRS?y$nBV76sfs5RJ*iX;mfNW!pgBSwAGDU-x-*X=m4llNy^SYja!_@)Nz7WfbeExNs3fbuGOJ}u-k$%Ig*KsJCJWzWWgjxqeIjB zJ$k|=m}XpTViE$k2rl2mcMiD9FHe^3zH8MaPp1H)jFZ@uKihl9?qoa*5G5Q@8ajh* z(asoUFrd(|-xS7V`Ge62+xaka-G?sOoApj8wCPC;oaE1 z{3@VlA?!-Ud@#}%n)4EnNya=v1Ybb{!O_&- z*t-~j*m=NF=VX9Un({8hySDq)mnmRXPJB+gv8z0NN?&^Hy3ZyEUmy{sE=Fvaz_-c{ zH~SC@$TCQ`$mp0TD4W}Zxm{`r-8Q&QngzAV^w|jHYqaT~&)!0apY`!iZhN%tDj|s6 z!A&mS#3vbdj#Bu6_^7bkZRa_5+hGg{kUY4;?@)}^bYAZEj;BKuz}d-I$p#OO^v=R& zL*1L>*sE`KFCEPBN4nLfMDW~QLG)Ks-XOU5)&#ZVQJ`q8nX7|YX1w^;q&t6 uhz9h+h%1;i2LSwqO(L1w-fXs=4>#j9lto0CnNrwqM3n2QwBXy?;eP>#4IZZe literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.doctree b/.doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f4235363c0794a6a4cef97b6167f2a1752ebd7de GIT binary patch literal 14003 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.show.doctree b/.doctrees/_generated/gustaf.helpers.notebook.K3DPlotterN.show.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6323b81784859e54530218e16ebd5a54bd6e0fe0 GIT binary patch literal 10039 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 T+@{80)uh}Zy=KXFqekt22pUg7 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.notebook.get_shape.doctree b/.doctrees/_generated/gustaf.helpers.notebook.get_shape.doctree new file mode 100644 index 0000000000000000000000000000000000000000..81730c870fd8b6281366f49c57ee2a9cc61929e0 GIT binary patch literal 8225 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 KD~MOF>3;zp_W%O` literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.Option.backends.doctree b/.doctrees/_generated/gustaf.helpers.options.Option.backends.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4842739860095a4b2777966f0f0a42520f706748 GIT binary patch literal 3819 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.Option.description.doctree b/.doctrees/_generated/gustaf.helpers.options.Option.description.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0725a9df835beac79e86d2b987eacd70fda596d3 GIT binary patch literal 3858 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 WFtba)c`@50U#Hvxjpp(8`u_n#g%n2s literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.Option.key.doctree b/.doctrees/_generated/gustaf.helpers.options.Option.key.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ff579735a0355792edf4c66c4c74b632f32bbd76 GIT binary patch literal 3754 zcma)9-;W!&5w`Cv>7={U`JC7&5T9$KNOMLbDGz-pjG!nGK*T2Vi!k;@c zmB`E0lx10|GH$#(%2ZkxytMvX|NO81jlXn5&0ZT->y&$U2O6o!Wu|%QUwSttb(>2w zZO#u2Pi?Ns?zrfQz8JjpmtyF8Hn);*ZMkR5+E})j3N9?kV(Nm29$>ZoPA^tyE=R1!tV_tU%m^GBSIv?aYTmS zMne2id_iIVX%n`139iB$zJd2sMyy1|!Jc;`va05PMkDdNu=Wd;)x^$6|2t&VXUK?m z{g`W@zo?~*E^d>>jS{QU1pUDpFV-9V5dPmi`UUNWgW?TE@R_)Xo+FZ95hwxANVZg! zcDrS^J#Q1?UeS@kzqN*1!#j`!JPxWgJn718AB{{EEHAzIhZ_JcyROi2{)rBbOmvG< zO=3g1b%Rp1KgX?jLdC!Kx9+6bY}e<|Xu>j`(pjlmS*u5u=rY5t1s(k@h4#xp8ftwP zv6MEsZrk^yA@!sob@NSa#|Ji0J+;bjHNSW$P@A=lj4mDl)5FME@o{X4yH&hXrR@|D zAG`OhW~GsgrcY97wM5OvDbTaZGU>1GxKXRaGc0Sm@2(rCwWb-9bQ9&ImBh*7jv8n% zT+h2{xzK?!8JPM9CTn!xwo$phs%=$Ue=W|g-LRPhN_#9a3D`nv-U*s$A z?#?{=Qy9_-?!AG+s9DxpVs%P%rYS|caHSU$=pHO!rc{=1ZGPiUX^NM1k*pR<7ycVJ zrfyRusVeAgU|{frDB+R^N%A_kB55Zj?rRP-qx0IGXkIC86Ukq3zt%diFLB-YHPa;s1`W+w0m%^QNI8W>{^cbwOL&>8jA-bFwOvepF$oRj z@$P2AwN^S2tjr|W$N;&DUgORp@>^DV!HRbmdpmn3#DCm48r?Y19(}yKv3JtlrvN}a zBY=+#1LIV(a#^z_2izH&-2t9j?mf*@rL!dC6~}-tQ<~V ztCEe#9pvEJX;v3i((w_f20@PQrAsEs;8~Carc>%SqRQ|(QwatewC?j&r3_EDPX>yl zHhGns+y=g$C0TCRTv8y7mxH!WP;(~;#-M40qJz=XMlD(7GCW7zBl?9)Fg`qWX}o+KOdKW)vUavAaU zhU;n0?IPTPZZH$JkhpAU*&HR5S>dma+yw|(Bwb~80VMHBaqI4zb!piu5&2R`d_dlN zQW5V@Oo5q}d{v{Q4S;$ttm86~DrF6{7pY+I2Z@ix29yJYIDJ!B7zp&T56|_c2i$@^ zD$UCUIM6hO2h=4@J>OHy3*xR+ELI}Dux~slQ_OjW@?FCN!MVj94^wE}BphQ*CU~(? z(+ysqH~&R|t8x(=+O0d}To-(k#sDn75> z>2|_`iPJPk+Q|o)jS{NMRxkRxEs1)F00}PUN_HFws_*X!JMH0)#bJAEIP_r0KKiS+ z9tHDo-&V7OF^8^^s+xKNW=g801iFX;Lu2q+BmWi%eC>aS3cw2rwFD>)k{&PYn#Yd# dxD$uG9p_~#>x_7^q?C;^>TgXeh|jC(e*rhe$tnN< literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.SetDefault.default.doctree b/.doctrees/_generated/gustaf.helpers.options.SetDefault.default.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8805ff6141cd7aee1f75ccae3e5b7bb0d16bafcf GIT binary patch literal 3862 zcmb7H-;X3W5x(2Knc3MNv$vbv2`RV7MJQxXWM+5(37sN@6!L&p>;oWP;AlME?s2p3 zc4NEmW*;JfP()Vp3&i{bk@64m7x9(d-SguDM^+l`xLht*ef3q9=P!eQ9i83_f9}-O zqNr9gmSvU7xbf~FQ)yH3%K9(;^S}Df{G}Uf_S&dMr`)@H&`3ogGtDdi(z^+%+d`UI zdwyhiY715M$HhPl#ptEK6k|8Ag_V3`%ROH<#4#z`Nj*muJ=zH9eD78Uo`&4Rf@X00w3jRh`* z!+wz&ig}buW(dZT$xI*l7ywxlgDPQ`oTSUeH?;=*Nfp-Mj2 zO;vF{f35V*Jc7~vgM(%s9h)ah4lQPR*6#ivh|RP?s86r+yU3t+FMC*VeN}{6I|C za9xY1NDAV30Gg(6gmHENU%xQFzZDD%pj^NU?2Jy(gJE7|WgTk6`VLo1!@`b4xmD&N07_MJ&Pf+{M$*NlX2@T0_!#pfi))1Q? ze=`KA>yRPXSaSdw$r~x7o8LqzcbHg}Cg?HNcyYUZwuj{J9=(V3f+6u4MfHieh|wUr zpAk?2>qyL0Rd%x-cl~r7^-kfE!M}BeI>TEq1&sFUTX@o!=q^H;Dp^r^@eelwg!Z;Z z_xdNM1G3XEDm9Hw<<5;N)qS0G;wd$dTYu+{+s$r$28}i>(<_};s*`nkWQi^_+*(l9 z-%)5k4Md_gdJ)TQo&RnmOk3hlTjEb)pk?T^V`^Xu)n0e#jfT2D)RzJ4nj<-K2#oh5 ztHnpL&2CrzR%Le+MttPnwVG8%GMaQrt<@5B9w*GeD$At5y5|l%9iCy?(0%vaByBX! zucV(=$DJfjEqBmDg+YGSPv%?)3T566f6HWpj@~snH&l(S8|$yd>9rfTGe&8TMTTL6 z(OlM89BHL2T;+MO^6viJqo;)jL4td4pm5kO8!fRqA$rpUq+Pf&hzWJ)Im}eb@{P?e z+zGuHs-{dxU*bmPY6)1OR3(|NMJnQ*O@P6Vqm$u%-SuA(2g(}?_rl|iuL-Nnw%jtTK^H;G2q z4s=JKY;WwGbPp*25YGtUBg2q6k*r!aY{>z4hK9I@XPtXT^Hk|9$#~82XsA+p1zfu! z>N7`U1sp}zu|W*ogf&(rYmwV4z_pXCDeI)?BTx;30^LkkOp?LVAPG#T)UQRg;Z3Fz z3`1x=O zaol72hD$JVLt$cE!&-)XAL0FrJjLbJeRoF12HI3huuv9dVf`;3e&{AOuM?CAM~S8Z zuw#-e7<{L?aNiNu*5<{04zZclw^pcXrt}i!^oTTr1JFz?FOeP_-T=Iwe(=K|0ndrf z(;f39S)2cUXC9Tyh_5$X&kAnya0j}y4NBSosCU9TE)%Iz)0W_*iT}IY5Zh zH%*NJLBArxPlL7x+<`qREvg(GXq&=0bqUifcGQZJxGNQll}NAm8xP8q3!b5TZ{dO9 z+~ST$DYR}9j8vt=ye&NomvvF|6hNVo3cIKPjL-B4PY4z7}5@Hzq-teb^RX z-x={fz0<$K*!x&~+PIU=gas2PX@Rtp4=@`gRF|Dz^mS7b^$-CPTrQOCIS^Fe-4XWM z<1LHh?$&VVe9J!itF|5m^Jv#ryMr-@u92#SdIDxjs-y(Ehyg=m^hqoK5(s?me}xLb r%L=swC=HSxFYKGgmiVX_hrAsXRVtf|c(SCF9cI+u+Ex&sTeJTF#cuMy literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.SetDefault.doctree b/.doctrees/_generated/gustaf.helpers.options.SetDefault.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0a789fd25a11408d4e24f8f7eb59c3f8dcc56180 GIT binary patch literal 9627 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 Od|l=iD4Hkj=Klc8H0)de literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.SetDefault.key.doctree b/.doctrees/_generated/gustaf.helpers.options.SetDefault.key.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b8f794a3941b6db46ea112c5d079c03a1b47f26f GIT binary patch literal 3810 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e894103f8e2e8ccb1db948d1f76f1c778d35ba0e GIT binary patch literal 18699 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 Lut2+c+-&?e-%;74 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.get.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.get.doctree new file mode 100644 index 0000000000000000000000000000000000000000..54ede6cb25329161c0071c3162d4a9fd33ad2c52 GIT binary patch literal 7851 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.update.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.update.doctree new file mode 100644 index 0000000000000000000000000000000000000000..29b32ac8bba7403fce96c7c4ffd1d62b5c0dac1c GIT binary patch literal 6283 zcmc&&&2J<}6}P=RV~;<^>)osswCl|TNHSjHF$fN@3L(-e2V`MTKp+82)6-ou)#K`} zrn}l75<%e*v6c#PNb?VH=7hwBKOkHYQsB-3AweYIFW~p8x~6-^yIyZDtmK`pSFfsG zz4v=x^63U>6S)$4h%H5xr@0NYt$^4UC7Fobb zy#S7YMAi!cV#pVCD@sCk+EBc;34aMU<1a(8pTXZN_%~lQ8SXxhrFi>Lm43lL$MYAt&S@+j86nh?hW-SmWc@1Z&-1~S=^e?;bqGIbY23-mf0Kn7kVUBaUV|vkg`c{>K5Y`9B5jzQxhf2NaK0QAP z_>9V*6}mczybAu!RH7JHX!;GGqAn5(EM4kVasfGMu&9MPjp#c&py5O2PeIbEk)V$GRTw_7>sIfYyf4KqjhLJ2aDj zhY&H&{FFES=L-*gA@ZK*v)d~)sz0|?f^q+k$=|63yf5}My^k9vWo+4Z9M@gxd(z8;pfxu2v z5d{%qwO+h59 z#obFZ+X$3%wW;;VJCmhnT#}AlFh}x_i{a(_{S&zT2kiYX2T12V|8WGp_6|dBne?n$ ztiR0AYMXtZPBmrzld8e__yV7qe2-SxunO2s7BO@OS2(I&<@%vSk3xW%+`GuPt?hg* zjl8lnO;}96f@N2PMRnxlt61`Q@+O`4;pA)hnY@Mn8m2#@;Uz_cGcA8MUu9aOxhq=t zatQq0gubHw}WRVZERa z*L&|()zn_qUF_xP+U@sVRYRE?hY;`9Tx%-dvrE&uEen+vsyyVIhq_bs@~CMspr;KyfW#>V zYnhY^qM{%@E%o9)qOui%3hE;;tX9J!6Bun!twt{mGz(E$)|~q02-_r5vBu3##XjL%p7{RA$N(45eCm zu%uVHFQ!A}baom+iwZq??wDG-6|!M5#&KOV;Rz*9?92QZln%@hFuD@S7bVb{#}YII z1WMg0)M)R^d!|~xJ3HyIER&hX{Uj7Dg9S)b6w-RrYQC{c%j{C>ow=F0Ehc{>Pwd)# zYZ=_?yR#E>i}ek<1F)BKs7RPrena@lxbVje8m9(l3GZk6R>lIEgRdL$B2KA%Cf}vyT|7n0%dGNT1vW2C4 zuYCSX&}TOr1#{aIrQZHkw>_NKC&(VLY!ERuGG`zl>~j?h9M)0(5MC52ULLII9bhu{ zrp`INfM*|j&h?G_EK&Zc$D=V9_yc~g3#xeadLE;7^L|pmt8*yomKocjCuHDPs@(}V zYWe_%xBdn#8x>;pQIR4;&~vSMgRR2AInX16C>a3*Rb049fg&%4b8Jye*cH;Z&PWfX zM^7PXsE?=DTd*$^(SA>U z4;P>O4*%u4Lu8Wz!DJ@RbN(_ON6kEP;2ZqyLT@yUXSUlwxok5Gj<6K+QO9THZc+$X zh6-cHLn)?sFvJ(;h*R#)%#Iy*s#$b%W`Bg+OqFn++w*%>Gst>~Ab~6>J|M*eQV3`o zIzhcY;3p|C4neH!pxZ5el?_6SA_*i I=*4jGKj2tbvj6}9 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.valid_keys.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.valid_keys.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f663e6c1387019f8315acc29a24e7c9fe674d53f GIT binary patch literal 5980 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 JLQjYNe*<(H9H0OI literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.doctree b/.doctrees/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.doctree new file mode 100644 index 0000000000000000000000000000000000000000..723b91039884842eb2f0c2d13e31cc125ec277f4 GIT binary patch literal 9584 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.raise_if.doctree b/.doctrees/_generated/gustaf.helpers.raise_if.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1e6a3cc5ea8fad46cbc90a559dcd7c9a8e312606 GIT binary patch literal 9231 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 H<4WoOOQ?Kh literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.doctree b/.doctrees/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9ef857c2da1b92679ecd08c9b7267c0e43ae225e GIT binary patch literal 14547 zcmd5@OK&7s6}CNY+wJFgk}*M!Lxqsg9>#V+EMN#B5P|>`0|CJTLZ!OtFv!2ug}70KeU{PecW_9`;LEXc}^S8zRf}>W_YyXI813VtTq2(c1lDJUt*@P z1fKO0GjfT~rjoOTz6Czw)ZXNEGh^Jo#1|C5M||FMe3l+1O^YuRdZ(GhkQ2$}lGBbz z28%7viXsf+x#n9v`Lxtd`uR)KYTXQ3hhP%E7+YQXl-e8iw!LcKYhSW=xN~3!J$4W# zzR$vglOVi#Acdp7oLY(fI(sjd-;sSEv;>~!VaKfjmKyl7PG8K(f$-xbEZN~G z4oKxD>FT=iY+`xxsUHR~*7(eP>$@y3V!Og53BjsBK+Z(k)edCW_&uXIl-9g820+;= z7(JARA{n(xI%@D0u(j8RH4|pOMuZ5n6z{C0!}@8@yAky*^5-Q?iCB2dQWEETfaM8g zj>qSjqcTqAxd*~?$?p1RH^@?9CVtllI-~SHQn~jX&I&!&g)pm<+!}6bT8^VW=TdxT zoD`Qxic*A2gnm$Z_Q&jxlc+wCi^_f){v>I>B4|cbffiyGdJdeeUuFeXwdg&Qjl!lGJd->Q+~DM$9*(a890FsR1wKs$u4&KDeC>~#fut%>-i@u;^P z*H6aaLImnqi5HvL#S>P>%kPSkem@9fGwNAk{A?1?mU^44>PM0sHmOyO2js8pfdt1S zzRb*#@CvsS==wmX0-p9_5GQjYq!;_g4m)WfF-rM{el#t=WtUWO-kw><#vfZ@m&GYJ zOt~9IdQ-24Poxk4ciO4lR+qOSyRzr1pqKdpwdE*jdV#DgFgb z7dc#7-ZT~@-6?;?h^-8Siwy_6GhgZ?p4cmii)AwoS|t5AO5MfTnHjtJxfJ;pjml7a z&+wSu*cH@2ZtqClfQ!e-;)HX^t+o~TaWPjdCYyCqcsI2AcF}EaKgF>3`;lQ8ox~TZ zsu9~(Y@7s%*EX8WwvHJ_m=Pg{8&+g=onz)_z}F2VfXfnCY!(QLWnFt06LJ&$OGqloxku#EhZnp({~mOr4k^+>C(IF!ro;i+V|Pte=$ z>x2k}q0bZ-?kzrDiSu^&{W|mC#hRmW^^J$7S2i}A=B?Ozl{XfJVlHyV3Stl zb^x9U7|~D$8cjz&kdyP=MaVh9q;a_oj_$OB^eo3u`CR`j)A(}y@JXzFt{*DSi+;%Gt{a+3ddyjDU4+F6WxJ#; zR-?`basuLu5b*4OQO3s?l<~+|$1lR66mc~vq0yrM42yL`U>=@2SmgStE;ms)eDyi{ z83>2tSACpzi*5I@34-jS5|j=t369L8+66?wt^|EZfV$W4r@Uo1+=IdxUsUIFZOqww zF01cX)H6B=5Po&O`W{V^g#?i7zO8_BSl0EJINOJG5|Sl>D60q1R$w@tY#%TU=)Dz$ zA&Ms6nLh0c`l;u&FnCm2zIIJ6f9;xPb3qOiLdGwr;_?>+z3u+IG6|NuBXZzTOcW3f z%&qec(XTV<%z(}U`UUw(ny);gcQNxB&Bd_tr~B6mP2<(|mywKI9WLkGE~*TSw@Xp8 z*mi#keCMSU%G$|<{=?S3BCXvJXE2q)mBw=J?zvPBO5??-to|xZn%wI1gDKH6WLJkh z!KF@V47!oVJN$vMD z?rm(+^#ySeql3yEisJ2*FMNc0FL^PHF9b>4PvZ2*-Zbphn6~04%H5B=qpMMwNWJ;6PtNN=>SkU+G{OAHAKz$6I`j zE{OO^&phn}VGl*6b!rv&%~sH(YbOyF+?FHEV`9WSabnvPwGS`@d}@Nabpf%2Omve( zT|GUV%&Xanr@lAH>K#DQC{!u0khmkte(PG3B(dYP( znTh=`po$+_7fIaNd()n1nA}_bXfo;nn6~A&Jr+U(L@IhId_zjUuu4s=lJcF(m&y|E zSI8^Z<+?cydiK5L50%OMGVuW0i)@I<6CM9G&+@y8)n$-4HMZt(k%!-fhqHWBG!Q-JcVUR0 z(?jj_$;+?h>wVVGlOtjVW#K-o9ki2c@O$hy?ngHc4lo?yVnl2Q{(ca4;Zau!QV;-0 z6IFVsCl(hnSby)qhu;W!u7{mgWqBIOmw!kv59hVWWN)%?-(hh_;6Ok)u;ZQwWcAo; z!i(CmogOan9oS^g%$zgJ?o4?nIwaTj-VM z4P4U;T9y*+PRmBKqy_a!e}j~T2myUF>0`H`dt)-WlwsgDtS4wWeg`(7;=&aQ6j9Qw zfH^&~T`#btGt&L6n<-4D*JN#Y@EItu8CtEk`PCMnZki0`Z_mV~9E!Wp{4Ktz?x?|5 zy^f4&xA`UJAJaWAz9gdw+!vOJ{m!Ap-jro=VK2PCAD{&8 zzQZL5PE{W!F3^gMb*H#O4GfOcJ1JKsuX6%)yn@78y@cSwfpc=>{4@Nrw2)#$us9?I z3;y2#lA>Bbh>7tT>@UyMnv2LYEu5 z%r2XSr9QR$9FZ%Xxd@mce|`ewWe=)B2&aOMiKHw^o<_=qU>Yf}OUKb2KP~F&aK`eB z6R@lt=mo)NS>6?=7<8boW76afq@mrrUv6+*fZV7-ba4lw6}~pPYNd3hQ7s{uMzw3g zU8fUt;Sj|xs!p*mpt2YJCRb?&m7#rU0<>ipT7(#WB`BE4g(R`l$e9on zLjO)KTi{}7;MZ{DmnFqa3_&o5Vjbc`ANkXgn3Ap5+iUbc!l zB(#HB6Q(ATn`x|q5EQK9-0ce~uekN6xy{})CLf)ENhSQZ2+qpFe^*}8AJ;P|)Xaxh zvj=1F5wOu{!xbHYEq?Df1o;7>khPYVaQ}qxEUNPE?AVl@pP$99Ko3-QF9&K_^55d; zR_s4YycJTU@g`8VF+%-5p^1qik5t-t1m*OX5KLoZHJs0IlS%~*^_JP!b0GCRCsOux zBDgBsS6<5XADjNo7f$<&bbyx6ZbWC-K7K{KPQzpd z1SCG(j_mvKkEz6Wl(QePpGf#xvGyXCTf=ocSs=#QT#itQO~c8uLve)aLShuPnqD*T zvT}|Xyt^`(LDx$w)-_f!=}KvRR7=A+MeXZqbuIM;MQaoQTR}oaI#h^T0q&!U`_w1_ zFFvlu??4WpO`k$B3#l#2VyKElsNYD0Ssk!6ypj!z63mL@x4fiHC7&);?UvhAs#H}y Id3@RbH|a3Bng9R* literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.default.doctree b/.doctrees/_generated/gustaf.io.default.doctree new file mode 100644 index 0000000000000000000000000000000000000000..af7945fcd020ba8353f02d23446b6801cc2f88c5 GIT binary patch literal 6093 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.doctree b/.doctrees/_generated/gustaf.io.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1c2986c070261c6ae68224267952ccc73b7424e2 GIT binary patch literal 11649 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.ioutils.abs_fname.doctree b/.doctrees/_generated/gustaf.io.ioutils.abs_fname.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a64bff180cea4507dd795406b6f2644aa5864ce7 GIT binary patch literal 6440 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 XOI^auke-wqF2%Y$EKovE``!NlX@3ta literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.ioutils.doctree b/.doctrees/_generated/gustaf.io.ioutils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..118b6af67670993dd3e54379bb60eee2f4bdc0e4 GIT binary patch literal 7748 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.meshio.doctree b/.doctrees/_generated/gustaf.io.meshio.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2a93210098eec26a7e51549d3c60714fc5981c11 GIT binary patch literal 7803 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.meshio.load.doctree b/.doctrees/_generated/gustaf.io.meshio.load.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e3613560debe9ac638e3934dcdf045f405023e0d GIT binary patch literal 7634 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.mfem.export.doctree b/.doctrees/_generated/gustaf.io.mfem.export.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4319cfa6a3b4fdcb4bf644f0041e075e8901a9b2 GIT binary patch literal 6956 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.mfem.load.doctree b/.doctrees/_generated/gustaf.io.mfem.load.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b71a23e9b097c171514ad5b405af0ae205413e9a GIT binary patch literal 5886 zcmcgw%Woq|8PCg3>?F=(b^>T7gGaEe0~?zI2Q*qC&@f0SOoT>&gkWgO-DOuf{i3@% zV@oW8!=i~)w{1=!@lOmVgtTzxf{<7w;4c8Am00bW-&fUbx1C8Q7Z}NtuBxx9zQ^x- z)lX}`_|L(T`KNc%SjcePWu6yC9#3<<;YDs1@KELN=0`uv-_AR_k+5fJlqD|D^%5vt zA$>35Vg5ANEh1OaPrJqb^_06xM&We3sEN8*f0}nhL)Vm4KCdk4Tf;0>Y|xcaHyH4s z>qpGXi5%2x-{NCpNQ`6JU`9)OgEWQiR@b=PNUib;IeLKfJs4KIslgFbW55g&|LR&!Xh4X9X<(fWfq98S6Pi4l1U&SFFxyp_`-->fXsp))z~%Dg0i??+yHpNFeAWkw%OTR3XD56tC}-emh6)jttvDZL0*kXKY4yMZU5sY3{^V*|^>UcAsyRuhA48}y!oeISszjyq=O9d8 zMW{a!WWJIPMHy!*CWcVT1zi_k)}g*tL|%lr?z!a8T!i0T@06bo3tbT<68Qvhg{m|cFGT<6IU+nwS>V=f zEHnH)6o(d_;PcA_2IDn0n7C1>s`;#%kQ!vJVZvfj(X@8I0at1x2Z%P}WcM$4l zd9LM4#7*Wqn2o|=Wq%pn3cfGJx{q$o@`qsg1F(9aSK6IQYWSdf1SQ>=haS?9Ge%6P zuu_DaCB0j6%Y#_3RHhXo_`OO>Et~JDdPh6UOH0+et`4{W+-RGq?~I!Gb6v35-*V5 zCl72aIwgiS3`2zqmyfQ}U?mnVRAJVQ?udV1Cl3+*lfaeruRrN8Ao?@R`F;tl(hvS# zPUy`i9A#G6w&Gjl&&|zj^HmbgRIM*7kQRdh&_DVL?XYo{9N=H&tp!YGh+m`7X&^Cb zV9x>_N)@v{W97RyW~FNT(WkNPhPE%R9Cfhe`RIu5dolVf{#5Kd`ZmU|GSqv}!;>4( z!JtN8H?-;XhW`@`Z^ETGyp(-kg1Fy;+$6y=DK0Y6v8qF|4Q;Qskf;mivQ+Cx<_1n9 z4Y|=DqFk(w!|2%dCUCqkDnDE0^fC1z6L{rTu~?4xKvAUTbV{@nM&(>dM<>yJDOUyk#wZt++~$5dz^o4VN4Cetxo~nnD zx{;~D@fVLxVS9Ie(cwuFC5}J^=<@^?AXZWH>K&{3$|*H-O0EwVRu+yJ{gM2uWzU`Q zQ0~4vzp$`b?~)9_UMip>-}I{6J`0B#8**rznu`@Y+2~sdcca8}JWfd;*U%fmsjkEA z2B_bm5$TnHKtbMOnTnj*lwLvifOa_xVrL3TDAr6!pfL%VPY3Rp83T5*{%k5vdFDk9 zdTLPZB5g-0cd9!LN?hff%Ty`@*&WA|DeLoU1G^on*KqOC zukc^08#HYa8;H!pMJn#&InS&kv%MuAWqP}6JagPOid>svaD|;AA1&!D-_;ocmYIdI zgMQ>s@n9xjTbP_uH|9=kl((8q`*Y_b+$JiA^W0uMt5`wSLj-Zr`T{0MF>d7h&@^<4 z9J2nfn12^~cqe}XZ$MKHzk*s*0Ki^24J32Zo6~7y!%Z2we&!KohV+oz^eEO9VSy5Q H*6;oo8K}i+ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.mixd.doctree b/.doctrees/_generated/gustaf.io.mixd.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5ae0ee796f211e14156f0c5ea916a66e2061992b GIT binary patch literal 9189 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 QEZKA}NK+_TYFsV<7pr1a=>Px# literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.mixd.export.doctree b/.doctrees/_generated/gustaf.io.mixd.export.doctree new file mode 100644 index 0000000000000000000000000000000000000000..18a0ed85311200febee47a223d37583dc2354536 GIT binary patch literal 9660 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 E0e};$Qvd(} literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.mixd.load.doctree b/.doctrees/_generated/gustaf.io.mixd.load.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4c7401d23d985e209040a37769b791b15b96af5f GIT binary patch literal 13459 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.mixd.make_mrng.doctree b/.doctrees/_generated/gustaf.io.mixd.make_mrng.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a69481735fb42251d22af9d91df80507ba5077ca GIT binary patch literal 7374 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.nutils.doctree b/.doctrees/_generated/gustaf.io.nutils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c161f4bc71a68b906dc7b43fb08850935780e8a2 GIT binary patch literal 9040 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 p_j)A#Om6jpq)Z;~T3N-te literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.nutils.export.doctree b/.doctrees/_generated/gustaf.io.nutils.export.doctree new file mode 100644 index 0000000000000000000000000000000000000000..52345721709920beda18acb88c2c929d68feb75e GIT binary patch literal 7197 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.nutils.to_nutils_simplex.doctree b/.doctrees/_generated/gustaf.io.nutils.to_nutils_simplex.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7f0aba23862635c3dae8e28ee77bb7929a32c41f GIT binary patch literal 7219 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 BT#f($ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.show.interpolate_vedo_dictcam.doctree b/.doctrees/_generated/gustaf.show.interpolate_vedo_dictcam.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9de893bb29f31e1b381e7d77883f118dd68380b1 GIT binary patch literal 9227 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.show.show.doctree b/.doctrees/_generated/gustaf.show.show.doctree new file mode 100644 index 0000000000000000000000000000000000000000..328d286f65377fd9a7ddf2865039eb2918cb73c1 GIT binary patch literal 8957 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 SAMctraa~3Ww4o>c?*9Oz+rxPP literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.bounds_diagonal.doctree b/.doctrees/_generated/gustaf.utils.arr.bounds_diagonal.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9489469f1e4a4e27daf89a6064f01adc8d218a41 GIT binary patch literal 7584 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.bounds_norm.doctree b/.doctrees/_generated/gustaf.utils.arr.bounds_norm.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6bcf3042d1291bcc004e89695670efe3a7dd73d0 GIT binary patch literal 7063 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.cross3d.doctree b/.doctrees/_generated/gustaf.utils.arr.cross3d.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2168a1e5fa3ca246ee34211d4be68be3ebdc3eea GIT binary patch literal 9233 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 M3k#Iclg`%v0A{rL1^@s6 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.derivatives_to_normals.doctree b/.doctrees/_generated/gustaf.utils.arr.derivatives_to_normals.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fb8ab405763ff2f8ccdf209aa6a06669e72e7d2a GIT binary patch literal 9434 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 U+0204e$l2_mxl#P=xJ}~|H2hSbpQYW literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.doctree b/.doctrees/_generated/gustaf.utils.arr.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e24dc3276e9edebee9f704e557e9315b514a5930 GIT binary patch literal 25843 zcmd5_eXJbURk!`V{GRRSXUC4+*p8=8>pW9?pBsmyIB7&k2(2Bz634|Md1gGjJG(RU zW_LF8VZTRY6e_i{r7KmUgODmJp-Po1L{TJY8yeB7g@S~N$R8m1gF+Ql5mBV1O(^{$ z;dkzxkGr$GcX!{utQyIgow?_pd+z!8-E-&TyyvHW|JCXi{vX>Nv@E;1Rx+y9rdKtC zm~F3mm8fAh!}wG2iQkQH#EWd!H?9X>cNz?055E`|Tpf!B|Y;4V3iP@YHhQ3{nLJUrWP1w}{jM+@ZHG%*a@q4Oi zG{mp%)u@%9l#R-&Z`K42e%RHREr@YW@o`RJoH$}Lp;4z^u{FmgUAt+<=eM%ymVr5h zu{FVF^=#5On@;C?e#!D0=8_*Zo2I{X-SbzM1oQNOUcr)}UefC(sEp98Caw8QOMVc> zQQ4YhGl5wNZLgW>)|#@WNezo=oC@vGHKnF>E;%QzGLTMQGS^7MT_`>tbE8?B^*-y} z)`WFz**dx$l?`hF+O_sxiLHJ3cRT(a#J@YP#F2HUbpqta1-W&Xb@cosq}{@%>}J(m zlLQj7_TcCg`9BiDRDE80J12Sn4UjuvZrIgAYw?15Y`_C!B( zB*x*EUxMXJt@X2HBFNONYhJBW1g;uuhw$^%7QN>;Wd{&BzG)q{&XII;*0Fa+s`FdZ zd2_d!g{vBM-)LEqG1#GYXOyR15{`0OO_RII(>+|}oYBo&p0bWvkHbqcA=$gkwH7>E zM+}+>s)||F%j-H1xf`%^*H#4Ujo3P8T?jD8-%L%wS|1I}TI6cAsL4Ym&}yEq!J5Xp zwxqQ@yBTU;iy{qi6qK}O#C27>3WBRAwZO*Mb97>?U)AhDYpsWt*VJ6Q>>K{NW;Cms z9cl>KW)+MP*y}=7i`HrOiyIm_&b8>uT11rY<^i26MK<0PmpC=k1SFOiU6UE9BR7Pj zxKQ9}wmqG`#Hd}OC{yxGqM~&CDXuZ8R!`u+o%F9y{ugWdLYb! z(V=B_^lq3&v(S?+^&)S2expE6mpaHRt{0fP?_Cdw`k9kj=(zwEK*&k0R4QG;be^;u zHcX5bEo$1&MuPmLhI~b{Yg*L^4J}-6ndJF3*E7Q4q!tAxW`PS{(}V^pz83^%s*47C zf#V}|sJ`LuGqmfG7jbEgb?~W@kx9%8AW3?0l|U7^;FTRXux4l# zE$=KT4!nIYL~4LbkyKeXtynOJ*XM_le=l9@|%$=f?$jMfz2w)$WE~NqF2Ri(%p4wad zhWei51hTt`CgNin6$|Qfqec^~q;Olbn-G)&RCt`u^U^FvAH!)9osi{vfB>X?4{j@X zh-fuhEq5JJV8eNm^oUaK0;napJ5WRUGFOB1k};BVTuy<&OTBacIGUSXSns*s{+ck2a8#H zNi;lkbwyhtw_Z8Hm)k{b9Co(MW)(Kj*N_lO0#PfjGOEyXV5`zmWtIJ^dv z{WnH^y%10NzGA*TGf7j!;^izqbna8SQqgCSosLDf&KZa`pf=Ph{x7KPKcTYkwX1AV zp~GJ-gm0GC^+bn^q7x>5oQ}&L9EGhg}N;xQosl+WVt~ z^GqLOWI*8@Acis?*mPlFJaCSH+_{tfcNG6yb~NhVaYG})q|h)Zc@7z$B%ues={7dVU_&Wz(^2Dt z#qj2Pw_f>#POU1mxOXG$iYW0VvXnrH9SKU%xDrCVsI=w42=V8Abgw{&Z=ma_2ywVa zKESm+)}+9BfolR;TQM)-EpphXJrH5z{398Mrv}a!`Y1Tb4xB$0!}msqLn%6RxwVi& zf|4f3fmcbqpFbSL+bGH4ngb6YH064(? zsr`;*2M%wt*`+ccp_WC^Bb^THV}DZjsnlDNH=Nm8~3VK zu4FeJ@*TxJ!w*qJ28(PbGK9HY6bTp{rEv!ahFTwED1aeE*HM8Xd5D-lVlGLO9V;%B zxgvlI2k5>5ZuS-L#!I><+ToDm6VyW>h0X_3$0F?~R)j#kk>cTzpAMvWvI(4W)cJHl zIqI2?4R!utD79}o>fE10f_Na)4RSiW8}>pE%f9x>B(OVOJ6U=`=NU}1WBQLL8AfuE`XM_@Ut zL@tyWm6hJ>e3VGr2DmuD0KYBH@16$e;We_jDS<_`vky^z{ z!e73j6=a28zv+@~=6AcLzWq2Cmx(_mWhQsKB{mWuy+9PBuML0F#|(e|qG zw_Bd=SQmuPb4_4Dm~Vf1bj-LZ%_bzo3G2r3Q7y$Cs1$z&oU+K%|+GDwbIR$6r68*#tY z#{vqdanW^DsCid6s1Z{gE5tm_)c}aOUA+FxMd*$&L^>S8{0{XH2y>Z_)8FAQ33+s$-!*Uf z5xmplb4is9~e*Qi<=FmF5g7gQSszh2cC4!d91+lXIviumIVS9 z`9lp!_e3-tr2I4W5Rmc$A3+_aw1$2`NYWcp?!U0H4@Xj**>L|He7;vugnCwE1D{ui zQt_sP&q{^~{5ux23*v}|3}$ez*CT9P5C zvup^pztR@zH1!Z@Gs{O-$0ec7w2-hj+U&pB?d!1=OM0~CNbzW45^9OYh7=DEr5?5B zH?X0})0E5&#CLVQAcGu5PzdZuyNN7?f34RQB=YYe(jEz$K?W+q#wyuTq$s-!>?F5s zC@ns4f@1fvkYdAg9bHGokIwHQiZdQ7keFN>0Fr&(KGT%6PlUsP#x3e0K%>k@QHLmj zhAyP(4H^e~eDaxmEqR*tCdi@VGli+B@aHbkn~ zj}?2q$~6P*+12)4w`2mM7!Gt^p&kNsUgGT4!A+p^q7b7u=$z>RI;!u?(>!KFeRHV# zVL<`v*^CXU-WW=?n+{buV03=W-vyyMiQ4u_yaqs*$J)P=!BQuK0Y@o<(2?m3g!Xna zl^p*l5stoBIs`Tw+$)_x*HN+Ot`6+!GU>5G&H=6v4mr3RgUu2*zVrdOLlm;+)y_+s zqX(#mfSi4ty*fw%pq>rT#`?=-_MaPS_5%Ten&`Wt@=b3dHc91m;`7_c>HZGX ze_LE-*?y@mndW-Ux+vpg6pM0v6TQD)>@5?q*|mmyHfW(z7V4U|d^0fpYbO6L`fKQ$ zmc)dzP(suCD%&j$jF+stRD44q;(CZ8P8~16_N;ElcA{*d8&y%j)J=+K9#hnnNs2tg z?0x--@=6fw?g6OzH}C^d^6y63aTQPLLo#-kl2Ckh6SI3%R6SnvR!b|t|Hn?M*mt~z z!`{<}Ts%ovUsRg5u*rPj@n^~L|B~Zd$?#kQu^`x1K(c&d}m)RWZ9Oo5m0YA=vpfjNVJ2oER-h}Mbf8jU9k?ipGf#zhuHeS!x3IaC z#;oErBCOuZ<|~m;HI?6_FqGu_ z4Jt+$WYEc`y(mN}yLj0;fkIbFiDl2Hs#mDJXriKYqlJ?lzUPHH@VjQO#cb;mDr*T5 z@R34u6$Eq1Y2>>&+XaZ$sdzNC2C?-T+gk&JrWcyh<(q65m1}NB4Sfye5*sMcHBT?a zwNN0iK^3wCusS5JU`N5Ph|+gy>1vFWbVzDhLm|G|^865QdtWo5$Zc%SGTiJGpF)^x zHuQ(bOi_>$O|hw}S&r%$Zl216QDrsoHH`+Y%)$^AlO{v**-dCmM+IJw>aU>!Srpbz zec)7Ja@keWFWF{T<6{5{maMShVz61{a)=^cDsekI0-tQ? zS#V|$hkCo@A-C8UPS@OTfD-(sN^hQ;1;~ctJo-^n&AR&I8{R6Yk|yeknf@_ ztO!ObJ--T6HydRX$PU7FNMM;Lm4A!vN3vwB>LzLhx;l#S6XJ5I_aqhL;j3;exr=)%Wb6l3Kui#**3D-bX3l1 zZySH$uOHGM3D{rcm9$_11f*0@JQaR})dpJ@s(cD1V`ZCpB)R@6(#2KG{ruM8%UEpzpH2j2_C&i9Ew#Q^|6; zl}(EBn3Eq~e(WQ(CW${g0gO!kZo?#HSYISL^6gpj7YhuwH$&@GnWW-H=S!eZ3j`*G zRx_O@=cn0yAA`&2!c>%U->pwAy#Af5aZ=u|rC z(1!CedUVmn)>Ic!d9W#duycw%{se=1rau^Prmu}S)61#VrJ0&+M`mS?dpnZNGjO&J SYctf(Mt+birR1$qx%B_e&zrXZ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.enforce_len.doctree b/.doctrees/_generated/gustaf.utils.arr.enforce_len.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e6f64c706d92cd231f670c21bc31e68cc30e7352 GIT binary patch literal 8544 zcmd5?TW=gm6}Fv>?HS*lP1wkBm4}^-R|jb zx~m-<5wr*v)>6Ht5kCV2635cs z1UM}2cy`46^nNNAiCs8eypzqJiJ2vwz%Qor2A}3L_tOq<%7$=+$10EHdOwMU+1t@; zm{GLD{9b^q-ZebzKoc?V^4HiA33N95gkt|N)e=vKCgc+-Uy)6tP>5fW)0rOo^0Mdn zEZtAKrfiu)L{2vm(4X|ZTo9Ym~0Jc*nUW}hCV ze2K5|d47Xm;_LF8yF3`M-6-*W7VSO=qJv$nbp8ba<6SM-uF+@UG6l14Vk-nH1O`mp-BleizzXS4p~apc@w+5p2f-i^Wr3n z8kH)$lq%uzU5XvJ((ku}-iVuqU2=18Qdz&LtW-DAT*bV(afWE6S>7LKmRT~3w#h7Q zG-?ihkH1U0zgOzc?<1DAbgN1_anL-{L`3@#J}!)&vX-GwL&u%Ik&(t~iI-B4>c);B)MhcjYvGA%9YN=YpuK zQuddnG8z~v#(BjgsKp6_2uo#)QX%NNI1tleK$zCzrE<9rOps5ZNXn<>Y%lRV6{irk zWr)Bc>xww#k9qe;DULQG>0Dc=q;F?K3Hlme*LekjU#0L+*{?Cu3VcyL9;L2W`tS}(%kIQY)7=|z=evMd8^I581#sR%oOoXj!XX+vXr^^=P|ig zIdv%${)qd){{ZLV@jql9Z^~BBVVnk}tBNpj~c1>1E zrDgtoam)M@GC#>8b^?)F$lVR>;}PNTc&>}=VB&1OniPx%qH8cZ{Z9q1-c;uUU3T)o zZU<2jljYrF(Nl5i88~hOzh7B0KP)m!)Q=AL#mR|@3){iHM%-)eD!yQaYjUdHNehE2 za&;}b^n}c}aRD%n0B04kGQ6CS%emxi5OOni;tCV)x^zv}K2*QUy*~R?a_?%nx0Kvx zAA5M2AkZC{j-Se@@HmxoAh4s*b1VnPg`B}q9EZ3=f2?>jNOwPng%xicGRx^XR{D`_ z;sTT*DSwQc)$v`8o%={NcT)?b4e7p&QQ`Bct#+<6{VY{}o93un`)PN+>hVoGWGZJn zyj0mi+kSY{hCTr7Nog)d@ZK)~ciB}6IOs%EU* zK5B1y`n*|lm(EdvLV1B!U2|KC)m_9_o-7%Rlz{nZb@fz$xzXOl0u3q2qp{vQU0!&0(^3gLQvJB3w8=GMM~@5_kkAiCkUFJuf-Oz~Jv{Yn_d46-@Z8 zlIv{NXHLwIvGDk?DNHgHHg$`@WR3P;K6q3`zf*Xwp6=Z;sp@mi567RKW15k09J{1D zOYT{78y8shl49jglJ3|g`QLFB`5O-3e+=h9hyN=l$eDNa6*tG5Vq98gd1^QY&khDk zR9t`D1)8Dn?7$rNGQ`a{9Ld5t+@lTOP}gfML=%Oak*mql=4OR)b2FEBXnHC0ou`r6 zy-nO}?yaYpgd6ahdlNIpfhvW7c9ycqf5BgK+Fxybv(VR_AzEpJx1LHJ^4l9U z(owj#wNZI{(qKtIU%l$xtI2T+hEWpNVbrQkJ3H*26@&6U$HNebuP(5YTb0wRt`s5n zMiqnV45w?|DqlS-i$8q+s#iC@i2mb&hH~Ls%1&o{sges6XBW(c@%#QYe?R2wBPEPe zE)l;6`>Xmm%?owI>v#0s67>pS*ZynOj_kg#xn@uiQEBM@9QvT&fFfaa><8ProQ-z@ zKgfSB=HzWET_58`VLp49k5|Bvl{MmmX~_?ATFyr+(S9)#0k8;Fb5Rf}R9(2B}mX0e>_^nyM3vf?|TeG3-7lv#93m+{YzfTC%^x8w^VGX2;y zsl#G~QP4**SvM^jA`qsR?oG&6&ckdB6WVW5E?P-MEfJ$=fXwF<-3XDhnL*G4TA`MS zYU=dxu8TsEoyzHNP|3Y~ca+mXBEm$Z`+R9%HnX+`Ds~vy=wG0#GYB!5i-JHvR21Eg zQaQPc7d|Zll?xBR(8`8MI&{K%g&~B5fJuKq~f>j=VBp0aJzcUX*6BKaI2HZz!yawi3!Y$l?& z{e^8+FT64Q&|py%LUB#Q^4T|r zAJitxWzqq$7ju}%Q_YM8&-D9=*=Mjgm2anz5b{dItRS)t8&x~>rF@GTP5W{hiP%F~ z6c%ypJRnfzTr?9A7$r$gp*o8~eKH7*A|zp0ML@NJMZW3Lf=h~`f}OlylERoJc3`0C z0Nm=;$L5J!gQb$J@(yO zg`E)54%sO+qdp{}U09vWU?nVD(VEsk=d1;^`r zgO!yDG5a71aS~7uS~Zq47&t-n1eODkE^uL$fFe%1H8y8Jv5RW9PDbhpAD}4D23=+& zgO4ErXJ{y#$g38(4h)9Em1m&CNVuz{Udj61h*htrG3`WNV*VlZmgTHQ6QnO95oa0R zkP&yfrltDID-a5iB>=aG8k;)F4^z21M5XepB4f2)F`(`RHLAfrLqz@C{S8vw{Wbo? zvPooh)PYGoIEnc!^n}%OoOQ48*Aux=b)H&o0hKs?!e9$cp&ZTmwA@t+1(u@1*@JH2 z74e{mFVu(ycXMdPX1=SMv^umt;5HH|lILoDt?UU-Js^k`B!mw*VypnQVRaY588Y)) zMt=l5e3-t2Y(R?xc?Gk^2mrld0VG4@xq_^GIOq75m)I0Defn~cQ@LCGRvTB_X`frJq3kwB3GJH#JAh&2*IV#SIz5*xl#ReoIeJAsTe-LCSfs`L2H zIpuTu{h6P<_3VWDCs)&$d*R`Z?Yd#)vNV_TZscSm7K;3FzWqV|Ufz+d#6C!)EOA&a zCqUtFFK`nU<_~kZLgc~=(jBvYE@h7JqOe@fXZS3idzg24OU?*S1g!Q-J~zx#VGnln z9(I!Kc2V{k?5vHaS*?2!06b=3r|!jHj3vFgKI^FJHg;8x^(UAC-J zJU%UFja0kxTHu8&-_82AT(E^mynZHdE=fP_xhY9H=LB||ViM0Yp*_-1^KKSbgTC$T zC2T-6nVb{$kY43{m2dJT{uH0)Tk=7VMN$p3_ zCo2_j=QDEsgbW&i8>hW7D1#*TwTZPP_L!3ipCX`ZyCRWwgWp41Ni4u3$Z_->^N{t&R&d|p?4!r!4~!IHp( zPt**1>r7OXpwJ*Icc`zP#%e9$gf<{y(P}ECqS}z^xf1{OQ>&^5at(eEjJcT&nw|(SDsz<*@~x zW;JnM@%h^;^Z9E9*9XPmbEBW6QsA7Z3($|; zqZ3>rfG+mo5KNpcV2faB0fnOz%l#WTtW14t$lmQv81IBGp6sLQ9=H-H5C;~rOcV}l z`{)F&zCN1C-2dj4#Q%mC|84w&*c)=H-Ki3cPt$eC(d9H|p^J-}b%?lCW61=@3At8q z%|l@Wu+$!Fg+2<*O=VyL7zn-pJ+6l+Je7v^#*KFZ}HCfH#d zc#elGA?Gj@M={I&d2FS~O)&REnjrEtW{x-Tocxh&;pS?>r;3BP6(8NxF>{yLVw$Z| zxs%)H=(ZNS8{a^sJ8$}LT_7QmeodeHh9dRf#IFKt+D7B>`=SnS?T(;e+K!So0e8FI z?Y7lS8D6WAvRuc1r?zu>V>6g6u6dO~e@R?jI(ivc{#?m$0+uvg-^(A=STREG)u!-$ zPr?<5Goy;PPa6B3ji4IXKE|T+u9$VO`5%Dz3Sj#^$o&uTSZU?> zV}f2I0~T`XK_%v&ut8mImlD&Qa*>8nsG!e$s)uY))dGX+;J3>U8NeGv+Pn4;b#}9>FN<-S%1{DJN+mMOg3sd z`}to%{*9@tAk8@Y8Wx?BgJ`;r+6$fi8u491Q4K06ZZ~$jln=b1I6Is4v$*;l?0q2= zOVx})v8kC$;br*(Sx(^P{9Rus*WUDBy95ef)ueRO%KGQ;x~)lHP^A8C{2EVT9luwb zlXLGd6yCz}URaJRyAQ5pcXKIpXp#P60n7eZYG&5aBX$xGRb3Xu2RXb zt|Xl?;4f&=?`V0}moO)r5_*j|e>>x#!G)Di;B}k3YNrP81 z`uUFi99*dOsmQlZ)GbcA`>v=(x?oTg5Sl!7^c4$ricq(C8dVN+>(^9ssD$Wi{y!le zT1%+t*2iJg)oluV5rk3kxKd1asU>lQ&xIxPvKX&}!jv)6l4v!Iin)T0cB1oACImjE zbb0DkmE@=)b3!Ra^P;N?NL_p;cD=NVE=xBWbWK53m3ycNP!ONfl0k*ev{wKMzJOxP zw9c^nu5Q$vjUrt1b;ph0l{Z9UhiPC_Tg{4-Xo!}8?oG{zNZ3Jse?l%4G|a^?qw^-^ zijyVO`LfDB*HST~`(1M0s0NL{b?S_%PTl~~6eS`zm$TodLSyx1DQBZh#F@x<`RcB0 zneG${cNn--1rqis#$YjtA^}!WdppeKWDg&JngyyF?tx&z46`J_XqhTn)H|cMU}Z)d zP+lKkn-GP}+RI0BnL3PNHnI)}Q8L2k;R;=(V#|p})VEBr;ijHp0aG&;6{M`9e~0tT z0@Kjjl}iazrPF}zGpKV)E^r%VRx?CHh#h*+qCnp%t!8Ij*3X7GZsovELi$$6zRVtB zrUi32j6@>-ybwCGScs}8!BDm`G3b7|t15<1jlZ;5l0=EcQB4b20t*nUC??8Pt@+w6 zGisMyZZ+OCw(vXC@VyniZ^c8g`l<03jm2_}WB~S34iyEeCAA#b;V`p@3>v2@?i4z~ z@`;2wQQ}%Iqq+r-p;qFqoP|pcP#A?qJhuP@>YOWfCL*hvl2a(sqN$RNVylEC6ssmY zpfL&2yTdlCYDR&btY1yVDa+i*LhB4vYp69uDYNP;6-pe`&b`#5vOo5+TrZ{4BLp#A z&K0f#w_AcRDdL9mJCH9MGHc)k5DpPwgPw2*8g$Ax(cHssE=<0NmN`tNhxaGtx~i53 zEF1!efj2@G@<}d4oZjp8FrA`-CwLU@M9B~y zb(1I+1E91}|AKjh>KL-P`}|8^f<9N0fz#NYW~%L9D7J_5+637>h6X$n19b)hLXV44 zfWulS(ZY*d!Snm`atoLoS*3H90$93fc`Vn`qfpp~7Walcz<=QPT0mDcxum)imT6Bs zLSvxnR#-vg*haNm4o4Z%f#J2kLCZ>opx(=3gWyRgzDxo-Z* z0ay(NI;I`VX%_C&pAg7-9ZlfAKq9i52j38uE^sN_tb-{aOCa1LqNAxp(Oh01o29a> zn#OK}azITC`g;VB&(WlQ_Wy(Q>i-)*QrV(umGnTQUL2?V8Fc;Cdt|+r`5T#Bt{YEn zw~Wf1&M-Ja&ybH6beiw_3;|2c!q}sJ6qI;SlQ$ZZC3S0T$5wHwT6BGEe}vmaC(0;3AjLQlO2z6{f*dmUx|x3rJ$#tI18+cc1AYayrT~CGunZ()(~IS_ cvf-i^Izi?VW`^YU3ogYv6Ba0;XZ@Z30zQbqLI3~& literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.is_shape.doctree b/.doctrees/_generated/gustaf.utils.arr.is_shape.doctree new file mode 100644 index 0000000000000000000000000000000000000000..187f6a177327a28565d28e32fc7089269beea59a GIT binary patch literal 8509 zcmcIp&5s;M72jQZc6auB{iTHUnlU8ttmD~@5C^d05Xmwktg-@Qae$bnr@LmVdwaT@ z?&|%J2ucnPUa4+w1QG}S01gNV<%aSf0OE{<1b1#ohztB)RrSZr>?aA9*3(`6s_K3G z-m6#debD&Xmu^p}e{wmExfdR6+O8W$E=zMc>qbsCV4=ugnsu|ddgzz)9!HG|X3fR;1HXd7Ra=!=zl z(4NSWA!vM|SiB8b+-oUJ;0F>o;=$MLAY~g0BDBncT82>y*q`^u|n7RON{taM-};zwCTXV4L0=ntA5c3upfPAFdq$>Gvz@FB; z<#J{8-~e+f%IADq&i1k(P+Id<6M_8x16tZxf^Z-v>Q%aU}n!1rgeR_Pu7b<&2)g^oK(>v0jl_pcK5y8M5i zhJ4LmF?=bfpX+%naJ5HNj$cb!)%Tjlt50U?=z%i#t>QFG3&qxlD*e21A^mI;^_u^> zQj-GEL|uSxU*1IrU^FgD%4hRw>uXoc|A4&%+x#glzlJ^AXx{9 zB{h~zu$qu71=nm4b366Y8j+l<);LjO={!;ZGpudSF8Y71L-P#cDzQlF`CG%GC z_PdewPKHJeMZd+Q)AG4Giu?~jd;t`F408V&{(J6!M2~c``9H;fb-a|y8N$n`Zq9|5 zUtsCeWVtwAzN)j*R=XQT!A7goX(hIYTYc-hl#e}1k|?1=Q=uwtxlt>Ogg!o%mD

P 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 ft+;Ql%0p literal 0 HcmV?d00001 diff --git a/_images/tet_vertex_data.png b/_images/tet_vertex_data.png new file mode 100644 index 0000000000000000000000000000000000000000..7887f01b796d12e1515636894a8d8bc80a989230 GIT binary patch literal 138366 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 z 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

    $ExwB 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
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.create.edges

    +"""gustaf/create/edges.py
    +Routines to create edges.
    +"""
    +
    +import numpy as np
    +
    +from gustaf import utils
    +from gustaf.edges import Edges
    +
    +
    +
    +[docs] +def from_vertices(vertices, closed=False, continuous=True): + """ + Creates Edges with given vertices. If close==True, + last vertices will be connected to the first one. + If continuous==False, it assumes that every two vertices form + an independent line. + + Parameters + ---------- + vertices: (n, d) np.ndarray or Vertices + close: bool + continuous: bool + + Returns + ------- + edges: Edges + """ + if hasattr(vertices, "vertices"): # noqa SIM108 + v = vertices.vertices + else: + v = vertices + + edges = Edges(v, utils.connec.range_to_edges(len(v), closed, continuous)) + + return edges
    + + + +
    +[docs] +def from_data(gus_obj, data, scale=None, data_norm=None): + """ + Creates edges from gustaf object with vertices. + Data can be either multi-dim array-like data or a str describing a name + of vertex_data that belongs to given gustaf object. + len(gus_obj.vertices) number of edges will be created, where origin and + end of each edge is created using the following scheme: + [[vertices[0], vertices[0] + (array_data[0] * scale)], ...]. + By default, scaling value will be + max([1, (aabb_diagonal_norm * 0.1 / max_data_norm)]). + If there's dimension mismatch between vertices and the data, will append + zero paddings! + + Parameters + ---------- + gus_obj: Vertices + gus.Vertices or its derived classes + data: str or (n_vertices, d) array-like + If str, will be considered as data and search for saved vertex_data. + scale: float + Absolute value. + data_norm: float or array-like + If float, will be considered as max_norm of the data. Else, searches for + max value. Doesn't enforce len to match. + + Returns + ------- + data_arrow: Edges + """ + if not isinstance(gus_obj, Edges.__boundary_class__): + raise TypeError( + "Invalid input. Expecting gus.Vertices or its subclasses" + ) + + # get origin and increment (= array_data * scale) + origin = gus_obj.const_vertices + if isinstance(data, str): + # will raise if data doesn't exist + increment = gus_obj.vertex_data[data] + elif isinstance(data, (tuple, list, np.ndarray)): + increment = np.asanyarray(data) + if len(increment) != len(origin): + raise ValueError( + f"Data length mismatch: expected ({len(origin)}) / " + "given ({len(increment)})" + ) + else: + raise TypeError(f"Couldn't process {type(data)}-data as input.") + + # data dim check + inc_dim = increment.shape[1] + origin_dim = origin.shape[1] + if inc_dim == 1: + # if data is scalar, it should be addable to any vertices + utils.log.debug( + f"gus.create.edges.from_data() - requested data ({data}) is", + "scalar. Edge orientation will be [1,1,..,1].", + ) + elif inc_dim != origin_dim: + # match data and vertex dim. + utils.log.debug( + "gus.create.edges.from_data() - dimension mismatch between", + f"vertices ({origin_dim}) and data ({inc_dim}). Matching", + "dimension by appending zeros.", + ) + dim_diff = int(inc_dim - origin_dim) + zero_pad = np.zeros((len(origin), abs(dim_diff))) + if dim_diff > 0: + origin = np.hstack((origin, zero_pad)) + else: + increment = np.hstack((increment, zero_pad)) + + # apply default scale + if scale is None: + if isinstance(data, str): + norm = gus_obj.vertex_data.as_scalar(data, None, True) + elif data_norm is None: + norm = np.linalg.norm(increment, axis=1) + else: + norm = np.asanyarray(data_norm) + + max_data_norm = norm.max() + aabb_diagonal_norm = gus_obj.bounds_diagonal_norm() + scale = min((1.0, aabb_diagonal_norm * (0.1) / max_data_norm)) + utils.log.debug( + f"creating edges from data with scaling factor ({scale})" + ) + + # by here, this should be good to go + vs = np.hstack((origin, origin + (increment * scale))).reshape( + -1, origin.shape[1] + ) + + return Edges(vs, utils.connec.range_to_edges(len(vs), continuous=False))
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/create/faces.html b/_modules/gustaf/create/faces.html new file mode 100644 index 000000000..1fe9f031c --- /dev/null +++ b/_modules/gustaf/create/faces.html @@ -0,0 +1,845 @@ + + + + + + + + + + gustaf.create.faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.create.faces

    +"""gustaf/create/faces.py
    +Routines to create faces.
    +"""
    +
    +import numpy as np
    +
    +from gustaf import create, settings, utils
    +from gustaf.faces import Faces
    +
    +
    +
    +[docs] +def box(bounds=None, resolutions=None, simplex=False, backslash=False): + """Create structured quadrangle or triangle block mesh. + + Parameters + ----------- + bounds: (2, 2) array + Minimum and maximum coordinates. + resolutions: (2) array + Vertex count in each dimension. + simplex: boolean + If true, Mesh will be triangular (simplex). + + Returns + -------- + face_mesh: Volumes + """ + + if resolutions is None: + resolutions = [2, 2] + if bounds is None: + bounds = [[0, 0], [1, 1]] + if np.array(bounds).shape != (2, 2): + raise ValueError("Bounds must have a dimension of (2, 2).") + if len(resolutions) != 2: + raise ValueError("Resolutions must have two entries.") + if not np.greater(resolutions, 1).all(): + raise ValueError("All resolution values must be at least 2.") + + if simplex: + # create quad mesh as basis + quad_mesh = box(bounds=bounds, resolutions=resolutions) + + # turn into triangles + face_mesh = to_simplex(quad_mesh, backslash) + + else: + vertex_mesh = create.vertices.raster(bounds, resolutions) + connectivity = utils.connec.make_quad_faces(resolutions) + face_mesh = Faces(vertex_mesh.vertices, connectivity) + + return face_mesh
    + + + +
    +[docs] +def to_simplex(quad, alternate=False): + """Given quad faces, diagonalize them to turn them into triangles. + + If quad is counterclockwise (CCW), triangle will also be CCW and + vice versa. Will return a tri-mesh, if input is triangular. + Default diagonalization looks like this: + + .. code-block:: text + + (3) *---* (2) + | /| + | / | + |/ | + (0) *---* (1) + + resembling 'slash'. + + .. code-block:: text + + (3) *---* (2) + |\\ | + | \\ | + | \\| + (0) *---* (1) + + resembling 'backslash'. + + If you want to alternate the `slash`-direction, set `alternate`-variable. + + Parameters + ---------- + quad: Faces + Faces representation which is to be converted from a cubic mesh into a + simplex mesh. + alternate: bool + Alternate between forward and back-slash to avoid "favored" meshing + direction (important in some analysis problem). + + Returns + -------- + tri: Faces + Simplexifyed mesh. + """ + + if not isinstance(quad, Faces): + raise ValueError( + "Input to to_simplex needs to be of type Faces, but it's " + + type(quad) + ) + + if quad.whatami.startswith("quad"): + # split variants + split_slash = [[0, 1, 2], [2, 3, 0]] + split_backslash = [[0, 1, 3], [3, 1, 2]] + + quad_faces = quad.faces + tf_half = int(quad_faces.shape[0]) + tri_faces = np.full((tf_half * 2, 3), -1, dtype=settings.INT_DTYPE) + + split = split_backslash if alternate else split_slash + + # If backslash assign every other with backslash else only forward + tri_faces[0:tf_half:2] = quad_faces[0::2, split_slash[0]] + tri_faces[1:tf_half:2] = quad_faces[1::2, split[0]] + tri_faces[tf_half::2] = quad_faces[0::2, split_slash[1]] + tri_faces[(tf_half + 1) :: 2] = quad_faces[1::2, split[1]] + + tri = Faces( + vertices=quad.vertices.copy(), + faces=tri_faces, + ) + else: + tri = quad + utils.log.debug( + "Non quadrilateral mesh provided, return original" " mesh." + ) + + return tri
    + + + +
    +[docs] +def to_quad(tri): + """ + In case current mesh is triangle surface mesh, it splits triangle faces + into three quad faces by inserting another vertices in the middle of + each triangle face. Warning: mesh quality could be bad! + + ``(new) Quad Face`` + + .. code-block:: text + + Ref: (node_ind), face_ind + + (2) + / \ + / 2 \ + (5)/\\ /\\(4) + / \\ / \ + / 0 |(6) \ + /_____|___1_\ + (0) (3) (1) + + face_ind | node_ind + ---------|---------- + 0 | 0 3 6 5 + 1 | 1 4 6 3 + 2 | 2 5 6 4 + + Parameters + ----------- + None + + Returns + -------- + quad_mesh: Mesh + Only if current mesh is triangle surface mesh. Otherwise, None. + """ + if tri.elements is None: + return None + + if not tri.whatami.startswith("tri"): + return None + + # Form new vertices: 1. mid edge vertices; 2. center vertices. + edge_mids = tri.to_edges(unique=True).centers() + + # New vertices - current vertices & mid edge vertices & center vertices + vertices = np.vstack( + ( + tri.const_vertices, + edge_mids, + tri.centers(), + ) + ) + em_offset = len(tri.vertices) # edge mid offset + fc_offset = len(tri.vertices) + len(edge_mids) # faces center offset + + # New faces - current faces * 3, as each triangle face should produce + # 3 quad faces + faces = np.empty((tri.faces.shape[0] * 3, 4), dtype=settings.INT_DTYPE) + + # Assign face ind + # First col. + faces[:, 0] = tri.faces.ravel() + # Second col. + edge_mid_column = tri.unique_edges().inverse + em_offset + faces[:, 1] = edge_mid_column + # Third col. + faces[:, 2] = np.repeat(np.arange(len(tri.faces)) + fc_offset, 3) + # Fourth col. + faces[:, 3] = edge_mid_column.reshape(-1, 3)[:, [2, 0, 1]].ravel() + + return Faces(vertices=vertices, faces=faces)
    + + + +
    +[docs] +def edges_as_quad(edges, scaled_normals): + """ + Expands edges to hexa with given scaled_normals. + + Parameters + ---------- + edges: Edges + (n, d) vertices, (m, 2) edges + scaled_normals: (n, d) np.ndarray + Values will be used to subtract/add to existing vertices. + + Returns + ------- + expanded: Faces + """ + if edges.whatami != "edges": + raise TypeError("expand currently only supports Edges.") + + size = scaled_normals.shape[0] + dim = scaled_normals.shape[1] + if len(edges.vertices) != size: + raise ValueError("Edges.vertices and scaled_normals size mismatch.") + + if dim != edges.vertices.shape[1]: + raise ValueError( + "Dimension mismatch between Edges.Vertices and scaled_normals" + ) + + vertices = np.empty((size * 2, dim), dtype=settings.FLOAT_DTYPE) + vertices[:size] = edges.vertices - scaled_normals + vertices[size:] = edges.vertices + scaled_normals + + quad = np.empty((len(edges.edges), 4), dtype=settings.INT_DTYPE) + quad[:, :2] = edges.edges + quad[:, 2] = edges.edges[:, 1] + size + quad[:, 3] = edges.edges[:, 0] + size + + return Faces(vertices, quad)
    + + + +
    +[docs] +def vertex_normals( + faces, + area_weighting=False, + angle_weighting=False, + return_original_ids=False, +): + """ + Computes vertex normals and saves it in vertex_data. + This calls inplace remove_unreferenced_vertices, but original IDs can be + retrieved using the flag `return_original_ids`. + + The normals are computed on the face-centers and their contributions are + weighted and added to the vertex normals. Per default, all element faces + that are adjacent to a vertex are added with equal contributions, but it is + also possible to use weightings by area of the adjacent element + (`area_weighting`) or by the angle between edges at the corner vertex. + + Parameters + ---------- + faces: Faces + area_weighting : bool (false) + Use the element area as a weighting to its respective normal contribution + angle_weighting : bool (false) + Use the angle of between element edges as a weighting to its respective + normal contribution + return_original_ids : bool (false) + return the original ids in the global mesh + + Returns + ------- + faces: Faces + faces with vertex_data["normals"] computed. + """ + if not faces.whatami.startswith("tri"): + raise ValueError("Vertex normals only supports triangle faces") + + if faces.vertices.shape[1] != 3: + raise ValueError("Vertex normals only support 3d triangles") + + if return_original_ids: + original_ids = np.where(faces.referenced_vertices())[0] + + faces.remove_unreferenced_vertices() + + triangles = faces.vertices[faces.faces] + + # compute (1 - 0) and (2 - 0) + edge_ab = triangles[:, 1] - triangles[:, 0] + edge_bc = triangles[:, 2] - triangles[:, 1] + + # get normal of each faces and normalize + crossed = utils.arr.cross3d(edge_ab, edge_bc) + crossed_length = np.linalg.norm(crossed, axis=1).reshape(-1, 1) + + weights = np.ones_like(crossed, dtype=settings.FLOAT_DTYPE) + + # get area based weights + if area_weighting: + weights *= crossed_length + # crossed /= crossed_length + # else: + crossed /= crossed_length + + # get triangle corner angles (same as faces.faces) + if angle_weighting: + angles = np.empty_like(crossed, dtype=settings.FLOAT_DTYPE) + norm_ab = np.linalg.norm(edge_ab, axis=1) + norm_bc = np.linalg.norm(edge_bc, axis=1) + edge_ca = edge_ab + edge_bc + norm_ca = np.linalg.norm(edge_ca, axis=1) + np.arcsin( + crossed_length.ravel() / (norm_ab * norm_bc).ravel(), + out=angles[:, 0], + ) + np.arccos( + np.einsum("ij,ij->i", edge_bc, edge_ca) / (norm_bc * norm_ca), + out=angles[:, 1], + ) + angles[:, 2] = np.pi - angles[:, 0] - angles[:, 1] + + weights *= angles + + # initialize + normals = np.zeros_like(faces.vertices, dtype=settings.FLOAT_DTYPE) + + # sum normals and weights + np.add.at( + normals, faces.faces[:, 0], crossed * weights[:, 0].reshape(-1, 1) + ) + np.add.at( + normals, faces.faces[:, 1], crossed * weights[:, 1].reshape(-1, 1) + ) + np.add.at( + normals, faces.faces[:, 2], crossed * weights[:, 2].reshape(-1, 1) + ) + + # normalize + normals /= np.linalg.norm(normals, axis=1).reshape(-1, 1) + + faces.vertex_data["normals"] = normals + if return_original_ids: + return (faces, original_ids) + else: + return faces
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/create/vertices.html b/_modules/gustaf/create/vertices.html new file mode 100644 index 000000000..f2e4deff6 --- /dev/null +++ b/_modules/gustaf/create/vertices.html @@ -0,0 +1,527 @@ + + + + + + + + + + gustaf.create.vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.create.vertices

    +"""gustaf/create/vertices.py.
    +
    +Routines to create vertices.
    +"""
    +
    +import numpy as np
    +
    +from gustaf.utils.arr import enforce_len
    +from gustaf.vertices import Vertices
    +
    +
    +
    +[docs] +def raster( + bounds, + resolutions, +): + """Simple wrapper of np.mgrid to extract raster points of desired bounds + and resolutions. + + Parameters + ----------- + bounds: (2, d) array-like + float + resolutions: (d,) array-like or int + int. It will be casted to int. + In case int is given, it will be repeated to match the length of + each bounds + + Returns + -------- + raster_vertices: Vertices + """ + if isinstance(resolutions, (int, float)): + resolutions = enforce_len(resolutions, len(bounds[0])) + + if len(resolutions) != len(bounds[0]) == len(bounds[1]): + raise ValueError("Length of resolutions and bounds should match.") + + slices = [] + for b0, b1, r in zip(bounds[0], bounds[1], resolutions): + slices.append(slice(b0, b1, int(r) * 1j)) + + # Organize it nicely: 2D np.ndarray with shape (prod(resolutions), dim) + points = np.mgrid[slices].T.reshape(-1, len(resolutions)) + + return Vertices(points)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/create/volumes.html b/_modules/gustaf/create/volumes.html new file mode 100644 index 000000000..3a8b747bf --- /dev/null +++ b/_modules/gustaf/create/volumes.html @@ -0,0 +1,523 @@ + + + + + + + + + + gustaf.create.volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.create.volumes

    +"""gustaf/create/volumes.py
    +Routines to create volumes.
    +"""
    +
    +import numpy as np
    +
    +from gustaf import create, utils
    +from gustaf.volumes import Volumes
    +
    +
    +
    +[docs] +def box(bounds=None, resolutions=None): + """Create structured hexahedron block mesh. + + Parameters + ----------- + bounds: (2, 3) array + Minimum and maximum coordinates. + resolutions: (3) array + Vertex count in each dimension. + + Returns + -------- + volume_mesh: Volumes + """ + + if resolutions is None: + resolutions = [2, 2, 2] + if bounds is None: + bounds = [[0.0, 0.0, 0.0], [1.0, 1.0, 1.0]] + if np.array(bounds).shape != (2, 3): + raise ValueError("Bounds must have a dimension of (2, 3).") + if len(resolutions) != 3: + raise ValueError("Resolutions must have three entries.") + if not np.greater(resolutions, 1).all(): + raise ValueError("All resolution values must be at least 2.") + + vertex_mesh = create.vertices.raster(bounds, resolutions) + connectivity = utils.connec.make_hexa_volumes(resolutions) + volume_mesh = Volumes(vertex_mesh.vertices, connectivity) + + return volume_mesh
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/edges.html b/_modules/gustaf/edges.html new file mode 100644 index 000000000..7af643a71 --- /dev/null +++ b/_modules/gustaf/edges.html @@ -0,0 +1,1008 @@ + + + + + + + + + + gustaf.edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.edges

    +"""gustaf/gustaf/edges.py.
    +
    +Edges. Also known as lines.
    +"""
    +
    +from copy import deepcopy
    +
    +import numpy as np
    +
    +from gustaf import helpers, settings, show, utils
    +from gustaf.helpers.options import Option
    +from gustaf.vertices import Vertices
    +
    +
    +
    +[docs] +class EdgesShowOption(helpers.options.ShowOption): + """ + Show options for vertices. + """ + + _valid_options = helpers.options.make_valid_options( + *helpers.options.vedo_common_options, + Option( + "vedo", + "lw", + "Width of edges (lines) in pixel units.", + (float, int), + ), + Option("vedo", "as_arrows", "Show edges as arrows.", (bool,)), + Option( + "vedo", + "head_radius", + "Radius of arrow head. Applicable if as_arrows is True", + (float, int), + ), + Option( + "vedo", + "head_length", + "Length of arrow head. Applicable if as_arrows is True", + (float, int), + ), + Option( + "vedo", + "shaft_radius", + "Radius of arrow shaft. Applicable if as_arrows is True", + (float, int), + ), + ) + + _helps = "Edges" + + def _initialize_showable(self): + """ + Initializes edges as either vedo.Lines or vedo.Arrows + + Parameters + ---------- + None + + Returns + ------- + edges: vedo.Lines or vedo.Arrows + """ + if self.get("as_arrows", False): + init_options = ("head_radius", "head_length", "shaft_radius") + return show.vedo.Arrows( + self._helpee.const_vertices[self._helpee.edges], + **self[init_options], + ) + + else: + init_options = ("lw",) + return show.vedo.Lines( + self._helpee.const_vertices[self._helpee.edges], + **self[init_options], + )
    + + + +
    +[docs] +class Edges(Vertices): + kind = "edge" + + __slots__ = ( + "_edges", + "_const_edges", + ) + + __show_option__ = EdgesShowOption + __boundary_class__ = Vertices + + def __init__( + self, + vertices=None, + edges=None, + elements=None, + ): + """Edges. It has vertices and edges. Also known as lines. + + Parameters + ----------- + vertices: (n, d) np.ndarray + edges: (n, 2) np.ndarray + """ + super().__init__(vertices=vertices) + + if edges is not None: + self.edges = edges + + elif elements is not None: + self.edges = elements + + @property + def edges(self): + """Returns edges. If edges is not its original property. + + Parameters + ----------- + None + + Returns + -------- + edges: (n, 2) np.ndarray + """ + self._logd("returning edges") + return self._edges + + @edges.setter + def edges(self, es): + """Edges setter. Similar to vertices, this is a tracked array. + + Parameters + ----------- + es: (n, 2) np.ndarray + + Returns + -------- + None + """ + self._logd("setting edges") + + self._edges = helpers.data.make_tracked_array( + es, settings.INT_DTYPE, copy=False + ) + + # shape check + if es is not None: + utils.arr.is_shape(es, (-1, 2), strict=True) + + # same, but non-writeable view of tracked array + self._const_edges = self._edges.view() + self._const_edges.flags.writeable = False + + @property + def const_edges(self): + """Returns non-writeable version of edges. + + Parameters + ----------- + None + + Returns + -------- + const_edges (n, 2) np.ndarray + """ + return self._const_edges + + @property + def whatami(self): + """whatami? + + Parameters + ----------- + None + + Returns + -------- + whatami: str + """ + return "edges" + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def sorted_edges(self): + """Sort edges along axis=1. + + Parameters + ----------- + None + + Returns + -------- + edges_sorted: (n_edges, 2) np.ndarray + """ + edges = self._get_attr("edges") + + return np.sort(edges, axis=1)
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def unique_edges(self): + """Returns a named tuple of unique edge info. Info includes unique + values, ids of unique edges, inverse ids, count of each unique values. + + Parameters + ----------- + None + + Returns + -------- + unique_info: Unique2DIntegers + valid attributes are {values, ids, inverse, counts} + """ + unique_info = utils.connec.sorted_unique( + self.sorted_edges(), sorted_=True + ) + + edges = self._get_attr("edges") + + # tuple is not assignable, but entry is mutable... + unique_info.values[:] = edges[unique_info.ids] + + return unique_info
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def single_edges(self): + """Returns indices of very unique edges: edges that appear only once. + For well constructed faces, this can be considered as outlines. + + Parameters + ----------- + None + + Returns + -------- + outlines: (m,) np.ndarray + """ + unique_info = self.unique_edges() + + return unique_info.ids[unique_info.counts == 1]
    + + + @property + def elements(self): + """Returns current connectivity. A short cut in FE friendly term. + Elements mean different things for different classes: Vertices -> + vertices Edges -> edges Faces -> faces Volumes -> volumes. + + Parameters + ----------- + None + + Returns + -------- + elements: (n, d) np.ndarray + int. iff elements=None + """ + elem_name = type(self).__qualname__.lower() + self._logd(f"returning {elem_name}") + + return getattr(self, elem_name) + + @elements.setter + def elements(self, elements): + """Calls corresponding connectivity setter. A short cut in FEM friendly + term. Vertices -> vertices Edges -> edges Faces -> faces Volumes -> + volumes. + + Parameters + ----------- + elements: (n, d) np.ndarray + + Returns + -------- + None + """ + # naming rule in gustaf + elem_name = type(self).__qualname__.lower() + self._logd(f"Setting {elem_name}'s connectivity.") + return setattr(self, elem_name, elements) + + @property + def const_elements(self): + """Returns non-mutable version of elements. + + Parameters + ----------- + None + + Returns + -------- + non_mutable_elements: (n, d) TrackedArray + """ + self._logd("returning const_elements") + return getattr(self, "const_" + type(self).__qualname__.lower()) + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["vertices", "elements"]) + def centers(self): + """Center of elements. + + Parameters + ----------- + None + + Returns + -------- + centers: (n_elements, d) np.ndarray + """ + self._logd("computing centers") + + return self.const_vertices[self.const_elements].mean(axis=1)
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["vertices", "elements"]) + def referenced_vertices( + self, + ): + """Returns mask of referenced vertices. + + Parameters + ----------- + None + + Returns + -------- + referenced: (n,) np.ndarray + """ + referenced = np.zeros(len(self.const_vertices), dtype=bool) + referenced[self.const_elements] = True + + return referenced
    + + +
    +[docs] + def remove_unreferenced_vertices(self): + """Remove unreferenced vertices. Adapted from + `github.com/mikedh/trimesh` + + Parameters + ----------- + None + + Returns + -------- + new_self: type(self) + """ + referenced = self.referenced_vertices() + + inverse = np.zeros(len(self.vertices), dtype=settings.INT_DTYPE) + inverse[referenced] = np.arange(referenced.sum()) + + return self.update_vertices( + mask=referenced, + inverse=inverse, + )
    + + +
    +[docs] + def update_elements(self, mask): + """Similar to update_vertices, but for elements. + + Parameters + ----------- + mask: bool or (m,) np.ndarray + + Returns + -------- + new_self: type(self) + """ + self.elements = self.elements[mask] + + return self.remove_unreferenced_vertices()
    + + +
    +[docs] + def update_edges(self, *args, **kwargs): + """Alias to update_elements.""" + return self.update_elements(*args, **kwargs)
    + + +
    +[docs] + def dashed(self, spacing=None): + """Turn edges into dashed edges(=lines). Given spacing, it will try to + chop edges as close to it as possible. Pattern should look: + + ``dashed edges`` + + .. code-block:: text + + o--------o o--------o o--------o + |<------>| |<-->| + (chop length) (chop length / 2) + + Parameters + ----------- + spacing: float + Default is None and it will use self.bounds_diagonal_norm() / 50 + + Returns + -------- + dashing_edges: Edges + """ + if self.kind != "edge": + raise NotImplementedError("dashed is only for edges.") + + if spacing is None: + # apply "automatic" spacing + spacing = self.bounds_diagonal_norm() / 50 + + v0s = self.vertices[self.edges[:, 0]] + v1s = self.vertices[self.edges[:, 1]] + + distances = np.linalg.norm(v0s - v1s, axis=1) + linspaces = (((distances // (spacing * 1.5)) + 1) * 3).astype(np.int32) + + # chop vertices! + new_vs = [] + for v0, v1, lins in zip(v0s, v1s, linspaces): + new_vs.append(np.linspace(v0, v1, lins)) + + # we need all chopped vertices. + # there might be duplicating vertices. you can use merge_vertices + new_vs = np.vstack(new_vs) + # all mid points are explicitly defined, but they aren't required + # so, rm. + mask = np.ones(len(new_vs), dtype=bool) + mask[1::3] = False + new_vs = new_vs[mask] + + # prepare edges + tmp_es = utils.connec.range_to_edges((0, len(new_vs)), closed=False) + new_es = tmp_es[::2] + + return Edges(vertices=new_vs, edges=new_es)
    + + +
    +[docs] + def shrink(self, ratio=0.8, map_vertex_data=True): + """Returns shrunk elements. + + Parameters + ----------- + ratio: float + Default is 0.8 + map_vertex_data: bool + Default is True. Maps all vertex_data. + + Returns + -------- + s_elements: Elements + shrunk elements + """ + elements = self.const_elements + vs = np.vstack(self.vertices[elements]) + es = np.arange(len(vs)) + + nodes_per_element = elements.shape[1] + es = es.reshape(-1, nodes_per_element) + + mids = np.repeat(self.centers(), nodes_per_element, axis=0) + + vs -= mids + vs *= ratio + vs += mids + + s_elements = type(self)(vertices=vs, elements=es) + + if map_vertex_data: + elements_flat = elements.ravel() + for key, value in self.vertex_data.items(): + s_elements.vertex_data[key] = value[elements_flat] + + # probably wanna take visualization options too + s_elements._show_options._options = deepcopy( + self.show_options._options + ) + + return s_elements
    + + +
    +[docs] + def to_vertices(self): + """Returns Vertices obj. + + Parameters + ----------- + None + + Returns + -------- + vertices: Vertices + """ + return Vertices(self.vertices)
    + + + def _get_attr(self, attr): + """Internal function to get attribute that maybe property or callable. + Some properties are replaced by callable in subclasses as it may depend + on other properties of subclass. + + Parameters + ----------- + attr: str + + Returns + -------- + attrib: Any + """ + attrib = getattr(self, attr) + return attrib() if callable(attrib) else attrib
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/faces.html b/_modules/gustaf/faces.html new file mode 100644 index 000000000..d29555b5e --- /dev/null +++ b/_modules/gustaf/faces.html @@ -0,0 +1,843 @@ + + + + + + + + + + gustaf.faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.faces

    +"""gustaf/gustaf/faces.py."""
    +
    +import numpy as np
    +
    +from gustaf import helpers, settings, show, utils
    +from gustaf.edges import Edges
    +from gustaf.helpers.options import Option
    +
    +# special types for face texture option
    +try:
    +    import vedo
    +
    +    vedoPicture = vedo.Picture
    +    # there are other ways to get here, but this is exact path for our use
    +    vtkTexture = vedo.vtkclasses.vtkTexture
    +except ImportError as err:
    +    vedoPicture = helpers.raise_if.ModuleImportRaiser("vedo", err)
    +    vtkTexture = helpers.raise_if.ModuleImportRaiser("vedo", err)
    +
    +
    +
    +[docs] +class FacesShowOption(helpers.options.ShowOption): + """ + Show options for vertices. + """ + + _valid_options = helpers.options.make_valid_options( + *helpers.options.vedo_common_options, + Option("vedo", "lw", "Width of edges (lines) in pixel units.", (int,)), + Option( + "vedo", "lc", "Color of edges (lines).", (int, str, tuple, list) + ), + Option( + "vedo", + "texture", + "Texture of faces in array, vedo.Picture, vtk.vtkTexture, " + "or path to an image.", + (np.ndarray, tuple, list, str, vedoPicture, vtkTexture), + ), + ) + + _helps = "Faces" + + def _initialize_showable(self): + """ + Initializes Faces as vedo.Mesh + + Parameters + ---------- + None + + Returns + ------- + faces: vedo.Mesh + """ + + faces = show.vedo.Mesh( + [self._helpee.const_vertices, self._helpee.const_faces], + ) + + for option in ["lw", "lc", "texture"]: + val = self.get(option, False) + if val: + getattr(faces, option)(val) + + return faces
    + + + +
    +[docs] +class Faces(Edges): + kind = "face" + + const_edges = helpers.raise_if.invalid_inherited_attr( + "Edges.const_edges", + __qualname__, + property_=True, + ) + update_edges = helpers.raise_if.invalid_inherited_attr( + "Edges.update_edges", + __qualname__, + property_=False, + ) + dashed = helpers.raise_if.invalid_inherited_attr( + "Edges.dashed", + __qualname__, + property_=False, + ) + + __slots__ = ( + "_faces", + "_const_faces", + "BC", + ) + + __show_option__ = FacesShowOption + __boundary_class__ = Edges + + def __init__( + self, + vertices=None, + faces=None, + elements=None, + ): + """Faces. It has vertices and faces. Faces could be triangles or + quadrilaterals. + + Parameters + ----------- + vertices: (n, d) np.ndarray + faces: (n, 3) or (n, 4) np.ndarray + """ + super().__init__(vertices=vertices) + if faces is not None: + self.faces = faces + + elif elements is not None: + self.faces = elements + + self.BC = {} + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def edges(self): + """Edges from here aren't main property. So this needs to be computed. + + Parameters + ----------- + None + + Returns + -------- + edges: (n, 2) np.ndarray + """ + self._logd("computing edges") + faces = self._get_attr("faces") + + return utils.connec.faces_to_edges(faces)
    + + + @property + def whatami(self): + """Determines whatami. + + Parameters + ----------- + None + + Returns + -------- + None + """ + return type(self).whatareyou(self) + +
    +[docs] + @classmethod + def whatareyou(cls, face_obj): + """classmethod that tells you if the Faces is tri or quad or invalid + kind. + + Parameters + ----------- + face_obj: Faces + + Returns + -------- + whatareyou: str + """ + if not cls.kind.startswith(face_obj.kind): + raise TypeError("Given obj is not {cls.__qualname__}") + + if face_obj.faces.shape[1] == 3: + return "tri" + + elif face_obj.faces.shape[1] == 4: + return "quad" + + else: + raise ValueError( + "Invalid faces connectivity shape. It should be (n, 3) or " + f"(n, 4), but given: {face_obj.faces.shape}" + )
    + + + @property + def faces(self): + """Returns faces. + + Parameters + ----------- + None + + Returns + -------- + faces + """ + self._logd("returning faces") + return self._faces + + @faces.setter + def faces(self, fs): + """Faces setter. Similar to vertices, this will be a tracked array. + + Parameters + ----------- + fs: (n, 2) np.ndarray + + Returns + -------- + None + """ + self._logd("setting faces") + + self._faces = helpers.data.make_tracked_array( + fs, + settings.INT_DTYPE, + copy=False, + ) + # shape check + if fs is not None: + utils.arr.is_one_of_shapes( + fs, + ((-1, 3), (-1, 4)), + strict=True, + ) + + # same, but non-writeable view of tracked array + self._const_faces = self._faces.view() + self._const_faces.flags.writeable = False + + @property + def const_faces(self): + """Returns non-writeable view of faces. + + Parameters + ----------- + None + + Returns + -------- + const_faces: (n, 2 + """ + return self._const_faces + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def sorted_faces(self): + """Similar to edges_sorted but for faces. + + Parameters + ----------- + None + + Returns + -------- + sorted_faces: (self.faces.shape) np.ndarray + """ + faces = self._get_attr("faces") + + return np.sort(faces, axis=1)
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def unique_faces(self): + """Returns a namedtuple of unique faces info. Similar to unique_edges. + + Parameters + ----------- + None + + Returns + -------- + unique_info: Unique2DIntegers + valid attributes are {values, ids, inverse, counts} + """ + unique_info = utils.connec.sorted_unique( + self.sorted_faces(), sorted_=True + ) + + faces = self._get_attr("faces") + + unique_info.values[:] = faces[unique_info.ids] + + return unique_info
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def single_faces(self): + """Returns indices of very unique faces: faces that appear only once. + For well constructed volumes, this can be considered as surfaces. + + Parameters + ----------- + None + + Returns + -------- + single_faces: (m,) np.ndarray + """ + unique_info = self.unique_faces() + + return unique_info.ids[unique_info.counts == 1]
    + + +
    +[docs] + def update_faces(self, *args, **kwargs): + """Alias to update_elements.""" + self.update_elements(*args, **kwargs)
    + + +
    +[docs] + def to_edges(self, unique=True): + """Returns Edges obj. + + Parameters + ----------- + unique: bool + Default is True. If True, only takes unique edges. + + Returns + -------- + edges: Edges + """ + return Edges( + self.vertices, + edges=self.unique_edges().values if unique else self.edges(), + )
    + + +
    +[docs] + def to_subelements( + self, + unique=True, # noqa ARG002 # used inside the return eval str + ): + """Returns current elements represented as its boundary element class. + For faces, this is equivalent to `to_edges()`. + For volumes, `to_faces()`. + + Parameters + ---------- + unique: bool + Default is True. If True, only takes unique edges. + + Returns + ------- + subelements: boundary class + """ + return getattr( + self, f"to_{self.__boundary_class__.__qualname__.lower()}" + )(unique)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/helpers/data.html b/_modules/gustaf/helpers/data.html new file mode 100644 index 000000000..b05df1283 --- /dev/null +++ b/_modules/gustaf/helpers/data.html @@ -0,0 +1,1250 @@ + + + + + + + + + + gustaf.helpers.data — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.helpers.data

    +"""gustaf/gustaf/helpers/data.py.
    +
    +Helps helpee to manage data. Some useful data structures.
    +"""
    +
    +from collections import namedtuple
    +from functools import wraps
    +
    +import numpy as np
    +
    +from gustaf.helpers._base import HelperBase
    +
    +
    +
    +[docs] +class TrackedArray(np.ndarray): + """numpy array object that keeps mirroring inplace changes to the source. + Meant to help control_points. + """ + + __slots__ = ( + "_super_arr", + "_modified", + ) + + def __array_finalize__(self, obj): + """Sets default flags for any arrays that maybe generated based on + physical space array. For more information, + see https://numpy.org/doc/stable/user/basics.subclassing.html""" + self._super_arr = None + self._modified = True + + # for arrays created based on this subclass + if isinstance(obj, type(self)): + # this is copy. nothing to worry here + if self.base is None: + return None + + # first child array + if self.base is obj: + # make sure this is not a recursively born child + # for example, `arr[[1,2]][:,2]` + # we should have set _super_arr to True + # if we made this array using `make_tracked_array` + if obj._super_arr is True: + self._super_arr = obj + return None + + # multi generation child array + if obj._super_arr is not None and self.base is obj.base: + self._super_arr = obj._super_arr + return None + + return None + + @property + def modified(self): + """ + Modified flag getter + """ + # have super arr and self is not super_arr, + if self._super_arr is not None and self._super_arr is not True: + return self._super_arr._modified + + return self._modified + + @modified.setter + def modified(self, m): + if self._super_arr is not None and self._super_arr is not True: + self._super_arr._modified = m + else: + self._modified = m + +
    +[docs] + def copy(self, *args, **kwargs): + """copy creates regular numpy array""" + return np.array(self, *args, copy=True, **kwargs)
    + + +
    +[docs] + def view(self, *args, **kwargs): + """Set writeable flags to False for the view.""" + v = super(self.__class__, self).view(*args, **kwargs) + v.flags.writeable = False + return v
    + + + def __iadd__(self, *args, **kwargs): + sr = super(self.__class__, self).__iadd__(*args, **kwargs) + self.modified = True + return sr + + def __isub__(self, *args, **kwargs): + sr = super(self.__class__, self).__isub__(*args, **kwargs) + self.modified = True + return sr + + def __imul__(self, *args, **kwargs): + sr = super(self.__class__, self).__imul__(*args, **kwargs) + self.modified = True + return sr + + def __idiv__(self, *args, **kwargs): + sr = super(self.__class__, self).__idiv__(*args, **kwargs) + self.modified = True + return sr + + def __itruediv__(self, *args, **kwargs): + sr = super(self.__class__, self).__itruediv__(*args, **kwargs) + self.modified = True + return sr + + def __imatmul__(self, *args, **kwargs): + sr = super(self.__class__, self).__imatmul__(*args, **kwargs) + self.modified = True + return sr + + def __ipow__(self, *args, **kwargs): + sr = super(self.__class__, self).__ipow__(*args, **kwargs) + self.modified = True + return sr + + def __imod__(self, *args, **kwargs): + sr = super(self.__class__, self).__imod__(*args, **kwargs) + self.modified = True + return sr + + def __ifloordiv__(self, *args, **kwargs): + sr = super(self.__class__, self).__ifloordiv__(*args, **kwargs) + self.modified = True + return sr + + def __ilshift__(self, *args, **kwargs): + sr = super(self.__class__, self).__ilshift__(*args, **kwargs) + self.modified = True + return sr + + def __irshift__(self, *args, **kwargs): + sr = super(self.__class__, self).__irshift__(*args, **kwargs) + self.modified = True + return sr + + def __iand__(self, *args, **kwargs): + sr = super(self.__class__, self).__iand__(*args, **kwargs) + self.modified = True + return sr + + def __ixor__(self, *args, **kwargs): + sr = super(self.__class__, self).__ixor__(*args, **kwargs) + self.modified = True + return sr + + def __ior__(self, *args, **kwargs): + sr = super(self.__class__, self).__ior__(*args, **kwargs) + self.modified = True + return sr + + def __setitem__(self, key, value): + # set first. invalid setting will cause error + sr = super(self.__class__, self).__setitem__(key, value) + self.modified = True + return sr
    + + + +
    +[docs] +def make_tracked_array(array, dtype=None, copy=True): + """Motivated by nice implementations of `trimesh` (see LICENSE.txt). + `https://github.com/mikedh/trimesh/blob/main/trimesh/caching.py`. + + Factory-like wrapper function for TrackedArray. + If you want to use TrackedArray, it is recommended to use this function. + + Parameters + ------------ + array: array- like object + To be turned into a TrackedArray + dtype: np.dtype + Which dtype to use for the array + copy: bool + Default is True. copy if True. + + Returns + ------------ + tracked : TrackedArray + Contains input array data + """ + # if someone passed us None, just create an empty array + if array is None: + array = [] + + if copy: + array = np.array(array, dtype=dtype) + else: + array = np.asanyarray(array, dtype=dtype) + + tracked = array.view(TrackedArray) + + # this marks original array + tracked._super_arr = True + + return tracked
    + + + +
    +[docs] +class DataHolder(HelperBase): + __slots__ = ("_saved",) + + def __init__(self, helpee): + """Base class for any data holder. Behaves similar to dict. + + Parameters + ----------- + helpee: object + GustafBase objects would probably make the most sense here. + """ + self._helpee = helpee + self._saved = {} + + def __setitem__(self, key, value): + """Raise Error to disable direct value setting. + + Parameters + ----------- + key: str + value: object + """ + raise NotImplementedError( + "Sorry, you can't set items directly for " + f"{type(self).__qualname__}" + ) + + def __getitem__(self, key): + """Returns stored item if the key exists. + + Parameters + ----------- + key: str + + Returns + -------- + value: object + """ + if key in self._saved: + return self._saved[key] + + else: + raise KeyError(f"`{key}` is not stored for {type(self._helpee)}") + + def __contains__(self, key): + """Returns if saved data contains the given key. + + Parameters + ---------- + key: str + + Returns + ------- + value + """ + return key in self._saved + + def __len__(self): + """ + Returns number of items. + + Parameters + ---------- + None + + Returns + ------- + len: int + """ + return len(self._saved) + +
    +[docs] + def pop(self, key, default=None): + """ + Applied pop() to saved data + + Parameters + ---------- + key: str + default: object + + Returns + ------- + value: object + """ + return self._saved.pop(key, default)
    + + +
    +[docs] + def clear(self): + """ + Clears saved data by reassigning new dict + """ + self._saved = {}
    + + +
    +[docs] + def get(self, key, default_values=None): + """Returns stored item if the key exists. Else, given default value. If + the key exist, default value always exists, since it is initialized + that way. + + Parameters + ----------- + key: str + default_values: object + + Returns + -------- + value: object + """ + if key in self._saved: + return self._saved[key] + else: + return default_values
    + + +
    +[docs] + def keys(self): + """Returns keys of data holding dict. + + Returns + -------- + keys: dict_keys + """ + return self._saved.keys()
    + + +
    +[docs] + def values(self): + """Returns values of data holding dict. + + Returns + -------- + values: dict_values + """ + return self._saved.values()
    + + +
    +[docs] + def items(self): + """Returns items of data holding dict. + + Returns + -------- + values: dict_values + """ + return self._saved.items()
    + + +
    +[docs] + def update(self, **kwargs): + """ + Updates given kwargs using __setitem__. + + Parameters + ---------- + **kwargs: kwargs + + Returns + ------- + None + """ + self._saved.update(**kwargs)
    +
    + + + +
    +[docs] +class ComputedData(DataHolder): + _depends = None + _inv_depends = None + + __slots__ = () + + def __init__(self, helpee, **_kwargs): + """Stores last computed values. + + Keys are expected to be the same as helpee's function that computes the + value. + + Parameters + ----------- + helpee: GustafBase + """ + super().__init__(helpee) + +
    +[docs] + @classmethod + def depends_on(cls, var_names, make_property=False): + """Decorator as classmethod. + + checks if the key should be computed. Two cases, where the answer is + yes: + + 1. there's modification on arrays that the key depend on. + ->erases all other + 2. is corresponding value None? + + Supports multi-dependency + + Parameters + ----------- + var_name: list + make_property: + """ + + def inner(func): + # following are done once while modules are loaded + # just subclass this class to make a special helper + # for each helpee class. + assert isinstance(var_names, list), "var_names should be a list" + # initialize property + # _depends is dict(str: list) + if cls._depends is None: + cls._depends = {} + if cls._depends.get(func.__name__, None) is None: + cls._depends[func.__name__] = [] + # add dependency info + cls._depends[func.__name__].extend(var_names) + + # _inv_depends is dict(str: list) + if cls._inv_depends is None: + cls._inv_depends = {} + # add inverse dependency + for vn in var_names: + if cls._inv_depends.get(vn, None) is None: + cls._inv_depends[vn] = [] + + cls._inv_depends[vn].append(func.__name__) + + @wraps(func) + def compute_or_return_saved(*args, **kwargs): + """Check if the key should be computed,""" + # extract some related info + self = args[0] # the helpee itself + + # explicitly settable kwargs. + # unless recompute flag is set False, + # it will always recompute and save them + # if you call the same function without kwargs + # the last one with kwargs will be returned + recompute = False + if kwargs: + recompute = kwargs.get("recompute", True) + + # computed arrays are called _computed. + # loop over dependencies and check if they are modified + for dependee_str in cls._depends[func.__name__]: + dependee = getattr(self, dependee_str) + # is modified? + if dependee._modified: + for inv in cls._inv_depends[dependee_str]: + self._computed._saved[inv] = None + + # is saved / want to recompute? + # recompute is added for computed values that accepts params. + saved = self._computed._saved.get(func.__name__, None) + if saved is not None and not recompute: + return saved + + # we've reached this point because we have to compute this + computed = func(*args, **kwargs) + if isinstance(computed, np.ndarray): + computed.flags.writeable = False # configurable? + self._computed._saved[func.__name__] = computed + + # so, all fresh. we can press NOT-modified button + for dependee_str in cls._depends[func.__name__]: + dependee = getattr(self, dependee_str) + dependee._modified = False + + return computed + + if make_property: + return property(compute_or_return_saved) + else: + return compute_or_return_saved + + return inner
    +
    + + + +
    +[docs] +class VertexData(DataHolder): + """ + Minimal manager for vertex data. Checks input array size, transforms + data on request. __setitem__ and __getitem__ will perform length checks. + key(), values(), items(), and get() will return whatever is currently + stored. + + gustaf supports two kinds of data representation: scalar-data with cmap + and vector-data with arrows. + """ + + __slots__ = () + + def __init__(self, helpee): + """Checks if helpee has vertices as attr beforehand. + + Parameters + ---------- + helpee: Vertices + Vertices and its derived classes. + """ + if not hasattr(helpee, "vertices"): + raise AttributeError("Helpee does not have `vertices`.") + + super().__init__(helpee) + + def _validate_len(self, value=None, raise_=True): + """Checks if given value is a valid vertex_data based of its length. + + If raise_, throws error, else, deletes all incompatible values. + Only checks len(). If array has (1, len) shape, this will still return + False. + + Parameters + ---------- + value: array-like + Default is None. If None, checks all existing values. + raise_: bool + Default is True, If True, raises in case of incompatibility. + + Returns + ------- + validity: bool + If raise_ is False. + """ + valid = True + helpee_len = len(self._helpee.vertices) + if value is not None: + if len(value) != helpee_len: + valid = False + + if raise_ and not valid: + raise ValueError( + f"Expected ({helpee_len}) length data, " + f"Given ({len(value)})" + ) + + return valid + + # here, check all saved values. + to_pop = [] + for key, value in self._saved.items(): + if len(value) != helpee_len: + valid = False + + if not valid: + if raise_: + raise ValueError( + f"`{key}`-data len ({len(value)}) doesn't match " + f"expected len ({helpee_len})" + ) + else: + self._logd( + f"`{key}`-data len ({len(value)}) doesn't match " + f"expected len ({helpee_len}). Deleting `{key}`." + ) + # pop invalid data + to_pop.append(key) + to_pop.append(key + "__norm") + + # pop if needed + for tp in to_pop: + self._saved.pop(tp, None) + + return valid + + def __setitem__(self, key, value): + """ + Performs len() based check before storing vertex_data. + + Parameters + ---------- + key: str + value: object + + Returns + ------- + None + """ + self._validate_len(value, raise_=True) + + # we are here because this is valid + self._saved[key] = make_tracked_array(value, copy=False).reshape( + len(self._helpee.vertices), -1 + ) + + # if "data" or "arrow_data" is empty in show_options, we want to + # set this data to show. We will always set this as "data". + show_options = getattr(self._helpee, "show_options", None) + if show_options is not None: + if "data" in show_options or "arrow_data" in show_options: + return None + show_options["data"] = key + + def __getitem__(self, key): + """ + Validates data length before returning item. + + Parameters + ---------- + key: str + + Returns + ------- + data: array-like + """ + value = super().__getitem__(key) # raises KeyError + valid = self._validate_len(value, raise_=False) + if valid: + return value + else: + raise KeyError( + "Either requested data is not stored or deleted due to " + "changes in number of vertices." + ) + +
    +[docs] + def as_scalar(self, key, default=None): + """ + Returns scalar version of requested data. If it is already a scalar, + will return as is. Else, will return a norm. using `np.linalg.norm()`. + + Parameters + ---------- + key: str + default: object + + Returns + ------- + data_as_scalar: (n, 1) np.ndarray + """ + if key not in self.keys(): + return default + + # interpret scalar as norm + # save the norm once it is called. + if "__norm" not in key: + norm_key = key + "__norm" + else: + norm_key = key + key = key.replace("__norm", "") + + if norm_key in self.keys(): + saved = self[norm_key] # performs len check + # return if original is not modified + if not self[key]._modified: # check if original data is modified + return saved + else: + self._saved.pop(norm_key) + + # we are here because we have to compute norm. let's save norm + value = self[key] + if value.shape[1] == 1: + value_norm = value + else: + value_norm = np.linalg.norm(value, axis=1).reshape(-1, 1) + + # save norm + self[norm_key] = value_norm + # considered not modified + self[key]._modified = False + + return value_norm
    + + +
    +[docs] + def as_arrow(self, key, default=None, raise_=True): + """ + Returns an array as is, only if it is showable as arrow. + + Parameters + ---------- + key: str + default: object + raise_: bool + + Returns + ------- + data: (n, d) np.ndarray + """ + if key not in self.keys(): + return default + + value = self[key] + if value.shape[1] == 1: + self._logd(f"as_arrow() requested data ({key}) is 1D data.") + if raise_: + raise ValueError( + f"`{key}`-data is 1D and cannot be represented as arrows." + ) + + return value
    +
    + + + +Unique2DFloats = namedtuple( + "Unique2DFloats", ["values", "ids", "inverse", "intersection"] +) +Unique2DFloats.__doc__ = """ +namedtuple to hold unique information of float type arrays. +Note that for float types, "close enough" might be a better name than unique. +This way, all tracked arrays, as long as they are 2D, have a dot separated +syntax to access unique info. For example, `mesh.unique_vertices.ids`. +""" +Unique2DFloats.values.__doc__ = """`(n, d) np.ndarray` + Field number 0""" +Unique2DFloats.ids.__doc__ = """`(n, d) np.ndarray` + Field number 1""" +Unique2DFloats.inverse.__doc__ = """`(n, d) np.ndarray` + Field number 2""" +Unique2DFloats.intersection.__doc__ = """`(m) list of list` + given original array's index, returns overlapping arrays, including itself. + Field number 3 +""" + +Unique2DIntegers = namedtuple( + "Unique2DIntegers", ["values", "ids", "inverse", "counts"] +) +Unique2DIntegers.__doc__ = """ +namedtuple to hold unique information of integer type arrays. +Similar approach to Unique2DFloats. +""" + +Unique2DIntegers.values.__doc__ = """`(n, d) np.ndarray` + Field number 0""" +Unique2DIntegers.ids.__doc__ = """`(n) np.ndarray` + Field number 1""" +Unique2DIntegers.inverse.__doc__ = """`(m) np.ndarray` + Field number 2""" +Unique2DIntegers.counts.__doc__ = """`(n) np.ndarray` + Field number 3""" + + +
    +[docs] +class ComputedMeshData(ComputedData): + """A class to hold computed-mesh-data. + + Subclassed to keep its own dependency info. + """ + + pass
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/helpers/notebook.html b/_modules/gustaf/helpers/notebook.html new file mode 100644 index 000000000..f2eb1b5f8 --- /dev/null +++ b/_modules/gustaf/helpers/notebook.html @@ -0,0 +1,652 @@ + + + + + + + + + + gustaf.helpers.notebook — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.helpers.notebook

    +"""gustaf/gustaf/helpers/notebook.py.
    +
    +Enables the plotting in ipynb with k3d.
    +
    +There are no import guards since they are in the place where this module is
    +imported. This should be enough since I do not think that this module
    +will/should be used outside this place.
    +"""
    +
    +import importlib
    +
    +import numpy as np
    +import vedo
    +from IPython.display import display
    +from ipywidgets import GridspecLayout
    +
    +from gustaf._base import GustafBase
    +
    +
    +
    +[docs] +def get_shape(N, x, y): + """Taken verbatim from vedo plotter:show function. + + Args: + N (_type_): _description_ + x (_type_): _description_ + y (_type_): _description_ + + Returns: + _type_: _description_ + """ + nx = int(np.sqrt(int(N * y / x) + 1)) + ny = int(np.sqrt(int(N * x / y) + 1)) + lm = [ + (nx, ny), + (nx, ny + 1), + (nx - 1, ny), + (nx + 1, ny), + (nx, ny - 1), + (nx - 1, ny + 1), + (nx + 1, ny - 1), + (nx + 1, ny + 1), + (nx - 1, ny - 1), + ] + ind, minl = 0, 1000 + for i, m in enumerate(lm): + l_something = m[0] * m[1] + if N <= l_something < minl: + ind = i + minl = l_something + return lm[ind]
    + + + +
    +[docs] +class K3DPlotterN(GridspecLayout, GustafBase): + """Helper to plot in notebooks with k3d. + + Sets up K3D plotter especially if multiple plots are to be shown in the + notebook. + """ + + def __init__(self, N, size, background=0xFFFFFF): + """Setups the plotter with potentially multiple plots. + + Parameters + ---------- + N: int + Number of plots to be shown. + size: (str, list) + See vedo.Plotter for details. + background: ((color, str), optional) + See vedo.Plotter for details. Defaults to 0xFFFFFF. + """ + if importlib.util.find_spec("k3d") is None: + raise ImportError( + "k3d is not installed. Please install it with `pip " + "install k3d`." + ) + self.N = N + self.x, self.y = get_shape(N, *(2160, 1440)) + self.shape = (self.x, self.y) + super().__init__(self.x, self.y) + self.vedo_plotters = [] + for _ in range(N): + self.vedo_plotters.append( + vedo.Plotter( + size=size, + bg=background, + ) + ) + + def _at_get_location(self, N): + """Gets the grid coordinate of the wanted renderer. + + Parameters + ---------- + N: int + Render id. + + Returns: + (int, int): Grid Coordinate of the wanted renderer. + """ + if (self.x * self.y) < N: + return (self.x - 1, self.y - 1) + return (N // (self.y), N % self.y) + +
    +[docs] + def show( + self, list_of_showables, at, interactive, camera, axes, *args, **kwargs + ): + """Add the showables to the renderer at the given location. + + Parameters + ----------- + list_of_showables: Any + at: int + Render id. + interactive: bool + See vedo.Plotter.show for details. + camera: Any + See vedo.Plotter.show for details. + axes: bool + Add axes to the plot. Will also cast int to bool. + """ + if len(args) != 0 or len(kwargs) != 0: + self._logd(f"*args ({args}) and **kwargs ({kwargs}) ignored") + + # this converts vedo plotter to k3d plot. + # after this, vedo plotter has no relevance to what you see + self[self._at_get_location(at)] = self.vedo_plotters[at].show( + list_of_showables, + interactive=interactive, + camera=camera, + axes=axes, + )
    + + +
    +[docs] + def display(self, close=True): + """Display the plotter. + + This is needed in case the plotter is the last thing in a cell. In that + case the IPython will try to call this function to display this. + """ + display(self) + + # we add option to close here, as we set default_autoclose = False + if close: + self.clear() + self.close()
    + + +
    +[docs] + def clear(self, *args, **kwargs): + """Clear the plotters.""" + for v_plotter in self.vedo_plotters: + v_plotter.clear(*args, deep=True, **kwargs)
    + + +
    +[docs] + def close(self): + """Closes all vedo.Plotters""" + for v_plotter in self.vedo_plotters: + v_plotter.close()
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/helpers/options.html b/_modules/gustaf/helpers/options.html new file mode 100644 index 000000000..ebaf076ac --- /dev/null +++ b/_modules/gustaf/helpers/options.html @@ -0,0 +1,1029 @@ + + + + + + + + + + gustaf.helpers.options — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.helpers.options

    +"""gustaf/gustaf/helpers/options.py
    +
    +Classes to help organize options.
    +"""
    +
    +from copy import deepcopy
    +
    +from gustaf.helpers._base import HelperBase
    +from gustaf.helpers.raise_if import ModuleImportRaiser
    +
    +
    +
    +[docs] +class Option: + """ + Minimal Class to hold each options. Mainly to replace nested dict. + + Parameters + ---------- + backends: set + set of strings. + key: str + description: str + allowed_types: set + set of types + default: one of allwed_types + Optional. Default is None + """ + + __slots__ = ( + "backends", + "key", + "description", + "allowed_types", + "default", + ) + + def __init__( + self, backends, key, description, allowed_types, default=None + ): + """ + Check types + """ + if isinstance(backends, str): + self.backends = {backends} + elif getattr(backends, "__iter__", False): + self.backends = set(backends) + else: + raise TypeError("Invalid backends type") + + if isinstance(key, str): + self.key = key + else: + raise TypeError("Invalid key type") + + if isinstance(description, str): + self.description = description + else: + raise TypeError("Invalid description type") + + if isinstance(allowed_types, (tuple, list, set)): + self.allowed_types = tuple(allowed_types) + else: + raise TypeError("Invalid allowed_types type") + + if default is None or type(default) in self.allowed_types: + self.default = default + else: + raise TypeError(f"{type(default)} is invalid default type") + + def __repr__(self): + specific = "\n".join( + [ + "", + self.key, + "=" * len(self.key), + f"backends: {self.backends}", + "description:", + f" {self.description}", + "allowed_types:", + f" {self.allowed_types}", + super().__repr__(), + "", + ] + ) + return specific
    + + + +
    +[docs] +class SetDefault: + """ + Default setter object. Can use as argument in `make_valid_options` + """ + + __slots__ = ("key", "default") + + def __init__(self, key, default): + self.key = key + self.default = default
    + + + +# predefine recurring options +vedo_common_options = ( + Option( + "vedo", + "c", + "Color in {rgb, RGB, str of (hex, name), int}", + (str, tuple, list, int), + ), + Option("vedo", "alpha", "Transparency in range [0, 1].", (float, int)), + Option( + "vedo", + "data", + "Name of vertex_data to show. " + "Object must have vertex_data with the same name.", + (str,), + ), + Option("vedo", "vertex_ids", "Show ids of vertices", (bool,)), + Option("vedo", "element_ids", "Show ids of elements", (bool,)), + Option( + "vedo", + "lighting", + "Lighting options {'default', 'metallic', 'plastic', 'shiny', " + "'glossy', 'ambient', 'off'}", + (str,), + ), + Option("vedo", "cmap", "Colormap for vertex_data plots.", (str,)), + Option("vedo", "vmin", "Minimum value for cmap", (float, int)), + Option("vedo", "vmax", "Maximum value for cmap", (float, int)), + Option( + "vedo", + "cmap_alpha", + "Colormap Transparency in range [0, 1].", + (float, int), + ), + Option( + "vedo", + "cmap_n_colors", + "Set the number of available colors", + (int,), + ), + Option( + "vedo", + "scalarbar", + "Scalarbar describing cmap. At least an empty dict or " + "dict with following items are accepted: " + "{title: str, pos: tuple, title_yoffset: int, font_size: int, " + "nlabels: int, c: str, horizontal: bool, use_alpha: bool, " + "label_format: str}. Setting bool will add a default scalarbar", + (bool, dict), + ), + Option( + "vedo", + "scalarbar3d", + "3D scalarbar describing cmap. At least an empty dict or " + "dict with following items are accepted: " + "{title: str, pos: tuple, size: list, title_font: str, " + "title_xoffset: float, title_yoffset: float, title_size: float, " + "title_rotation: float, nlabels: int, label_font:str, " + "label_size: float, label_offset: float, label_rotation: int, " + "label_format: str, draw_box: bool, above_text: str, below_text: str, " + "nan_text: str, categories: list}", + (bool, dict), + ), + Option( + "vedo", + "arrow_data", + "Name of vertex_data to plot as arrow. Corresponding data should be " + "at least 2D. If you want more control over arrows, consider creating " + "edges using gus.create.edges.from_data().", + (str,), + ), + Option( + "vedo", + "arrow_data_scale", + "Scaling factor for arrow data.", + (float, int), + ), + Option( + "vedo", + "arrow_data_color", + "Color for arrow data. Can be either cmap name or color. For " + "cmap, colors are based on the size of the arrows.", + (str, tuple, list, int), + ), + Option( + "vedo", + "axes", + "Configure a specific axes with options. Expect dict(), but setting " + "True will set a default axes. For full options, see " + "https://vedo.embl.es/autodocs/content/vedo/addons.html" + "#vedo.addons.Axes", + (bool, dict), + ), +) + + +
    +[docs] +def make_valid_options(*options): + """ + Forms valid options. Should run only once during module loading. + + Parameters + ---------- + *options: Option + + Returns + ------- + valid_options: dict() + """ + valid_options = {} + for opt in options: + if isinstance(opt, Option): + # copy option object to avoid overwriting defaults + # only exception is if this option is a backend object + # and wrapped by ModuleImportRaiser + allowed_types = [] + for at in opt.allowed_types: + if isinstance(at, ModuleImportRaiser): + continue + allowed_types.append(at) + opt.allowed_types = tuple(allowed_types) + + valid_options[opt.key] = deepcopy(opt) + elif isinstance(opt, SetDefault): + # overwrite default of existing option. + if opt.key not in valid_options: + raise KeyError("Given key is not in valid_option.") + + if type(opt.default) not in valid_options[opt.key].allowed_types: + raise TypeError("Invalid default type") + valid_options[opt.key].default = opt.default + else: + raise TypeError("Please use `Option` to define options.") + + return valid_options
    + + + +
    +[docs] +class ShowOption(HelperBase): + """ + Behaves similar to dict, but will only accept a set of options that's + applicable to the helpee class. Intended use is to create a + subclass that would define valid options for helpee. + Options should be described by Option object. + Helps all the way up to initializing backend showables up to their backend + specific common routines. ShowOption and ShowManager in a sense. + """ + + __slots__ = ("_options",) + + _valid_options = {} + + _helps = None + + def __init__(self, helpee): + """ + Parameters + ---------- + helpee: object + """ + self._helpee = helpee + if not type(helpee).__qualname__.startswith(self._helps): + raise TypeError( + f"This show option is for {self._helps}. " + f"Given helpee is {type(helpee)}." + ) + self._options = {} + + def __repr__(self): + """ + Friendly info prints for show option. + + Parameters + ---------- + None + + Returns + ------- + description: str + """ + valid_and_current = [] + for vo in self._valid_option.values(): + valid = str(vo) + current = "" + if vo.key in self.keys(): + current = "current option: " + str(self[vo.key]) + valid_and_current.append(valid + current) + + header = [ + f"ShowOption for {self._helps}", + ] + return "\n".join(header + valid_and_current) + + def __setitem__(self, key, value): + """ + Sets option after checking its validity. + + Parameters + ---------- + key: str + value: object + + Returns + ------- + None + """ + if key in self._valid_options: + # valid type check + if not isinstance(value, self._valid_options[key].allowed_types): + raise TypeError( + f"{type(value)} is invalid value type for '{key}'. " + f"Details for '{key}':\n" + f"{self._valid_options[key]}" + ) + + # types are valid. let's add + self._options[key] = value + + else: + raise ValueError(f"{key} is an invalid option for {self._helps}.") + + def __getitem__(self, key): + """ + operator[] + + Parameters + ---------- + key: str or iterable + + Returns + ------- + items: object or dict + """ + if isinstance(key, str): + return self._options[key] + elif hasattr(key, "__iter__"): + items = {} + for k in key: + if k in self._options: + items[k] = self._options[k] + return items + else: + raise TypeError(f"Invalid key type for {type(self)}") + + def __contains__(self, key): + """Returns if current option contains given key. + + Parameters + ---------- + key: str + + Returns + ------- + contains: bool + """ + return key in self._options + +
    +[docs] + def get(self, key, default=None): + """ + Gets value from key and default. Similar to dict.get(), + but this is always safe, as it will always return None + + Parameters + ---------- + key: stir + default: object + + Returns + ------- + values: object + """ + if default is not None: + return self._options.get(key, default) + + # overwrite default with valid option's + default = getattr(self._valid_options.get(key, None), "default", None) + + return self._options.get(key, default)
    + + +
    +[docs] + def update(self, **kwargs): + """ + Calls __setitem__ iteratively for validity check. + + Parameters + ---------- + **kwargs: kwargs + + Returns + ------- + None + """ + for k, v in kwargs.items(): + self.__setitem__(k, v)
    + + +
    +[docs] + def valid_keys(self): + """ + Returns valid keys. + + Parameters + ---------- + None + + Returns + ------- + valid_keys: dict_keys + """ + return self._valid_options.keys()
    + + +
    +[docs] + def keys(self): + """ + Registered option keys. + + Parameters + ---------- + None + + Returns + ------- + keys: dict_keys + """ + return self._options.keys()
    + + +
    +[docs] + def values(self): + """ + Registered option values. + + Parameters + ---------- + None + + Returns + ------- + keys: dict_values + """ + return self._options.values()
    + + +
    +[docs] + def items(self): + """ + Registered option items. + + Parameters + ---------- + None + + Returns + ------- + items: dict_items + """ + return self._options.items()
    + + +
    +[docs] + def clear(self): + """ + Clears all the options. + + Parameters + ---------- + None + + Returns + ------- + None + """ + self._options.clear()
    + + +
    +[docs] + def pop(self, *args, **kwargs): + """ + Calls pop() on current options + + Parameters + ---------- + None + + Returns + ------- + value: object + """ + self._options.pop(*args, **kwargs)
    + + +
    +[docs] + def copy_valid_options(self, copy_to, keys=None): + """ + Copies valid option to other show_option. Simply iterates and tries. + + Parameters + ---------- + copy_to: ShowOption + keys: tuple or list + Can specify keys + + Returns + ------- + None + """ + if not isinstance(copy_to, ShowOption): + raise TypeError("copy_to should be a ShowOption") + valid_keys = copy_to.valid_keys() + + items = self[keys].items() if keys is not None else self.items() + + for key, value in items: + if key in valid_keys: + copy_to[key] = deepcopy(value) # is deepcopy necessary?
    + + + def _initialize_showable(self): + """ + Creates basic showable all the way up to backend common procedures. + + Parameters + ---------- + None + + Returns + ------- + showable: object + """ + raise NotImplementedError("Derived class must implement this method")
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/helpers/raise_if.html b/_modules/gustaf/helpers/raise_if.html new file mode 100644 index 000000000..c71b7efce --- /dev/null +++ b/_modules/gustaf/helpers/raise_if.html @@ -0,0 +1,585 @@ + + + + + + + + + + gustaf.helpers.raise_if — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.helpers.raise_if

    +"""gustaf/gustaf/helpers/raise_if.py.
    +
    +Collection of wrapper functions/classes that raises Error with certain
    +behavior
    +"""
    +
    +from typing import Any, Optional
    +
    +
    +
    +[docs] +def invalid_inherited_attr(attr_name, qualname, property_=False): + """Returns a function that would behave the same as given function, but + would raise AttributeError. This needs to be defined in class level. + + Parameters + ---------- + func: (function) + _description_ + qualname: (class) + _description_ + property_: (bool, optional) + is this function a property?. Defaults to False. + + Returns + ------- + raiser: function + behaves same as func if `property_` is correctly defined + """ + + def raiser(): + raise AttributeError( + f"{attr_name} is not supported from {qualname} " + "and its subclasses thereof." + ) + + if property_: + return property(raiser) + + else: + return raiser
    + + + +
    +[docs] +class ModuleImportRaiser: + """Mock imports optional modules if they are not installed. + + Class used to have better import error handling in the case that a + package package is not installed. This is necessary due to that some + packages are not a dependency of `gustaf`, but some parts require + them to function. Examples are `splinepy` and `vedo`. + """ + + def __init__(self, lib_name: str, error_message: Optional[str] = None): + original_message = "" + if error_message is not None: + original_message = f"\nOriginal error message - {error_message}" + self._message = str( + f"Cannot load {lib_name} package, on which requested " + "functionality depends. " + "Please refer to the installation instructions " + "[tataratat.github.io/gustaf] for more information." + f"{original_message}" + ) + + def __call__(self, *_args: Any, **_kwargs: Any) -> Any: + """Is called when the object is called by object(). + + Will notify the user, that the functionality is not accessible + and how to proceed to access the functionality. + """ + raise ImportError(self._message) + + def __getattr__(self, __name: str) -> Any: + """Is called when any attribute of the object is accessed by + object.attr. + + Will notify the user, that the functionality is not accessible + and how to proceed to access the functionality. + """ + if __name == "_ModuleImportRaiser__message": + return object.__getattr__(self, __name[-8:]) + else: + raise ImportError(self._message) + + def __setattr__(self, __name: str, __value: Any) -> None: + """ + Is called when any attribute of the object is set by object.attr = new. + Will notify the user, that the functionality is not accessible and how + to proceed to access the functionality. + """ + if __name == "_message": + object.__setattr__(self, __name, __value) + else: + raise ImportError(self._message) + + def __getitem__(self, key): + """Is called when the object is subscripted object[x]. + + Will notify the user, that the functionality is not accessible + and how to proceed to access the functionality. + """ + raise ImportError(self._message)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/io/default.html b/_modules/gustaf/io/default.html new file mode 100644 index 000000000..ae2794dfc --- /dev/null +++ b/_modules/gustaf/io/default.html @@ -0,0 +1,519 @@ + + + + + + + + + + gustaf.io.default — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.io.default

    +import pathlib
    +
    +from gustaf.io import meshio, mfem, mixd
    +
    +
    +
    +[docs] +def load(fname): + """Load function for all supported file formats. + + This function tries to guess the correct io module for the given file. + + Parameters + ----------- + fname: Union[str, pathlib.Path] + Name of the file to be loaded. + + Returns + -------- + MESH_TYPES: + Loaded mesh. + """ + extensions_to_load_functions = { + ".mixd": mixd.load, + ".mfem": mfem.load, + ".msh": meshio.load, + } + + fname = pathlib.Path(fname).resolve() + + if fname.suffix in extensions_to_load_functions: + return extensions_to_load_functions[fname.suffix](fname) + + else: + raise ValueError( + f"Failed to load given file with '{fname.suffix}' extension. " + "Valid extensions are: " + f"{tuple(extensions_to_load_functions.keys())}." + )
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/io/ioutils.html b/_modules/gustaf/io/ioutils.html new file mode 100644 index 000000000..ffdb36b30 --- /dev/null +++ b/_modules/gustaf/io/ioutils.html @@ -0,0 +1,536 @@ + + + + + + + + + + gustaf.io.ioutils — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.io.ioutils

    +"""gustaf/gustaf/io/ioutils.py.
    +
    +utils for lord load and his expected expertise, export.
    +"""
    +
    +import os
    +
    +
    +
    +[docs] +def abs_fname(fname): + """Checks if fname is abs. If not, returns abs. Tilde safe. + + Parameters + ----------- + fname: str + + Returns + -------- + abs_fname: str + Maybe same as fname, maybe not. + """ + if os.path.isabs(fname): + pass + # elif fname.startswith("~"): + elif "~" in fname: + fname = os.path.expanduser(fname) + else: + fname = os.path.abspath(fname) + + return fname
    + + + +
    +[docs] +def check_and_makedirs(fname): + """Checks if the directories of the path exists. If not, makedirs! + + Parameters + ----------- + fname: str + + Returns + -------- + None + """ + dirs = os.path.dirname(fname) + + if dirs == "": + return None + + if not os.path.isdir(dirs): + os.makedirs(dirs) + + return None
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/io/meshio.html b/_modules/gustaf/io/meshio.html new file mode 100644 index 000000000..3fe5ef3ad --- /dev/null +++ b/_modules/gustaf/io/meshio.html @@ -0,0 +1,674 @@ + + + + + + + + + + gustaf.io.meshio — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.io.meshio

    +"""Import a meshio based mesh,
    +
    +Export can only happen after it is possible to save and define boundaries in
    +gustaf.
    +"""
    +
    +import pathlib
    +
    +import numpy as np
    +
    +from gustaf.edges import Edges
    +from gustaf.faces import Faces
    +from gustaf.helpers.raise_if import ModuleImportRaiser
    +from gustaf.utils import log
    +from gustaf.vertices import Vertices
    +from gustaf.volumes import Volumes
    +
    +try:
    +    import meshio
    +except ModuleNotFoundError as err:
    +    meshio = ModuleImportRaiser("meshio", err)
    +
    +_meshio2gus = {
    +    "hexahedron": Volumes,
    +    "tetra": Volumes,
    +    "quad": Faces,
    +    "triangle": Faces,
    +    "line": Edges,
    +    "vertex": Vertices,
    +}
    +
    +
    +
    +[docs] +def load(fname): + """Load mesh in meshio format. Loads vertices and their connectivity. + Currently cannot process boundary. + + Note + ----- + This is more or less a direct copy from the original gustav implementation. + A lot of the meshio information are lost. When boundaries and multi-patch + definitions are added this needs to be revisited and extended. + + Parameters + ------------ + fname: str | pathlib.Path + + Returns + -------- + MESH_TYPES | List[MESH_TYPES] + """ + # fname sanity check + fname = pathlib.Path(fname) + if not (fname.exists() and fname.is_file()): + raise ValueError( + "The given file does not point to file. The given path is: " + f"{fname.resolve()}" + ) + + # load + meshio_mesh: meshio.Mesh = meshio.read(fname) + + # first get vertices + vertices = meshio_mesh.points + + # early exit if cells doesn't exist + if len(meshio_mesh.cells_dict) == 0: + return Vertices(vertices) + + meshes = [] + for element_type, elements in meshio_mesh.cells_dict.items(): + # skip unsupported + if element_type not in _meshio2gus: + log.warning( + f"`{element_type}`-elements are not supported in gustaf" + ) + continue + if element_type.startswith("vertex"): + meshes.append(Vertices(vertices[elements.ravel()])) + else: + meshes.append( + _meshio2gus[element_type](vertices, elements=elements) + ) + + return meshes[0] if len(meshes) == 1 else meshes
    + + + +
    +[docs] +def export(fname, mesh, submeshes=None, **kwargs): + """Export mesh elements and vertex data into meshio and use its write + function. The definition of submeshes with identical vertex coordinates + is possible. In that case vertex numbering and data from the main mesh + are used. For more export options, refer to meshio's documentation + https://github.com/nschloe/meshio . + + .. code-block:: python + + import gustaf + + # define coordinates + v = np.array( + [ + [0.0, 0.0, 0.0], + [1.0, 0.0, 0.0], + [0.0, 1.0, 0.0], + [1.0, 1.0, 0.0], + [0.0, 0.0, 1.0], + [1.0, 0.0, 1.0], + [0.0, 1.0, 1.0], + [1.0, 1.0, 1.0], + ] + ) + # define triangle connectivity + tf = np.array( + [ + [1, 0, 2], + [0, 1, 5], + [3, 2, 6], + [2, 0, 4], + [4, 5, 7], + [2, 3, 1], + [7, 5, 1], + [6, 7, 3], + [4, 6, 2], + [7, 6, 4], + ] + ) + # init tri faces + mesh = gus.Faces( + vertices=v, + faces=tf, + ) + gustaf.io.meshio.export(mesh, "tri-mesh.stl") + + Parameters + ------------ + fname: Union[str, pathlib.Path] + File to save the mesh in. + mesh: Edges, Faces or Volumes + Input mesh + submeshes: Iterable + Submeshes where the vertices are identical to the main mesh. The element + type can be identical to mesh.elements or lower-dimensional (e.g. + boundary elements). + **kwargs : Any + Any additional argument will be passed to the respective meshio `write` + function. See meshio docs for more information + + Raises + ------- + NotImplementedError: + For mesh types that are not implemented. + ValueError: + Raises a value error, if the vertices indexed in a subset are not + present in the main mesh. + """ + + # Mapping between meshio cell types and gustaf cell types + meshio_dict = { + "edges": "line", + "tri": "triangle", + "quad": "quad", + "tet": "tetra", + "hexa": "hexahedron", + } + + cells = [] + # Merge main mesh and submeshes in one list + meshes = mesh if isinstance(mesh, list) else [mesh] + + if submeshes is not None: + meshes.extend(submeshes) + + # Iterate the meshes and extract the element information in meshio format + for m in meshes: + whatami = m.whatami + if whatami not in meshio_dict: + raise NotImplementedError( + f"{whatami}-type meshes not supported (yet)." + ) + elif np.any(m.elements > len(m.vertices) - 1): + raise ValueError("Invalid vertex IDs in submesh connectivity.") + else: + cells.append((meshio_dict[whatami], m.elements)) + + # Export data to meshio and write file + meshio.Mesh( + points=mesh.vertices, + cells=cells, + point_data=mesh.vertex_data._saved, + ).write(fname, **kwargs)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/io/mfem.html b/_modules/gustaf/io/mfem.html new file mode 100644 index 000000000..deed20751 --- /dev/null +++ b/_modules/gustaf/io/mfem.html @@ -0,0 +1,688 @@ + + + + + + + + + + gustaf.io.mfem — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.io.mfem

    +"""gustaf/gustaf/io/mfem.py.
    +
    +io functions for mfem. Supports simple linear elements (straight meshes)
    +For detailed information, see: https://mfem.org/mesh-
    +format-v1.0/#straight-meshes
    +"""
    +
    +import numpy as np
    +
    +from gustaf import settings
    +from gustaf.faces import Faces
    +from gustaf.volumes import Volumes
    +
    +geometry_types = {
    +    "POINT": 0,
    +    "SEGMENT": 1,
    +    "TRIANGLE": 2,
    +    "SQUARE": 3,
    +    "TETRAHEDRON": 4,
    +    "CUBE": 5,
    +    "PRISM": 6,
    +}
    +
    +
    +
    +[docs] +def load(fname): + """Load mesh in MFEM format. Loads vertices and their connectivity. + Currently cannot process boundary. + + Parameters + ------------ + fname: str + + Returns + ------------ + mesh + """ + + def extract_values(fname, start_index, n_lines, total_lines, dtype): + """Extract information from file. Reads [n_lines] lines from file + [fname] starting at line [start_index] and returns array of type + [dtype]. + + Parameters + ------------ + fname: str + start_index: int + n_lines: int + total_lines: int + Number of total lines of file + dtype: (NumPy) data type + + Returns + ------------ + NumPy Array + """ + end_index = total_lines - (start_index + n_lines + 2) + return np.genfromtxt( + fname, + delimiter=" ", + skip_header=start_index, + skip_footer=end_index, + dtype=dtype, + ) + + with open(fname) as f: + lines = f.readlines() + total_lines = len(lines) + + # Read values of keywords + keywords = ["dimension", "elements", "boundary", "vertices"] + indices = [lines.index(f"{keyword}\n") for keyword in keywords] + dimension, n_elements, n_boundaries, n_vertices = ( + int(lines[index + 1]) for index in indices + ) + vdim = int(lines[indices[-1] + 2]) + # Extract values + elements = extract_values( + fname, indices[1] + 2, n_elements, total_lines, settings.INT_DTYPE + ) + if elements.shape[0] != n_elements: + raise ValueError("Number of elements do not match.") + boundary = extract_values( + fname, + indices[2] + 2, + n_boundaries, + total_lines, + settings.INT_DTYPE, + ) + if boundary.shape[0] != n_boundaries: + raise ValueError("Number of boundaries do not match.") + vertices = extract_values( + fname, + indices[3] + 3, + n_vertices, + total_lines, + settings.FLOAT_DTYPE, + ) + if vertices.shape != (n_vertices, vdim): + raise ValueError("Number of vertices do not match.") + + connectivity = elements[:, 2:] + if dimension == 2: + mesh = Faces(vertices=vertices, faces=connectivity) + elif dimension == 3: + mesh = Volumes(vertices=vertices, volumes=connectivity) + + return mesh
    + + + +
    +[docs] +def export(fname, mesh): + """Export mesh in MFEM format. Supports 2D triangle and quadrilateral + meshes. Does not support different element attributes or difference in + vertex dimension and mesh dimension. + + Parameters + ------------ + fname: str + mesh: Faces + + Returns + ------------ + None + """ + # Basic infos + nvertices, dim = mesh.vertices.shape + + def format_array(array): + """Format NumPy array into string. Each entry in a row is separated by + a blank space and every row is separated by a new line. + + Parameters + ------------ + array: NumPy array + + Returns + ------------ + str + """ + row_strings = [" ".join(map(str, row)) for row in array] + return "\n".join(row_strings) + + # Export 2D mesh + if dim == 2: + # Elements + element_attribute = 1 # Other numbers not yet supported + elements = mesh.elements + n_elements, n_element_vertices = elements.shape + if n_element_vertices == 3: + geometry_type = geometry_types["TRIANGLE"] + elif n_element_vertices == 4: + geometry_type = geometry_types["SQUARE"] + else: + raise NotImplementedError( + "Sorry, we cannot export mesh with elements " + f"with {n_element_vertices} vertices." + ) + e = np.ones((n_elements, 1), dtype=settings.INT_DTYPE) + elements_array = np.hstack( + (element_attribute * e, geometry_type * e, elements) + ) + elements_array_string = format_array(elements_array) + elements_string = f"elements\n{n_elements}\n" + elements_string += f"{elements_array_string}\n\n" + + # Boundary + edges = mesh.edges() + nboundary_edges = sum(map(len, mesh.BC.values())) + boundary_array = np.empty( + (nboundary_edges, 4), dtype=settings.INT_DTYPE + ) + startrow = 0 + # Add boundary one by one as SEGMENTs + for bid, edgeids in mesh.BC.items(): + nedges = len(edgeids) + e = np.ones(nedges).reshape(-1, 1) + vertex_list = edges[edgeids, :] + boundary_array[startrow : (startrow + nedges), :] = np.hstack( + (int(bid) * e, geometry_types["SEGMENT"] * e, vertex_list) + ) + startrow += nedges + + boundary_array_string = format_array(boundary_array) + boundary_string = f"boundary\n{nboundary_edges}\n" + boundary_string += f"{boundary_array_string}\n\n" + + # Vertices + vdim = 2 # Currently only option + vertices_array_string = format_array(mesh.vertices) + vertices_string = f"vertices\n{nvertices}\n{vdim}\n" + vertices_string += f"{vertices_array_string}" + + with open(fname, "w") as f: + f.write("MFEM mesh v1.0\n\n") + f.write(f"dimension\n{dim}\n\n") + f.write(elements_string) + f.write(boundary_string) + f.write(vertices_string) + + # Export 3D mesh + else: + raise NotImplementedError( + f"Sorry, we cannot export mesh of dimension {dim}." + )
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/io/mixd.html b/_modules/gustaf/io/mixd.html new file mode 100644 index 000000000..721995b3c --- /dev/null +++ b/_modules/gustaf/io/mixd.html @@ -0,0 +1,798 @@ + + + + + + + + + + gustaf.io.mixd — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.io.mixd

    +"""gustaf/gustaf/io/mixd.py.
    +
    +io functions for mixd.
    +"""
    +
    +import os
    +import struct
    +
    +import numpy as np
    +
    +from gustaf import settings
    +from gustaf.faces import Faces
    +from gustaf.io.ioutils import abs_fname, check_and_makedirs
    +from gustaf.utils import log
    +from gustaf.utils.arr import close_rows
    +from gustaf.volumes import Volumes
    +
    +
    +
    +[docs] +def load( + simplex=True, + volume=False, + fname=None, + mxyz=None, + mien=None, + mrng=None, +): + """mixd load. To avoid reading minf, all the crucial info can be given as + params. Default input will try to import `mxyz`, `mien`, `mrng` from + current location and assumes mesh is 2D triangle. + + Parameters + ----------- + simplex: bool + Default is True. Is it triangle based? + volume: bool + Default is False. Is it 3D? + fname: str + Default is None. Specify your mixd file names with ".xns" postfix. + Ex) "gustaf.xns" will try to load "gustaf.mxyz", "gustaf.mien", + and "gustaf.mrng" + mxyz: str + Default is None. + mien: str + Default is None. + mrng: str + Default is None. This is optional. + + Returns + -------- + mesh: Faces or Volumes + """ + # figure out input type + specified_input = mxyz is not None # bare minimum input + fname_input = (fname is not None) and not specified_input + default_input = not (fname_input or specified_input) + + if default_input: + mxyz = "mxyz" + mien = "mien" + mrng = "mrng" + + elif fname_input: + fname = abs_fname(fname) + fbase, ext = os.path.splitext(fname) + + if os.path.basename(fbase) == "_": + fbase = fbase[:-1] + else: + fbase += "." + + mxyz = fbase + "mxyz" + mien = fbase + "mien" + mrng = fbase + "mrng" + + # vertices + vertices = np.fromfile(mxyz, dtype=">d").astype(np.float64) + + # connec + connec = None + try: + connec = (np.fromfile(mien, dtype=">i") - 1).astype(np.int32) + except BaseException: + log.debug(f"mien file, `{mien}`, does not exist. Skipping.") + + # boundary conditions + bcs = {} + try: + bcs_in = np.fromfile(mrng, dtype=">i").astype(np.int32) # flattened + uniq_bcs_in = np.unique(bcs_in) + uniq_bcs_in = uniq_bcs_in[uniq_bcs_in > 0] # keep only natural nums + sub_elem_ids = np.arange(bcs_in.size) + + for ubci in uniq_bcs_in: + bcs.update({str(ubci): sub_elem_ids[bcs_in == ubci]}) + + except BaseException: + log.debug(f"mrng file, `{mrng}`, does not exist. Skipping.") + + # reshape vertices + vertices = vertices.reshape(-1, 3) if volume else vertices.reshape(-1, 2) + + # reshape connec + if connec is not None: + ncol = 3 if simplex and not volume else 4 + ncol = 8 if ncol == 4 and volume and not simplex else ncol + + connec = connec.reshape(-1, ncol) + + mesh = Volumes(vertices, connec) if volume else Faces(vertices, connec) + + # bc + if len(bcs) != 0: + mesh.BC = bcs + + return mesh
    + + + +
    +[docs] +def export( + fname, + mesh, + space_time=False, + dual=False, +): + """Export in mixd format. Supports triangle, quadrilateral, tetrahedron, + and hexahedron semi-discrete and (flat) space-time mesh output. + + Parameters + ----------- + mesh: Faces or Volumes + fname: str + space_time: bool + Export Mesh as Space-Time Slab for discontinuous space-time + dual: bool + Includes dual-subelement information. + + Returns + -------- + None + """ + # did you give us an acceptable mesh? + acceptable_shapes = ["tri", "quad", "tet", "hexa"] + whatami = mesh.whatami + + if whatami not in acceptable_shapes: + raise NotImplementedError( + f"Sorry, we can't export {whatami}-shape in mixd format." + ) + + # prepare export location + fname = abs_fname(fname) + check_and_makedirs(fname) + + # basic infos + dim = mesh.vertices.shape[1] + big_endian_int = ">i" + big_endian_double = ">d" + + # prep files + fbase, ext = os.path.splitext(fname) + + if ext.startswith(".xns"): + # frequently used case in practice. no base export + if os.path.basename(fbase) == "_": + fdir = os.path.dirname(fbase) + vert_file = os.path.join(fdir, "mxyz") + connec_file = os.path.join(fdir, "mien") + bc_file = os.path.join(fdir, "mrng") + info_file = os.path.join(fdir, "minf") + dual_file = os.path.join(fdir, "dual") + + else: + fbase += "." + vert_file = fbase + "mxyz" + connec_file = fbase + "mien" + bc_file = fbase + "mrng" + info_file = fbase + "minf" + dual_file = fbase + "dual" + + else: + raise NotImplementedError("`mixd` format only supports xns.") + + # write v + with open(vert_file, "wb") as vf: + for v in mesh.vertices.ravel(): + vf.write(struct.pack(big_endian_double, v)) + + if space_time: + for v in mesh.vertices.ravel(): + vf.write(struct.pack(big_endian_double, v)) + + # write connec + with open(connec_file, "wb") as cf: + for c in mesh.elements.ravel() + 1: + cf.write(struct.pack(big_endian_int, c)) + + # get boundaries of each element - subelement interface array + sub_interface = make_mrng(mesh) + + # write bc first - after writing it, we can modify inplace for dual. + with open(bc_file, "wb") as bf: + for b in sub_interface: + bf.write(struct.pack(big_endian_int, b)) + + # if dual is True, we fill dual infos. + if dual: + sub_elements = mesh.to_subelements(False) + # this should be always dividable without remnants + n_subelem_per_elem, rem = divmod( + len(sub_elements.elements), len(mesh.elements) + ) + if rem != 0: + raise ValueError( + "something went wrong with subelement creation." + "Please report this issue, thank you!" + ) + + # get intersection - can use this info to determine duals + _, _, _, intersections = close_rows( + sub_elements.centers(), settings.TOLERANCE, True + ) + + # loop intersections and look for 2 intersections + for i, intersection in enumerate(intersections): + n_inter = len(intersection) + + # we modify interface only if there're 2 intersections. + if n_inter == 2: + # intersection is always sorted. + # we don't want dual to point to itself + dual_id = 0 if i != intersection[0] else 1 + + # get element number and apply fortran's offset, 1 + sub_interface[i] = -int( + intersection[dual_id] // n_subelem_per_elem + 1 + ) + continue + + # intersection should be at most 2. Otherwise, it either means + # that you have a bad mesh or to big tolerance + if n_inter > 2: + raise ValueError( + f"{i}-th subelement overlaps more than once. " + "Please check your elements or decrease " + "gustaf.settings.TOLERANCE." + ) + + # write dual + with open(dual_file, "wb") as df: + for d in sub_interface: + df.write(struct.pack(big_endian_int, d)) + + # write info + with open(info_file, "w") as infof: # if and inf... just can't + infof.write(f"# dim: {dim}\n") + infof.write(f"# mesh type: {whatami}\n\n") + + st_factor = 2 if space_time else 1 + infof.write(f"nn {int(mesh.vertices.shape[0] * st_factor)}\n") + infof.write(f"ne {int(mesh.elements.shape[0])}\n") + infof.write(f"nsd {dim}\n") + infof.write(f"nen {int(mesh.elements.shape[1] * st_factor)}\n") + + if space_time: + infof.write("space-time on\n\n\n") + else: + infof.write("semi-discrete on\n\n\n") + + # BC guide + infof.write("# boundary name : referenced number.\n") + for i, bname in enumerate(mesh.BC.keys()): + infof.write(f"# {bname} : {i + 1}\n") + + # signature + infof.write("\n\n\n# MIXD generated using `gustaf`.\n")
    + + + +
    +[docs] +def make_mrng(mesh): + """ + Builds and return mrng array based on `mesh.BC` + Supports `Faces` and `Volumes`. + + Parameters + ----------- + mesh: Faces or Volumes + Number of participating elements + + Returns + -------- + boundaries : ndarray + The mrng-array. + """ + + # determine number of sub elements + whatami = mesh.whatami + nbelem = 3 + + if whatami.startswith("quad") or whatami.startswith("tet"): + nbelem += 1 + elif whatami.startswith("hexa"): + nbelem += 3 + + # init boundaries with 0, as boundaries are marked with positive numbers + # staring from 1 and dual infos with negative values, starting with -1 + boundaries = np.empty(mesh.elements.shape[0] * nbelem, dtype=int) + boundaries[:] = 0 + + for i, belem_ids in enumerate(mesh.BC.values()): + boundaries[belem_ids] = i + 1 # bid starts at 1 + + return boundaries
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/io/nutils.html b/_modules/gustaf/io/nutils.html new file mode 100644 index 000000000..a5780040d --- /dev/null +++ b/_modules/gustaf/io/nutils.html @@ -0,0 +1,642 @@ + + + + + + + + + + gustaf.io.nutils — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.io.nutils

    +"""gustaf/gustaf/io/nutils.py.
    +
    +io functions for nutils.
    +"""
    +
    +import numpy as np
    +
    +from gustaf.faces import Faces
    +from gustaf.io import mixd
    +from gustaf.io.ioutils import abs_fname, check_and_makedirs
    +from gustaf.volumes import Volumes
    +
    +
    +
    +[docs] +def load(fname): + """nutils load. + Loads a nutils (np.savez) file and returns a Gustaf Mesh. + + Parameters + ----------- + fname: str + The npz file needs the following keys: + nodes, cnodes, coords, tags, btags, ptags. + + Returns + -------- + mesh: Faces or Volumes + """ + npz_file = np.load(fname, allow_pickle=True) + nodes = npz_file["nodes"] + _ = npz_file["cnodes"] + coords = npz_file["coords"] + _ = npz_file["tags"].item() + btags = npz_file["btags"].item() + _ = npz_file["ptags"].item() + + if nodes.shape[0] == 0: + raise TypeError("Can not find nodes. Check nutils mesh description.") + if coords.shape[0] == 0: + raise TypeError("Can not find coords. Check nutils mesh description.") + + vertices = coords + + # connec + simplex = True + connec = nodes + + volume = vertices.shape[1] != 2 + + # reshape connec + try: + ncol = 3 if simplex and not volume else 4 + connec = connec.reshape(-1, ncol) + mesh = Volumes(vertices, connec) if volume else Faces(vertices, connec) + except BaseException: + raise RuntimeError( + "Can not generate a mesh from the nutils input." + "Check nutils mesh description." + ) + + mesh.BC = btags + return mesh
    + + + +
    +[docs] +def export(fname, mesh): + """Export in Nutils format. Files are saved as np.savez(). + Supports triangle,and tetrahedron Meshes. + + Parameters + ----------- + fname: str + mesh: Faces or Volumes + + Returns + -------- + None + """ + + dic = to_nutils_simplex(mesh) + + # prepare export location + fname = abs_fname(fname) + check_and_makedirs(fname) + + np.savez(fname, **dic)
    + + + +
    +[docs] +def to_nutils_simplex(mesh): + """Converts a Gustaf_Mesh to a Dictionary, which can be interpreted + by ``nutils.mesh.simplex(**to_nutils_simplex(mesh))``. Only works for + Triangles and Tetrahedrons! + + Parameters + ----------- + mesh: Faces or Volumes + + Returns + -------- + dic_to_nutils: dict + """ + + vertices = mesh.vertices + faces = mesh.faces + whatami = mesh.whatami + + # In 2D, element = face. In 3D, element = volume. + if whatami.startswith("tri"): + dimension = 2 + permutation = [1, 2, 0] + elements = faces + elif whatami.startswith("tet"): + dimension = 3 + permutation = [2, 3, 1, 0] + volumes = mesh.volumes + elements = volumes + else: + raise TypeError("Only Triangle and Tetrahedrons are accepted.") + + dic_to_nutils = {} + + # Sort the Node IDs for each Element. + sort_array = np.argsort(elements, axis=1) + elements_sorted = np.take_along_axis(elements, sort_array, axis=1) + + # Let`s get the Boundaries + bcs = {} + bcs_in = mixd.make_mrng(mesh) + bcs_in = np.ndarray.reshape( + bcs_in, (int(len(bcs_in) / (dimension + 1)), (dimension + 1)) + ) + + bound_id = np.unique(bcs_in) + bound_id = bound_id[bound_id > 0] + + # Reorder the mrng according to nutils permutation: swap columns + bcs_in[:, :] = bcs_in[:, permutation] + + # Let's reorder the bcs file with the sort_array + bcs_sorted = np.take_along_axis(bcs_in, sort_array, axis=1) + + for bi in bound_id: + bcs[str(bi)] = np.argwhere(bcs_sorted == bi) + + dic_to_nutils.update( + { + "nodes": elements_sorted, + "cnodes": elements_sorted, + "coords": vertices, + "tags": {}, + "btags": bcs, + "ptags": {}, + } + ) + + return dic_to_nutils
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/show.html b/_modules/gustaf/show.html new file mode 100644 index 000000000..eef7eba18 --- /dev/null +++ b/_modules/gustaf/show.html @@ -0,0 +1,1016 @@ + + + + + + + + + + gustaf.show — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.show

    +"""gustaf/gustaf/show.py.
    +
    +Everything related to show/visualization.
    +"""
    +
    +import sys
    +
    +import numpy as np
    +
    +from gustaf import utils
    +
    +try:
    +    from gustaf.helpers.notebook import K3DPlotterN
    +except ImportError as err:
    +    from gustaf.helpers.raise_if import ModuleImportRaiser
    +
    +    K3DPlotterN = ModuleImportRaiser("IPython and ipywidgets", err)
    +
    +# @linux it raises error if vedo is imported inside the function.
    +try:
    +    import vedo
    +
    +    # class name UGrid is deprecated since 2023.5.0
    +    # After *.5.1 release, we could remove this part by bumping min. version
    +    # requirement
    +    if vedo.__version__ < "2023.5.0":
    +        vedoUGrid = vedo.UGrid
    +    else:
    +        vedoUGrid = vedo.UnstructuredGrid
    +except ImportError as err:
    +    # overwrites the vedo module with an object which will throw an error
    +    # as soon as it is used the first time. This means that any non vedo
    +    # functionality works as before, but as soon as vedo is used a
    +    # comprehensive exception will be raised which is understandable in
    +    # contrast to the possible errors previously possible
    +    from gustaf.helpers.raise_if import ModuleImportRaiser
    +
    +    vedo = ModuleImportRaiser("vedo", err)
    +    vedoUGrid = vedo
    +
    +
    +# enable `gus.show()`
    +# taken from https://stackoverflow.com/questions/1060796/callable-modules
    +# will use this until this module is renamed
    +class _CallableShowDotPy(sys.modules[__name__].__class__):
    +    def __call__(self, *args, **kwargs):
    +        """call show()"""
    +        return show(*args, **kwargs)
    +
    +
    +sys.modules[__name__].__class__ = _CallableShowDotPy
    +
    +
    +# True if the current environment is IPython else False.
    +try:
    +    from IPython import get_ipython
    +
    +    is_ipython = get_ipython() is not None
    +except ImportError:
    +    is_ipython = False
    +
    +
    +
    +[docs] +def show(*args, **kwargs): + """`vedo.show` wrapper. Each args represent one section of window. In other + words len(args) == N, where N corresponds to the parameter for vedo.show(). + + Parameters + ----------- + *args: Union[List[Union[gustaf_obj, vedo_obj]], Dict[str, Any]]] + """ + # vedo plotter parameter + N = len(args) + offs = kwargs.get("offscreen", False) + interact = kwargs.get("interactive", True) + plt = kwargs.get("vedoplot", None) + skip_clear = kwargs.get("skip_clear", False) + close = kwargs.get("close", None) + size = kwargs.get("size", "auto") + cam = kwargs.get("cam", None) + title = kwargs.get("title", "gustaf") + background = kwargs.get("background", "white") + return_show_list = kwargs.get("return_showable_list", False) + axes = kwargs.get("axes", None) + + def clear_vedo_plotter(plotter, num_renderers, skip_cl=skip_clear): + """enough said.""" + # for whatever reason it is desired + if skip_cl: + return None + + # tmp workaround for linux + vedo_renderers = getattr(plotter, "renderers", None) + if vedo_renderers is not None and len(vedo_renderers) < num_renderers: + return None + + for i in range(num_renderers): + plotter.clear(at=i, deep=True) + + return None + + def cam_tuple_to_list(dict_cam): + """if entity is tuple, turns it into list.""" + if dict_cam is None: + return None + + for key, value in dict_cam.items(): + if isinstance(value, tuple): + dict_cam[key] = list(value) + + return dict_cam + + # get plotter + if plt is None: + if is_ipython and vedo.settings.default_backend == "k3d": + vedo.settings.backend_autoclose = False + plt = K3DPlotterN(N, size, background) + else: + if is_ipython: + utils.log.warning( + "Gustaf plotting in notebooks is only supported with k3d" + "backend. To use this backend, set " + "vedo.settings.default_backend = 'k3d' in your notebook." + " Using the default backend might give unexpected results " + "and errors." + ) + plt = vedo.Plotter( + N=N, + sharecam=False, + offscreen=offs, + size=size, + title=title, + bg=background, + ) + + else: + if is_ipython: + utils.log.warning( + "Please do not provide a plotter in IPython applications." + "This will produce an error shortly." + ) + # check if plt has enough Ns + trueN = np.prod(plt.shape) + clear_vedo_plotter(plt, trueN) # always clear. + if trueN != N: + utils.log.warning( + "Number of args exceed given vedo.Plotter's capacity.", + "Assigning a new one", + ) + title = plt.title + if close: # only if it is explicitly stated + plt.close() # Hope that this truly releases.. + # assign a new one + plt = vedo.Plotter( + N=N, + sharecam=False, + offscreen=offs, + size=size, + title=title, + bg=background, + ) + + # loop and plot + for i, arg in enumerate(args): + # form valid input type. + if isinstance(arg, dict): + show_list = list(arg.values()) + elif isinstance(arg, list): + show_list = arg.copy() + else: + # raise TypeError( + # "For vedo_show, only list or dict is valid input") + utils.log.debug( + "one of args for show_vedo is neither `dict` nor", + "`list`. Putting it naively into a list.", + ) + show_list = [arg] + + # quick check if the list is gustaf or non-gustaf + # if gustaf, make it vedo-showable. + # if there's spline, we need to pop the element and + # extend showables to the list. + # A show_list is a list to be plotted into a single sub frame of the + # plot + list_of_showables = [] + for sl in show_list: + if not isinstance(sl, list): + sl = [sl] # noqa: PLW2901 + for _k, item in enumerate(sl): + if hasattr(item, "showable"): + tmp_showable = item.showable(**kwargs) + # splines return dict + # - maybe it is time to do some typing.. + if isinstance(tmp_showable, dict): + # add to extend later + list_of_showables.extend(list(tmp_showable.values())) + else: + # replace gustaf_obj with vedo_obj. + list_of_showables.append(tmp_showable) + else: + list_of_showables.extend(sl) + # set interactive to true at last element + if int(i + 1) == len(args): + plt.show( + list_of_showables, + at=i, + interactive=interact, + camera=cam_tuple_to_list(cam), + axes=axes, + ) + + else: + plt.show( + list_of_showables, + at=i, + interactive=False, + camera=cam_tuple_to_list(cam), + axes=axes, + ) + + if is_ipython: + plt.display(close=close) + return None + + if interact and not offs: + # only way to ensure memory is released + clear_vedo_plotter(plt, np.prod(plt.shape)) + + if close or close is None: # explicitly given or None. + # It seems to leak some memory, but here it goes. + plt.close() # if i close it, this cannot be reused... + plt = None + if return_show_list: + return (plt, list_of_showables) + else: + return plt
    + + + +
    +[docs] +def make_showable(obj, as_dict=False, **kwargs): + """Generates a vedo obj based on `kind` attribute from given obj, as well + as show_options. + + Parameters + ----------- + obj: gustaf obj + as_dict: bool + If True, returns vedo objects in a dict. Corresponding main objects will + be available with ["main"] key. Else, returns vedo.Assembly object, + where all the objects are grouped together. + **kwargs: kwargs + Will try to overwrite applicable items. + + Returns + -------- + vedo_obj: vedo obj + """ + # in case kwargs are defined, we will make a copy of the object and + # try to overwrite all the applicable kwargs. + if kwargs: + # keep original ones and assign new show_options temporarily + orig_show_options = obj.show_options + obj._show_options = obj.__show_option__(obj) + orig_show_options.copy_valid_options(obj.show_options) + for key, value in kwargs.items(): + try: + obj.show_options[key] = value + except BaseException: + utils.log.debug( + f"Skipping invalid option {key} for " + f"{obj.show_options._helps}" + ) + continue + + # minimal-initialization of vedo objects + vedo_obj = obj.show_options._initialize_showable() + # as dict? + if as_dict: + return_as_dict = {} + + # set common values. Could be a perfect place to try :=, but we want to + # support p3.6. + c = obj.show_options.get("c", None) + if c is not None: + vedo_obj.c(c) + + alpha = obj.show_options.get("alpha", None) + if alpha is not None: + vedo_obj.alpha(alpha) + + lighting = obj.show_options.get("lighting", None) + if lighting is not None: + vedo_obj.lighting(lighting) + + vertex_ids = obj.show_options.get("vertex_ids", False) + element_ids = obj.show_options.get("element_ids", False) + # special treatment for vertex + if obj.kind.startswith("vertex"): + vertex_ids = vertex_ids | element_ids + if element_ids: + utils.log.debug( + "`element_ids` option is True for Vertices. Overwriting it as" + "vertex_ids." + ) + element_ids = False + if vertex_ids: + # use vtk font. supposedly faster. And differs from cell id. + vertex_ids = vedo_obj.labels("id", on="points", font="VTK") + if not as_dict: + vedo_obj += vertex_ids + else: + return_as_dict["vertex_ids"] = vertex_ids + if element_ids: + # should only reach here if this obj is not vertex + element_ids = vedo.Points(obj.centers()).labels("id", on="points") + if not as_dict: + vedo_obj += element_ids + else: + return_as_dict["element_ids"] = element_ids + + # data plotting + data = obj.show_options.get("data", None) + vertex_data = obj.vertex_data.as_scalar(data, None) + if data is not None and vertex_data is not None: + # transfer data + if obj.kind.startswith("edge"): + vedo_obj.pointdata[data] = vertex_data[obj.edges].reshape( + -1, vertex_data.shape[1] + ) + else: + vedo_obj.pointdata[data] = vertex_data + + # form cmap kwargs for init + cmap_keys = ("vmin", "vmax") + cmap_kwargs = obj.show_options[cmap_keys] + # set a default cmap if needed + cmap_kwargs["input_cmap"] = obj.show_options.get("cmap", "plasma") + cmap_kwargs["alpha"] = obj.show_options.get("cmap_alpha", 1) + # Discrete set of colors (vedo default is 256) + cmap_kwargs["n_colors"] = obj.show_options.get("cmap_n_colors", 256) + # add data + cmap_kwargs["input_array"] = data + + # set cmap + # pass input_cmap as positional arg to support 2023.4.3. + # arg name changed in 2023.4.4 + vedo_obj.cmap(cmap_kwargs.pop("input_cmap"), **cmap_kwargs) + + # at last, scalarbar + sb_kwargs = obj.show_options.get("scalarbar", None) + if sb_kwargs is not None and sb_kwargs is not False: + sb_kwargs = {} if isinstance(sb_kwargs, bool) else sb_kwargs + vedo_obj.add_scalarbar(**sb_kwargs) + + sb3d_kwargs = obj.show_options.get("scalarbar3d", None) + if sb3d_kwargs is not None and sb3d_kwargs is not False: + sb3d_kwargs = {} if isinstance(sb3d_kwargs, bool) else sb3d_kwargs + vedo_obj.add_scalarbar3d(**sb3d_kwargs) + + elif data is not None and vertex_data is None: + utils.log.debug(f"No vertex_data named '{data}' for {obj}. Skipping") + + # arrow plots - this is independent from data plotting. + arrow_data = obj.show_options.get("arrow_data", None) + # will raise if data is scalar + arrow_data_value = obj.vertex_data.as_arrow(arrow_data, None, True) + if arrow_data is not None and arrow_data_value is not None: + from gustaf.create.edges import from_data + + # we are here because this data is not a scalar + # is showable? + if arrow_data_value.shape[1] not in (2, 3): + raise ValueError( + "Only 2D or 3D data can be shown.", + f"Requested data is {arrow_data_value.shape[1]}", + ) + + as_edges = from_data( + obj, + arrow_data_value, + obj.show_options.get("arrow_data_scale", None), + data_norm=obj.vertex_data.as_scalar(arrow_data), + ) + arrows = vedo.Arrows( + as_edges.vertices[as_edges.edges], + c=obj.show_options.get("arrow_data_color", "plasma"), + ) + if not as_dict: + vedo_obj += arrows + else: + return_as_dict["arrow_data"] = arrows + + axes_kw = obj.show_options.get("axes", None) + # need to explicitly check if it is false + if axes_kw is not None and axes_kw is not False: + axes_kw = {} if isinstance(axes_kw, bool) else axes_kw + axes = vedo.Axes(vedo_obj, **axes_kw) + if not as_dict: + vedo_obj += axes + else: + return_as_dict["axes"] = axes + + # set back temporary show_options if needed + if kwargs: + obj._show_options = orig_show_options + + if not as_dict: + return vedo_obj + else: + return_as_dict["main"] = vedo_obj + return return_as_dict
    + + + +# possibly relocate, is this actually used? +# could not find any usage in this repo +
    +[docs] +def interpolate_vedo_dictcam(cameras, resolutions, spline_degree=1): + """Interpolate between vedo dict cameras. + + Parameters + ------------ + cameras: list or tuple + resolutions: int + spline_degree: int + if > 1 and splinepy is available and there are more than two cameras, + we interpolate all the entries using spline. + + Returns + -------- + interpolated_cams: list + """ + try: + import splinepy + + spp = True + + except ImportError: + spp = False + + # quick type check loop + cam_keys = ["pos", "focalPoint", "viewup", "distance", "clippingRange"] + for cam in cameras: + if not isinstance(cam, dict): + raise TypeError("Only `dict` description of vedo cam is allowed.") + else: + for key in cam_keys: + if cam[key] is None: + raise ValueError( + f"One of the camera does not contain `{key}` info" + ) + + interpolated_cams = [] + total_cams = int(resolutions) * (len(cameras) - 1) + + if spp and spline_degree > 1 and len(cameras) > 2: + if spline_degree > len(cameras): + raise ValueError( + "Not enough camera to interpolate with " + f"spline degree {spline_degree}" + ) + + ps = [] + fs = [] + vs = [] + ds = [] + cs = [] + for cam in cameras: + ps.append(list(cam[cam_keys[0]])) + fs.append(list(cam[cam_keys[1]])) + vs.append(list(cam[cam_keys[2]])) + ds.append([float(cam[cam_keys[3]])]) + cs.append(list(cam[cam_keys[4]])) + + interpolated = {} + for i, prop in enumerate([ps, fs, vs, ds, cs]): + i_spline = splinepy.BSpline() + i_spline.interpolate_curve( + query_points=prop, + degree=spline_degree, + save_query=False, + ) + interpolated[cam_keys[i]] = i_spline.sample([total_cams]) + + for i in range(total_cams): + interpolated_cams.append( + { + cam_keys[0]: interpolated[cam_keys[0]][i].tolist(), + cam_keys[1]: interpolated[cam_keys[1]][i].tolist(), + cam_keys[2]: interpolated[cam_keys[2]][i].tolist(), + cam_keys[3]: interpolated[cam_keys[3]][i][0], # float? + cam_keys[4]: interpolated[cam_keys[4]][i].tolist(), + } + ) + + else: + i = 0 + for start_cam, end_cam in zip(cameras[:-1], cameras[1:]): + if i == 0: + interpolated = [ + np.linspace( + start_cam[ckeys], + end_cam[ckeys], + resolutions, + ).tolist() + for ckeys in cam_keys + ] + + else: + interpolated = [ + np.linspace( + start_cam[ckeys], + end_cam[ckeys], + int(resolutions + 1), + )[1:].tolist() + for ckeys in cam_keys + ] + + i += 1 + + for j in range(resolutions): + interpolated_cams.append( + { + cam_keys[0]: interpolated[0][j], + cam_keys[1]: interpolated[1][j], + cam_keys[2]: interpolated[2][j], + cam_keys[3]: interpolated[3][j], # float? + cam_keys[4]: interpolated[4][j], + } + ) + + return interpolated_cams
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/utils/arr.html b/_modules/gustaf/utils/arr.html new file mode 100644 index 000000000..22951a6e0 --- /dev/null +++ b/_modules/gustaf/utils/arr.html @@ -0,0 +1,1134 @@ + + + + + + + + + + gustaf.utils.arr — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.utils.arr

    +"""gustaf/gustaf/utils/arr.py.
    +
    +Useful functions for array / point operations. Named `arr`, since
    +`array` is python library and it sounds funny.
    +"""
    +
    +import numpy as np
    +
    +from gustaf import settings
    +from gustaf.helpers.raise_if import ModuleImportRaiser
    +
    +has_funi = has_napf = has_scipy = False
    +try:
    +    import funi
    +
    +    has_funi = True
    +except ImportError:
    +    funi = ModuleImportRaiser("funi")
    +try:
    +    import napf
    +
    +    has_napf = True
    +except ImportError:
    +    napf = ModuleImportRaiser("napf")
    +try:
    +    import scipy
    +
    +    has_scipy = True
    +except ImportError:
    +    scipy = ModuleImportRaiser("scipy")
    +
    +
    +
    +[docs] +def make_c_contiguous(array, dtype=None): + """Make given array like object a c contiguous np.ndarray. dtype is + optional. If None is given, just returns None. + + Parameters + ----------- + array: array-like + dtype: type or str + (Optional) `numpy` interpretable type or str, describing type. + + Returns + -------- + c_contiguous_array: np.ndarray + """ + if array is None: + return None + + if isinstance(array, np.ndarray) and array.flags.c_contiguous: + if dtype is not None and array.dtype != dtype: + return array.astype(dtype) + + return array + + if dtype: + return np.ascontiguousarray(array, dtype=dtype) + + else: + return np.ascontiguousarray(array)
    + + + +
    +[docs] +def enforce_len(value, n_len): + """Given int, float, np.ndarray, tuple, list, returns an array with n_len + len(). In case of iterable, it asserts n_len, else, repeats. + + Parameters + ---------- + value: int, float or iterable + n_len: int + Size of desired array + + Returns + ------- + len_n_array: (n_len,) np.ndarray + """ + if isinstance(value, (int, float)): + return np.repeat(value, n_len) + elif isinstance(value, (np.ndarray, tuple, list)): + if len(value) != n_len: + raise ValueError( + f"Invalid value length ({len(value)}). ", + f"Expected length is ({n_len})", + ) + return np.asarray(value) + else: + raise TypeError( + f"Invalid value type ({type(value)}). " + "Supports {int, float, np.ndarray, tuple, list}." + )
    + + + +
    +[docs] +def unique_rows( + in_arr, + return_index=True, + return_inverse=True, + return_counts=True, + dtype_name=None, +): + """ + Find unique rows using np.unique, but apply tricks. Adapted from + `skimage.util.unique_rows`. + url: github.com/scikit-image/scikit-image/blob/main/skimage/util/unique.py/ + Suitable for int types. + + Parameters + ----------- + in_arr: (n, m) 2D array-like + return_index: bool + return_inverse: bool + return_counts: bool + dtype_name: str + + Returns + -------- + unique_arr: (p, q) np.ndarray + unique_ind: (w,) np.ndarray + unique_inv: (t,) np.ndarray + """ + if dtype_name is None: + dtype_name = settings.INT_DTYPE + + in_arr = make_c_contiguous(in_arr, dtype_name) + + if len(in_arr.shape) != 2: + raise ValueError("unique_rows can be only applied for 2D arrays") + + in_arr_row_view = in_arr.view(f"|S{in_arr.itemsize * in_arr.shape[1]}") + + unique_stuff = np.unique( + in_arr_row_view, + return_index=True, + return_inverse=return_inverse, + return_counts=return_counts, + ) + unique_stuff = list(unique_stuff) # list, to allow item assignment + + # switch view to original + unique_stuff[0] = in_arr[unique_stuff[1]] + if not return_index: + # pop return index + unique_stuff.pop(1) + + return unique_stuff
    + + + +
    +[docs] +def close_rows( + arr, tolerance=None, return_intersection=False, nthreads=None, **_kwargs +): + """Similar to unique_rows, but if data type is floats, use this one. + Performs radius search using KDTree. Currently uses + `scipy.spatial.cKDTree`. + + Parameters + ----------- + arr: (n, d) array-like + tolerance: (float) + Defaults to None. + return_intersection: bool + Default is False. Returns intersection. For vertices with singular + points, this will take a lot of memory space. + nthreads: int + number of concurrent query. In case of napf, concurrent build as well. + Default is taken from settings.NTHREADS + + Returns + -------- + unique_arrays: (n, d) np.ndarray + unique_ids: (m) np.ndarray + inverse: (n) np.ndarray + overlapping: list(list) + id of neighbors within the tolerance. + """ + if tolerance is None: + tolerance = settings.TOLERANCE + + if nthreads is None: + nthreads = settings.NTHREADS + + if has_funi and not return_intersection: + return ( + *funi.unique_rows(arr, tolerance, True, "l"), + [], + ) + + if has_napf: + kdt = napf.KDT(arr, nthread=nthreads) + + # call the function that's prepared for this moment + return kdt.unique_data_and_inverse( + tolerance, True, return_intersection, nthread=nthreads + ) + + if has_scipy: + from scipy.spatial import cKDTree as scipy_KDTree + + # Build kd tree + kdt = scipy_KDTree(arr) + + # Ball point query, taking tolerance as radius + neighbors = kdt.query_ball_point( + arr, + tolerance, + return_sorted=True, + ) + + # inverse based on original vertices. + o_inverse = np.array( + [n[0] for n in neighbors], + dtype=settings.INT_DTYPE, + ) + + # unique of o_inverse, and inverse based on that + (_, uniq_id, inv) = np.unique( + o_inverse, + return_index=True, + return_inverse=True, + ) + + if not return_intersection: + neighbors = [] + + return arr[uniq_id], uniq_id, inv, neighbors + + raise ImportError( + "gus.utils.arr.close_rows() requires either funi, napf, or " + "scipy package." + )
    + + + +
    +[docs] +def bounds(arr): + """Return bounds. + + Parameters + ----------- + arr: (n, d) array-like + + Returns + -------- + bounds: (2, d) np.ndarray + """ + return np.vstack( + ( + np.min(arr, axis=0).ravel(), + np.max(arr, axis=0).ravel(), + ) + )
    + + + +
    +[docs] +def bounds_diagonal(arr): + """Returns diagonal vector of the bounds. + + bounds[1] - bounds[0] + + Parameters + ----------- + arr: (n, d) array-like + + Returns + -------- + bounds_diagonal: (n,) np.ndarray + """ + b = bounds(arr) + return b[1] - b[0]
    + + + +
    +[docs] +def bounds_norm(arr): + """Returns norm of the bounds. + + Parameters + ----------- + arr: (n, d) array-like + + Returns + -------- + bounds_norm: float + """ + return np.linalg.norm(bounds_diagonal(arr))
    + + + +
    +[docs] +def bounds_mean(arr): + """Returns mean of the bounds. + + Parameters + ----------- + arr: (n, d) array-like + + Returns + -------- + bounds_mean: (n,) array-like + """ + return np.mean(bounds(arr), axis=0)
    + + + +
    +[docs] +def select_with_ranges(arr, ranges): + """Select array with ranges of each column. Always parsed as: + + [[greater_than, less_than], [....], ...] + + Parameters + ----------- + ranges: (d, 2) array-like + Takes None. + + Returns + -------- + ids: (n,) np.ndarray + """ + masks = [] + for i, r in enumerate(ranges): + if r is None: + continue + + else: + lower = arr[:, i] > r[0] + upper = arr[:, i] < r[1] + if r[1] > r[0]: + masks.append(np.logical_and(lower, upper)) + else: + masks.append(np.logical_or(lower, upper)) + + if len(masks) > 1: + mask = np.zeros(arr.shape[0], dtype=bool) + for i, m in enumerate(masks): + mask = ( + np.logical_or(mask, m) if i == 0 else np.logical_and(mask, m) + ) + + else: + mask = masks[0] + + return np.arange(arr.shape[0])[mask]
    + + + +
    +[docs] +def rotation_matrix(rotation, degree=True): + """Compute rotation matrix. Works for both 2D and 3D point sets. In 2D, it + can rotate along the (virtual) z-axis. In 3D, it can rotate along [x, y, + z]-axis. Uses `scipy.spatial.transform.Rotation`. + + Parameters + ----------- + rotation: list or float + Amount of rotation along [x,y,z] axis. Default is in degrees. + In 2D, it can be float. + degree: bool + (Optional) rotation given in degrees. + Default is `True`. If `False`, in radian. + + Returns + -------- + rotation_matrix: np.ndarray (3,3) + """ + from scipy.spatial.transform import Rotation as R + + rotation = np.asarray(rotation).ravel() + + if degree: + rotation = np.radians(rotation) + + # 2D + if len(rotation) == 1: + return R.from_rotvec([0, 0, rotation]).as_matrix()[:2, :2] + + # 3D + elif len(rotation) == 3: + return R.from_rotvec(rotation).as_matrix()
    + + + +
    +[docs] +def rotate(arr, rotation, rotation_axis=None, degree=True): + """Rotates given arrays. Arrays shape[1] should equal to either 2 or 3 For + more information, see `rotation_matrix()`. + + Parameters + ----------- + arr: (n, (2 or 3)) list-like + rotation: list or float + angle of rotation (around each axis) + rotation_axis: (n, (2 or 3)) or (2 or 3) list-like + center of rotation + + Returns + -------- + rotated_points: (n, d) np.ndarray + """ + arr = make_c_contiguous(arr, settings.FLOAT_DTYPE) + if rotation_axis is not None: + rotation_axis = np.asanyarray(rotation_axis) + + if rotation_axis is None: + return np.matmul(arr, rotation_matrix(rotation, degree)) + + else: + rotated_array = arr - rotation_axis + rotated_array = np.matmul( + rotated_array, rotation_matrix(rotation, degree) + ) + rotated_array += rotation_axis + + return rotated_array
    + + + +
    +[docs] +def rotation_matrix_around_axis(axis=None, rotation=None, degree=True): + """Compute rotation matrix given the axis of rotation. Works for both 2D + and 3D Uses Rodrigues' formula. + + If axis is not specified, 2D rotation matrix is assumed. + + Parameters + ----------- + axis: list or np.ndarray + Axis of rotation in 3D + rotation: float + angle of rotation in either radiant or degrees + degree: bool + (Optional) rotation given in degrees. + Default is `True`. If `False`, in radian. + + Returns + -------- + rotation_matrix: np.ndarray (3,3) of np.ndarray (2,2) + """ + # Assure angle is specified + if rotation is None: + raise ValueError("No rotation angle specified.") + elif degree: + rotation = np.radians(rotation) + + # Check Problem dimensions + if axis is None: + problem_dimension = 2 + else: + axis = np.asarray(axis).ravel() + if axis.shape[0] != 3: + raise ValueError("Axis dimension must be 3D") + problem_dimension = 3 + + # Assemble rotation matrix + if problem_dimension == 2: + rotation_matrix = np.array( + [ + [np.cos(rotation), -np.sin(rotation)], + [np.sin(rotation), np.cos(rotation)], + ] + ) + else: + # See Rodrigues' formula + rotation_matrix = np.array( + [ + [0, -axis[2], axis[1]], + [axis[2], 0, -axis[0]], + [-axis[1], axis[0], 0], + ] + ) + rotation_matrix = ( + np.eye(3) + + np.sin(rotation) * rotation_matrix + + ( + (1 - np.cos(rotation)) + * np.matmul(rotation_matrix, rotation_matrix) + ) + ) + + return rotation_matrix
    + + + +
    +[docs] +def is_shape(arr, shape, strict=False): + """Checks if arr matches given shape. shape can have negative numbers. + + Parameters + ----------- + arr: np.ndarray + shape: tuple + strict: bool + raises ValueError if shapes do not match + + Returns + -------- + matches: bool + """ + arr = np.asanyarray(arr) + + if arr.ndim != len(shape): + if strict: + raise ValueError(f"array should be {len(shape)}D") + return False + + for i, (a, s) in enumerate(zip(arr.shape, shape)): + if s < 0: + continue + if a != s: + if strict: + raise ValueError(f"array should have {s} shape in {i}-D") + return False + + return True
    + + + +
    +[docs] +def is_one_of_shapes(arr, shapes, strict=False): + """Tuple/list of given shapes, iterates and checks with is_shape. Useful if + you have multiple acceptable shapes. + + Parameters + ----------- + arr: np.ndarray + shapes: tuple or list + tuple/list of tuple/list + strict: bool + + Returns + -------- + matches: bool + """ + arr = np.asanyarray(arr) + matches = False + for s in shapes: + m = is_shape(arr, s, strict=False) + if m: + matches = True + + if not matches: + if strict: + raise ValueError( + f"array's shape {arr.shape} is not one of f{shapes}" + ) + return False + + return True
    + + + +
    +[docs] +def derivatives_to_normals(derivatives, normalize=True): + """ + Parameters + ---------- + derivatives: (n, (d - 1), d) np.ndarray + Surface jacobian transposed. + normalize: bool + + Returns + ------- + normals: (n, d) np.ndarray + """ + if derivatives.ndim != 3: + raise ValueError("derivatives for normals expect 3D arrays") + + shape = derivatives.shape + if shape[0] != shape[1] - 1: + raise ValueError("derivatives are expected to have (d-1, d) shape") + + # 2D is simple index flip + if shape[2] == 2: + der = derivatives.reshape(-1, shape[2]) + normals = np.empty_like(der) + normals[:, 0] = der[:, 1] + normals[:, 1] = -der[:, 0] + + elif shape[2] == 3: + der = derivatives.reshape(shape[0] * shape[1], shape[2]) + normals = cross3d(der[::2], der[1::2]) + + if normalize: + normals /= np.linalg.norm(normals, axis=1).reshape(-1, 1) + + return normals
    + + + +
    +[docs] +def cross3d(a, b): + """ + Cross product for two 3D arrays. Usually faster than np.cross + as it just targets 3d. + + Parameters + ---------- + a: (n, 3) np.ndarray + b: (n, 3) np.ndarray + + Returns + ------- + crossed: (n, 3) np.ndarray + """ + # (1 5 - 2 4, 2 3 - 0 5, 0 4 - 1 3). + # or from two arrays + # (1 2 - 2 1, 2 0 - 0 2, 0 1 - 1 0). + o = np.empty_like(a) + + # temporary aux arrays + size = len(a) + t0 = np.empty(size) + t1 = np.empty(size) + + # short cuts + a0, a1, a2 = a[..., 0], a[..., 1], a[..., 2] + b0, b1, b2 = b[..., 0], b[..., 1], b[..., 2] + o0, o1, o2 = o[..., 0], o[..., 1], o[..., 2] + + np.multiply(a1, b2, out=t0) + np.multiply(a2, b1, out=t1) + np.subtract(t0, t1, out=o0) + + np.multiply(a2, b0, out=t0) + np.multiply(a0, b2, out=t1) + np.subtract(t0, t1, out=o1) + + np.multiply(a0, b1, out=t0) + np.multiply(a1, b0, out=t1) + np.subtract(t0, t1, out=o2) + + return o
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/utils/connec.html b/_modules/gustaf/utils/connec.html new file mode 100644 index 000000000..6fdf6d1a1 --- /dev/null +++ b/_modules/gustaf/utils/connec.html @@ -0,0 +1,1346 @@ + + + + + + + + + + gustaf.utils.connec — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.utils.connec

    +"""gustaf/gustaf/utils/connec.py.
    +
    +Useful functions for connectivity operation. Ranging from edges to
    +volumes. Named connec because connectivity is too long. Would have been
    +even cooler, if it was palindrome.
    +"""
    +
    +import collections
    +
    +import numpy as np
    +
    +try:
    +    import napf
    +except ImportError:
    +    from gustaf.helpers.raise_if import ModuleImportRaiser
    +
    +    napf = ModuleImportRaiser("napf")
    +
    +from gustaf import helpers, settings
    +from gustaf.utils import arr
    +
    +
    +
    +[docs] +def tet_to_tri(volumes): + """Computes tri faces based on following index scheme. + + ``Tetrahedron`` + + .. code-block:: text + + Ref: (node_ind), face_ind + + (0) + _/| + _/ 1| + (1) _/____| (3) + _/| /| + _/ 0| 2/ 3| + /____|/____| + (0) (2) (0) + + face_ind | node_ind + ---------|---------- + 0 | 0 2 1 + 1 | 1 3 0 + 2 | 2 3 1 + 3 | 3 2 0 + + Parameters + ----------- + volumes: (n, 4) np.ndarray + + Returns + -------- + faces: (n * 4, 3) np.ndarray + """ + volumes = np.asanyarray(volumes, settings.INT_DTYPE) + + if volumes.ndim != 2 or volumes.shape[1] != 4: + raise ValueError("Given volumes are not `tet` volumes") + + fpe = 4 # faces per element + faces = ( + np.ones(((volumes.shape[0] * fpe), 3), dtype=settings.INT_DTYPE) * -1 + ) # -1 for safety check + + faces[:, 0] = volumes.ravel() + faces[::fpe, [1, 2]] = volumes[:, [2, 1]] + faces[1::fpe, [1, 2]] = volumes[:, [3, 0]] + faces[2::fpe, [1, 2]] = volumes[:, [3, 1]] + faces[3::fpe, [1, 2]] = volumes[:, [2, 0]] + + if (faces == -1).any(): + raise ValueError("Something went wrong while computing faces") + + return faces
    + + + +
    +[docs] +def hexa_to_quad(volumes): + """Computes quad faces based on following index scheme. + + ``Hexahedron`` + + .. code-block:: text + + + (6) (7) + *------* + | | + (6) (2)| 3 |(3) (7) (6) + *------*------*------*------* + | | | | | + | 2 | 0 | 4 | 5 | + *------*------*------*------* + (5) (1)| |(0) (4) (5) + | 1 | + *------* + (5) (4) + + face_ind | node_ind + ---------|---------- + 0 | 1 0 3 2 + 1 | 0 1 5 4 + 2 | 1 2 6 5 + 3 | 2 3 7 6 + 4 | 3 0 4 7 + 5 | 4 5 6 7 + + Parameters + ----------- + volumes: (n, 8) np.ndarray + + Returns + -------- + faces: (n * 8, 4) np.ndarray + """ + volumes = np.asanyarray(volumes, settings.INT_DTYPE) + + if volumes.ndim != 2 or volumes.shape[1] != 8: + raise ValueError("Given volumes are not `hexa` volumes") + + fpe = 6 # faces per element + faces = np.empty(((volumes.shape[0] * fpe), 4), dtype=settings.INT_DTYPE) + + faces[::fpe] = volumes[:, [1, 0, 3, 2]] + faces[1::fpe] = volumes[:, [0, 1, 5, 4]] + faces[2::fpe] = volumes[:, [1, 2, 6, 5]] + faces[3::fpe] = volumes[:, [2, 3, 7, 6]] + faces[4::fpe] = volumes[:, [3, 0, 4, 7]] + faces[5::fpe] = volumes[:, [4, 5, 6, 7]] + + return faces
    + + + +
    +[docs] +def volumes_to_faces(volumes): + """Guidance function for `tet_to_tri` and `hexa_to_quad`. + + Parameters + ----------- + volumes: (n, 4) or (m, 8) np.ndarray + + Returns + -------- + faces: (n*4, 3) or (m*6, 4) np.ndarray + """ + volumes = np.asanyarray(volumes, settings.INT_DTYPE) + if volumes.shape[1] == 4: + return tet_to_tri(volumes) + + elif volumes.shape[1] == 8: + return hexa_to_quad(volumes)
    + + + +
    +[docs] +def faces_to_edges(faces): + """Compute edges based on following edge scheme. + + .. code-block:: text + + Ref: (node_ind), edge_ind + + (0) + /\\ + 0 / \\2 + /____\\ + (1) 1 (2) + + 2 + (3)*-----*(2) + | | + 3 | | 1 + (0)*-----*(1) + 0 + + Note: if `edges` index matter for tets, reorder it! + + Parameters + ----------- + faces: (n, 3) or (n, 4) np.ndarray + + Returns + -------- + edges: (n * 3, 2) or (n * 4, 2) np.ndarray + """ + if faces.ndim != 2: + raise ValueError( + "Given input has wrong dimension. " + "The input array for a faces has to be dim of 2" + ) + + num_faces = faces.shape[0] + vertices_per_face = faces.shape[1] + + num_edges = int(num_faces * vertices_per_face) + edges = np.empty((num_edges, 2), dtype=settings.INT_DTYPE) + + edges[:, 0] = faces.ravel() + + for i in range(vertices_per_face): + # v_ind : corresponding vertex index for i value + v_ind = 0 if i == int(vertices_per_face - 1) else i + 1 + + edges[i::vertices_per_face, 1] = faces[:, v_ind] + + return edges
    + + + +
    +[docs] +def range_to_edges(range_, closed=False, continuous=True): + """Given range, for example (a, b), returns an edge sequence that + sequentially connects indices. If int is given as range, it is considered + as (0, value). Used to be called "closed/open_loop_index_train". + + Parameters + ----------- + range_: list, tuple, or int + closed: bool + continuous: bool + + Returns + -------- + edges: (n, 2) np.ndarray + """ + if isinstance(range_, int): + indices = np.arange(range_, dtype=settings.INT_DTYPE) + elif isinstance(range_, (list, tuple)): + # pass range_ as is and check for valid output + indices = np.arange(*range_, dtype=settings.INT_DTYPE) + if len(indices) < 2: + raise ValueError( + f"{range_} is invalid range input. " + "It must result in minimum of size=2 array." + ) + + # closed is ignored + if not continuous: + if indices.size % 2 == 1: + raise ValueError( + "Ranges should result in even number of indices for " + "continuous edges." + ) + return indices.reshape(-1, 2) + + return sequence_to_edges(indices, closed)
    + + + +
    +[docs] +def sequence_to_edges(seq, closed=False): + """Given a sequence of int, "connect" to turn them into edges. + + Parameters + ----------- + seq: (n,) array-like + closed: bool + + Returns + -------- + edges: (m, 2) np.ndarray + """ + edges = np.repeat(seq, 2) + + if closed: + first = int(edges[0]) # this is redundant copy to ensure detaching + # equivalent to np.roll(edges, -1) without copy + # safe since numpy is single thread + edges[:-1] = edges[1:] + edges[-1] = first + else: + # reselect only part of the array instead of copy + # this should only update array interface protocol + edges = edges[1:-1] + + return edges.reshape(-1, 2)
    + + + +
    +[docs] +def make_quad_faces(resolutions): + """Given number of nodes per each dimension, returns connectivity + information of a structured mesh. Counter clock wise connectivity. + + .. code-block:: text + + (3)*------*(2) + | | + | | + (0)*------*(1) + + Parameters + ---------- + resolutions: list + + Returns + ------- + faces: (n, 4) np.ndarray + """ + nnpd = np.asarray(resolutions) # number of nodes per dimension + if any(nnpd < 1): + raise ValueError(f"The number of nodes per dimension is wrong: {nnpd}") + + total_nodes = np.prod(nnpd) + total_faces = (nnpd[0] - 1) * (nnpd[1] - 1) + try: + node_indices = np.arange( + total_nodes, dtype=settings.INT_DTYPE + ).reshape(nnpd[1], nnpd[0]) + except ValueError as e: + raise ValueError(f"Problem with generating node indices. {e}") + + faces = np.empty((total_faces, 4), dtype=settings.INT_DTYPE) + + faces[:, 0] = node_indices[: (nnpd[1] - 1), : (nnpd[0] - 1)].ravel() + faces[:, 1] = node_indices[: (nnpd[1] - 1), 1 : nnpd[0]].ravel() + faces[:, 2] = node_indices[1 : nnpd[1], 1 : nnpd[0]].ravel() + faces[:, 3] = node_indices[1 : nnpd[1], : (nnpd[0] - 1)].ravel() + + return faces
    + + + +
    +[docs] +def make_hexa_volumes(resolutions): + """Given number of nodes per each dimension, returns connectivity + information of structured hexahedron elements. Counter clock wise + connectivity. + + .. code-block:: text + + (7)*-------*(6) + /| /| + / | (5) / | + (4)*-------* | + | *----|--*(2) + | /(3) | / + |/ |/ + (0)*-------*(1) + + Parameters + ----------- + resolutions: list + + Returns + -------- + elements: (n, 8) np.ndarray + """ + nnpd = np.asarray(resolutions) # number of nodes per dimension + if any(nnpd < 1): + raise ValueError(f"The number of nodes per dimension is wrong: {nnpd}") + + total_nodes = np.prod(nnpd) + total_volumes = np.prod(nnpd - 1) + node_indices = np.arange(total_nodes, dtype=settings.INT_DTYPE).reshape( + nnpd[::-1] + ) + + volumes = np.empty((total_volumes, 8), dtype=settings.INT_DTYPE) + + volumes[:, 0] = node_indices[ + : (nnpd[2] - 1), : (nnpd[1] - 1), : (nnpd[0] - 1) + ].ravel() + volumes[:, 1] = node_indices[ + : (nnpd[2] - 1), : (nnpd[1] - 1), 1 : nnpd[0] + ].ravel() + volumes[:, 2] = node_indices[ + : (nnpd[2] - 1), 1 : nnpd[1], 1 : nnpd[0] + ].ravel() + volumes[:, 3] = node_indices[ + : (nnpd[2] - 1), 1 : nnpd[1], : (nnpd[0] - 1) + ].ravel() + volumes[:, 4] = node_indices[ + 1 : nnpd[2], : (nnpd[1] - 1), : (nnpd[0] - 1) + ].ravel() + volumes[:, 5] = node_indices[ + 1 : nnpd[2], : (nnpd[1] - 1), 1 : nnpd[0] + ].ravel() + volumes[:, 6] = node_indices[1 : nnpd[2], 1 : nnpd[1], 1 : nnpd[0]].ravel() + volumes[:, 7] = node_indices[ + 1 : nnpd[2], 1 : nnpd[1], : (nnpd[0] - 1) + ].ravel() + + return volumes
    + + + +
    +[docs] +def subdivide_edges(edges): + """Subdivide edges. We assume that mid point is newly added points. + + ``Subdivided Edges`` + + .. code-block:: text + + Edges (Lines) + + Ref: (node_ids), edge_ids + + (0) (2) (1) + *--------*--------* + + edge_ids | node_ids + ---------|---------- + 0 | 0 2 + 1 | 2 1 + + Parameters + ----------- + edges: (n, 2) np.ndarray + + Returns + -------- + subdivided_edges: (n * 2, 2) np.ndarray + """ + if edges.ndim != 2 or edges.shape[1] != 2: + raise ValueError("Invalid edges shape!") + + raise NotImplementedError
    + + + +
    +[docs] +def subdivide_tri(mesh, return_dict=False): + """Subdivide triangles. Each triangle is divided into 4 meshes. + + ``Subdivided Faces`` + + .. code-block:: text + + Triangles + + Ref: (node_ind), face_ind + + (0) + _/| + _/ 0| + (3) _/____|(5) + _/| /| + _/ 1| 3/ 2| + /____|/____| + (1) (4) (2) + + face_ind | node_ind + ---------|---------- + 0 | 0 3 5 + 1 | 1 4 3 + 2 | 2 5 4 + 3 | 3 4 5 + + Parameters + ----------- + mesh: Mesh + return_dict: bool + + Returns + -------- + new_vertices: (n, d) np.ndarray + subdivided_faces: (m, 3) np.ndarray + mesh_dict: dict + iff `return_dict=True`, + returns dict(vertices=new_vertices, faces=subdivided_faces). + """ + # This will only pass if the mesh is triangle mesh. + if mesh.faces.shape[1] != 3: + raise ValueError("Invalid faces shape!") + + # Form new vertices + edge_mid_v = mesh.vertices[mesh.unique_edges().values].mean(axis=1) + new_vertices = np.vstack((mesh.vertices, edge_mid_v)) + + subdivided_faces = np.empty( + (mesh.faces.shape[0] * 4, mesh.faces.shape[1]), + dtype=settings.INT_DTYPE, + ) + + mask = np.ones(subdivided_faces.shape[0], dtype=bool) + mask[3::4] = False + + # 0th column minus (every 4th row, starting from 3rd row) + subdivided_faces[mask, 0] = mesh.faces.ravel() + + # Form ids for new vertices + new_vertices_ids = mesh.unique_edges().inverse + int(mesh.faces.max() + 1) + # 1st & 2nd columns + subdivided_faces[mask, 1] = new_vertices_ids + subdivided_faces[mask, 2] = new_vertices_ids.reshape(-1, 3)[ + :, [2, 0, 1] + ].ravel() + + # Every 4th row, starting from 3rd row + subdivided_faces[~mask, :] = new_vertices_ids.reshape(-1, 3) + + if return_dict: + return { + "vertices": new_vertices, + "faces": subdivided_faces, + } + + else: + return new_vertices, subdivided_faces
    + + + +
    +[docs] +def subdivide_quad( + mesh, + return_dict=False, +): + """Subdivide quads. + + Parameters + ----------- + mesh: Mesh + return_dict: bool + + Returns + -------- + new_vertices: (n, d) np.ndarray + subdivided_faces: (m, 4) np.ndarray + mesh_dict: dict + iff `return_dict=True`, + returns dict(vertices=new_vertices, faces=subdivided_faces). + """ + # This will only pass if the mesh is quad mesh. + if mesh.faces.shape[1] != 4: + raise ValueError("Invalid faces shape!") + + # Form new vertices + edge_mid_v = mesh.vertices[mesh.unique_edges().values].mean(axis=1) + face_centers = mesh.centers() + new_vertices = np.vstack( + ( + mesh.vertices, + edge_mid_v, + face_centers, + ) + ) + + subdivided_faces = np.empty( + (mesh.faces.shape[0] * 4, mesh.faces.shape[1]), + dtype=settings.INT_DTYPE, + ) + + subdivided_faces[:, 0] = mesh.faces.ravel() + subdivided_faces[:, 1] = mesh.unique_edges().inverse + len(mesh.vertices) + subdivided_faces[:, 2] = np.repeat( + np.arange(len(face_centers)) + (len(mesh.vertices) + len(edge_mid_v)), + 4, + dtype=settings.INT_DTYPE, + ) + subdivided_faces[:, 3] = ( + subdivided_faces[:, 1].reshape(-1, 4)[:, [3, 0, 1, 2]].ravel() + ) + + if return_dict: + return { + "vertices": new_vertices, + "faces": subdivided_faces, + } + + else: + return new_vertices, subdivided_faces
    + + + +
    +[docs] +def sorted_unique(connectivity, sorted_=False): + """Given connectivity array, finds unique entries, based on its axis=1 + sorted values. Returned value will be sorted. + + Parameters + ----------- + connectivity: (n, d) np.ndarray + sorted_: bool + + Returns + -------- + unique_info: Unique2DIntegers + """ + s_connec = connectivity if sorted_ else np.sort(connectivity, axis=1) + + unique_stuff = arr.unique_rows( + s_connec, + return_index=True, + return_inverse=True, + return_counts=True, + dtype_name=settings.INT_DTYPE, + ) + + return helpers.data.Unique2DIntegers( + unique_stuff[0], # values + unique_stuff[1], # ids + unique_stuff[2], # inverse + unique_stuff[3], # counts + )
    + + + +def _sequentialize_directed_edges(edges, start=None, return_edges=False): + """ + Sequentialize directed edges. + """ + # we want to have an np array + edges = np.asanyarray(edges) + + # Build a lookup_array + lookup_array = np.full(edges.max() + 1, -1, dtype=settings.INT_DTYPE) + lookup_array[edges[:, 0]] = edges[:, 1] + + # select starting point - lowest index + starting_point = int(edges.min()) if start is None else int(start) + + # initialize a set to keep track of processes vertices + next_candidates = set(edges[:, 0]) + # we want to keep track of single occurrences, as they are line start + line_starts = set(np.where(np.bincount(edges.ravel()) == 1)[0]) + # for this to work, we can't have a line that starts at column 1. + # so, we remove those. + ls_col1 = set(np.where(np.bincount(edges[:, 1].ravel()) == 1)[0]) + line_starts.difference_update(ls_col1) + + polygons = [] + is_polygon = [] + for _ in range(len(edges)): + # Get polygon - start with first two points + polygon = [starting_point] + polygon.append(lookup_array[polygon[-1]]) + + # then keep looking until we come to the start. + # if there's only one edges, this will exit right away + for _ in range(len(next_candidates)): + # sequence closes -> polygon + if polygon[0] == polygon[-1]: + polygon.pop() + is_polygon.append(True) + break + + # sequence leads to unspecified connection -> not polygon + if lookup_array[polygon[-1]] < 0: + is_polygon.append(False) + break + polygon.append(lookup_array[polygon[-1]]) + + polygons.append(polygon) + + # check if we counted all the edges + # if so, exit + next_candidates.difference_update(polygons[-1]) + line_starts.difference_update(polygons[-1]) + + if len(next_candidates) == len(line_starts) == 0: + break + + # let's try to find the next starting point + starting_point = None + if len(line_starts) != 0: + starting_point = min(line_starts) + else: + starting_point = min(next_candidates) + + if not return_edges: + return polygons, is_polygon + + else: + polygon_edges = [] + for p, is_p in zip(polygons, is_polygon): + polygon_edges.append(sequence_to_edges(p, closed=is_p)) + + return polygon_edges, is_polygon + + +def _sequentialize_edges(edges, start=None, return_edges=False): + """ + sequentialize undirected edges. No overlaps are allowed, for now. + """ + edges = np.asanyarray(edges) + + # only applicable to closed polygons and open lines + # not for arbitrarily connected edges + bc = np.bincount(edges.ravel()) + if not all(bc < 3): + raise ValueError( + "This function currently supports individual lines/polygons " + "search. Given edges include connections with more than 3 edges." + ) + + # we want to keep track of single occurrences, as they are line start + line_starts = set(np.where(bc == 1)[0]) + + # initialize a set to keep track of processes vertices + next_candidates = set(edges.ravel()) + + # create a look up to each edge column + edge_col = collections.namedtuple("a", "b") + edge_col.a = edges[:, 0] + edge_col.b = edges[:, 1] + + # create trees for each edge column + tree = collections.namedtuple("a", "b") + tree.a = napf.KDT(edge_col.a.reshape(-1, 1)) + tree.b = napf.KDT(edge_col.b.reshape(-1, 1)) + + # radius search size + r = 0.1 + + current_id = np.argmin(edge_col.a) if start is None else start + start_value = int(edge_col.a[current_id]) + other_col = edge_col.b + + polygons = [] + is_polygon = [] + for _ in range(len(edges)): + polygon = [start_value, other_col[current_id]] + + # while polygon[0] != polygon[-1]: + for _ in range(len(next_candidates)): + if polygon[0] == polygon[-1]: + break + # search for ids + a_ids = tree.a.radius_search([[polygon[-1]]], r, True)[0][0] + b_ids = tree.b.radius_search([[polygon[-1]]], r, True)[0][0] + + # in total, there should be 2 otherwise, we can end this search + # and this is not a polygon + hits = len(a_ids) + len(b_ids) + if hits != 2: + break + + # so, we have 2 hits. we need to get the partner of non-current_id + # index + found = False + for ai in a_ids: + if ai != current_id: + found = True + current_id = ai + polygon.append(edge_col.b[current_id]) + break + if found: + continue + + for bi in b_ids: + if bi != current_id: + found = True + current_id = bi + polygon.append(edge_col.a[current_id]) + break + if found: + continue + + raise RuntimeError( + "Something went wrong. Please report this issue to " + "github.com/tataratat/gustaf/issues]" + ) + + # if indices closes itself, it is a polygon. + # Otherwise it is an open line + if polygon[0] == polygon[-1]: + polygon.pop() + is_polygon.append(True) + else: + is_polygon.append(False) + polygons.append(polygon) + + # check if we counted all the edges + # if so, exit + # let's try to find the next starting point + next_candidates.difference_update(polygons[-1]) + line_starts.difference_update(polygons[-1]) + + if len(next_candidates) == len(line_starts) == 0: + break + + # Assign next starting point + # generally first value of (those are min() in a set) line start or + # leftover candidates + start_value = None + if len(line_starts) != 0: + start_value = min(line_starts) + else: + start_value = min(next_candidates) + + # adjust state values + a_ids = tree.a.radius_search([[start_value]], r, True)[0][0] + if len(a_ids) != 0: + current_id = a_ids[0] + other_col = edge_col.b + continue + b_ids = tree.b.radius_search([[start_value]], r, True)[0][0] + if len(b_ids) != 0: + current_id = b_ids[0] + other_col = edge_col.a + continue + + raise RuntimeError( + "Something went wrong. Please report this issue to " + "github.com/tataratat/gustaf/issues" + ) + + if not return_edges: + return polygons, is_polygon + + else: + polygon_edges = [] + for p, is_p in zip(polygons, is_polygon): + polygon_edges.append(sequence_to_edges(p, closed=is_p)) + + return polygon_edges + + +
    +[docs] +def sequentialize_edges(edges, start=None, return_edges=False, directed=False): + """ + Organize edge connectivities to describe polygon or a line. + This supports edges that describes separated/individual polygons and lines. + In other words, it doesn't support edges of overlapping vertices. + + Parameters + ----------- + edges: (n, 2) list-like + start: int + (Optional) Specify starting point. It will take minimum index otherwise. + return_edges: bool + (Optional) Default is False. If set True, returns sequences as edges. + directed: bool + (Optional) Default is False. Set True, if given edges are directed. + It should return the result faster. + + Returns + -------- + sequences: list + list of vertex ids. Or edges iff return_edges is True. + is_polygon: list + Tells if the sequence is a polygon or a line. + + Examples + --------- + >>> e = gus.Edges(vertices, edges) + >>> ordered_sequence, is_polygon = sequentialize_edges(e.edges) + + >>> f = gus.Faces(vertices, faces) + >>> ordered_sequence, is_polygon = sequentialize_edges( + ... f.edges()[f.single_edges()] + ... ) + """ + if directed: + return _sequentialize_directed_edges(edges, start, return_edges) + else: + return _sequentialize_edges(edges, start, return_edges)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/utils/log.html b/_modules/gustaf/utils/log.html new file mode 100644 index 000000000..531f2eb14 --- /dev/null +++ b/_modules/gustaf/utils/log.html @@ -0,0 +1,612 @@ + + + + + + + + + + gustaf.utils.log — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.utils.log

    +"""gustaf/gustaf/utils/log.py.
    +
    +Thin logging wrapper.
    +"""
    +
    +import logging
    +from functools import partial
    +
    +
    +
    +[docs] +def configure(debug=False, logfile=None): + """Logging configurator. + + Parameters + ----------- + debug: bool + logfile: str + + Returns + -------- + None + """ + # logger + logger = logging.getLogger("gustaf") + + # level + level = logging.DEBUG if debug else logging.INFO + logger.setLevel(level) + + # format + formatter = logging.Formatter(fmt="%(name)s [%(levelname)s] %(message)s") + + # apply format using stream handler + # let's use only one stream handler so that calling configure multiple + # times won't duplicate printing. + new_handlers = [] + for _i, h in enumerate(logger.handlers): + # we skip all the stream handler. + if isinstance(h, logging.StreamHandler): + continue + + # blindly keep other ones + else: + new_handlers.append(h) + + # add new stream handler + stream_handler = logging.StreamHandler() + stream_handler.setLevel(level) + stream_handler.setFormatter(formatter) + new_handlers.append(stream_handler) + + logger.handlers = new_handlers + + # output logs + if logfile is not None: + file_logger_handler = logging.FileHandler(logfile) + logger.addHandler(file_logger_handler)
    + + + +
    +[docs] +def debug(*log): + """Debug logger. + + Parameters + ----------- + *log: Tuple[str] + + Returns + -------- + None + """ + logger = logging.getLogger("gustaf") + logger.debug(" ".join(map(str, log)))
    + + + +
    +[docs] +def info(*log): + """Info logger. + + Parameters + ----------- + *log: Tuple[str] + + Returns + -------- + None + """ + logger = logging.getLogger("gustaf") + logger.info(" ".join(map(str, log)))
    + + + +
    +[docs] +def warning(*log): + """warning logger. + + Parameters + ----------- + *log: Tuple[str] + + Returns + -------- + None + """ + logger = logging.getLogger("gustaf") + logger.warning(" ".join(map(str, log)))
    + + + +
    +[docs] +def prepended_log(message, log_func): + """ + Prepend message before a logging function. + + Parameters + ---------- + message: str + log_func: function + one of the following - {info, debug, warning} + + Returns + ------- + prepended: function + """ + return partial(log_func, message)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/utils/tictoc.html b/_modules/gustaf/utils/tictoc.html new file mode 100644 index 000000000..37299ab3f --- /dev/null +++ b/_modules/gustaf/utils/tictoc.html @@ -0,0 +1,613 @@ + + + + + + + + + + gustaf.utils.tictoc — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.utils.tictoc

    +"""gustaf/gustaf/utils/tictoc.py.
    +
    +Timer that tics, tocs and logs.
    +"""
    +
    +from time import perf_counter as now
    +
    +from gustaf._base import GustafBase
    +
    +
    +
    +[docs] +class Tic(GustafBase): + """ + Timer class for easier time measurement. + """ + + __slots__ = ("_title", "_names", "_laps", "_logger") + + # add short cut to perf_counter in case you just want pure "now" + now = now + + def __init__(self, title="untitled", log_level="debug"): + """ + Configures the timer and logger. Marks the starting point. + + Parameters + ---------- + title: str + Title for this measurement. Defaults to "untitled". + log_level: str + Valid options are {"info", "debug", "warning"}. Defaults to "debug". + """ + # select logger based on logger level + self._logger = eval(f"self._log{str(log_level).lower()[0]}") + + # initialize names + self._names = [] + + # give name + self._title = str(title) + + # start + self._laps = [now()] + +
    +[docs] + def toc(self, name=None, log=False): + """ + Adds now to the measurements. + + Parameters + ---------- + name: str + Name of this specific measurement lap. + By default, it assigns a number to this lap. + log: bool + If True, will log lapsed time. Defaults to None. + + Returns + ------- + None + """ + # measure now + self._laps.append(now()) + + self._names.append( + f"lap-{len(self._laps) - 2}" if name is None else str(name) + ) + + if log: + self._logger( + f"{self._title} - {name}: {self._laps[-2] - self._laps[-1]}" + )
    + + +
    +[docs] + def summary(self, log=True, print_=False): + """ + Prints measurement summary to the log. + + Parameters + ---------- + log: bool + Logs the summary. Default is True. + print_: bool + Prints the summary. Default is False. + + + Returns + ------- + records: tuple + Lap timings in a tuple consisting of a list of the lap names and + times for each lap from the timer start (cumulative time). + """ + start = self._laps[0] + cumulative = [f"{lap-start:.10f}" for lap in self._laps[1:]] + + if log or print_: + message = [f"\n+++ {self._title} - time logs +++\n"] + + name_width = int(max([len(n) for n in self._names])) + + # extract info + diff = [ + f"{l1 - l0:.10f}" + for l0, l1 in zip(self._laps[:-1], self._laps[1:]) + ] + diff_width = int(max([len(d) for d in diff])) + cumulative_width = int(max([len(c) for c in cumulative])) + + message.append( + f"{'names'.ljust(name_width)} | " + f"{'diff'.rjust(diff_width)} | " + f"{'cumulative'.rjust(cumulative_width)}\n" + ) + + for n, d, c in zip(self._names, diff, cumulative): + this_line = ( + f"{n.ljust(name_width)} | " + f"{d.rjust(diff_width)} | " + f"{c.rjust(cumulative_width)}\n" + ) + message.append(this_line) + + if log: + self._logger(*message) + if print_: + print(*message) # noqa: T201 + + return self._names.copy(), cumulative
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/vertices.html b/_modules/gustaf/vertices.html new file mode 100644 index 000000000..9dbf636d7 --- /dev/null +++ b/_modules/gustaf/vertices.html @@ -0,0 +1,1097 @@ + + + + + + + + + + gustaf.vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.vertices

    +"""gustaf/gustaf/vertices.py.
    +
    +Vertices. Base of all "Mesh" geometries.
    +"""
    +
    +import copy
    +
    +import numpy as np
    +
    +from gustaf import helpers, settings, show, utils
    +from gustaf._base import GustafBase
    +from gustaf.helpers.options import Option
    +
    +
    +
    +[docs] +class VerticesShowOption(helpers.options.ShowOption): + """ + Show options for vertices. + """ + + _valid_options = helpers.options.make_valid_options( + *helpers.options.vedo_common_options, + Option( + "vedo", + "r", + "Radius of vertices in units of pixels.", + (float, int), + ), + Option( + "vedo", + "labels", + "Places a label/description str at the place of vertices.", + (np.ndarray, tuple, list), + ), + Option( + "vedo", + "label_options", + "Label kwargs to be passed during initialization." + "Valid keywords are: {scale: float, xrot: float, yrot: float, " + "zrot: float, ratio: float, precision: int, italic: bool, " + "font: str, justify: str, c: (str, tuple, list, int), " + "alpha: float}. " + "As further hint, justify takes '-' joined combination of " + "{center, mid, right, left, top, bottom}.", + (dict,), + ), + ) + + _helps = "Vertices" + + def _initialize_showable(self): + """ + Initialize Vertices showable for vedo. + + Parameters + ---------- + None + + Returns + ------- + vertices: vedo.Points + """ + init_options = ("r",) + + vertices = show.vedo.Points( + self._helpee.const_vertices, **self[init_options] + ) + + labels = self.get("labels", None) + if labels is not None: + # check length + if len(labels) != len(self._helpee.const_vertices): + raise ValueError( + f"number of label contents ({len(labels)}) and " + "number of vertices" + f"({len(self._helpee.const_vertices)}) does not match." + ) + + # apply options and return labels + return vertices.labels( + content=labels, + on="points", + **self.get("label_options", {}), + ) + + else: + # no labels, return Points + return vertices
    + + + +
    +[docs] +class Vertices(GustafBase): + kind = "vertex" + + __slots__ = ( + "_vertices", + "_const_vertices", + "_computed", + "_show_options", + "_vertex_data", + ) + + # define frequently used types as dunder variable + __show_option__ = VerticesShowOption + + def __init__( + self, + vertices=None, + ): + """Vertices. It has vertices. + + Parameters + ----------- + vertices: (n, d) np.ndarray + + Returns + -------- + None + """ + # call setters + self.vertices = vertices + + # init helpers + self._vertex_data = helpers.data.VertexData(self) + self._computed = helpers.data.ComputedMeshData(self) + self._show_options = self.__show_option__(self) + + @property + def vertices(self): + """Returns vertices. + + Parameters + ----------- + None + + Returns + -------- + vertices: (n, d) np.ndarray + """ + self._logd("returning vertices") + return self._vertices + + @vertices.setter + def vertices(self, vs): + """Vertices setter. This will saved as a tracked array. This tracked + array is very sensitive and if we do anything with it that may hint an + inplace operation, it will be marked as modified. This includes copying + and slicing. If you know you aren't going to modify the array, please + consider using `const_vertices`. Somewhat c-style hint in naming. + + Parameters + ----------- + vs: (n, d) np.ndarray + + Returns + -------- + None + """ + self._logd("setting vertices") + + # we try not to make copy. + self._vertices = helpers.data.make_tracked_array( + vs, settings.FLOAT_DTYPE, copy=False + ) + + # shape check + if self._vertices.size > 0: + utils.arr.is_shape(self._vertices, (-1, -1), strict=True) + + # exact same, but not tracked. + self._const_vertices = self._vertices.view() + self._const_vertices.flags.writeable = False + + # at each setting, validate vertex_data + # --> by len mismatch, will clear data + if hasattr(self, "vertex_data"): + self.vertex_data._validate_len(raise_=False) + + @property + def const_vertices(self): + """Returns non-mutable view of `vertices`. Naming inspired by c/cpp + sessions. + + Parameters + ----------- + None + + Returns + -------- + None + """ + self._logd("returning const_vertices") + return self._const_vertices + + @property + def vertex_data(self): + """ + Returns vertex_data manager. Behaves similar to dict() and can be used + to store values/data associated with each vertex. + + Parameters + ---------- + None + + Returns + ------- + vertex_data: VertexData + """ + self._logd("returning vertex_data") + return self._vertex_data + + @property + def show_options(self): + """ + Returns a show option manager for this object. Behaves similar to + dict. + + Parameters + ---------- + None + + Returns + ------- + show_options: ShowOption + A derived class that's suitable for current class. + """ + self._logd("returning show_options") + return self._show_options + + @property + def whatami(self): + """Answers deep philosophical question: "what am i"? + + Parameters + ---------- + None + + Returns + -------- + whatami: str + vertices + """ + return "vertices" + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["vertices"]) + def unique_vertices(self, tolerance=None, **kwargs): + """Returns a namedtuple that holds unique vertices info. Unique here + means "close-enough-within-tolerance". + + Parameters + ----------- + tolerance: float + (Optional) Default is settings.TOLERANCE + recompute: bool + Only applicable as keyword argument. Force re-computes. + + Returns + -------- + unique_vertices_info: Unique2DFloats + namedtuple with `values`, `ids`, `inverse`, `intersection`. + """ + self._logd("computing unique vertices") + if tolerance is None: + tolerance = settings.TOLERANCE + + values, ids, inverse, intersection = utils.arr.close_rows( + self.const_vertices, tolerance=tolerance, **kwargs + ) + + return helpers.data.Unique2DFloats( + values, + ids, + inverse, + intersection, + )
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["vertices"]) + def bounds(self): + """Returns bounds of the vertices. Bounds means AABB of the geometry. + + Parameters + ----------- + None + + Returns + -------- + bounds: (d,) np.ndarray + """ + self._logd("computing bounds") + return utils.arr.bounds(self.vertices)
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["vertices"]) + def bounds_diagonal(self): + """Returns diagonal vector of the bounding box. + + Parameters + ----------- + None + + Returns + -------- + bounds_diagonal: (d,) np.ndarray + same as `bounds[1] - bounds[0]` + """ + self._logd("computing bounds_diagonal") + bounds = self.bounds() + return bounds[1] - bounds[0]
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["vertices"]) + def bounds_diagonal_norm(self): + """Returns norm of bounds diagonal. + + Parameters + ----------- + None + + Returns + -------- + bounds_diagonal_norm: float + """ + self._logd("computing bounds_diagonal_norm") + return float(sum(self.bounds_diagonal() ** 2) ** 0.5)
    + + +
    +[docs] + def update_vertices(self, mask, inverse=None): + """Update vertices with a mask. In other words, keeps only masked + vertices. Adapted from `github.com/mikedh/trimesh`. Updates + connectivity accordingly too. + + Parameters + ----------- + mask: (n,) bool or int + inverse: (len(self.vertices),) int + + Returns + -------- + updated_self: type(self) + """ + vertices = self.const_vertices.copy() + + # make mask numpy array + mask = np.asarray(mask) + + if (mask.dtype.name == "bool" and mask.all()) or len(mask) == 0: + return self + + # create inverse mask if not passed + check_neg = False + if inverse is None and self.kind != "vertex": + inverse = np.full(len(vertices), -11, dtype=settings.INT_DTYPE) + check_neg = True + if mask.dtype.kind == "b": + inverse[mask] = np.arange(mask.sum()) + elif mask.dtype.kind == "i": + inverse[mask] = np.arange(len(mask)) + else: + inverse = None + + # re-index elements from inverse + # TODO: Here could be a good place to preserve BCs. + elements = None + if inverse is not None and self.kind != "vertex": + elements = self.const_elements.copy() + elements = inverse[elements.reshape(-1)].reshape( + (-1, elements.shape[1]) + ) + # remove all the elements that's not part of inverse + if check_neg: + elem_mask = (elements > -1).all(axis=1) + elements = elements[elem_mask] + + # apply mask + vertices = vertices[mask] + + def update_vertex_data(obj, m, vertex_data): + """apply mask to vertex data if there's any.""" + new_data = helpers.data.VertexData(obj) + + for key, values in vertex_data.items(): + # should work, since this is called after updating vertices + new_data[key] = values[m] + + obj._vertex_data = new_data + + return obj + + # make shallow copy of saved vertex data + v_data = self.vertex_data._saved.copy() + + # update - if number of vertices changes, this will remove all the + # length mis-matching data. + self.vertices = vertices + if elements is not None: + self.elements = elements + + update_vertex_data(self, mask, v_data) + + return self
    + + +
    +[docs] + def select_vertices(self, ranges): + """Returns vertices inside the given range. + + Parameters + ----------- + ranges: (d, 2) array-like + Takes None. + + Returns + -------- + ids: (n,) np.ndarray + """ + return utils.arr.select_with_ranges(self.vertices, ranges)
    + + +
    +[docs] + def remove_vertices(self, ids): + """Removes vertices with given vertex ids. + + Parameters + ----------- + ids: (n,) np.ndarray + + Returns + -------- + new_self: type(self) + """ + mask = np.ones(len(self.vertices), dtype=bool) + mask[ids] = False + + return self.update_vertices(mask)
    + + +
    +[docs] + def merge_vertices(self, tolerance=None, **kwargs): + """Based on unique vertices, merge vertices if it is mergeable. + + Parameters + ----------- + tolerance: float + Default is settings.TOLERANCE + + Returns + -------- + merged_self: type(self) + """ + unique_vs = self.unique_vertices(tolerance, **kwargs) + + self._logd("number of vertices") + self._logd(f" before merge: {len(self.vertices)}") + self._logd(f" after merge: {len(unique_vs.ids)}") + + return self.update_vertices( + mask=unique_vs.ids, + inverse=unique_vs.inverse, + )
    + + +
    +[docs] + def showable(self, **kwargs): + """Returns showable object, meaning object of visualization backend. + + Parameters + ----------- + **kwargs: + + Returns + -------- + showable: obj + Obj of `gustaf.settings.VISUALIZATION_BACKEND` + """ + return show.make_showable(self, **kwargs)
    + + +
    +[docs] + def show(self, **kwargs): + """Show current object using visualization backend. + + Parameters + ----------- + **kwargs: + + + Returns + -------- + None + """ + return show.show(self, **kwargs)
    + + +
    +[docs] + def copy(self): + """Returns deepcopy of self. + + Parameters + ----------- + None + + Returns + -------- + self_copy: type(self) + """ + # all attributes are deepcopy-able + copied = copy.deepcopy(self) + + # update helpee. otherwise keeps reference to self + copied._show_options._helpee = copied + copied._vertex_data._helpee = copied + copied._computed._helpee = copied + + return copied
    + + +
    +[docs] + @classmethod + def concat(cls, *instances): + """Sequentially put them together to make one object. + + Parameters + ----------- + *instances: List[type(cls)] + Allows one iterable object also. + + Returns + -------- + one_instance: type(cls) + """ + + def is_concatable(inst): + """Return true, if it is same as type(cls)""" + return bool(isinstance(inst, cls)) + + # If only one instance is given and it is iterable, adjust + # so that we will just iterate that. + if ( + len(instances) == 1 + and not isinstance(instances[0], str) + and hasattr(instances[0], "__iter__") + ): + instances = instances[0] + + vertices = [] + has_elem = cls.kind != "vertex" + if has_elem: + elements = [] + + # check if everything is "concatable". + for ins in instances: + if not is_concatable(ins): + raise TypeError( + "Can't concat. One of the instances is not " + f"`{cls.__name__}`." + ) + + tmp_ins = ins.copy() + + # make sure each element index starts from 0 & end at len(vertices) + if has_elem: + tmp_ins.remove_unreferenced_vertices() + + vertices.append(tmp_ins.vertices) + + if has_elem: + if len(elements) == 0: + elements.append(tmp_ins.elements) + e_offset = elements[-1].max() + 1 + + else: + elements.append(tmp_ins.elements + e_offset) + e_offset = elements[-1].max() + 1 + + if has_elem: + return cls( + vertices=np.vstack(vertices), + elements=np.vstack(elements), + ) + + else: + return Vertices(vertices=np.vstack(vertices))
    + + + def __add__(self, to_add): + """Concat in form of +. + + Parameters + ----------- + to_add: type(self) + + Returns + -------- + added: type(self) + """ + return type(self).concat(self, to_add)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/gustaf/volumes.html b/_modules/gustaf/volumes.html new file mode 100644 index 000000000..3c14a1a35 --- /dev/null +++ b/_modules/gustaf/volumes.html @@ -0,0 +1,784 @@ + + + + + + + + + + gustaf.volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for gustaf.volumes

    +"""gustaf/gustaf/volumes.py."""
    +
    +import numpy as np
    +
    +from gustaf import helpers, settings, show, utils
    +from gustaf.faces import Faces
    +from gustaf.helpers.options import Option
    +
    +
    +
    +[docs] +class VolumesShowOption(helpers.options.ShowOption): + """ + Show options for vertices. + """ + + _valid_options = helpers.options.make_valid_options( + *helpers.options.vedo_common_options, + Option("vedo", "lw", "Width of edges (lines) in pixel units.", (int,)), + Option( + "vedo", "lc", "Color of edges (lines).", (int, str, tuple, list) + ), + ) + + _helps = "Volumes" + + def _initialize_showable(self): + """ + Initialize volumes as vedo.UGrid or visually equivalent vedo.Mesh + + Parameters + ---------- + None + + Returns + ------- + volumes: vedo.UGrid or vedo.Mesh + """ + # without a data to plot on the surface, return vedo.UGrid + # if vertex_ids is on, we will go with mesh + if ( + self.get("data", None) is None + and not self.get("vertex_ids", False) + and not self.get("arrow_data", False) + and not show.is_ipython + ): + from vtk import VTK_HEXAHEDRON as herr_hexa + from vtk import VTK_TETRA as frau_tetra + + to_vtktype = {"tet": frau_tetra, "hexa": herr_hexa} + grid_type = to_vtktype[self._helpee.whatami] + u_grid = show.vedoUGrid( + [ + self._helpee.const_vertices, + self._helpee.const_volumes, + [grid_type] * len(self._helpee.const_volumes), + ] + ) + + for option in ["lw", "lc"]: + val = self.get(option, False) + if val: + getattr(u_grid, option)(val) + + return u_grid.c("hotpink") + + # to show data, let's use Faces. This will plot all the elements + # as well as invisible ones. This will at least try to avoid + # duplicating faces. If you wanna see inside faces, try + # as_shrunk_faces = volumes.to_faces(unique=False).shrink(.8) + faces = self._helpee.to_faces(unique=True) + self.copy_valid_options(faces.show_options) + + return faces.show_options._initialize_showable()
    + + + +
    +[docs] +class Volumes(Faces): + kind = "volume" + + const_faces = helpers.raise_if.invalid_inherited_attr( + "Faces.const_faces", + __qualname__, + property_=True, + ) + update_faces = helpers.raise_if.invalid_inherited_attr( + "Faces.update_edges", + __qualname__, + property_=False, + ) + + __slots__ = ( + "_volumes", + "_const_volumes", + ) + + __show_option__ = VolumesShowOption + __boundary_class__ = Faces + + def __init__( + self, + vertices=None, + volumes=None, + elements=None, + ): + """Volumes. It has vertices and volumes. Volumes could be tetrahedrons + or hexahedrons. + + Parameters + ----------- + vertices: (n, d) np.ndarray + volumes: (n, 4) or (n, 8) np.ndarray + """ + super().__init__(vertices=vertices) + if volumes is not None: + self.volumes = volumes + elif elements is not None: + self.volumes = elements + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def faces(self): + """Faces here aren't main property. So this needs to be computed. + + Parameters + ----------- + None + + Returns + -------- + faces: (n, 3) or (n, 4) np.ndarray + """ + whatami = self.whatami + faces = None + if whatami.startswith("tet"): + faces = utils.connec.tet_to_tri(self.volumes) + elif whatami.startswith("hexa"): + faces = utils.connec.hexa_to_quad(self.volumes) + + return faces
    + + +
    +[docs] + @classmethod + def whatareyou(cls, volume_obj): + """overwrites Faces.whatareyou to tell you is this volume is tet or + hexa. + + Parameters + ----------- + volume_obj: Volumes + + Returns + -------- + whatareyou: str + """ + if not cls.kind.startswith(volume_obj.kind): + raise TypeError("Given obj is not {cls.__qualname__}") + + if volume_obj.volumes.shape[1] == 4: + return "tet" + + elif volume_obj.volumes.shape[1] == 8: + return "hexa" + + else: + raise ValueError( + "Invalid volumes connectivity shape. It should be (n, 4) " + f"or (n, 8), but given: {volume_obj.volumes.shape}" + )
    + + + @property + def volumes(self): + """Returns volumes. + + Parameters + ----------- + None + + Returns + -------- + volumes: (n, 4) or (n, 8) np.ndarray + """ + return self._volumes + + @volumes.setter + def volumes(self, vols): + """volumes setter. Similar to vertices, this will be a tracked array. + + Parameters + ----------- + vols: (n, 4) or (n, 8) np.ndarray + + Returns + -------- + None + """ + self._volumes = helpers.data.make_tracked_array( + vols, + settings.INT_DTYPE, + copy=False, + ) + if vols is not None: + utils.arr.is_one_of_shapes( + vols, + ((-1, 4), (-1, 8)), + strict=True, + ) + # same, but non-writeable view of tracked array + self._const_volumes = self._volumes.view() + self._const_volumes.flags.writeable = False + + @property + def const_volumes(self): + """Returns non-writeable view of volumes. + + Parameters + ----------- + None + + Returns + -------- + const_volumes: (n, 4) or (n, 8) np.ndarray + """ + return self._const_volumes + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def sorted_volumes(self): + """Sort volumes along axis=1. + + Parameters + ----------- + None + + Returns + -------- + volumes_sorted: (volumes.shape) np.ndarray + """ + volumes = self._get_attr("volumes") + + return np.sort(volumes, axis=1)
    + + +
    +[docs] + @helpers.data.ComputedMeshData.depends_on(["elements"]) + def unique_volumes(self): + """Returns a namedtuple of unique volumes info. Similar to + unique_edges. + + Parameters + ----------- + None + + Returns + -------- + unique_info: Unique2DIntegers + valid attributes are {values, ids, inverse, counts} + """ + unique_info = utils.connec.sorted_unique( + self.sorted_volumes(), + sorted_=True, + ) + + volumes = self._get_attr("volumes") + + unique_info.values[:] = volumes[unique_info.ids] + + return unique_info
    + + +
    +[docs] + def update_volumes(self, *args, **kwargs): + """Alias to update_elements.""" + self.update_elements(*args, **kwargs)
    + + +
    +[docs] + def to_faces(self, unique=True): + """Returns Faces obj. + + Parameters + ----------- + unique: bool + Default is True. If True, only takes unique faces. + + Returns + -------- + faces: Faces + """ + return Faces( + self.vertices, + faces=self.unique_faces().values if unique else self.faces(), + )
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 000000000..cdb237fd9 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,500 @@ + + + + + + + + + + Overview: module code — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + + + +
    +
    + + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_sources/CONTRIBUTING.rst.txt b/_sources/CONTRIBUTING.rst.txt new file mode 100644 index 000000000..85bb7bcf8 --- /dev/null +++ b/_sources/CONTRIBUTING.rst.txt @@ -0,0 +1,4 @@ +------------ +Contributing +------------ +.. mdinclude:: ../md/CONTRIBUTING.md diff --git a/_sources/_generated/gustaf.create.edges.from_data.rst.txt b/_sources/_generated/gustaf.create.edges.from_data.rst.txt new file mode 100644 index 000000000..ad64eaec9 --- /dev/null +++ b/_sources/_generated/gustaf.create.edges.from_data.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.edges.from\_data +============================== + +.. currentmodule:: gustaf.create.edges + +.. autofunction:: from_data \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.edges.from_vertices.rst.txt b/_sources/_generated/gustaf.create.edges.from_vertices.rst.txt new file mode 100644 index 000000000..b77aa7edd --- /dev/null +++ b/_sources/_generated/gustaf.create.edges.from_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.edges.from\_vertices +================================== + +.. currentmodule:: gustaf.create.edges + +.. autofunction:: from_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.edges.rst.txt b/_sources/_generated/gustaf.create.edges.rst.txt new file mode 100644 index 000000000..0d29d4e32 --- /dev/null +++ b/_sources/_generated/gustaf.create.edges.rst.txt @@ -0,0 +1,33 @@ +.. _gustaf.create.edges: + +gustaf.create.edges +=================== + +.. automodule:: gustaf.create.edges + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + from_data + from_vertices + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.create.faces.box.rst.txt b/_sources/_generated/gustaf.create.faces.box.rst.txt new file mode 100644 index 000000000..d64d56827 --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.box.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.faces.box +======================= + +.. currentmodule:: gustaf.create.faces + +.. autofunction:: box \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.faces.edges_as_quad.rst.txt b/_sources/_generated/gustaf.create.faces.edges_as_quad.rst.txt new file mode 100644 index 000000000..4add25ebf --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.edges_as_quad.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.faces.edges\_as\_quad +=================================== + +.. currentmodule:: gustaf.create.faces + +.. autofunction:: edges_as_quad \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.faces.rst.txt b/_sources/_generated/gustaf.create.faces.rst.txt new file mode 100644 index 000000000..8e4a2305e --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.rst.txt @@ -0,0 +1,36 @@ +.. _gustaf.create.faces: + +gustaf.create.faces +=================== + +.. automodule:: gustaf.create.faces + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + box + edges_as_quad + to_quad + to_simplex + vertex_normals + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.create.faces.to_quad.rst.txt b/_sources/_generated/gustaf.create.faces.to_quad.rst.txt new file mode 100644 index 000000000..03435212d --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.to_quad.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.faces.to\_quad +============================ + +.. currentmodule:: gustaf.create.faces + +.. autofunction:: to_quad \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.faces.to_simplex.rst.txt b/_sources/_generated/gustaf.create.faces.to_simplex.rst.txt new file mode 100644 index 000000000..6ee03140c --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.to_simplex.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.faces.to\_simplex +=============================== + +.. currentmodule:: gustaf.create.faces + +.. autofunction:: to_simplex \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.faces.vertex_normals.rst.txt b/_sources/_generated/gustaf.create.faces.vertex_normals.rst.txt new file mode 100644 index 000000000..13f880878 --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.vertex_normals.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.faces.vertex\_normals +=================================== + +.. currentmodule:: gustaf.create.faces + +.. autofunction:: vertex_normals \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.rst.txt b/_sources/_generated/gustaf.create.rst.txt new file mode 100644 index 000000000..974597223 --- /dev/null +++ b/_sources/_generated/gustaf.create.rst.txt @@ -0,0 +1,37 @@ +.. _gustaf.create: + +gustaf.create +============= + +.. automodule:: gustaf.create + + + + + + + + + + + + + + + + + + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :template: + :recursive: + + gustaf.create.edges + gustaf.create.faces + gustaf.create.vertices + gustaf.create.volumes + diff --git a/_sources/_generated/gustaf.create.vertices.raster.rst.txt b/_sources/_generated/gustaf.create.vertices.raster.rst.txt new file mode 100644 index 000000000..741e33152 --- /dev/null +++ b/_sources/_generated/gustaf.create.vertices.raster.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.vertices.raster +============================= + +.. currentmodule:: gustaf.create.vertices + +.. autofunction:: raster \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.vertices.rst.txt b/_sources/_generated/gustaf.create.vertices.rst.txt new file mode 100644 index 000000000..afab2cc7e --- /dev/null +++ b/_sources/_generated/gustaf.create.vertices.rst.txt @@ -0,0 +1,32 @@ +.. _gustaf.create.vertices: + +gustaf.create.vertices +====================== + +.. automodule:: gustaf.create.vertices + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + raster + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.create.volumes.box.rst.txt b/_sources/_generated/gustaf.create.volumes.box.rst.txt new file mode 100644 index 000000000..d820cbdeb --- /dev/null +++ b/_sources/_generated/gustaf.create.volumes.box.rst.txt @@ -0,0 +1,6 @@ +gustaf.create.volumes.box +========================= + +.. currentmodule:: gustaf.create.volumes + +.. autofunction:: box \ No newline at end of file diff --git a/_sources/_generated/gustaf.create.volumes.rst.txt b/_sources/_generated/gustaf.create.volumes.rst.txt new file mode 100644 index 000000000..fd318cedc --- /dev/null +++ b/_sources/_generated/gustaf.create.volumes.rst.txt @@ -0,0 +1,32 @@ +.. _gustaf.create.volumes: + +gustaf.create.volumes +===================== + +.. automodule:: gustaf.create.volumes + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + box + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.edges.Edges.centers.rst.txt b/_sources/_generated/gustaf.edges.Edges.centers.rst.txt new file mode 100644 index 000000000..8a5aac4e8 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.centers.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.centers +========================== + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.centers \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.const_edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.const_edges.rst.txt new file mode 100644 index 000000000..6416c9cdc --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.const_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.const\_edges +=============================== + +.. currentmodule:: gustaf.edges + +.. autoproperty:: Edges.const_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.const_elements.rst.txt b/_sources/_generated/gustaf.edges.Edges.const_elements.rst.txt new file mode 100644 index 000000000..8c287550b --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.const_elements.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.const\_elements +================================== + +.. currentmodule:: gustaf.edges + +.. autoproperty:: Edges.const_elements \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.dashed.rst.txt b/_sources/_generated/gustaf.edges.Edges.dashed.rst.txt new file mode 100644 index 000000000..39daee67c --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.dashed.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.dashed +========================= + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.dashed \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.edges.rst.txt new file mode 100644 index 000000000..2ba3aebae --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.edges +======================== + +.. currentmodule:: gustaf.edges + +.. autoproperty:: Edges.edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.elements.rst.txt b/_sources/_generated/gustaf.edges.Edges.elements.rst.txt new file mode 100644 index 000000000..45f246425 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.elements.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.elements +=========================== + +.. currentmodule:: gustaf.edges + +.. autoproperty:: Edges.elements \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.kind.rst.txt b/_sources/_generated/gustaf.edges.Edges.kind.rst.txt new file mode 100644 index 000000000..dcbc8e441 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.kind.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.kind +======================= + +.. currentmodule:: gustaf.edges + +.. autoattribute:: Edges.kind \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.referenced_vertices.rst.txt b/_sources/_generated/gustaf.edges.Edges.referenced_vertices.rst.txt new file mode 100644 index 000000000..34383ade2 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.referenced_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.referenced\_vertices +======================================= + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.referenced_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.rst.txt b/_sources/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.rst.txt new file mode 100644 index 000000000..2e712fcba --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.remove\_unreferenced\_vertices +================================================= + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.remove_unreferenced_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.rst.txt new file mode 100644 index 000000000..227190804 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.rst.txt @@ -0,0 +1,142 @@ +gustaf.edges.Edges +================== + +.. currentmodule:: gustaf.edges + +.. autoclass:: Edges + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + Edges.centers + + + + + + + + + + + Edges.dashed + + + + + + + + Edges.referenced_vertices + + + + + Edges.remove_unreferenced_vertices + + + + + + + + + + + + + + + + + Edges.shrink + + + + + Edges.single_edges + + + + + Edges.sorted_edges + + + + + Edges.to_vertices + + + + + Edges.unique_edges + + + + + + + + Edges.update_edges + + + + + Edges.update_elements + + + + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + Edges.const_edges + + + Edges.const_elements + + + + Edges.edges + + + Edges.elements + + + Edges.kind + + + + + + Edges.whatami + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.shrink.rst.txt b/_sources/_generated/gustaf.edges.Edges.shrink.rst.txt new file mode 100644 index 000000000..b8138b143 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.shrink.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.shrink +========================= + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.shrink \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.single_edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.single_edges.rst.txt new file mode 100644 index 000000000..b04f10a49 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.single_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.single\_edges +================================ + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.single_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.sorted_edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.sorted_edges.rst.txt new file mode 100644 index 000000000..db24be1d4 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.sorted_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.sorted\_edges +================================ + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.sorted_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.to_vertices.rst.txt b/_sources/_generated/gustaf.edges.Edges.to_vertices.rst.txt new file mode 100644 index 000000000..5f3fca6c6 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.to_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.to\_vertices +=============================== + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.to_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.unique_edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.unique_edges.rst.txt new file mode 100644 index 000000000..d879deda5 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.unique_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.unique\_edges +================================ + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.unique_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.update_edges.rst.txt b/_sources/_generated/gustaf.edges.Edges.update_edges.rst.txt new file mode 100644 index 000000000..89d1f1377 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.update_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.update\_edges +================================ + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.update_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.update_elements.rst.txt b/_sources/_generated/gustaf.edges.Edges.update_elements.rst.txt new file mode 100644 index 000000000..1353f8b39 --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.update_elements.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.update\_elements +=================================== + +.. currentmodule:: gustaf.edges + +.. automethod:: Edges.update_elements \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.Edges.whatami.rst.txt b/_sources/_generated/gustaf.edges.Edges.whatami.rst.txt new file mode 100644 index 000000000..caaa1234d --- /dev/null +++ b/_sources/_generated/gustaf.edges.Edges.whatami.rst.txt @@ -0,0 +1,6 @@ +gustaf.edges.Edges.whatami +========================== + +.. currentmodule:: gustaf.edges + +.. autoproperty:: Edges.whatami \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.EdgesShowOption.rst.txt b/_sources/_generated/gustaf.edges.EdgesShowOption.rst.txt new file mode 100644 index 000000000..f90e6633a --- /dev/null +++ b/_sources/_generated/gustaf.edges.EdgesShowOption.rst.txt @@ -0,0 +1,50 @@ +gustaf.edges.EdgesShowOption +============================ + +.. currentmodule:: gustaf.edges + +.. autoclass:: EdgesShowOption + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.edges.rst.txt b/_sources/_generated/gustaf.edges.rst.txt new file mode 100644 index 000000000..0d2e10746 --- /dev/null +++ b/_sources/_generated/gustaf.edges.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.edges: + +gustaf.edges +============ + +.. automodule:: gustaf.edges + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + Edges + EdgesShowOption + + + + + + + + + diff --git a/_sources/_generated/gustaf.faces.Faces.BC.rst.txt b/_sources/_generated/gustaf.faces.Faces.BC.rst.txt new file mode 100644 index 000000000..738f65661 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.BC.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.BC +===================== + +.. currentmodule:: gustaf.faces + +.. autoattribute:: Faces.BC \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.const_edges.rst.txt b/_sources/_generated/gustaf.faces.Faces.const_edges.rst.txt new file mode 100644 index 000000000..d4e68bc6c --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.const_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.const\_edges +=============================== + +.. currentmodule:: gustaf.faces + +.. autoproperty:: Faces.const_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.const_faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.const_faces.rst.txt new file mode 100644 index 000000000..abe82d360 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.const_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.const\_faces +=============================== + +.. currentmodule:: gustaf.faces + +.. autoproperty:: Faces.const_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.dashed.rst.txt b/_sources/_generated/gustaf.faces.Faces.dashed.rst.txt new file mode 100644 index 000000000..ada4cba31 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.dashed.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.dashed +========================= + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.dashed \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.edges.rst.txt b/_sources/_generated/gustaf.faces.Faces.edges.rst.txt new file mode 100644 index 000000000..7070ac935 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.edges +======================== + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.faces.rst.txt new file mode 100644 index 000000000..d7c1fc21d --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.faces +======================== + +.. currentmodule:: gustaf.faces + +.. autoproperty:: Faces.faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.kind.rst.txt b/_sources/_generated/gustaf.faces.Faces.kind.rst.txt new file mode 100644 index 000000000..89e9effd1 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.kind.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.kind +======================= + +.. currentmodule:: gustaf.faces + +.. autoattribute:: Faces.kind \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.rst.txt new file mode 100644 index 000000000..53f5190e4 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.rst.txt @@ -0,0 +1,166 @@ +gustaf.faces.Faces +================== + +.. currentmodule:: gustaf.faces + +.. autoclass:: Faces + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + Faces.dashed + + + + + Faces.edges + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Faces.single_faces + + + + + + + + Faces.sorted_faces + + + + + Faces.to_edges + + + + + Faces.to_subelements + + + + + + + + + + + Faces.unique_faces + + + + + + + + Faces.update_edges + + + + + + + + Faces.update_faces + + + + + + + + Faces.whatareyou + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + Faces.BC + + + Faces.const_edges + + + + Faces.const_faces + + + + + Faces.faces + + + Faces.kind + + + + + + Faces.whatami + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.single_faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.single_faces.rst.txt new file mode 100644 index 000000000..50f13dcaa --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.single_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.single\_faces +================================ + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.single_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.sorted_faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.sorted_faces.rst.txt new file mode 100644 index 000000000..f14f25b41 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.sorted_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.sorted\_faces +================================ + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.sorted_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.to_edges.rst.txt b/_sources/_generated/gustaf.faces.Faces.to_edges.rst.txt new file mode 100644 index 000000000..387517bc5 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.to_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.to\_edges +============================ + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.to_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.to_subelements.rst.txt b/_sources/_generated/gustaf.faces.Faces.to_subelements.rst.txt new file mode 100644 index 000000000..cdc84ca44 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.to_subelements.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.to\_subelements +================================== + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.to_subelements \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.unique_faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.unique_faces.rst.txt new file mode 100644 index 000000000..2294a527e --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.unique_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.unique\_faces +================================ + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.unique_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.update_edges.rst.txt b/_sources/_generated/gustaf.faces.Faces.update_edges.rst.txt new file mode 100644 index 000000000..1b95c12d3 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.update_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.update\_edges +================================ + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.update_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.update_faces.rst.txt b/_sources/_generated/gustaf.faces.Faces.update_faces.rst.txt new file mode 100644 index 000000000..ea15e0c85 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.update_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.update\_faces +================================ + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.update_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.whatami.rst.txt b/_sources/_generated/gustaf.faces.Faces.whatami.rst.txt new file mode 100644 index 000000000..0e0318246 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.whatami.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.whatami +========================== + +.. currentmodule:: gustaf.faces + +.. autoproperty:: Faces.whatami \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.Faces.whatareyou.rst.txt b/_sources/_generated/gustaf.faces.Faces.whatareyou.rst.txt new file mode 100644 index 000000000..7f45c2414 --- /dev/null +++ b/_sources/_generated/gustaf.faces.Faces.whatareyou.rst.txt @@ -0,0 +1,6 @@ +gustaf.faces.Faces.whatareyou +============================= + +.. currentmodule:: gustaf.faces + +.. automethod:: Faces.whatareyou \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.FacesShowOption.rst.txt b/_sources/_generated/gustaf.faces.FacesShowOption.rst.txt new file mode 100644 index 000000000..f72b6f876 --- /dev/null +++ b/_sources/_generated/gustaf.faces.FacesShowOption.rst.txt @@ -0,0 +1,50 @@ +gustaf.faces.FacesShowOption +============================ + +.. currentmodule:: gustaf.faces + +.. autoclass:: FacesShowOption + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.faces.rst.txt b/_sources/_generated/gustaf.faces.rst.txt new file mode 100644 index 000000000..d67ab7062 --- /dev/null +++ b/_sources/_generated/gustaf.faces.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.faces: + +gustaf.faces +============ + +.. automodule:: gustaf.faces + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + Faces + FacesShowOption + + + + + + + + + diff --git a/_sources/_generated/gustaf.helpers.data.ComputedData.depends_on.rst.txt b/_sources/_generated/gustaf.helpers.data.ComputedData.depends_on.rst.txt new file mode 100644 index 000000000..8d6041c24 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.ComputedData.depends_on.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.ComputedData.depends\_on +============================================ + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: ComputedData.depends_on \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.ComputedData.rst.txt b/_sources/_generated/gustaf.helpers.data.ComputedData.rst.txt new file mode 100644 index 000000000..c7900e96c --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.ComputedData.rst.txt @@ -0,0 +1,49 @@ +gustaf.helpers.data.ComputedData +================================ + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: ComputedData + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + ComputedData.depends_on + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.ComputedMeshData.rst.txt b/_sources/_generated/gustaf.helpers.data.ComputedMeshData.rst.txt new file mode 100644 index 000000000..0ab8a4dcb --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.ComputedMeshData.rst.txt @@ -0,0 +1,47 @@ +gustaf.helpers.data.ComputedMeshData +==================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: ComputedMeshData + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.clear.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.clear.rst.txt new file mode 100644 index 000000000..dfbf48744 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.clear.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.clear +==================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.clear \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.get.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.get.rst.txt new file mode 100644 index 000000000..e1f0ac7ad --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.get.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.get +================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.get \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.items.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.items.rst.txt new file mode 100644 index 000000000..1b1d70f1e --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.items.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.items +==================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.items \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.keys.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.keys.rst.txt new file mode 100644 index 000000000..3ecca06c3 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.keys.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.keys +=================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.keys \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.pop.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.pop.rst.txt new file mode 100644 index 000000000..1e5ce6adb --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.pop.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.pop +================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.pop \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.rst.txt new file mode 100644 index 000000000..11339df96 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.rst.txt @@ -0,0 +1,58 @@ +gustaf.helpers.data.DataHolder +============================== + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: DataHolder + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + DataHolder.clear + + + + + DataHolder.get + + + + + DataHolder.items + + + + + DataHolder.keys + + + + + DataHolder.pop + + + + + DataHolder.update + + + + + DataHolder.values + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.update.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.update.rst.txt new file mode 100644 index 000000000..d9845b487 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.update.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.update +===================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.update \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.DataHolder.values.rst.txt b/_sources/_generated/gustaf.helpers.data.DataHolder.values.rst.txt new file mode 100644 index 000000000..9243897a5 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.values.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.DataHolder.values +===================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: DataHolder.values \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.TrackedArray.copy.rst.txt b/_sources/_generated/gustaf.helpers.data.TrackedArray.copy.rst.txt new file mode 100644 index 000000000..6c137aafb --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.TrackedArray.copy.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.TrackedArray.copy +===================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: TrackedArray.copy \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.TrackedArray.modified.rst.txt b/_sources/_generated/gustaf.helpers.data.TrackedArray.modified.rst.txt new file mode 100644 index 000000000..6fddbbad9 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.TrackedArray.modified.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.TrackedArray.modified +========================================= + +.. currentmodule:: gustaf.helpers.data + +.. autoproperty:: TrackedArray.modified \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.TrackedArray.rst.txt b/_sources/_generated/gustaf.helpers.data.TrackedArray.rst.txt new file mode 100644 index 000000000..617584f0f --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.TrackedArray.rst.txt @@ -0,0 +1,219 @@ +gustaf.helpers.data.TrackedArray +================================ + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: TrackedArray + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TrackedArray.copy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TrackedArray.view + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + + + + + + + + + + TrackedArray.modified + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.TrackedArray.view.rst.txt b/_sources/_generated/gustaf.helpers.data.TrackedArray.view.rst.txt new file mode 100644 index 000000000..1ccbfd4f9 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.TrackedArray.view.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.TrackedArray.view +===================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: TrackedArray.view \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DFloats.ids.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.ids.rst.txt new file mode 100644 index 000000000..26082cdfc --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.ids.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DFloats.ids +====================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DFloats.ids \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DFloats.intersection.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.intersection.rst.txt new file mode 100644 index 000000000..d1523a7be --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.intersection.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DFloats.intersection +=============================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DFloats.intersection \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DFloats.inverse.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.inverse.rst.txt new file mode 100644 index 000000000..b5544021b --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.inverse.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DFloats.inverse +========================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DFloats.inverse \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DFloats.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.rst.txt new file mode 100644 index 000000000..5b94dd99d --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.rst.txt @@ -0,0 +1,47 @@ +gustaf.helpers.data.Unique2DFloats +================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: Unique2DFloats + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + Unique2DFloats.ids + + + Unique2DFloats.intersection + + + Unique2DFloats.inverse + + + Unique2DFloats.values + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DFloats.values.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.values.rst.txt new file mode 100644 index 000000000..7f336aa78 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DFloats.values.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DFloats.values +========================================= + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DFloats.values \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.counts.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.counts.rst.txt new file mode 100644 index 000000000..e0818a04b --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.counts.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DIntegers.counts +=========================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DIntegers.counts \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.ids.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.ids.rst.txt new file mode 100644 index 000000000..3e1e73598 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.ids.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DIntegers.ids +======================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DIntegers.ids \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.rst.txt new file mode 100644 index 000000000..6a2be2170 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DIntegers.inverse +============================================ + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DIntegers.inverse \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.rst.txt new file mode 100644 index 000000000..0bac64c95 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.rst.txt @@ -0,0 +1,47 @@ +gustaf.helpers.data.Unique2DIntegers +==================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: Unique2DIntegers + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + Unique2DIntegers.counts + + + Unique2DIntegers.ids + + + Unique2DIntegers.inverse + + + Unique2DIntegers.values + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.values.rst.txt b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.values.rst.txt new file mode 100644 index 000000000..254de9bc0 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.Unique2DIntegers.values.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.Unique2DIntegers.values +=========================================== + +.. currentmodule:: gustaf.helpers.data + +.. autoattribute:: Unique2DIntegers.values \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.VertexData.as_arrow.rst.txt b/_sources/_generated/gustaf.helpers.data.VertexData.as_arrow.rst.txt new file mode 100644 index 000000000..474cc0f5e --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.VertexData.as_arrow.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.VertexData.as\_arrow +======================================== + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: VertexData.as_arrow \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.VertexData.as_scalar.rst.txt b/_sources/_generated/gustaf.helpers.data.VertexData.as_scalar.rst.txt new file mode 100644 index 000000000..21a91e377 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.VertexData.as_scalar.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.VertexData.as\_scalar +========================================= + +.. currentmodule:: gustaf.helpers.data + +.. automethod:: VertexData.as_scalar \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.VertexData.rst.txt b/_sources/_generated/gustaf.helpers.data.VertexData.rst.txt new file mode 100644 index 000000000..5af6096e4 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.VertexData.rst.txt @@ -0,0 +1,54 @@ +gustaf.helpers.data.VertexData +============================== + +.. currentmodule:: gustaf.helpers.data + +.. autoclass:: VertexData + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + VertexData.as_arrow + + + + + VertexData.as_scalar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.make_tracked_array.rst.txt b/_sources/_generated/gustaf.helpers.data.make_tracked_array.rst.txt new file mode 100644 index 000000000..abbaf7396 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.make_tracked_array.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.data.make\_tracked\_array +======================================== + +.. currentmodule:: gustaf.helpers.data + +.. autofunction:: make_tracked_array \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.data.rst.txt b/_sources/_generated/gustaf.helpers.data.rst.txt new file mode 100644 index 000000000..e2328b91f --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.rst.txt @@ -0,0 +1,46 @@ +.. _gustaf.helpers.data: + +gustaf.helpers.data +=================== + +.. automodule:: gustaf.helpers.data + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + make_tracked_array + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + ComputedData + ComputedMeshData + DataHolder + TrackedArray + Unique2DFloats + Unique2DIntegers + VertexData + + + + + + + + + diff --git a/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.rst.txt b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.rst.txt new file mode 100644 index 000000000..cd02cd7cd --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.notebook.K3DPlotterN.clear +========================================= + +.. currentmodule:: gustaf.helpers.notebook + +.. automethod:: K3DPlotterN.clear \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.close.rst.txt b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.close.rst.txt new file mode 100644 index 000000000..f0ce4212a --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.close.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.notebook.K3DPlotterN.close +========================================= + +.. currentmodule:: gustaf.helpers.notebook + +.. automethod:: K3DPlotterN.close \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.display.rst.txt b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.display.rst.txt new file mode 100644 index 000000000..dd3dceb0f --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.display.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.notebook.K3DPlotterN.display +=========================================== + +.. currentmodule:: gustaf.helpers.notebook + +.. automethod:: K3DPlotterN.display \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.rst.txt b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.rst.txt new file mode 100644 index 000000000..7db908401 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.rst.txt @@ -0,0 +1,182 @@ +gustaf.helpers.notebook.K3DPlotterN +=================================== + +.. currentmodule:: gustaf.helpers.notebook + +.. autoclass:: K3DPlotterN + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + K3DPlotterN.clear + + + + + K3DPlotterN.close + + + + + + + + K3DPlotterN.display + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + K3DPlotterN.show + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.show.rst.txt b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.show.rst.txt new file mode 100644 index 000000000..18d1f0d2d --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.K3DPlotterN.show.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.notebook.K3DPlotterN.show +======================================== + +.. currentmodule:: gustaf.helpers.notebook + +.. automethod:: K3DPlotterN.show \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.notebook.get_shape.rst.txt b/_sources/_generated/gustaf.helpers.notebook.get_shape.rst.txt new file mode 100644 index 000000000..31fc65885 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.get_shape.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.notebook.get\_shape +================================== + +.. currentmodule:: gustaf.helpers.notebook + +.. autofunction:: get_shape \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.notebook.rst.txt b/_sources/_generated/gustaf.helpers.notebook.rst.txt new file mode 100644 index 000000000..46b4c6add --- /dev/null +++ b/_sources/_generated/gustaf.helpers.notebook.rst.txt @@ -0,0 +1,40 @@ +.. _gustaf.helpers.notebook: + +gustaf.helpers.notebook +======================= + +.. automodule:: gustaf.helpers.notebook + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + get_shape + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + K3DPlotterN + + + + + + + + + diff --git a/_sources/_generated/gustaf.helpers.options.Option.allowed_types.rst.txt b/_sources/_generated/gustaf.helpers.options.Option.allowed_types.rst.txt new file mode 100644 index 000000000..748926574 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.Option.allowed_types.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.Option.allowed\_types +============================================ + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: Option.allowed_types \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.Option.backends.rst.txt b/_sources/_generated/gustaf.helpers.options.Option.backends.rst.txt new file mode 100644 index 000000000..d19fc8036 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.Option.backends.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.Option.backends +====================================== + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: Option.backends \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.Option.default.rst.txt b/_sources/_generated/gustaf.helpers.options.Option.default.rst.txt new file mode 100644 index 000000000..477b35d85 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.Option.default.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.Option.default +===================================== + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: Option.default \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.Option.description.rst.txt b/_sources/_generated/gustaf.helpers.options.Option.description.rst.txt new file mode 100644 index 000000000..e2d87fdef --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.Option.description.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.Option.description +========================================= + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: Option.description \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.Option.key.rst.txt b/_sources/_generated/gustaf.helpers.options.Option.key.rst.txt new file mode 100644 index 000000000..5bdf3c6d8 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.Option.key.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.Option.key +================================= + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: Option.key \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.Option.rst.txt b/_sources/_generated/gustaf.helpers.options.Option.rst.txt new file mode 100644 index 000000000..f53fd8aea --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.Option.rst.txt @@ -0,0 +1,44 @@ +gustaf.helpers.options.Option +============================= + +.. currentmodule:: gustaf.helpers.options + +.. autoclass:: Option + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + Option.backends + + + Option.key + + + Option.description + + + Option.allowed_types + + + Option.default + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.SetDefault.default.rst.txt b/_sources/_generated/gustaf.helpers.options.SetDefault.default.rst.txt new file mode 100644 index 000000000..a2c13101c --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.SetDefault.default.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.SetDefault.default +========================================= + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: SetDefault.default \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.SetDefault.key.rst.txt b/_sources/_generated/gustaf.helpers.options.SetDefault.key.rst.txt new file mode 100644 index 000000000..091d8d7d5 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.SetDefault.key.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.SetDefault.key +===================================== + +.. currentmodule:: gustaf.helpers.options + +.. autoattribute:: SetDefault.key \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.SetDefault.rst.txt b/_sources/_generated/gustaf.helpers.options.SetDefault.rst.txt new file mode 100644 index 000000000..a25baad18 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.SetDefault.rst.txt @@ -0,0 +1,35 @@ +gustaf.helpers.options.SetDefault +================================= + +.. currentmodule:: gustaf.helpers.options + +.. autoclass:: SetDefault + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + SetDefault.key + + + SetDefault.default + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.clear.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.clear.rst.txt new file mode 100644 index 000000000..3456efc10 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.clear.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.clear +======================================= + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.clear \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.rst.txt new file mode 100644 index 000000000..acf0628a4 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.copy\_valid\_options +====================================================== + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.copy_valid_options \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.get.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.get.rst.txt new file mode 100644 index 000000000..68a4f4439 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.get.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.get +===================================== + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.get \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.items.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.items.rst.txt new file mode 100644 index 000000000..84da86bcb --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.items.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.items +======================================= + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.items \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.keys.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.keys.rst.txt new file mode 100644 index 000000000..dd44db70a --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.keys.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.keys +====================================== + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.keys \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.pop.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.pop.rst.txt new file mode 100644 index 000000000..01e02e5ca --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.pop.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.pop +===================================== + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.pop \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.rst.txt new file mode 100644 index 000000000..7bd67c1a6 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.rst.txt @@ -0,0 +1,68 @@ +gustaf.helpers.options.ShowOption +================================= + +.. currentmodule:: gustaf.helpers.options + +.. autoclass:: ShowOption + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + ShowOption.clear + + + + + ShowOption.copy_valid_options + + + + + ShowOption.get + + + + + ShowOption.items + + + + + ShowOption.keys + + + + + ShowOption.pop + + + + + ShowOption.update + + + + + ShowOption.valid_keys + + + + + ShowOption.values + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.update.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.update.rst.txt new file mode 100644 index 000000000..22c2ccf70 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.update.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.update +======================================== + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.update \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.valid_keys.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.valid_keys.rst.txt new file mode 100644 index 000000000..931b568dd --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.valid_keys.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.valid\_keys +============================================= + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.valid_keys \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.ShowOption.values.rst.txt b/_sources/_generated/gustaf.helpers.options.ShowOption.values.rst.txt new file mode 100644 index 000000000..b5e4a72fc --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.ShowOption.values.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.ShowOption.values +======================================== + +.. currentmodule:: gustaf.helpers.options + +.. automethod:: ShowOption.values \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.make_valid_options.rst.txt b/_sources/_generated/gustaf.helpers.options.make_valid_options.rst.txt new file mode 100644 index 000000000..55203e723 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.make_valid_options.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.options.make\_valid\_options +=========================================== + +.. currentmodule:: gustaf.helpers.options + +.. autofunction:: make_valid_options \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.options.rst.txt b/_sources/_generated/gustaf.helpers.options.rst.txt new file mode 100644 index 000000000..52a356b45 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.options.rst.txt @@ -0,0 +1,42 @@ +.. _gustaf.helpers.options: + +gustaf.helpers.options +====================== + +.. automodule:: gustaf.helpers.options + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + make_valid_options + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + Option + SetDefault + ShowOption + + + + + + + + + diff --git a/_sources/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.rst.txt b/_sources/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.rst.txt new file mode 100644 index 000000000..cbf734f78 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.rst.txt @@ -0,0 +1,23 @@ +gustaf.helpers.raise\_if.ModuleImportRaiser +=========================================== + +.. currentmodule:: gustaf.helpers.raise_if + +.. autoclass:: ModuleImportRaiser + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.rst.txt b/_sources/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.rst.txt new file mode 100644 index 000000000..3f624ebd3 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.rst.txt @@ -0,0 +1,6 @@ +gustaf.helpers.raise\_if.invalid\_inherited\_attr +================================================= + +.. currentmodule:: gustaf.helpers.raise_if + +.. autofunction:: invalid_inherited_attr \ No newline at end of file diff --git a/_sources/_generated/gustaf.helpers.raise_if.rst.txt b/_sources/_generated/gustaf.helpers.raise_if.rst.txt new file mode 100644 index 000000000..b8829b308 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.raise_if.rst.txt @@ -0,0 +1,40 @@ +.. _gustaf.helpers.raise_if: + +gustaf.helpers.raise\_if +======================== + +.. automodule:: gustaf.helpers.raise_if + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + invalid_inherited_attr + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + ModuleImportRaiser + + + + + + + + + diff --git a/_sources/_generated/gustaf.helpers.rst.txt b/_sources/_generated/gustaf.helpers.rst.txt new file mode 100644 index 000000000..0a4a00514 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.rst.txt @@ -0,0 +1,37 @@ +.. _gustaf.helpers: + +gustaf.helpers +============== + +.. automodule:: gustaf.helpers + + + + + + + + + + + + + + + + + + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :template: + :recursive: + + gustaf.helpers.data + gustaf.helpers.notebook + gustaf.helpers.options + gustaf.helpers.raise_if + diff --git a/_sources/_generated/gustaf.io.default.load.rst.txt b/_sources/_generated/gustaf.io.default.load.rst.txt new file mode 100644 index 000000000..68dbbbb11 --- /dev/null +++ b/_sources/_generated/gustaf.io.default.load.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.default.load +====================== + +.. currentmodule:: gustaf.io.default + +.. autofunction:: load \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.default.rst.txt b/_sources/_generated/gustaf.io.default.rst.txt new file mode 100644 index 000000000..7f1e40e1b --- /dev/null +++ b/_sources/_generated/gustaf.io.default.rst.txt @@ -0,0 +1,32 @@ +.. _gustaf.io.default: + +gustaf.io.default +================= + +.. automodule:: gustaf.io.default + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + load + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.io.ioutils.abs_fname.rst.txt b/_sources/_generated/gustaf.io.ioutils.abs_fname.rst.txt new file mode 100644 index 000000000..be06c045a --- /dev/null +++ b/_sources/_generated/gustaf.io.ioutils.abs_fname.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.ioutils.abs\_fname +============================ + +.. currentmodule:: gustaf.io.ioutils + +.. autofunction:: abs_fname \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.ioutils.check_and_makedirs.rst.txt b/_sources/_generated/gustaf.io.ioutils.check_and_makedirs.rst.txt new file mode 100644 index 000000000..ae79d1ed5 --- /dev/null +++ b/_sources/_generated/gustaf.io.ioutils.check_and_makedirs.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.ioutils.check\_and\_makedirs +====================================== + +.. currentmodule:: gustaf.io.ioutils + +.. autofunction:: check_and_makedirs \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.ioutils.rst.txt b/_sources/_generated/gustaf.io.ioutils.rst.txt new file mode 100644 index 000000000..8db331560 --- /dev/null +++ b/_sources/_generated/gustaf.io.ioutils.rst.txt @@ -0,0 +1,33 @@ +.. _gustaf.io.ioutils: + +gustaf.io.ioutils +================= + +.. automodule:: gustaf.io.ioutils + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + abs_fname + check_and_makedirs + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.io.meshio.export.rst.txt b/_sources/_generated/gustaf.io.meshio.export.rst.txt new file mode 100644 index 000000000..f06e20b69 --- /dev/null +++ b/_sources/_generated/gustaf.io.meshio.export.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.meshio.export +======================= + +.. currentmodule:: gustaf.io.meshio + +.. autofunction:: export \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.meshio.load.rst.txt b/_sources/_generated/gustaf.io.meshio.load.rst.txt new file mode 100644 index 000000000..2962ce746 --- /dev/null +++ b/_sources/_generated/gustaf.io.meshio.load.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.meshio.load +===================== + +.. currentmodule:: gustaf.io.meshio + +.. autofunction:: load \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.meshio.rst.txt b/_sources/_generated/gustaf.io.meshio.rst.txt new file mode 100644 index 000000000..baf44782c --- /dev/null +++ b/_sources/_generated/gustaf.io.meshio.rst.txt @@ -0,0 +1,33 @@ +.. _gustaf.io.meshio: + +gustaf.io.meshio +================ + +.. automodule:: gustaf.io.meshio + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + export + load + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.io.mfem.export.rst.txt b/_sources/_generated/gustaf.io.mfem.export.rst.txt new file mode 100644 index 000000000..8e549491e --- /dev/null +++ b/_sources/_generated/gustaf.io.mfem.export.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.mfem.export +===================== + +.. currentmodule:: gustaf.io.mfem + +.. autofunction:: export \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.mfem.load.rst.txt b/_sources/_generated/gustaf.io.mfem.load.rst.txt new file mode 100644 index 000000000..62a878150 --- /dev/null +++ b/_sources/_generated/gustaf.io.mfem.load.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.mfem.load +=================== + +.. currentmodule:: gustaf.io.mfem + +.. autofunction:: load \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.mfem.rst.txt b/_sources/_generated/gustaf.io.mfem.rst.txt new file mode 100644 index 000000000..fc92d271d --- /dev/null +++ b/_sources/_generated/gustaf.io.mfem.rst.txt @@ -0,0 +1,33 @@ +.. _gustaf.io.mfem: + +gustaf.io.mfem +============== + +.. automodule:: gustaf.io.mfem + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + export + load + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.io.mixd.export.rst.txt b/_sources/_generated/gustaf.io.mixd.export.rst.txt new file mode 100644 index 000000000..58bcb7db3 --- /dev/null +++ b/_sources/_generated/gustaf.io.mixd.export.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.mixd.export +===================== + +.. currentmodule:: gustaf.io.mixd + +.. autofunction:: export \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.mixd.load.rst.txt b/_sources/_generated/gustaf.io.mixd.load.rst.txt new file mode 100644 index 000000000..c4a2e0320 --- /dev/null +++ b/_sources/_generated/gustaf.io.mixd.load.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.mixd.load +=================== + +.. currentmodule:: gustaf.io.mixd + +.. autofunction:: load \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.mixd.make_mrng.rst.txt b/_sources/_generated/gustaf.io.mixd.make_mrng.rst.txt new file mode 100644 index 000000000..8595a91e7 --- /dev/null +++ b/_sources/_generated/gustaf.io.mixd.make_mrng.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.mixd.make\_mrng +========================= + +.. currentmodule:: gustaf.io.mixd + +.. autofunction:: make_mrng \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.mixd.rst.txt b/_sources/_generated/gustaf.io.mixd.rst.txt new file mode 100644 index 000000000..7c89faad4 --- /dev/null +++ b/_sources/_generated/gustaf.io.mixd.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.io.mixd: + +gustaf.io.mixd +============== + +.. automodule:: gustaf.io.mixd + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + export + load + make_mrng + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.io.nutils.export.rst.txt b/_sources/_generated/gustaf.io.nutils.export.rst.txt new file mode 100644 index 000000000..475d4b01e --- /dev/null +++ b/_sources/_generated/gustaf.io.nutils.export.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.nutils.export +======================= + +.. currentmodule:: gustaf.io.nutils + +.. autofunction:: export \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.nutils.load.rst.txt b/_sources/_generated/gustaf.io.nutils.load.rst.txt new file mode 100644 index 000000000..2f64f87ed --- /dev/null +++ b/_sources/_generated/gustaf.io.nutils.load.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.nutils.load +===================== + +.. currentmodule:: gustaf.io.nutils + +.. autofunction:: load \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.nutils.rst.txt b/_sources/_generated/gustaf.io.nutils.rst.txt new file mode 100644 index 000000000..328e40f00 --- /dev/null +++ b/_sources/_generated/gustaf.io.nutils.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.io.nutils: + +gustaf.io.nutils +================ + +.. automodule:: gustaf.io.nutils + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + export + load + to_nutils_simplex + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.io.nutils.to_nutils_simplex.rst.txt b/_sources/_generated/gustaf.io.nutils.to_nutils_simplex.rst.txt new file mode 100644 index 000000000..4a92a5537 --- /dev/null +++ b/_sources/_generated/gustaf.io.nutils.to_nutils_simplex.rst.txt @@ -0,0 +1,6 @@ +gustaf.io.nutils.to\_nutils\_simplex +==================================== + +.. currentmodule:: gustaf.io.nutils + +.. autofunction:: to_nutils_simplex \ No newline at end of file diff --git a/_sources/_generated/gustaf.io.rst.txt b/_sources/_generated/gustaf.io.rst.txt new file mode 100644 index 000000000..df93be5d0 --- /dev/null +++ b/_sources/_generated/gustaf.io.rst.txt @@ -0,0 +1,39 @@ +.. _gustaf.io: + +gustaf.io +========= + +.. automodule:: gustaf.io + + + + + + + + + + + + + + + + + + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :template: + :recursive: + + gustaf.io.default + gustaf.io.ioutils + gustaf.io.meshio + gustaf.io.mfem + gustaf.io.mixd + gustaf.io.nutils + diff --git a/_sources/_generated/gustaf.rst.txt b/_sources/_generated/gustaf.rst.txt new file mode 100644 index 000000000..a02f7d1b3 --- /dev/null +++ b/_sources/_generated/gustaf.rst.txt @@ -0,0 +1,43 @@ +.. _gustaf: + +gustaf +====== + +.. automodule:: gustaf + + + + + + + + + + + + + + + + + + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :template: + :recursive: + + gustaf.create + gustaf.edges + gustaf.faces + gustaf.helpers + gustaf.io + gustaf.settings + gustaf.show + gustaf.utils + gustaf.vertices + gustaf.volumes + diff --git a/_sources/_generated/gustaf.settings.rst.txt b/_sources/_generated/gustaf.settings.rst.txt new file mode 100644 index 000000000..e2c41abab --- /dev/null +++ b/_sources/_generated/gustaf.settings.rst.txt @@ -0,0 +1,25 @@ +.. _gustaf.settings: + +gustaf.settings +=============== + +.. automodule:: gustaf.settings + + + + + + + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.show.interpolate_vedo_dictcam.rst.txt b/_sources/_generated/gustaf.show.interpolate_vedo_dictcam.rst.txt new file mode 100644 index 000000000..0fee90083 --- /dev/null +++ b/_sources/_generated/gustaf.show.interpolate_vedo_dictcam.rst.txt @@ -0,0 +1,6 @@ +gustaf.show.interpolate\_vedo\_dictcam +====================================== + +.. currentmodule:: gustaf.show + +.. autofunction:: interpolate_vedo_dictcam \ No newline at end of file diff --git a/_sources/_generated/gustaf.show.make_showable.rst.txt b/_sources/_generated/gustaf.show.make_showable.rst.txt new file mode 100644 index 000000000..0638ce791 --- /dev/null +++ b/_sources/_generated/gustaf.show.make_showable.rst.txt @@ -0,0 +1,6 @@ +gustaf.show.make\_showable +========================== + +.. currentmodule:: gustaf.show + +.. autofunction:: make_showable \ No newline at end of file diff --git a/_sources/_generated/gustaf.show.rst.txt b/_sources/_generated/gustaf.show.rst.txt new file mode 100644 index 000000000..decf1658c --- /dev/null +++ b/_sources/_generated/gustaf.show.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.show: + +gustaf.show +=========== + +.. automodule:: gustaf.show + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + interpolate_vedo_dictcam + make_showable + show + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.show.show.rst.txt b/_sources/_generated/gustaf.show.show.rst.txt new file mode 100644 index 000000000..d6af1788c --- /dev/null +++ b/_sources/_generated/gustaf.show.show.rst.txt @@ -0,0 +1,6 @@ +gustaf.show.show +================ + +.. currentmodule:: gustaf.show + +.. autofunction:: show \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.bounds.rst.txt b/_sources/_generated/gustaf.utils.arr.bounds.rst.txt new file mode 100644 index 000000000..6a51b4914 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.bounds.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.bounds +======================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: bounds \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.bounds_diagonal.rst.txt b/_sources/_generated/gustaf.utils.arr.bounds_diagonal.rst.txt new file mode 100644 index 000000000..f4c6f49a0 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.bounds_diagonal.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.bounds\_diagonal +================================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: bounds_diagonal \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.bounds_mean.rst.txt b/_sources/_generated/gustaf.utils.arr.bounds_mean.rst.txt new file mode 100644 index 000000000..58e0770b4 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.bounds_mean.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.bounds\_mean +============================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: bounds_mean \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.bounds_norm.rst.txt b/_sources/_generated/gustaf.utils.arr.bounds_norm.rst.txt new file mode 100644 index 000000000..f61e2d22d --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.bounds_norm.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.bounds\_norm +============================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: bounds_norm \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.close_rows.rst.txt b/_sources/_generated/gustaf.utils.arr.close_rows.rst.txt new file mode 100644 index 000000000..ddc56b71b --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.close_rows.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.close\_rows +============================ + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: close_rows \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.cross3d.rst.txt b/_sources/_generated/gustaf.utils.arr.cross3d.rst.txt new file mode 100644 index 000000000..24990939a --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.cross3d.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.cross3d +======================== + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: cross3d \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.derivatives_to_normals.rst.txt b/_sources/_generated/gustaf.utils.arr.derivatives_to_normals.rst.txt new file mode 100644 index 000000000..81e10dce2 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.derivatives_to_normals.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.derivatives\_to\_normals +========================================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: derivatives_to_normals \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.enforce_len.rst.txt b/_sources/_generated/gustaf.utils.arr.enforce_len.rst.txt new file mode 100644 index 000000000..ea6b1dfbc --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.enforce_len.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.enforce\_len +============================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: enforce_len \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.is_one_of_shapes.rst.txt b/_sources/_generated/gustaf.utils.arr.is_one_of_shapes.rst.txt new file mode 100644 index 000000000..1cfd10849 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.is_one_of_shapes.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.is\_one\_of\_shapes +==================================== + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: is_one_of_shapes \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.is_shape.rst.txt b/_sources/_generated/gustaf.utils.arr.is_shape.rst.txt new file mode 100644 index 000000000..be9f86729 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.is_shape.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.is\_shape +========================== + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: is_shape \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.make_c_contiguous.rst.txt b/_sources/_generated/gustaf.utils.arr.make_c_contiguous.rst.txt new file mode 100644 index 000000000..e1d79b522 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.make_c_contiguous.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.make\_c\_contiguous +==================================== + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: make_c_contiguous \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.rotate.rst.txt b/_sources/_generated/gustaf.utils.arr.rotate.rst.txt new file mode 100644 index 000000000..f84a5e144 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.rotate.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.rotate +======================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: rotate \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.rotation_matrix.rst.txt b/_sources/_generated/gustaf.utils.arr.rotation_matrix.rst.txt new file mode 100644 index 000000000..4aad1c879 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.rotation_matrix.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.rotation\_matrix +================================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: rotation_matrix \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.rotation_matrix_around_axis.rst.txt b/_sources/_generated/gustaf.utils.arr.rotation_matrix_around_axis.rst.txt new file mode 100644 index 000000000..a958fd1b1 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.rotation_matrix_around_axis.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.rotation\_matrix\_around\_axis +=============================================== + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: rotation_matrix_around_axis \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.rst.txt b/_sources/_generated/gustaf.utils.arr.rst.txt new file mode 100644 index 000000000..ad6ffdae4 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.rst.txt @@ -0,0 +1,47 @@ +.. _gustaf.utils.arr: + +gustaf.utils.arr +================ + +.. automodule:: gustaf.utils.arr + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + bounds + bounds_diagonal + bounds_mean + bounds_norm + close_rows + cross3d + derivatives_to_normals + enforce_len + is_one_of_shapes + is_shape + make_c_contiguous + rotate + rotation_matrix + rotation_matrix_around_axis + select_with_ranges + unique_rows + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.utils.arr.select_with_ranges.rst.txt b/_sources/_generated/gustaf.utils.arr.select_with_ranges.rst.txt new file mode 100644 index 000000000..63c67dcc0 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.select_with_ranges.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.select\_with\_ranges +===================================== + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: select_with_ranges \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.arr.unique_rows.rst.txt b/_sources/_generated/gustaf.utils.arr.unique_rows.rst.txt new file mode 100644 index 000000000..78692b75f --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.unique_rows.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.arr.unique\_rows +============================= + +.. currentmodule:: gustaf.utils.arr + +.. autofunction:: unique_rows \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.faces_to_edges.rst.txt b/_sources/_generated/gustaf.utils.connec.faces_to_edges.rst.txt new file mode 100644 index 000000000..35153ccbc --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.faces_to_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.faces\_to\_edges +==================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: faces_to_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.hexa_to_quad.rst.txt b/_sources/_generated/gustaf.utils.connec.hexa_to_quad.rst.txt new file mode 100644 index 000000000..8608d88a0 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.hexa_to_quad.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.hexa\_to\_quad +================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: hexa_to_quad \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.make_hexa_volumes.rst.txt b/_sources/_generated/gustaf.utils.connec.make_hexa_volumes.rst.txt new file mode 100644 index 000000000..5e1f1e9fa --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.make_hexa_volumes.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.make\_hexa\_volumes +======================================= + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: make_hexa_volumes \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.make_quad_faces.rst.txt b/_sources/_generated/gustaf.utils.connec.make_quad_faces.rst.txt new file mode 100644 index 000000000..1ba9f9af9 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.make_quad_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.make\_quad\_faces +===================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: make_quad_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.range_to_edges.rst.txt b/_sources/_generated/gustaf.utils.connec.range_to_edges.rst.txt new file mode 100644 index 000000000..3f175f054 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.range_to_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.range\_to\_edges +==================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: range_to_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.rst.txt b/_sources/_generated/gustaf.utils.connec.rst.txt new file mode 100644 index 000000000..35a648d57 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.rst.txt @@ -0,0 +1,44 @@ +.. _gustaf.utils.connec: + +gustaf.utils.connec +=================== + +.. automodule:: gustaf.utils.connec + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + faces_to_edges + hexa_to_quad + make_hexa_volumes + make_quad_faces + range_to_edges + sequence_to_edges + sequentialize_edges + sorted_unique + subdivide_edges + subdivide_quad + subdivide_tri + tet_to_tri + volumes_to_faces + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.utils.connec.sequence_to_edges.rst.txt b/_sources/_generated/gustaf.utils.connec.sequence_to_edges.rst.txt new file mode 100644 index 000000000..540c912e9 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.sequence_to_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.sequence\_to\_edges +======================================= + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: sequence_to_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.sequentialize_edges.rst.txt b/_sources/_generated/gustaf.utils.connec.sequentialize_edges.rst.txt new file mode 100644 index 000000000..47ee57163 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.sequentialize_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.sequentialize\_edges +======================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: sequentialize_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.sorted_unique.rst.txt b/_sources/_generated/gustaf.utils.connec.sorted_unique.rst.txt new file mode 100644 index 000000000..bb749dc4f --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.sorted_unique.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.sorted\_unique +================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: sorted_unique \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.subdivide_edges.rst.txt b/_sources/_generated/gustaf.utils.connec.subdivide_edges.rst.txt new file mode 100644 index 000000000..74c5b6e38 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.subdivide_edges.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.subdivide\_edges +==================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: subdivide_edges \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.subdivide_quad.rst.txt b/_sources/_generated/gustaf.utils.connec.subdivide_quad.rst.txt new file mode 100644 index 000000000..c8c4b4fe3 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.subdivide_quad.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.subdivide\_quad +=================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: subdivide_quad \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.subdivide_tri.rst.txt b/_sources/_generated/gustaf.utils.connec.subdivide_tri.rst.txt new file mode 100644 index 000000000..624022541 --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.subdivide_tri.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.subdivide\_tri +================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: subdivide_tri \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.tet_to_tri.rst.txt b/_sources/_generated/gustaf.utils.connec.tet_to_tri.rst.txt new file mode 100644 index 000000000..ae7a5ec3d --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.tet_to_tri.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.tet\_to\_tri +================================ + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: tet_to_tri \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.connec.volumes_to_faces.rst.txt b/_sources/_generated/gustaf.utils.connec.volumes_to_faces.rst.txt new file mode 100644 index 000000000..042a523bf --- /dev/null +++ b/_sources/_generated/gustaf.utils.connec.volumes_to_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.connec.volumes\_to\_faces +====================================== + +.. currentmodule:: gustaf.utils.connec + +.. autofunction:: volumes_to_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.log.configure.rst.txt b/_sources/_generated/gustaf.utils.log.configure.rst.txt new file mode 100644 index 000000000..7c9fb33a4 --- /dev/null +++ b/_sources/_generated/gustaf.utils.log.configure.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.log.configure +========================== + +.. currentmodule:: gustaf.utils.log + +.. autofunction:: configure \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.log.debug.rst.txt b/_sources/_generated/gustaf.utils.log.debug.rst.txt new file mode 100644 index 000000000..93a9d9bf5 --- /dev/null +++ b/_sources/_generated/gustaf.utils.log.debug.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.log.debug +====================== + +.. currentmodule:: gustaf.utils.log + +.. autofunction:: debug \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.log.info.rst.txt b/_sources/_generated/gustaf.utils.log.info.rst.txt new file mode 100644 index 000000000..ea8e6fbba --- /dev/null +++ b/_sources/_generated/gustaf.utils.log.info.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.log.info +===================== + +.. currentmodule:: gustaf.utils.log + +.. autofunction:: info \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.log.prepended_log.rst.txt b/_sources/_generated/gustaf.utils.log.prepended_log.rst.txt new file mode 100644 index 000000000..67548650a --- /dev/null +++ b/_sources/_generated/gustaf.utils.log.prepended_log.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.log.prepended\_log +=============================== + +.. currentmodule:: gustaf.utils.log + +.. autofunction:: prepended_log \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.log.rst.txt b/_sources/_generated/gustaf.utils.log.rst.txt new file mode 100644 index 000000000..cd281cc99 --- /dev/null +++ b/_sources/_generated/gustaf.utils.log.rst.txt @@ -0,0 +1,36 @@ +.. _gustaf.utils.log: + +gustaf.utils.log +================ + +.. automodule:: gustaf.utils.log + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + configure + debug + info + prepended_log + warning + + + + + + + + + + + + + diff --git a/_sources/_generated/gustaf.utils.log.warning.rst.txt b/_sources/_generated/gustaf.utils.log.warning.rst.txt new file mode 100644 index 000000000..32de9555e --- /dev/null +++ b/_sources/_generated/gustaf.utils.log.warning.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.log.warning +======================== + +.. currentmodule:: gustaf.utils.log + +.. autofunction:: warning \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.rst.txt b/_sources/_generated/gustaf.utils.rst.txt new file mode 100644 index 000000000..6688aebcd --- /dev/null +++ b/_sources/_generated/gustaf.utils.rst.txt @@ -0,0 +1,37 @@ +.. _gustaf.utils: + +gustaf.utils +============ + +.. automodule:: gustaf.utils + + + + + + + + + + + + + + + + + + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :template: + :recursive: + + gustaf.utils.arr + gustaf.utils.connec + gustaf.utils.log + gustaf.utils.tictoc + diff --git a/_sources/_generated/gustaf.utils.tictoc.Tic.now.rst.txt b/_sources/_generated/gustaf.utils.tictoc.Tic.now.rst.txt new file mode 100644 index 000000000..644792ab6 --- /dev/null +++ b/_sources/_generated/gustaf.utils.tictoc.Tic.now.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.tictoc.Tic.now +=========================== + +.. currentmodule:: gustaf.utils.tictoc + +.. automethod:: Tic.now \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.tictoc.Tic.rst.txt b/_sources/_generated/gustaf.utils.tictoc.Tic.rst.txt new file mode 100644 index 000000000..7c933ba95 --- /dev/null +++ b/_sources/_generated/gustaf.utils.tictoc.Tic.rst.txt @@ -0,0 +1,38 @@ +gustaf.utils.tictoc.Tic +======================= + +.. currentmodule:: gustaf.utils.tictoc + +.. autoclass:: Tic + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + Tic.now + + + + + Tic.summary + + + + + Tic.toc + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.tictoc.Tic.summary.rst.txt b/_sources/_generated/gustaf.utils.tictoc.Tic.summary.rst.txt new file mode 100644 index 000000000..df0ca877d --- /dev/null +++ b/_sources/_generated/gustaf.utils.tictoc.Tic.summary.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.tictoc.Tic.summary +=============================== + +.. currentmodule:: gustaf.utils.tictoc + +.. automethod:: Tic.summary \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.tictoc.Tic.toc.rst.txt b/_sources/_generated/gustaf.utils.tictoc.Tic.toc.rst.txt new file mode 100644 index 000000000..86861ccec --- /dev/null +++ b/_sources/_generated/gustaf.utils.tictoc.Tic.toc.rst.txt @@ -0,0 +1,6 @@ +gustaf.utils.tictoc.Tic.toc +=========================== + +.. currentmodule:: gustaf.utils.tictoc + +.. automethod:: Tic.toc \ No newline at end of file diff --git a/_sources/_generated/gustaf.utils.tictoc.rst.txt b/_sources/_generated/gustaf.utils.tictoc.rst.txt new file mode 100644 index 000000000..08fc2f81b --- /dev/null +++ b/_sources/_generated/gustaf.utils.tictoc.rst.txt @@ -0,0 +1,33 @@ +.. _gustaf.utils.tictoc: + +gustaf.utils.tictoc +=================== + +.. automodule:: gustaf.utils.tictoc + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + Tic + + + + + + + + + diff --git a/_sources/_generated/gustaf.vertices.Vertices.bounds.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.bounds.rst.txt new file mode 100644 index 000000000..d119854b0 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.bounds.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.bounds +=============================== + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.bounds \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.bounds_diagonal.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.bounds_diagonal.rst.txt new file mode 100644 index 000000000..49fbe0e37 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.bounds_diagonal.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.bounds\_diagonal +========================================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.bounds_diagonal \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.rst.txt new file mode 100644 index 000000000..ec4be954c --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.bounds\_diagonal\_norm +=============================================== + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.bounds_diagonal_norm \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.concat.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.concat.rst.txt new file mode 100644 index 000000000..f8f87fcdc --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.concat.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.concat +=============================== + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.concat \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.const_vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.const_vertices.rst.txt new file mode 100644 index 000000000..87bfb063b --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.const_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.const\_vertices +======================================== + +.. currentmodule:: gustaf.vertices + +.. autoproperty:: Vertices.const_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.copy.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.copy.rst.txt new file mode 100644 index 000000000..0d41280dd --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.copy.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.copy +============================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.copy \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.kind.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.kind.rst.txt new file mode 100644 index 000000000..2b90e57eb --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.kind.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.kind +============================= + +.. currentmodule:: gustaf.vertices + +.. autoattribute:: Vertices.kind \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.merge_vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.merge_vertices.rst.txt new file mode 100644 index 000000000..68a9f0471 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.merge_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.merge\_vertices +======================================== + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.merge_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.remove_vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.remove_vertices.rst.txt new file mode 100644 index 000000000..88d00e99c --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.remove_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.remove\_vertices +========================================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.remove_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.rst.txt new file mode 100644 index 000000000..c1186fc72 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.rst.txt @@ -0,0 +1,107 @@ +gustaf.vertices.Vertices +======================== + +.. currentmodule:: gustaf.vertices + +.. autoclass:: Vertices + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + Vertices.bounds + + + + + Vertices.bounds_diagonal + + + + + Vertices.bounds_diagonal_norm + + + + + Vertices.concat + + + + + Vertices.copy + + + + + Vertices.merge_vertices + + + + + Vertices.remove_vertices + + + + + Vertices.select_vertices + + + + + Vertices.show + + + + + Vertices.showable + + + + + Vertices.unique_vertices + + + + + Vertices.update_vertices + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + Vertices.const_vertices + + + Vertices.kind + + + Vertices.show_options + + + Vertices.vertex_data + + + Vertices.vertices + + + Vertices.whatami + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.select_vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.select_vertices.rst.txt new file mode 100644 index 000000000..c6fed616e --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.select_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.select\_vertices +========================================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.select_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.show.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.show.rst.txt new file mode 100644 index 000000000..5ec3d30d7 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.show.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.show +============================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.show \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.show_options.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.show_options.rst.txt new file mode 100644 index 000000000..7d17f42e0 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.show_options.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.show\_options +====================================== + +.. currentmodule:: gustaf.vertices + +.. autoproperty:: Vertices.show_options \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.showable.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.showable.rst.txt new file mode 100644 index 000000000..cf31c4796 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.showable.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.showable +================================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.showable \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.unique_vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.unique_vertices.rst.txt new file mode 100644 index 000000000..e596dc20d --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.unique_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.unique\_vertices +========================================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.unique_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.update_vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.update_vertices.rst.txt new file mode 100644 index 000000000..1899e8146 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.update_vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.update\_vertices +========================================= + +.. currentmodule:: gustaf.vertices + +.. automethod:: Vertices.update_vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.vertex_data.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.vertex_data.rst.txt new file mode 100644 index 000000000..24bf3c61d --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.vertex_data.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.vertex\_data +===================================== + +.. currentmodule:: gustaf.vertices + +.. autoproperty:: Vertices.vertex_data \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.vertices.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.vertices.rst.txt new file mode 100644 index 000000000..ee19dbaaa --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.vertices.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.vertices +================================= + +.. currentmodule:: gustaf.vertices + +.. autoproperty:: Vertices.vertices \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.Vertices.whatami.rst.txt b/_sources/_generated/gustaf.vertices.Vertices.whatami.rst.txt new file mode 100644 index 000000000..fadbdcd26 --- /dev/null +++ b/_sources/_generated/gustaf.vertices.Vertices.whatami.rst.txt @@ -0,0 +1,6 @@ +gustaf.vertices.Vertices.whatami +================================ + +.. currentmodule:: gustaf.vertices + +.. autoproperty:: Vertices.whatami \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.VerticesShowOption.rst.txt b/_sources/_generated/gustaf.vertices.VerticesShowOption.rst.txt new file mode 100644 index 000000000..dfa2fe30b --- /dev/null +++ b/_sources/_generated/gustaf.vertices.VerticesShowOption.rst.txt @@ -0,0 +1,50 @@ +gustaf.vertices.VerticesShowOption +================================== + +.. currentmodule:: gustaf.vertices + +.. autoclass:: VerticesShowOption + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.vertices.rst.txt b/_sources/_generated/gustaf.vertices.rst.txt new file mode 100644 index 000000000..2f9562d4b --- /dev/null +++ b/_sources/_generated/gustaf.vertices.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.vertices: + +gustaf.vertices +=============== + +.. automodule:: gustaf.vertices + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + Vertices + VerticesShowOption + + + + + + + + + diff --git a/_sources/_generated/gustaf.volumes.Volumes.const_faces.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.const_faces.rst.txt new file mode 100644 index 000000000..f7ddfcfe3 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.const_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.const\_faces +=================================== + +.. currentmodule:: gustaf.volumes + +.. autoproperty:: Volumes.const_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.const_volumes.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.const_volumes.rst.txt new file mode 100644 index 000000000..6dd895caf --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.const_volumes.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.const\_volumes +===================================== + +.. currentmodule:: gustaf.volumes + +.. autoproperty:: Volumes.const_volumes \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.faces.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.faces.rst.txt new file mode 100644 index 000000000..ac9dfcb76 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.faces +============================ + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.kind.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.kind.rst.txt new file mode 100644 index 000000000..78c6406e1 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.kind.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.kind +=========================== + +.. currentmodule:: gustaf.volumes + +.. autoattribute:: Volumes.kind \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.rst.txt new file mode 100644 index 000000000..74ac36ce1 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.rst.txt @@ -0,0 +1,172 @@ +gustaf.volumes.Volumes +====================== + +.. currentmodule:: gustaf.volumes + +.. autoclass:: Volumes + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Volumes.faces + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Volumes.sorted_volumes + + + + + + + + Volumes.to_faces + + + + + + + + + + + + + + + + + + + + Volumes.unique_volumes + + + + + + + + + + + Volumes.update_faces + + + + + + + + Volumes.update_volumes + + + + + Volumes.whatareyou + + + + + + + + .. rubric:: Attributes + + .. autosummary:: + :toctree: + + + + + + Volumes.const_faces + + + + Volumes.const_volumes + + + + Volumes.kind + + + + + + Volumes.volumes + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.sorted_volumes.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.sorted_volumes.rst.txt new file mode 100644 index 000000000..e8ce47df7 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.sorted_volumes.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.sorted\_volumes +====================================== + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.sorted_volumes \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.to_faces.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.to_faces.rst.txt new file mode 100644 index 000000000..e8a40c9ee --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.to_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.to\_faces +================================ + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.to_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.unique_volumes.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.unique_volumes.rst.txt new file mode 100644 index 000000000..0b623560c --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.unique_volumes.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.unique\_volumes +====================================== + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.unique_volumes \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.update_faces.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.update_faces.rst.txt new file mode 100644 index 000000000..4d819e167 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.update_faces.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.update\_faces +==================================== + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.update_faces \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.update_volumes.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.update_volumes.rst.txt new file mode 100644 index 000000000..0147218d6 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.update_volumes.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.update\_volumes +====================================== + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.update_volumes \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.volumes.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.volumes.rst.txt new file mode 100644 index 000000000..f2785973b --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.volumes.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.volumes +============================== + +.. currentmodule:: gustaf.volumes + +.. autoproperty:: Volumes.volumes \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.Volumes.whatareyou.rst.txt b/_sources/_generated/gustaf.volumes.Volumes.whatareyou.rst.txt new file mode 100644 index 000000000..028be048a --- /dev/null +++ b/_sources/_generated/gustaf.volumes.Volumes.whatareyou.rst.txt @@ -0,0 +1,6 @@ +gustaf.volumes.Volumes.whatareyou +================================= + +.. currentmodule:: gustaf.volumes + +.. automethod:: Volumes.whatareyou \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.VolumesShowOption.rst.txt b/_sources/_generated/gustaf.volumes.VolumesShowOption.rst.txt new file mode 100644 index 000000000..b29ecc7a8 --- /dev/null +++ b/_sources/_generated/gustaf.volumes.VolumesShowOption.rst.txt @@ -0,0 +1,50 @@ +gustaf.volumes.VolumesShowOption +================================ + +.. currentmodule:: gustaf.volumes + +.. autoclass:: VolumesShowOption + :show-inheritance: + + + + + .. rubric:: Methods + + .. autosummary:: + :toctree: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/_generated/gustaf.volumes.rst.txt b/_sources/_generated/gustaf.volumes.rst.txt new file mode 100644 index 000000000..9c93686eb --- /dev/null +++ b/_sources/_generated/gustaf.volumes.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.volumes: + +gustaf.volumes +============== + +.. automodule:: gustaf.volumes + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: + :template: + + Volumes + VolumesShowOption + + + + + + + + + diff --git a/_sources/details.rst.txt b/_sources/details.rst.txt new file mode 100644 index 000000000..9e8dcd267 --- /dev/null +++ b/_sources/details.rst.txt @@ -0,0 +1,8 @@ +Feature details & options +========================= +More detailed documentations for available features and options. + +.. toctree:: + :maxdepth: 1 + + Show Options diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 000000000..7160e80f3 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,32 @@ +.. toctree:: + :maxdepth: 2 + +.. mdinclude:: ../md/README.md + +Sources +============ +.. toctree:: + Github + +Contributing +=============== +.. toctree:: + :maxdepth: 1 + + Contiributing + +Library +============ +.. toctree:: + :maxdepth: 1 + + API references + + Feature details & options
    + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/_sources/python_api.rst.txt b/_sources/python_api.rst.txt new file mode 100644 index 000000000..9c5ec79ac --- /dev/null +++ b/_sources/python_api.rst.txt @@ -0,0 +1,6 @@ +.. autosummary:: + :toctree: _generated + :template: + :recursive: + + gustaf diff --git a/_sources/references.rst.txt b/_sources/references.rst.txt new file mode 100644 index 000000000..35a67ea72 --- /dev/null +++ b/_sources/references.rst.txt @@ -0,0 +1,7 @@ +Library References +================== + +API References +-------------- +.. toctree:: + python_api diff --git a/_sources/show_options.rst.txt b/_sources/show_options.rst.txt new file mode 100644 index 000000000..1e87aae0c --- /dev/null +++ b/_sources/show_options.rst.txt @@ -0,0 +1,4 @@ +------------ +Show Options +------------ +.. mdinclude:: ../md/show_options.md diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 000000000..2af6139e6 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +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; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 000000000..4d67807d1 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 000000000..c1f8f2304 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.0.25', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f875b5737e55a25b3fd2733b76c8d52c1ccfbec6 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/gus_dark_mode.png b/_static/gus_dark_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..d9726d4649bef659cce820c818eb0960b7ce31a8 GIT binary patch literal 20953 zcma&MbyQu;?+1Dg?(VL|trUmi-cpLYySo)RXz@~t6!!{#aCdiir#Qu-IB(N?@9+EG zfA6ftT4c}cg4`RwX@A4BbeV>}- z4L)VfNqK&cWN1r@r~q=;sl4 zAzILGy6q{KF?uuQovGq}+}?sABjzvA?D%Qri7eYN=>B)goycuxz^8GJ_D`D!xO=r) z3!2ehXUUEsXNw1WcekfIp_6~eyA4+vndT_JpI<($EFXzvRg%t!|L{|vLiM=zAbQP@ z?CoR7?a%y#I(l%ocmHa{@AKL3*-$bMqV=$I3Qa9Lu3lW0Ph6#6S8Um) z=Qe2+1Jh4&9g5BDzRR#{3dg2z;k6#qH@V;GI)?TP2%U@*@oTNI1l(;tPNzNfe`@q( zk`iwx%hH0D{b;Zt9Z2^-XTrfb(p(upJ*mwqySU3jQ7lNk`P#9>-@d-HgH;(qS)FK* ziJQeD?61RE*U*X~7OvG;o)Xswsf|-8U$c$of!mmq8#CJB+T!mQW2ATBCFU-{){kMc zv2RiByt88+&ow|ularE9Vy@5mE~haPdi%5fy<}c~ydsl^jdkh8OIGa~6N_m$m%MMO zwm&s&?WL!LQ$5q1@f zd=7}_(RkaqCiUwdj{MDzRtM5peyXFME-uM`IF%);9XXiQ zhZ>B&o>Mxi5fC$e3Z8-s;??Cqy^hS8{c3mNuF7G@+L+TkoiJ$c?vkXbeaKYy`^MMW zb=yORu7r>D2Qef=-?rAta^H@J0>xZUQ*o{z0;!VWKFHZ&_A*TNfi_HP)Q8w5xLowLZ^uSlr(_)`dYf|Wgp8gt7bsEVFgGLe6XH}j zdU~G}j3KkX;g*QN`mlwiAYHR%z0 z!g1h2v8w6O%Kr9OfZ?s}dVrwypFfrvy@Hjh^nM(TyyxiNZVI072^HDuE%nwZPOK7 z;K3jIuuAMxzql>nmW%Hs5Gx(A#geqUQY9?GsD$Aa%;F9&7)G-*#q{Jpqf|fK%pk^v z^c6kpM~)t$ksCLIDk7uX{I5vKHdwzmnpV~)`znJ6*Dlxoto0a;#+8*~sN^#ayau%K zKU)3Wj{D!d5M+jBM26%2da+zke;@I)UBR+AbgUq!5X>U8YeB+xF1^7&lP_%(y5=DS z9S_(33L49PkNO*0hG=^KYf!e>8^Q{seL#*%RiJ}YGI=arKIt3frfP-sD`T`YYWP)J z5B3DY__lVXeRi?|jgQ~xZ`*l$7|EZ@;sGw%r-cwZI5H9@CQ~LKAH#jhR9{Rk51u(?NsLA;Sr=j})|G0)%QUWypdUDveq#9o zGv~c}zVmxC`1Z_I1!Fprob!GIHyu3UzTHL8#Uq-0An88LgHEVN5cu(-95x6h46}kH zc3kDPc>m|ZH+RyOUM_`<}vF>EZrY2z*Fdm=(&4_0(8 zIbcwz^Pnp2+HyfJ>{3jDP4gAJG0h~CJz&fD#AofC0gROdG9$xBt`1MG2 zJMAY?7(|^s(Y?@ld3DLbC9V&cH%?RvtrKnG@KPvk6k_7(U3A4rZ`HPl``_Y)2YTZ- z(B{q(*x>F)C92vnyqYTf^pkSLveb;mBx7HY?@0R|j)*-#plM~kvjWkuts*pN_xqMu z9fJ-ipI*a!6Vu}NEB3_;Tm@T?9wlfd>=w=IrRu4i-B(9gyEg%l3{lG275Ah~kKDyU zxdW7FiVWyqalyVvCEWI4ocOK3%#jl!N~Fv;q>sZ0FTf))&BGM@ z&e@#5V7Fb}E@V-#5*T~s3we1@YoZJ|)a3ner7Vluk z5>0bI7<_>x6&=@ti;f7EXhp;%EcaWqc~2u-^m#bart7B|+KzBwf|?-K!HxkI)9pKh zuKg+;qX2GH=n8h5!;6Fj9n7T)@`_?A5 z68@@5-|!HNTJ2U1TQAJ3qz&`5@Q2oZ{c6Y0O1>ZTQdjDl-BW7>sUEPim1HKB-pR;sF=0rG5RZ+~uj?g4Wz*5$fOkEWZTidF{oB3Y{917O z6DH3aG>lSSuNHmH)g?xgyUsJ@j76*e!LZhq9TmsRH1T7tAng6dQd8hk<-TzloIn!PQyAsfB|T8iQz_?df=tWzsQaQ5 zy6ZGk)D++YmY5NA;nBqH&cz1t zlYLZy{5S?>9vnaU&Q{-)oEZJ@7BRbo_vr=snZ;rG*oaC9$Bj5$VZH}M4l_fauypgY zdNSE*jZ;q%8%m_%jK8&5z2r|?&bc385Tgs}Mj~lp?xVR3Gz+@Nq9W-Lu(F6=mbIK* zd+f)L;x~Q>F5LIxQ$sVi{4qrFIXGh_s2{=S1;apEKE%UKlo(8L8uS7h%E|KK?IVa! zp8V`W0Tr8DjbOP_u-O%&9;@&%ARFuM)`IrkHpCI>EZQ^YlHltj)mOxWC zp-Q05HWiw5gWp1*FcuYpAoJ!}$q{Cnnowd=;L^Kwk|LT}F^W(eT}$1+5DR*x6FYgr z&)&wm)){5Jx{L2c?GX7{2_t^z`qe&_`JCm@^3TsH&iog_Wo3Audx@lL`k1Lo*T@PI zE6hTWC6xP5*v!MrB(8pJILe3$!?rB;9;E5-i29@pk|5i*o-&aTUBrw{bAm9FW|Go^ zD0Gn9$l(x7V3y?c6KM3~x2$<)#W_fF2}5&j;PQBy=+un*?zKB#kZd8GA-#}WbreG7 z>r0N5e8O4`f6yXIB3|uAz#oMP&@8aUs=pYJMlDHaJjGzPfrO03<@w?kc<9GtkM57C zXW`=3LD;P03{6sa&iRa^2w9QGln{s+XA3_orCif0O|)lh^aZKf+*0A-BiPxXd%>+% zw)3*y;o+qcvO4#@y&*zMAvF)FS{cl#AvHo|Koe_e%O;|(Gt8IK&TvtmOZXi(m-|** z&8daQXniXM`-8o`rjk@iPmN5-rI=keek<-z+PH)-r10&rPDRP^rn74%I;=T8HUg^? zS&q*9EUAN6xhp5z-)35|Si2!@28=E?CJGGNJ5fGN*+3{clmHB!6U4EOT(QLE4Nvjf@1>kLc-)ve><}cQ5A!>} z4uOZ)?JKrJcn=EQcmJ%a9Dmn~NRGJnemA+2^2A}sUjd>c`5Y4~*4AAJ*@4}H?0(-r z3yr{t(a#1>AH0MUiZq7Xl?frl_RDNqi*>?jz@v@$^%==7yjkEL&Dg z6HOItLqK0}@KqP~3~pn2Lk(-!^QD=Z#s>wsU)XKvu)@&jDy8g~gyOb17~!0cuMPb_ z9ID=gz%qiXG+sGV3-B<+Xe1G(mUha(xFC^MSi>BciD7(IHp3NTzW%HX`c^t7>+Xq$ z|IK!)gNyxkQ%0X7xc5gcQjbawKVBpvv4G%r5ybE%YkT=-(%{Zf>al+J@3rHVh|&)h zodw8okcCjC*L^%OEIdB4LLgc>y5YC8;uhY0Q{L)~P+~cLn5fr0QWlftMr$vc!jCo* zAc%!YU2z8JMRFL2pG>9%zStq!Y_OG=hRjtqcQsZa#kAn3JDYtZ+!}GwHRbH!%dZ`4 z(UwSgpjNEdEXJQGW=ZAZouAFIMZnVNN|GG1#$&enqPsEMVCV69&(X*?x4OuQdoxy8 z?K@caMCHOSQhRS%D5x~om)(lW8VZ9GtiKgcn$hj?)8{c)(Z+=pi?eISrl%*k9VtAx ze*I>q`1e2`-4L?9m;28+DKaWhFODVL?k)<(3|UO8k;#yyP#uHVZ;L|gik|Ef6lJsn zXreq7Z-u1_5(B&$Ra4p(3+KhByd-yf7*ttV37*tlCLah5BlsikezaUWW-ZVBndP50 zvY2x8Xut~pQP=ChLg3V~7NB`m`puao1 zpv=`&{-^i$o&MQy*hZT2+t7{p^RI$}Q-XaQ>yU&%59|%Asww8R$c?did>PRB4kaK9>``r4vBv-a6^x4?_JkF;EFX{Fd#4>S2TgtRwA8mTF;pU{FOrqwsX#A)gm!jB(Ir zBPchPE!7^&avcH@l{7|9$y z_oMTwZ^XnHEBtVZ+f5ybnRRwsPpRq;U+pB~D}}P7w;MKsH4U&LAs1Cd199n6uasA& z@<-690vn8M^S$p_$j`jpL=CdT_bdWne$wQpCs=IvyNSbF549x8Sn3icy-E(EDs`*^ zlW`~b8`Mx4%D9)Y(0lfh`t>)Ekx=jLm#KO8gPZHwDYON>+11)%9kkjb#y_@-%(C^- zgUHPBSq+C^9=)}`(wrEvdGxvsduW?3YUBF3ac)>DM(a?=CtNkZk}M?|E0dlX%hbZ7 z17XdG(0!LTk87qy)fSc3l9rXH-e#n>lhb*kmC=La52&uM**;nI)zA!M709gVx^Mqz@N##*tkS5S zk*%Q;2^x}0Yp4#l3XD5h#cxx?nr`E1AV3Z50MCX}+;1H2x_uE!Cz;cD%P1F%@KSU2 zG+QtO)@l4q-UD^7Si2H+L(q+gAbcf-!ZzH=%TtSv(;$yt%&9eSa;i=u`0d60?7RZf z2F*7CP9oizmAYMm`_LR*CD>)8r$!o8fk?hMrVfI zbHQ#(hu;)`}!5!~If8eqBxZaZ(p65O;M6_6X_S2Yj1}HlzWD7bGbQlf)&H!VPZg zw6|W3^lm{sgG^u0Aqhm5qqa=nR^(IIcP7~5edM&+5O!>kCXumaE8r4CQT}AP8Q1B# z>4ue3hInBwIQlZwHVOIdB$qO&2qnF@X4ElCwAzq`h6)84E5Vxjh_LFFY-@-yxcZ6OOnq4q4TbxUcBGeIku`-#~l=E`GUF&rUf^Crsb>}6?G z*ZBdn)oy#(KX({cMCPXGvf>b#;L~z@+%UBied1t3TDe+eMFWo30>wr7Fqa=;c9R?q zeZr&TBz;;Jy|E6CWpd%aRC-WcIZ))Ltv(3J&VF>bbky@{XC?b|=Rx^iEgsH!DG!)W6bW3`|{4~T*Kt6$76zC6YHDNW!2Rgf0o7o_mwB7g;0-a9`m_Mjjseg z`Fhq+`QJ*XGCakYXqXy>C@y1{410GI)45aJ1vKqLh&^7K8nK;3P!yqe#1?P79G7V) zjmlv2ZIu)q57Ad9N9Up-@XdiJ-?T%=KpZ3m@Puuq?bHQWb65VRgQY4kkUx!F$cu}x zj2^4a?o!!17IHsGf=d&#H3Q#$k9tz(zx91TCr)TTD9^J&di^z3~ zk#!qRDnzM~Er?5TO1f82F>m}(XOsw4W~tgYa@iw%Wi6+oM+QF|6igYVj!0;!Pp$_q zegfMy-7P;Zt#EIsV}-rh?ku{p{9&mXHbf@WTEmEJ%x&=v1Fi{gEi-~4wiui^8Z907 z;MXttc*4E2BEG)OQRl43t^u*Hc^tXg7;r{kc2-63g@5O>4?chGoRDaic%AMwl#hxd z>Y{IbO1hIf2s0X;nsOoRoS?<(0iEbBHnZtc?c!3OWHRil(b{V2)-IaTy34!|U2kfs z7;;aQlrzCrjH8keM>kh9qE#wViVS`An?d+KxYUp)S)%kMkpO{mD8l?@@KgJ-LrKRk zDHf)5kdFb`jwu|{5zKJIrZ1(C(mC9TD6FPWuc1ANJ1c)yNaqk~cNKxXR4BCqQSS%@ z`!39Gp!C;wCOnk3J7PaojPNCxX4{gLg*$#f(90?HeFT1fIGLz~=A+XiWlzVaOrW<6 zOYz<%^tZ7$HgF|{V4^511-b(@fpo8Q)P;a2$WC(Ft{@O9?(-iQl$uTiJVbPpe=Ci+ z1BZ)9Pd@`5#sGn+K=M-JYF-P!mxmqIEL+x24XXuzpnE#E%a=|`<)r6ZOPgqb-L>AR ztW+lqS>(qiphJ@@&F~52Y6=Y6B1PMK(vl_yktc=*7?wgCrRTIGd&r#vHLDP{$RoWQihOQ3?V45;eF%>IuIAp}6_fc_i(kGz&}3Y>!h zN&PcQ)dXN1g8_vQ2BC%!fSyU}D&QZaXLMB{(0J$?3>5w^3CI`o5HoL@vmqw{ z32>1DxODx;1@u4iUtaJ*r~ogjCV;E~fz|=mfG*+eSbE`XecwLKIN_^k5t=rai@g{6!u&J(FA1Qd1_VB<{CD&} z@-H07EGA!} zhz8d;wwFF4Br!6+_ouz%R^>$xJ46Wj zMXHS$1MAX^EX2k2URbvxVy#faZg_Om(p9#AJB^2rk1w7c=HZo)kS_NDJm@1OYQ9IO zd+YVU-izX$dN@t`;gJ!GQ}Lsv?$nG7`>iXULO}bJl$5WjsW=9p@?QRI#>f%w1??Dk z7gUaM`Z{L%k2^Ik7$wU}bppdOFk+&ttgLtf#dbecyu33Nozx}vNA1;_syu|&+1c2% zZIHwYcmTjYK7x(JC50i$yCf}!{BWHyB{w%WW>5F1sHok5lJuqr^YGtzxVXks)6!g% zV6x+L0N|Q$-n^+QB+$)pZaX}*vo$fvm8;jXu(0su#!MkDrB=ACFVUk2`t2&bIE@7v z2+>g2tUa`}u_;X2r=?jLrLU`)vU+7=ZT<7}F5(2T$8ni0TXz`?$cAx$gl%34;rfmwY+FgT0I{JCH z^clfex(*E#!}s^TYz3sht943F)Ja(tQMzZ&af|2n2c4_Bupo5!((j*D?wT2Y^X}c^ z_}ApT8EPy&ig5Dif`Wq7WO~>*7(V?wj)Iu#As1wJD9_qlg`1I+imnC-GAH3SZkU9p z@pX=*X>V_DrlTVWmk4B16cm|j^;SuV1W_%WxD?EEcbGIs!p^M^3NP7LF#k5lnhXR3 z6Gb;LWDZ9^mxT%7@WwJ24a(ySD9zSL2t!p<*nifs|FU!1(mZpyg49@Gt{DsRURz6x z@!R+BF|aa>p(*T@dJpDdMKn-+Z0Gasw@`JMFJHb`G=PX2Ecpz8DaDMD6RqD_694pl z>p;_#ZV^}>XHNEMHqh18b$tnIWCh*2`R&4V7fD#D7o=!Mentm)@;aREOQz;DSV)!W zAT4~ZqFYQXeJDPEzmk%YAQpW>M?4H@V&`+vS!!mc2NrW1nkHp}w}-8dPlJ}0mQy?% zSDF=wlTrFT9)P3=OwY^1qn?(P#qpcJ?XSjnCrcV6tZZ;bSi-f57>cOp7V^eD4BF5{ z1VvOZQAmBg05lOv5fz^B1LOJO%+gXihq8o)rKLSSrr0W;^!n$ZkXLELGZzaS^%z+EQTW1j{i*fD%*?>hoT(V;w zIfM2=^`toi6DYQWd#S(I<)>pyBzyZ7-2q)1JgF7PDa1BBIF27+qq&t>f9SZ+mFF<$Sg^4n&ycQ^K56-nP7gj zO5Gc-LHatzdHETAHsJNbK~wk}t{PmuL{m$NbSp3;?I(P*JNIhSoV8rmrD>O3`0NHf z=IB!_y?z$gb|Bhx45DXPft^aIL;;B<7M0oyxx4^F=JpEizwBaW?^D|G^yXOr=OT{) zIR0R-)NSeM83>AMM@SA<2Cw>_#{`4gN|zFfx@PBW2-_3ODhL}Jb*7E9sX>j<^m4(0 zN2CaC_Vz?J&uZTi;C(&=aVPqc!vX`q*vq=p#?SMj;mJZG<&3MNfQjZHr85Q{Sug}+ z5E-5~h{c)-uK`n^hodwW1~giVj3LpT?^L-AEcHNSqfX*|st^*0j{EvsYq1Bm-n?AS z(6C!w9gMQQLx;L5im4djb}Y%5X~D|kM|R+H+B!Yl5P+x1PrUk+ScTpiZZ?Q*psl#H zh}TKmR~;uVv?B+QSV8ch_(`>_QvpK(&L3mkMUYx@B74x_956nInMw$Jti!B`4C37V z_9WcMPzNH^2I--K+Am)YB7;G4W~^F7rl`Pq-0}#jBUn55w5GDc-wzYFRNdw(+ym3I z5ELa2wGN6Z&I2j$9f++nLe^B4fV|K+3^>1uvJ2n2AhCl$av{BnaLE(E_gB%)MHIlt zSaGS`mLvQ~LBL@t4jd-vvVm&q?nwuPEpyh+nt5l03#oZPdRqqqL0%Wl9$*BmG4rLF zuhF53ZOpY*v*V^0`Wf4V1#cCOuY4t?&P>VXM zj5QZ5B73746Kf;y*v{%Y&!T4G(-k(b3~?!P=1!PeM+I}h_|nzAr)7~35IbzSxw#QM z&=@Lak||%*N;xG6f<10G7CjWrh=4#E1;mW3(MV|z2NwMyr-+h?fZe6}!lX~4k8|Qi zPJz$He0)p}AD#y6*omIeN!fXYHa9ZQF&ea4+G{QigghFBe@~RsIRt%+*2vKMx&bDp=@eJKp0E!R>)|pSLS9R+Nh)R zuf7Gn->k&1_*sIXr!1#O46~aT(pk1X+XAIF-R>ho_&Y7dWAPm!JR~uxdCKTVHsh{V zeoyY$wPmlv6T6e>7Xh$c90vZBaR4 zHWOul-~ynKa5!FF*t)ChyE#a{MAICB;;#qJ7oNni>VMR*ghi{={^^fyn0Xm=)B~f@ zXjY0sYPt2=qBfuNp}h{*ejCWNP!R)zB@eEq5uJ~d^buT<%RbbG5b8sV%W+Ia5UHKD zF=t%MwvYxgeW$_9j z=!go|^2sa%(yf7e{YwADFC03zK%&aU#bpdiGL{=19Ytl&G2f&5P&pN638W%Xxs2%y zFIBpGQC##jtio76VVZSr6W=)Zs#v9rZ-`kmd3{shrdBtm&sk%xW*&AB7`ONkUu~fa z)G8Q+1|B@cx9*+8v(Zxrmpb^4P1}NDe4SfTQIKzMa@==%b|j)GT0a`tF|@X@HZk`N zgctX?ulLx#t{}_SbPi*o$^9n_7Grz(VrOq{-7jBb1Ff#O9vh6@D^j(zbv~L{1M+Y>a10QgNWS(4>k1*k&Bv?S{7Pt zrPSKdJ3|gz1fT04LJI{Or;U3%s^(M5C34Jn#KWxZ?iKEDI}bcw6(dyY?G3 zSXAm+)ScaB^8%X-s5N}z@pbVd*ha0n?vEP@M?LLJ2{7bVws&^OL!?r2hF(#*-l3}d zg%z0sX`~fz8iJd(K9wzyjJE{1Vz5=}B!vF)GaQ6Y?k)1+^CjegCSg%h2*(%_ zCeN7x^wPW$Q-$54v4W4Ad$azis|VcUK#XXn6hK_5%TXC7l=0_^EchhW0p2!wzT5ffFqJ(sR}b|X+Tt+runjnJNaU_bH{&+e zh#~`cMB;N4M6;Cz&vU2@IektoD4=h|PduPwsc``&=>0QcYhyVLanSl@H=1TBkoB0D zm~>=2bsb72ARkZXDm2xykZLp~(AFF(Et&r?dpQUsf;yBZJrfi0jk>h2czEb*Tq4;1 zH#3|~1}nDyUV6yMeN^yhJj1M6{B`iy%OdG%Kw3~r>3B4(aI0URGFK;kjmosut0A`t zHlK)+L}@7eABXCVk(iD^xy8!BR%jbmFBk}^CPlfXzKSR;Wcugl=So#3Q4V&c3q-I6 zk8iY0zCKp}q;3e~!}yw&^$DLhegyzR(rDSE*2Cq{C@pWNgK}XV#o=n%%!I!-z`<UL`4Npk^4=x@|JGBd|}R>fh^lPK^R*ZNtOiQPRpBJJDf@+&PZs?ecyOS*>^ zg+LJnUK3y4K4pDsO3mKFqUWrAs)U0OT4AMuDnqWHd4OYp9F~+;nhP`znh=~^>|c?b zb`u)beMy8(GZm{(Z&Zt#B+SqaO&*f~RBS*m3k?lrO(OA-7>w3k z9Hwh>SZN}zUkdqccm5hUHt$q{7gqh1>K=sa8=?}8?Ys?82Zj~nE6EV^y>Mp+2-@lE z;51#H7aYi(_stP9`fjf`KV|536L2!~PWB154EW;K;A&F_+(YMC|4v?DShA=j29oCC zzIP3mKFu0svw5yA_}VE8dTbjb=!!_x)w>lbGFPYSc+!Ba&Y+M!9H4M=G7p$wi=?3t z_ToIjb==9HdQkuy|EVOg`y;fTxrU12V6bFv zr97BAt_kP?h)qDB4;>TKm(_m{f`A<{P!Ot-8q|Ezv+tqOpUuJWLEjFD;s|jxqfX#G zZ9{ew^YLN=wFvu7@w&NJl1^Yrqeagjyo)`-YYNfyp^!P43FjRdmYHN!L>ReHeU!kn z%HKlelLICn5G9ZIVQ}Jpp(SsHP}M*p8-atFB`OpaoRC4xp1lO!BG+v*XevULgILx< z&U%tO?ZAlhdiLEJq`;gTMfb$CHJAZX-4!Uj8>zlQ92yckgx&NxgD^qm|5e|K8V_!V zFE1OOrg1RzTN49`$j%OIBGad#m5BSQk_n4lVQ?tHV&1sb|yw@~0QEEGOLu%U^H74TcU@1CfFVc7TkdTIcgZ);t>FnBi&wTMgvZ za{c(rNqD5c<_+xu+MGZ~c@AcdyJ03-nsAJ;)eQ+kJHJv#c`%6CO%Ruu*sWpbIJMFI zjuZpI3D2Sq1cfh8`%tR`t=OPb9`Mp1v5L4bx+eZiz-`GDcVzY7F=a*iCFo89eNP#@&h~ z8u?e2yw9rxF#z<9yxi&t1YK>2=(UY{=WvPr(I8kn-uF443=0M~4WJPMo#fd4l@g6& zRssyT6J~C`w!yy{6u{P}yk#kKufeH)-3UZ(Q3oOXcXO;E{auT;%x513Jw&hrj+_Z) z6DA_UbKVKlW`p>XlD6XPuejKtQ3iZdivnB#D zgPG*!GSrvG^3?f5I1-S1{W`t#7WNYg_Hp=5Gh}M9YA-`VlOnmxQ3qfK5paCLs0}vj zCJ{*#Lcg9-uAmVnnj%w!EE<29RM81{nkP%hwO{o-)crkrqu3yYK)h&Q?s4JM?Yq+BHZ6Qhl|1jqEWKG>39em=Z-yZD5m`gGv}Q^kb< zLagYDqmAaaX}zHw_c_~qPL!2UHuv$gRruGail=RUTRI#q+hk$AGh}_>dqrQ~qSw`| zYuIzu!-EJ5@q0F2>(iD(dZXL&)u|h)j*!FdO!QksvZ$YkZ*c;~g!m%o^!&IKshf5m z>5xFn+>71*rqP;Nh@$Si5td+8!!s?#hYt)9yEdZ1=jY&ypOw}8p7LJf78uykz|r={Kwqa$*Xseu&y!%(7^_$*;f%&uxr=A!fZ}_-B`47+`a6YQO(^9N@^Ln1 zfAx-I{1cFBfCuMpT|N|f0v616?;)s(8x^Vod@~#<2)YJL4%$fXci5YMXQOiwsXn37 z@pR%tpC&q%(_6HnzO+X0`$5+idA{IoI2`-{8xaYMW+n$Gp&xB873kP(Dge2_>^gZ> zl@nhQ={HK9Bup4(f+XT^qTjCX3^7{AXZE51?V0M!8rN|2oBfo5kUcgTu!zjDIDiV= zS{d}vU zil&$0Od{&~AkYi+8)O6SZ7ZNOb#Swvfy%{sr^g6kZ-Zs|3oQt#%qE)FXBm{Y2wkgJ zoK@9RUdga38sQiBE1r=pm?%B*$fX!#@WWvorlvT_#5XDTr5pn zzij`k{Cr0KDJP4pmT%#+IWH=t@MAKUl%wf$PvN8BilP@&&Ki#117BZ3D54+HyNqUv zRzdtDo!`#!WWUrzLHQJh8l#7={dfQL5Pp1EpleA`1~hNKempSwmBz02FrvQ0KDBLw zW?o1Ma*5>F{OA%*`O>>J72p}n6}?lRE*9V)PX;u?L48~;F8=z%Bhbz(nRO)Ew#N1sI?yi?BW&x}E#=M5qBI*fbH-msjW1n_IrJV? zF%*U2f$M}~z#}yXCLp)MUyIJ{Ej9c;BuH-@giCzJ-z>ScqOAV>Xg-}HfXN#{#mz0N9*;OymRM` z7{@OHIk7Ra_xox)e-@rRr@q)Sd|ME8%p#+m5D}M%UB8%|x$(OFb#%UZw>N(*x_m2n zmnC{*Gdi~aJ>&Fp;dFFkE<#lF?j{P5evOEYEuXHNgF-z+!Qkfq^xIPO>b318F<+CQ zh1HV*$!6I1cQiE=(;L51mU}-&ID$C#=Y z&f4mGl@}NE-ta<*Ya03Icin*StV~~?6EBjm5$|eT%QEr+Z1W(r0d9vm0hu`grE71y z0#OIATe^*pj<%;WH_N^L#CHD*sa3y!R`_Z4xF_vc_I~j$sUI91Raio4IHX|zaGe-@ z&N^Tq^r)Tgl_#Qm#ZeZ;WyJY-s?YYgDSqgkC-Q}D%{8XvFoPM zb>*gy3Tc_%}5WLcJi{s;du~2dBY0 z_fEBby_+SNBaP*-A0t_~H9AqD0V1ln#$uW^6d9i=kNipBWl1&N_}h<8ze)KA{w{fy z`aPzn?di4nU2xs%N1Pu9MiE74vUAW)=#J!x*yYILC(5aftW|R1(m^X!FCf<*FmBzc zr=dAoeLTD|+MhcOkN9L4g{F>CJo1(RcE=qAA{cr87Jz61wLIJdBJff2a%A1M*05NH z-}@VZqhGnFo%z+0MkzGW+{v6=|Bj8#m#2Yd$U|Hm=HL{zQnMaGYsZ@tjNpCO>&anJ zjS*QA&YHCdq{u8WyEcx*w=Qn;%CKjstlV1D=;b45U(>APM!g@Vp^MN>?AC{em8ZAg zM(vT=+tn!$MMf_#6Wr+Qm9V&ndL z_D+N#{?t_$h&qXb;-jwaHBkYH^Xzi86+C<0r|MQGQ%G(6cbx`}kLH@Hv27aT0`bj({c{hO#5X4HO*LRTA6vmo~X=u-k` zvDGuK+kns2dRV9M(^abgASnL(h@Bd^BrM89Z<6&>Q&nG zzDLtP)m!0^mIfg7>|oow)FE%sj?gW@c-coSsuxp=z+3S2*3$WGC~NZ<@hLpwUdW92 zU~l7mogL76^1bM7jbv-5Zy5NNwo~5_Q|j;zNqKtgcE^+FxIgzLt3b#@8S?Uw4f%^2 z<_h^RAdp$_10p)5lIPjIZh~z3sWt}VC3oiznsu6cG^D!f6{~>*Ol4CO@W6@5;d8x@ z5vAc*74e?0U-sque6GIyL7*!dHqScOopwCCF?U-2D^9_H(*L^V&Uxw|&uD)#2<7d^ z(#tI(8J`~P@6dl+=t5ncDC9PJ8Ca-K*^n_U_{L8C*H({u6kB^@r32qMznz=A5*aRK zsQbN{Cw4U$fo!>-yPE&BL7U^ONvU`_R&qJ~fVYOZ<}d!6T@TzCgItylg0o+)V4gJi z2g{kLrBd9FDbs>>cItLtqM5rj%!3r&&^a4o$sIo?3#H^+9E{(1-Jg_NRvIA*&LXqW z{*bUD=dD?J_~kSGj5UZwlqE{Km;;l&fo37irpf)0g-|uV&MS2|Xq@vvT46TIpjT=c zu#Y+4-`Ve$kMz6}aNmTOhb0JA`P3^Sqp>#)`Fviy+~9=%v!FPDkGn;bQoQ3`S(YYd zPvvcgyxJI?a2r^oTqU=M?=m(i>PRy~0`8S+9X#0&W!mnlDB3=zk%ZW zh=$J_or1YSJtshVE(^`Zs$b-WNu(+>W06*^o<}8^4R@JQ98{IM3k=pHawa?rd0_qWjcq z>F^?T47y1A)cXU=)Uuo}1gwCsYzK3%27R!i8#z~lf8FA0dua^M?luh|yHX>k3Kqa&41$_dOb~V|y`ePCJ($4VMnB!p(!*-XnB6tkj30ZAkxV?n(N+%0j6d z6h(;9=xQw0_0P$Hc#f8IQn&&?Q6Zk46>K_)9;zYQnuT${!kmN@vaDv3+kon!H~*;dgGnSFfv&n`(9?9ax~WOEvCeJVCmxUhcrE_X96=$8I- zP(v<-{oC5nYS{%WY;-dGN1s!*nIAAybgDK-&h&4uyhTEi<6r+yE-hgtfVTKv-$Z5*F#X{SMtRhpnJ zJKgJ{lK-?POaC2CYbKdH@YT}aSq0Ih#-g*;$$YD2-Ox?r{+vD-EJMkbOuGjn+JKQi zKR!`J#~4O@dc4*&RD13|%^KM`E`0(zHb4)9F`4MdqvK(gdqdF-9A36WYr9k3I=fTd zl?1G1E=$U8WO!Y`UF8J&c99SC@R0pFOLQfsM3x3Mn=<&e@W?}JJI$lH#qfDm0oL&` zrSC;&)u*G(cXG@swLqQqnN1!|ev%xswhER62YVUD}9!H|)N zpNpmu7^(aa_F#I`FM&S91n>f2SHE>j+^R1%VE@`1D@!J15F2H&BSD1SuZISf(&~!f zvpHQjWqcd*TMvD_KJ)(KS5f{-t=H7QZ;vOcyGbW}h%n}$p1HY%Zc=vHGPHWX8x(9=UxFbar_NEeq<+R)_SqC0gi_n3Mg>u{KL7JI4w{e}6r zA{0e5Fl6Pz)HFH+>V6atH7t8??D4!mLh@K>On`7)_jJ4}_yZ(HCPZ;MgSc~7leYUp=KZ%v2W{n6&HN1m@x8p$W&>&{xa8e|m2DerPlpRW zU<+7ta9^yjgZdb%Zkv6}adm;-#V1wEn1g?v`umAai(q1{x=dBaf(o%GwuKQ`E7t^z~dI$@oV1<=ta%lGdG;-zfP_AwGHAYRA z8e|5iK3he0Dftl77|WN^W}C@6vd@X6nj~9fY)OU6v84568S7+cEKwAW?Ahy3IC2ux zLB9K?-}!#O^VjFU+xsl{yFB;(Joj~7GjI|0m)JIcd4Ok2b;lte1al9n$;9Q0-$y_B zSO*br?fA_VQW(&;6iJ2LloPJRv|A`gkQ^d2;326Sw!XXaTj z`A8vTpJTI~{c0Rlxvgj@>`<%^%=7VJu6(JW83fB#A|sjYdUK{~LqQ?B;2-)#9faFo z(M6|P>SJZ~r7^Wbmg!PwJWZI6Yb&U+b}f?XzPqca?TCE#_e={~x*9fXPV%Lzn{zE0R5F}EiCI3_j(x2Yh#73#2-e?X&`YF9E8w~*BD?`xeIT#Qk(zzL*`kOPw1^Dk;`bwu71 zX!T5&x#0CKTxLg*{nKkTcq zeOt*75HcAr2o%GSL$8(gzhx$g=pahQr_-3O0s5P(U*({oiF~T6ce^0Q!(H;ZrOxzAp#!)3cqX|#=T?zha%?{Sz|F!W^P%v4)pl#7{zkVi zLr>y)lL;PxXdL>ep1isctnz(eHI6qkt6-Ua_9QlRh5eIa+uO0U)nLQmr6r}G84jh( ziUrn&z&Z@TU#oRKV-7G%mLprgZ;AJu0C)t zC|Y3n*SJ%o&85N0OD7p3iNMu6MWe--KIrhr4cBVyr0h(CbeZZ=G(b^h!%QohOlRHnj zEr@SkvGBw@9^L4I%wata?g0JJY)y>Ef)`k+C zDB-fm74C(-X@PNem;W9M2lW==#Ta%*I>jK^c|j<%$m(;$l&E6c`-_hAzt|9BvXlUc z+m7R!L`{@M*!uJRZqh=MP*91QC|D2zWZaFrOA0>Hq?+5q!(A3Z)Ii*OX*)&71l>8) zsc*j>yl;Xj_)w+5Rku(Fe~)t{m@JC14kEL^rgGKU@3q`RUSHFsuZJQ;gzH3vqZ3>2CY+)yIGhUOqlT+zq;irXJXB*G%i2JN;%qro} zIiTWxNq)Ckmrv6`jn1ikSjuprj~p69e3<3}yvbIcOzvP`?O&3a2hF4j+ zp&D_FR{hCI7VP;>U_-aIww6BCtmO6EUxD(aOZFwG#h?j4OYHIE$MoRfA(Lwz*gF%| zp~opd9$Mg00v(hGlUejRw~um~tlB-X=-p{~$D1ku0&mY!iUI&r$F_c&==ZSM+c$8u z|3x!!BgTGzoeCR3B5-hz8>aQKac#kTOB<7^s)wXc0lT(?p|f3>D=q$#7TZ8s#uPJcWu-xmqMl;J}OShK30Kuo3#~Fd#ab} zDqAY4+jgGIC&wxK3+RpgMJ}S`xV?4CbvY8#^}kEv)UUld=g@A#xL~noItIv?*-efYV^A9KH76qfS+Agm* zx)9ewIGOM(PTNW|tG6%$&o%jIN5@4+P(3))UAo#n-K(&YdcUuvwJi4=-Mbquw%!J~ z>vsicOHD+V?oB0cW@~u9)jx4DS5HghY?dk9zmxDxSJ#qVo%k z2_Y21KTJ?o1@VFQh${e_V+!h>6CzuP3ax~YL_m~(m|;9ICxoR62spwIswWU05fKbv z?x8#k$r;sDNv@f)wFur0@KCH|XekCulx;xpwqQp5ZDJ(=$)-rjK1JYaFVX-~w*UK& a6uBG{=w(~ys%Ui*?erfLOG+NuIsCthaR=7` literal 0 HcmV?d00001 diff --git a/_static/gus_light_mode.png b/_static/gus_light_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9dfccdbd0e8b570acd23da85d617689cac1fdb GIT binary patch literal 18440 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 literal 0 HcmV?d00001 diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 000000000..367b8ed81 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 000000000..997797f27 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #7971292e } +html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } +html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ +html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ +html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ +html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/quad.png b/_static/quad.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e8e5c17603e7503d9e69bc5c24a033f28d1751 GIT binary patch literal 80395 zcmd>m_dnI|8~>4_g(xbs?961-L9!)eC9AS`ILI+eWn_d9GLOASj*LU8$ezbK4wZF| zabz6hSl|2T^Z9v`?#^^VZHuTFE8`78tiq0!V(c>sY>ej)#N z`UJS*{VA*)0=Wj!RJmjL+;SPK8^zk5xU-wgJ1$(UBPbiM+2E+@c*va~6~wdssA*=IQgHO^f26hLi^zaV|jT& zFmdBD)8)%&5EPF+RTOu=(y5^-Aj_O=a!2m53f_O7dGx$FhnSJcNK502q6!IAhtNRw zc+aKFr%UK)-?fjv$qeB=Ng)AQj=f({^ZE0Ke0+^nOMe63RU>FZ*uaX9znhzzp*Q49 zFINav2r4NbFIdqO-@N_8lF-Bx+p=}6fcGivP?m~ zAZ&`;e`}S`(s)H~Ve;U$@)a6LV-&!T&(zQ1-o`K&Uq~ee0O&Dap5w%dk3~=elr~+m z6}$)~Q((P5+{;-_?JT9{c@Ck;OaqaBOMX`=DU)zOw`Etqk@QXi{AL0tpNx~xxqSI@ z<7kqvWJg=N*Av)n?Lh~~XR;V7b^H@D-R$Sa3G?&wrvZ!o$y;_6Uy*a>j;0EczXP~w zRvEjC_hHfmcaI4Y5`hsc%?MLX`uKiRE^r2UqtozGAe~XH| z+iAe2D~0f&hICc%2)`+I zXVTRc{(ZJ6o$urmi4bOhDm{)|p9~4VD*)jO^Ydy()FDpf1*vBX(rm~G z^W1z6f1Cj1z4!u9TT3rzqM9KAfAZu7xFiq_E*ZtyAR@_IQGulm>9W1haT3f*dGtz@ zg$&9I6W0KVi-4zkG`T+IJOGDsK#3E;=FI^zYFbmH;aeSP_8gKu)~+{V9}c%8Y}0MCFC*=gvJSwd)L6q7hiF+ z^iSr{*4<3K$^2y&oaH9{>2!K!Aftpg5aurmT(C9`fS#NBfZS!42lCe1KYgelD_>Be z9HY+lX+zShQI7cnS#2>FrF$%ZgFWT|bd1T*7JTdV94E}42Et#y0e14gt~2!G#}7iS zt+M^H3=qzkHF(X(#HZkwXix{`sj8B77hf+gFCbVSMhb}#tTHYNr4H!u|MjczETqyF ztQfT0VI90O2!qM74ZX(qIPqN54Kq@#G(DpPkNnkAtJh`=D1Am|Dxep2`+hzFIO|b{&`6xf7O(VQ&mA~- z?i^6eRNw&%W#e5S{-L=8N?za?Ku^vuLjip{K=+3AnBP->bA`qb995489Axno zSV$GH5&fl9Tu&RowKyEY`~miVkpY%Z0u9_WC?*(VZuj3@iQyyC1C@4p9L z;N<|fJb=ww4gBJ1pH+4251iCufZ_e10v9r$7c^oaMwE*|n~_CI#^g(hIe zvN({(>Kc2!IkF_H6NxKoxMi4&0WH814lg)KM-3dlzgN zB?KeD1|@i4R5z~!BCzChKmd+D*Z@j=Qb;g!>#hiKmX1S0(ro_z9mtrGh$HOwo@q5U8~6-;Gj6Z~YJti7^Xq|E1BHSo z9ELAsi$j)0M(qsLZUbt2u_a?>>*o=K<3qWZ6mExd5T!H^Od7_wr732=tA<&yUsW_Og+6F%Ah!Q2!#iGP<# z3rP*R$!v575`89dp}>D@>GGp(ZbUI9#OdWt=7d-X^TqZaIp1Sz3Xw26Hm4ty!0Xol z-XRX$(QQCo+Ef61A=keD$CBLxk-)Mz5CfzwjxXBoiNqEgg~S#OAO&Iu4BhcaffOUS%WS^D+LPL3@!7$V0uGEAT&}BwRWPS^i8Glq~!p zzH;#$Qvg@50t93&nqOh-3rYf)z#=Xbno=M!0>>unNSiY5Jfu(%P*-v~OAOdz2+$Gc zXyNN2Y8S}MM=K-c$vVOVqHUi>5k)rg6Z)qSVhj`#k^h1L8i)J*Na0S;1Y0U;o-TC4WB=c1v;ky{Rue%;1~jFz*ozk3SQF&8VY&yvj*GK(?hQ& z%}N3DiUR-$DFZI%6{H~rs51npjs)|`{+>U|3xwJ^LJteDKoA#}aYAYoq~Qjcd0%3< zqTF~-;M8#BP_Y2B0-`4h$e1H{v>WpYTxu8abK4ZYXHP&XOEj3VtS9?x6Z3qUk@vvS zzhwCB*V_NVr|fufN0*DAz%g?Iy@Tw%%^e`BK`aExd)+%-jYVIffaw4mNft(G%p=Z_ z@+Pt&JEqTuGphXR37pdsOirYBadcwewR%4AWQ^1G- z2h)I0zknV?1R`<=62WdfWYA^ZpLBu6a|3Faz?x($0P#*FgBE6VK}i?*H3-BhHg^E6 z41to}3PcIVJzi~9>I4qNVPN&G3~lCrxCN>JUx>2-kCLs~ zs=x_cx(fLTUTRH*?-`2C-fJ+BK3@#a9cX+3A>BWw=AI0oM(6}?g=}LWg%?_J>BuozhizAqv0bN_5?b1fMk5T}sb0nA+pG->(%SF8PafMCe* zy^Ix*^u^qS11NEk4HiU#LKD&M`^@n5{9sKlu)`1taf_UP=HUS(bMaSVuHqO#WYAnY zX@R;!UY7Z_i!TVm{9#TD_ANo#-nzG(=s>E^%o)WFNXR-)dfe&+kEy-p2!l|3(#V+j zuavUB*fu6`aYy$`Ktp;T$Xl6#s0GvzTA}_thpd_i7FMMMGEt8K+J$@0XZZ<$;>Z_d z{oc8}ubPN7Mx`ZFd$MzbxR@mj!6bM>dX*RM^XV9np%ub5(0#Lko&r`dM2XGt_8zlE2_*IS zr35bUQqAiD$un7J045;3dcp~6CJG_E$6LHAF-?s*OWl8b*ur-cuLg|%v$&q>|FWJ; z74*5R4l;oCy#Je53#6=+Yf(s$fvJ@K54r;HSITdZ$v54{A0@h70G1Xq9NFa~EiJwM z{i1GEu{^zkWO1v?v+Z+Qx)}iuL53FKREBMfaMJAEjkV1vV6EheNh*bE5Vm%YI!wCU zGu)r`#8s<6N08-%C%-Jh;U2r4Kjs8E2k|g9qs&X_(^;zAF*EK{N9bAHT3+yK(87YK z5Oy(U0_+V*aQ21<5==y`g6b~n_S{~3t^P-*yz>^0(nzzluDW_X_;5%xzL#KhHI_8S$UIk$FjghC1eCt3Xg2lkbDL86q~}p4-FSuf-SU39^A+(7^JI^&fLT^l88gkEct^3oa*LZrS!# zJk)_(2O){W-xe(9Y3MbjM_xhT$=^Meo2MstMURO{AzkW{1#j^t_ad{CU1jj|?MC&1 z{Y4KT>D(O~+R5;P;D&Kr#iSPrLs$I~aOklz-j?NZ@5i)E*Lwc@a84*bqUrg;Es9OI zGdj!dLr${o6%Ts>Xl~NK5yJ2n_LFFej3Fy;c=g}+KpR_fG;%b)3omH={P)Oab@cA| z2*T~pxT;&6#w>4^s!BYf{Y;kc+daE;U0JpD{QD507YX!^5JMYG_$h{`Go9S@N=m;wTOMiv*mw9WG^`99Ynk%k-FvV_9s7RU?@$AM zMNhBl9pQNXc(me_rR*omMD;=$qtq8naon0B-W4&$JPR#mxO>H>mMoro4n&3FM@~UIrw=*WWes*Djdn*N1q*_v~NadzEd+uBi?{5^* zjK7>D5?wr}8I$px^m{{S0c$*!N;yO8w2a9^Gbd<6}r|D@UayDZG-t(*Co zW0VnI^&&lfzg?Kea#0;5@0HkKYr;22?>0Uo+@Dw5*8ahs`v=4XHR3g4boUvhFTKQl zG2X6Zq~9&Ttp2TJ1TYY*56f-Z+3IsE#X9vNn~A@q334(#dDkCa6Bzn|Z<`?Ypat4; z&}lE2jucvNW7Kr3f8R?oeKtI@RW$Ni+=k4QE81(HnSFS^p%oMoEVE!8oKLUcBE7&i-3wqUKmQ z`~o7FvFr$YvReL;;SHHG0OCKi5#}I$-hq)F{D z+s++jiF!A0Z+7mOXdR>H8lC$tg0Tpf_j6FcZ~PI>oDn%fKg%69h0ruvzLI!N&&}^c z$Itd4YFveu&5<;MvhVNXdzZND!Buj6#_ox32_*j4J8)nUN%Msz!VqGb~`alsAMK*0}iDJXM`a3ivqV-AePQr3B&B*@nJUk5vB1 z5Q09*6_2nv_92;i4^>MMM?0OOgv{SpkMKf_4IK2Y4*^j@Kx;NgK+9^b#gvrZVQdG}6f~YKm^5 z>3JgvehUWtGV4LGf*b}8RMbbY;n*tbQNqXDl4G$8Nv^o*?xoK^t6J)|wamZg{o$|3 z{)0JN^6c2C6tFlWoK`;EmZv6TNGT6^oO>&7NScztzH6{z(lthVTidxrE31@D*SU>$ zPE$`@Ye3C=EVYx#?4^m0>4jt9WI}~GIRe(hq}>msu;w#Q1R;58x~8yxC;5X!?k-k70rDDidbSDwl5=U#(u&u6y= zoddg}1*U<4bdI{Yd>#77h!MCUgn9mn1FHVwyxkNtuAgLwemPZQQ&t1=)+yaR`CSg( zKB132Bj@ANfe*V^8rY50|3$DYfkP}-cvv|Z+SkHZoX3MtLgNl27rwq^i!0=N@Q~8= zGNG^xZmNqksnFwb&KgbFH9dwyM_#gPKz)nLU3JO4?TER#aW%FZjOQYCVM*1`g(_;S zw4eFv)!KtFLogYzhb*onO#qG5zfA4ma!kEJ_i-S_z zwf8}m>cmlZ4Vt89_ug;0ES&=^{z>+kl@(N7Qu)+fQoJfOCvcs8N{xG`iMaNdoF=h^ zr*&}O#0DCtn|TWbsCrkU1&ZT?1xh|dia~4ss@A$7`2HN(SyIcJs^lJJzs!x7D>pyl zokkfp%_fFVmLCGKc2f5P#(8Wb(E7Dov}CXLrTN207nZ!io>+CGqBn9U$=bEEHP=d$ zJ4Kq;_@3#wWh_-v<|Eb6!qo6NUtJJ8p@1gMA6Tsf!8XWI+y4G*H1U&-E`S5upCngv z^JY#?D>tLlGjn>p3}aVUT;;QbCQR2Ia?5(Wx&nHTF4G|T<2anrbqidN^VjH1jtNv)tgvGW z&X9Tgb{}GQTAs$@5npgbaYfy{n9-$K!V{@#X(flRvgx)8Y_nZtqF z%)?me?OlpUpx-&>$mr22KkG$4j`O_LNXZ_dsR8jErrJ&&fRdinr+N!r| zXKJt(({e;UUUH*-%idoYW9lLWK|cr4E&mT(``si6mBc7IJw zHxu1Te|VUuK^l0)`$2=RC{nKd9khMHJsFZ2e|@Y*knrU95-M z6H4w=zyj^EHug@}cqB4Qs0v`-uxI*t4d%y4x1F7Qy-3qzo>nX=AI4TBi+{N#bgZsl z9*?U@JVa*SrIX+O*dvD7eav$O9j-C%-dnSUHuOSDG7S7SFdd%V(m2i>p4RW3R!66r zA4{_L@%S76nD0er`=AAB945YbN=2!+Bl=BEP3t%36V>g_^n)uC>Dtb|Ip3s0v%DVs zUNl6+THSk!yOz0Ryo}Rx^lOnKYWq|8{+goHbQ2M?#L>KM&({m0X@@8fc%vn%`hfcV zn*|^k)w#^Hum$7H=z^?CUksa#!f1Bgo2chR2A>7*t-YBYh;!n6uu@2MqH1WT&)awv zp<(%agB;ly3*!Git4)1T-cvzE&N-CC@h&V@#gCEE?mxa+U{3SI)f%%f)&3k!S^vOr}C_YP3sP zUR*4T@qzVdl(}zt`r`cChF$6uN=j=pHsSHCP|F%fgMz7y3UCE5uO8@qTSM&GYx2|( z2u*g4>nD4&6@#+1lK#F~AvcNA5?Jk65o4>Bm{C>mSgBK1r^tsIQX{ zJTuIpt(&_%^^i}|jBK&>++T;~cK0E*#NqfWcaxL5IhUq0)ASGp^Of41AN86H_g}-0 zJ~#N86~*{o&^kDQ`%j)@Bt{O=vdTB_K43c0B_*(ux0LKGbs$uGK1;RYZU z1eWUUu^)>Z7m#~tuKIpeZZaT*$A{I-u}&ZDB?oP}6?|5NKt8xkRY%t>OcXqt5~_|o z=@ReeU`+SGV{*o@ zy4|8Ue1y)eOS`G;oAk5?o5k&>bmg8#+WS334&=IM@bgS^+NsC5d-p*MN5s)mCigV_ zFH0C5Eqgq}S)I1i(l5PpveVil)YMcAd`bj%(|Wrk{a-~Ilt}o*G!GfjO>FK6-{LW? zC&eYx?$|UPg{S`tet_DKRUp#&yKSk!p&&+sKHJ;@rr1}pp&nMUhYjniBWT`J1-9tM zWHpWS+J4@Sf;3xxqu*tJoW`}YsuuNdX=!hC4SfV$a12DyE&?SL2M1tpWvL&-b2mZ=uw2x**=!g$wgd%y6j5k5a) zY)RMsH#06-O_e)IA}vjXIm!9$ILL2D*1oL?wj7)yTbK_LrpRdDDVZQ{HxTK9vWfMO zc<9gXuWpDi{LG=fDEkV>|AWw9;~P-)!G1?}Orv9DZE-Ie?P*u@MjPl%%*@2?*k`Oj zM`p#_tpd`>Y39A8uhr4`6j6@G3fYT&-ZfdB|Usv$&R@Va@DfTw{R()VB|hCSs&V+$@^cmS)0c zhB9SufI7#Kxw+;3??GKR*MLj^V*Xj&8I$sF5KNc9{;L?vd;5lyX z$JbQv(Q;;LsLa-LxSag9>+Q7vLA%?47oytr5=ibJOhX!w;{C@7=*pNys8#Ywbwjw&l@Bai zc5y~*(6(x>pDwwDb&FeAGx3|Byaq{=IbRC+n_>&>nR-8(f%?J3%5=**#!Bd5Z?*ZK zb8WQqhNAY}+J!MYozQ}f0gcy!CMvUCYk_{7lMh8LTJAwCpac^txuqww(?-k@o5O;Lqk)Szmh*0jrA6|<_QvUr z4pkdXj7`&B3vG2JuB?sMkXr5U-#)lWPLIY^N!M=x1?a*0Kl1Jkaxa%IEYts$LMP{0 z*@MTmw(*&=vFU&4iGw?4pZ-45-HFy;545;xtnF>tDpssz@HwnZXzDS!vM1kdhV)p) zZ@CD5I+^2mT-GXSKj>DNG=E!Q-^AFR&DL#)VlTAH6;KP6Lvp8mGB(4S87$YX(h$2p z_sJ*8O8di5k&ieXGo7GHJ|NcciRneI&FwT-eAqkX+On#{w@Ggn^L`zZpK9oKwiK%HM*KggG6QMI0OkwyTK0>+@x`)w9d(;LJ^y40$G}oa14Sv5!{>YM(=9%PjoO1)7Dxyd zc$DS|)MAqB{-~lRx!^;~@sXirp;qk6m`4$xvr=vTx5%#})#J8-XYyH!aHD-6Et zOS~ZIM}Mwy_|JV4-LsrtOYP&_u67ODI=`*JuvTO9zWd=4>ovF70GCnsJIPC=Z+`a9 z?Jo%*d!8AL-mqEt{JDuA0J0ENojf;pKyAoM2F|%;W@P_Sl}#YBzv;OWnjtOyt~8q`MXbZcLJwVnYr(c>Z@V-hIYx?8T#NAz?d=F_+m2X0Cj zdo^8k9*s)x^I5pSTv}g+D9)^PQHvx6>e>gu5D%d_Xwf+S%$+SW|IOn<@RfXD}k6$XxIew-;qp#F=dA-(zwLZm%8GBF+$RrI+`R?NSbl3lxz=9g26NCFCP zB#GU{OpOytoF~|=Mu+*HY%>_~4Ob)T;Ehy&J|5b|wJs26K2A{gOJ=?(_c+mtJys!B zl*>$C2T}|Pv({m*Jek$&mjybIUOskP<&*|_Lyd9gjd#NplR8JvreP;7;lx;$J{l(0 z63O--KAdsachfdn){|7fbKnNDzW3GNW4tCMDrK3pegcCh8gB+n>|8~MwPTI=RMqb~1Vn!I?!#>sF2q3gW!d1yfR zq~crYkC$%DmK%eHs-{1ZI7UhKQW6@DNE!?mo#+6{NmuonX+-bbazo(8rSPBKnrXe0 zZ>3?QZkV;4OR5~$AWm$|6gr5L&sj%>`y6Vq?2tkNDJs_p#1-Hj3CYfD{1 zMr!@D`N`X4(Gx+v1q8VwAJ>vx$7DxKO=!L|G?<{9QXJ9p>Wg_SgWj+{H{ZW-zrc+7 zdrcNP=e81(KBg7B1I6%Qy{I($%Afsr;iJ=>K;^T_wUS&PH~uS8M3C%%Ux)){%Ver4 z=O~%~-kG&nhg=v3oT}n}d*&o*76D-34wX2nPqA)r_f9X)ko9p<6e+fI7#Wew=|YX& zO?*!OvfMrA6y_1`W7tNoEW?ce%Ho(0+Y{%sD>9(|Tg&4$wk*zh^y2+GJ4UVSNtGFCAH_-rca0_PlO&mD#x#V6zS}( zlrEfEd5llZKcybb6!`u3f=f%uK0jzFP{*(b<4LykyS;r@JA`iwDUnp5&jj3+7c{!S z?r{J6ICV@0PIK$_uh!*?9VnvQy1{&dW%+Qv)PQEWB=fFI-Ncr6pCyC-NvFtS$8Tp> z4VIE9*P>j%YR0g;E7Qt54xg9k%JS6$rCbdi47%*RTHuk8he!U$NymwgZmAO!ahlE5R|M`q+*H4Gset$MIbvQo6 zS07HmqNXNYuiNkwoC#WItJH54A@&Zwpp3?i&2l2O6!mB8Drgjw%5HFyof=(PD9eQdzZ$ge8xavE^R|H zWoA@rl!hLBPtVZ!eM2EG{AgK8zH=GB+#46(U{HJWepl+|LX@`EA#G@m#@yGR#f1oe z`|?H1Hc}{JGfyBAw}6X%I+c2JP%u;jfM+;}v?h zCSnLh-qM9uQ!1; z9@22VMQ`jfIby#`77uS+kVa$|5?JZSpYl)k|6wm!kMQNlPSqg3arcSJYxfy%Cfx`D z4LbC;T@ev<>J(a*B72@R1?o8a+{25_sJd@nozPbK?mWIHM95R9*oJOe9e1GaT>%ES zYOh&J5hJkK(hxgTefrK(vk7|C#mar@{YfS@WEJ1w2I)`#{cHsbb>90U;prITg`y=~ zUrF5}igSZhDF#Z^%$Jn-G}reB^Ym*g1Kk8tfo}=X)O(1$le%C5s;PNzxGTMw|MmA7(5ZulH(WeSAqkL}=l{-qg7>sjx66N+_ z`;f;~ZI|QVsTXaWtZq+|$~>h?adDk~;`6E(7#wo(=hyEyUx?ae$qw}m7GA}v(L`;T zfO;5)uD5`NY-g8ipCY3{;IT}90tfFTa4plcf!6RlOYPjQmDKFg7!B?z%kn3fRFQ2T zA2akLo>kW2O5JqN-yEUErXJi6;Jr}#;1$nYV?%qQ;PI^f3t@f3tF6q39-OgmF&Z{O}@UKt2*~%R&rPDQ_`0b7gBpCygCiFeV2uS!5)B z2>;Q>ND9#E%|0q^;MVL;nsCyC2on^PGt@tun4gF0l5tPq!n7SaO|0&M*#tgtFBms` z&IVOU*`U!Ul6L*WRIz$Vw$zGog(fl9<;y~^Ui7J&L_M{DKb5`#i&oM(Nnyy zOm6WIugQ60YNh8g_x3MD{ zxxutkDY)(8m?>tLMRY7;Z>Sf^<{9B`jtF+w>Hzd=LSERCP(*B=bj*<*Gp;FQ=IS zYBZHeN!pnzb%CBxAw{NK{yV7T9@t>Uq#eJpXaD(EEgse?7^+`7l7F`TQ!MT<^)Wqt z#AKF$KonNX&MeQ$YP17W#S?1#HBP$ME3Dc-(dAuf^LFfE3!>V{AasPZ$^$CaaH1-= z4ADI2=A-DGzc^FbfM<&?0n?qN6&B|@k?Eb<@J|FywUv{Q5HjcJl7l?0SBybKd$d2- zPLR7f*XeEL=r0ZBgQ_Jn=K5QnA>!v6lioKnV4dHJ=pU5kb-84^(J>XJCW(mdZtZVv zr2aFf(ylSprvGZFc?8fgsC)~?xL$*547s%C!Zt3&+XHMTpXRM%W2}T&2$Q6Bs&4Am z@E85qjpc)aq-HC0(q^|s1JrA^OvIN(d0~c`rgq+PJY`d5ztL@F2c2=ZF#ixn@)~y^ z#0Um#f?iVsT~9$8S=FMPD_ywa+X+XH_6)W6g?^Z}Fr_{<;w0|Xtr-+r0oubjaFsI!)k& zzlRs3?u0s+Gtnj&{N3Vn1`{bPQhs+!rn0`XWT*U2Wpi6RfvsjyX&~{qPOKH(7~Pxj z(W3tRLyI$hwWPQG;#}~1w4uGNVsaq^pCDbjYfE6=N5qEv5sB1^Av5N^=eU%mmEY1% z+|EBkq>QRu@e14ify}q|FMrHtgx(s?R%lo_;ECVPF3*&ln@UNW8e!MYtPvSF@Z?Xr z5;UKKR3lt{rA{mP%%|Eznm$q^HGe%UIzc@q<@C^AYzM}vgm$jh`fyZWuN}AktN!X% z@J;unF|ZIFmRab`;awH9qTlS;UEe-Sl;1&mtm4jiV~fH;N&;Vugdm4JnA#M^JPdHx zR5{$kAK{m)`sj*S7rnGQ@1i!0wcBvD?PB*=S>^sPQAV!igo|}@#U&Ckf<29)dd#0+ zee>9+2SqK;IRB#aR|u;a@cI_GQ**#!^dY!|d(* zJ`YhOt-!O`W@yrgK?#Z|i`l3mu4bhA6?{h}W#$;cUA5_4hmD~t|TYdtZ_V=7v-2lu`bIB)8KBOv}f*?aNoyyg6RRO+{` zn$_&--nY?Bp?axTm83WLEY5(z7x~QF%D@bUbRmByk)u+LjoVeJSB)jbLPYj+zQ!!T zBG^k_t3~^KpGW&zt4lTyBa~M8oiGnQkX)y$eAj{ zRQ!|Dk|OnQi>UB!tUpPU9eD!MlVp$4kRD}kJaUfhMV^J`uV}jVnQ<~)y>)qsWVNyP zTTk)f;LGwElGTtnyewsCI45LqxU{?|gjbG44Ix4$4I9^&>#=hc6Q2(qWC@%qW^GEDjI zZ__s9;^09m;Ncrw(-m z+(mq{d|XrKu5fobIXTwyoVR&I_$-=OT2^H0c}ZP5duqv`e?d0DG;#FauW)#Y$%9gy zbiq<#v50)T_Gs`3XmV{I9p>?Iqz12NBO#E*AJBApthsX^a^3>B3>TEV?0jm^xwc}C zXpld;wHVGIa}mp;)=*#^tX7;q8spacNl~rtW0eKUwY|g%`9{G+^CO~8N+!e&cOE7l zjMcO7^N9h4E^@Bn{imAT8};1RnB>K%d4KlrIGx497c;Y&Ac>Fg$NSrb4H-2tY8TrG z6=!QumArR}Xbv_ORTw0Cv#qjn#wnjGZ~)>XebjqG9c<+qG32v4HdMobU4yg z^e1(M&ClSkf@-jm>ui@4Fw=jkX@<0&kjdnT*}2ZhXfefwC40oBE6Ie9VQuwjjU-uz z-rOOu!sJP%x1n*C9n$Ym9L!-h>SEqn&CrYf&liRgU^6pzQwlf<>5%*Jv!G&taC-8R z+^t>Y4%X00b75iJ{6p+I*{}1SJK}>!0egxqrMh_6QZ(&KcX>)OP0#$BH+69C;@A)A z1#;Nm;-7said1(4oBj5DgqGAkT1Tzl{bmDg9&L)NW1~*<3k;+MhCifus7q=do3ro> zRuVqlftwm%60@LlgG;#AJvo)K{IHzbP}tr-C1oaFd^O^IkE_3#&JnvDhef&nLVWWe z%Dn4Evt&t8FiUCgP5FyN>;%bA2UH|gQj6;;Un`(s#TukAsUg#GIe9r<63Rfx$oP zvHJx_%u<`Ei-k?RjNg#f`Fs~IH!k}jl{C3&eDK3z%EKt)LrwK`XdVWP-Dbc)00*Qe z=7)?PEbzh{iaZEjWH;V!YA_o)Fzl1Ee?QEsH9BnXz;Zep>P;e~UoC)FvMYSXz$$%eQQ&VLI3?lF1b;B6>;PlPOVqf1GyH`mM^@pcF>67}YI zMrIvTLI~t$&NIBH*=$Zf?s~VQ!4m5ZdDu)H~SCW<-44$6WK$Pv0lo z#KjNZ`Xp8tHnZuKEQLrD!iuc`akJO~Wt84>~lfh9MXrwo?3CW1P*((Y?k6m$}+nzoE0%H6lCiJ?`midIq5OKB)^lO8;OYtU4` z?B`Ta^!>;kA@OjC5~pvZM*%bvWQOkL1z-S$7v#?OXhBy5HQIsHm!_f1VP;eEk2Q!; zIcqH>DJPT?=S@WWZ=a3X=zb3SsPEpfTrqO7!@iMdS|rZw_FTtZg7pL6-?skwyQ#6b zTD$R-AP|UeTeo!ZHUIs2v4hJXQ|>!x1b?_tvV;dirk9f|G;}9w%C?G_60%_6a;_M_Yv)3Y8yZ2y7R->F2ieADW?RZ=M)YuY+Onl>g={ zt^dux?qd{#*E7?=XP{q#AR!i2$C)?jTkw8IbgdaEP+2MLM1%HNy^g+N07zE{p)bo4 zh_tBnvLt+f7IIPHQ>A3E-+~LAze3&M=u@ESNLIu}s`OG4*4;zYE1qZIrC5_<&myj` zkTzkJXudE9db;qIHg|TrEEX^TWI@)vtuD}t)&M3%G7)e%>QS_JuI}SZBVDGw0Ql54%?!DgwyAbovgYp(FSoo> zf~B&_j*D|u)^k@5uM%Gslc#Wg%*LB3^?X@u7lys(qKtRN*jDBIq=dg4$^WlFkrayE z%5`}7t2Q!HfG@<2bRPCCm_pwjxaH%qUTC1WcIGGY(AXC#TTrDYw6|!wcPF?a2s@{O zhRDN3F*BIVQoO$BvrEqE@9b1cd_}I>m*`g*-|93(^l8*pl#Is{0?w~| zs2SYo_laUjtr5M!0XIfAY+D8|6i==YRn|4u@iP?_&4FNS?q3po3Vd?SU+3}-EBe76 z!++(_Y_jxzR%FIS^r|)-ieb_6OaGmo;cAs^f2vqVo_d-1W*)VDcZ@&z$P(v%ni~CeXzL7vOVhT#9)P_ym={R$z^| zHNm9zro+9yGI;l<-Lu5Xva`)!C;vMOP@(?(#dRNtCd|g+1LBIqVAQ3Rv4P&Vm@4lM zd*2h&O3y@zIuol}=h$v;2GVB6uHx6~!ow$_P%qHQ&~8CZ)DtWE4i@Ly*>@%q=xX2U zfIi35<3`m&?KBDu+V=Dz*`et8LBXa)qOu9`_knd=_XoIFL%#IzvU`;F*4awvTj>N> z#bk!mHAbQotT%i5>my6L!cLUslvK82oPfw~S#>ajX1vCX7-ck-?9prWUcT6SY~&)| zkJnb9c2jkf@-iOwsOI8>x||iBmVlM3YiaYNu~+sLfz|A`48-i$O}?EZ&S{j?zSt9Lw_ZAD|awp43#G6b6WnOIp+j&Z&?=nhPr@iv>qRZ=3u; zgJxheGW~Z#b=-Dx`1v=*4;<8uhSlrTyC3zp*YXtS*Hx4k#xRgBk&XGg;}B;D3!^m`?sA3shvmM17UU_ht#ytqwuo zio>&yEv&jbt*g8Pz9Ke9l{N8KU@m#;m(~<2MZ$-jmIG!j;BVm5%P7mPIjN%jjVe!^ znK1I^;%EKmycjaKDGy2?g~w7HNL@tBym1n)+Z^KL-NhQV6D~B8lOA% zFz`0C=GoR{@}EBY(Z4?%rxpdhI?k6YnwDy8pDJ#@k-}j#2e%S_;7h~U>Ah-v_yC&j zIyB--LwmIBca9V|m1?|W{v*iXh>Ia&-}LWcTT|qrLfG43+U#);6I)^eMv!{cf^h4C zlD)C9G1GLA^~V?9{P4F;Erz?aiDT>i^zCB3^r)9&i~eTBJ+WTDeRuEunV7qEKIA$x z3e=f1-C8#2IQBRAj_Su7_|B}Hh7kYNnMr>zij7r1&fr6fm9S z`iPy~%e4+W!Ec?sY}zUsbOPPiX6&+yQIb~R6|ARCdm}VX`A{1Tl2KA# zY|fHkTt*(d98IYiOHc+02cIr&E_RGvaz%?m%^vqY2|{}R?zRG-3xK$|{~>%_4I>Qq zNjAZ*o*@ygDo$HUvoZW}E>9;CIc1Glos0SL3Uu_V3Q z8rn^yYLeqgqvp$QLEYniAoY!nK`!YqVz$TjE5qq5uYIi(^|QE$f=3G-y%bp~Np9Zc zB01=|de@o8ZZw)o+`0W@<`&h@Rx!PRkC7~mM3wIxO;l8`-5~bV0X~nVb80nIxEC3v zi-+*ZC0;}75z8rQBk*E78#;pk%n|Ixh|sEw&R(3biK|++T%_A{5ar0<)UBcVurhN$ zcgHmp4^Se9aAhP7i(Im~BHABYFs5Bi;L%2=GE}td@7bBT9^CO>P30)&Lgp((E{ei5 zk;%J4*&>Cxu}pDILBG8GGCB1W$GDcP$910wym?BcZ{`mLeT&(j*X^>rx|Qg-K`lBh zw7m!d!kZJoI7m>AOWpi_PCNPet4K8n^xaW%_ULWduZ+sswY~Ztr3+`PNuXAnm{`7= zn8wSwvEDm`GS}pOu%)6DD}T|OmWPNg!g;-2hTGPz3vJRom#hgs-+L#R)1Q}QU_bpv z!*FY;qjSaAA+jm+F_<*Z<0B6qMuYPA8qTGwMFQ?JT~N{1(2PI3k1|wzFqpZ>-foUw z(O>q1qap~--Sn=Cf3!Hge4|&q*f4g5VS@)2ng`j_844WO>d}~8-n+|J7gxn^hDs&l>`F=vyc9YMIRKFn!bn*T@~iKpR=caK(CN1RmHlQBb?{IaJP zsMGPEjxR4%+jT1db-GsaP<3IVGBO%O%^888P;X|4m&>_fXh!;@!4hY$6W z#oH}TI-LatT}b`fe!Y%?i@J*4fPa$u-AIqfdi#?T#Kc$Y zm$FOF&oPLs7HwbO{cOB1W@Q;a^zD1Vq-m$T7xoc%POsBV=9pniC$HZur&m~1e|QOo z4_kffGdEg}4MdlGvNJ3!($ZR@o1(Te1|6)gX1={3*MY`4*G=z+1(QeT1vC}8^T79E zUDVWcnm6hNigV&d$JPale_K=;wPcw+Yp*?cjTIC%31%E8HB43=lwy0fqL9r8>=JcF zv-j=|i`|Y4KM}UJlRsz_#ROgC6vU zEsGGm?aJwQXHREo+gMj;XgslvXU?2Md}!5hZ0MX=t+qLFOWH@`+nqom z`IzDV!`52_#ML%IqX`bdT?e-iLV`O42o{0{*Py}O9fG?8HE8s=9~S<@m4iIN)7XpEUV*_}gru^ua#iD0gJ(amshPUt{JEZw?gw z+S$r^X4NoSuv-wgdIeN~>Mm+sq~;KI!8YN;R&R1qzFZ&iSr z6R>i0a&lq3tqIbV)ARVqC*clu{C}t4+yMhRFzNAs#w)zzR+0g;-1XUgyML!o1>l8= zG=SNInV7@twoSDv>z-t@8Z)M+TSod$aCqxBF@??!VN|YbNP5Y7Cq}*uHPswBaQW)b zt3T4ZwIA4M#CA1xd@JL5O8W2O_TNpF+e7tVUTW#1s4q!~(#>f@TswGh2pczifLn() zgXei;F^T1)u6pBjlL>i)d<*@XBXR&vf9F3mBFUR%z-laUgNBuvJ`!KA9R9Un(R+-{ zqWy<*#4~rG6LR>|ksRxeR~p^ijaPH}P+(X^Q?Hd)6Lg>nacN8F`_!HxtKJ{l7~nnW)PK$+gr!%~vgou9T~&9ZIw-`_0Nw`fk`F{6d@i#ro>@$RBJ|^f z;iEqa7X1Y^Tnu#vy4qGIPT$0*Ss7ST9LKhubOmB(GT6@;#fLtNnPorVW|7A@YpG6< zSOhmq`(s1V;)hE9T3^fovLP_}#BTxLM#IQYW26%>vVy0qi-G43og%Sl-Bc#^LgVs` zhB6mBtIy6Fs#+W@9%RLaTUL7*&?$Ncc!@FI`@9s_m4= zAJvl|9&oUPHHU-=VsD|pMV!4#uC<`IDdkU0a7J(Eqk4h;%Mr@zJ*kbBk9rDEeb#|-%;bH(ZwA?9qn zu3O1>FT-EAU*0}!=gHzSuoM~$*3D_`p^7?MT*p#dRSuUJ?x|RoSUVP+kGj5Fwg2(F zQl+`vsUo)JFZX=5Q@Wb>*ZlRpruTzl?Vu(AxpB1`DRfmD)Etyk&^i$C5Ioib=6A^@ z(_npyC2ypQT2_EVJ8dn&f~GMpm|?^wBoVj=dS|HjbDQu@9XuQ-h#qb+R44m>#Ogf< zRG&3tt`^*o93ga0wmjLK-JPl)j%`HM#lv75nSb z7ecW&+I}x871V&G3`nyThyd7m9lLF5NH?D6l&#z&;`7NYz?9o#DEtd_)$jI0YmT!uks&XApV~4xrkO_G{ zd=$^uN9dlDpJxqp$Nj))?leC~tQ)T}(o)I$=810|y+bjll8NAT?4n2MPX#r=bpdXd zq%z$TV1~!!^!Z_4;$tfJ&^1!qh|M79QrBftqSg8D?s>z=6vGw&z(sbRbPO#OmL2E>n2G6XFp$YtyTvvL&C0pp$+*N+7 z-T&k7)rNTe*LkeR!mY_NFCRR!yo|nhnQvyhm>C1~Ky|O6uEuxWOEORRIIq^|R)@6a zfP$-so#zjKE%EFvqh!2!_b_F?FXpunFJ2<2W#RKKt~aOmd3>X6Od>KVAEQ&Xa-Wtb z(@ck8km@AijodW+CqiriXEr39WY8QyM)3bPYSabzr7Sd`qj3SZ!T5Y)I10IMsWec( z69R$EwhQwM0(Lx;V;h^)g#2MG$Ph4L_{3i$M_-lQB}t|_n&sA0@8o8(nBmy>GI2Ti zN6`LpKS$N&uoa`GBmlo2 z!8KWk>SlLo%~zG~xaF1)-5f9*#2aq!5PvMvBG;%-PSZsTp(lDL37)bd1&hRA2b$zeU@M`VAx zTLL>l$knB-v1Q|u&%J^sEC@=wa(d zB#i{}s*>*CZ<6hn5gRx~XJ5v;e-IoVnn^j%+Ry27AvPU7|xeg52Z=`7VVq zVxgjG_Hx~CvSvO^hpQ^u`4tu9)YWQI$B3|)5?8Ngd4&L0PQN$6O!4Qlj#sO*4<+D6 zy|FM)4>38ygV_T%F!?WebIq@Pz{X;`JGty}JRt`r7%2E?jtg6Vu+f(8dr~V)WSHcv zB&9Z(u@SqCG?Hmk6&Y!7OwVc>$?K1@)hK7kTZiB37=S&Q2VV9F=1#vrKd?Vej&Em? zd-T&gTDwyL!hw7qAXj>Ux3#^+a%`64-gr(c(>_RBg|g|$Q5Ll{^b~!&!#9*b)v|UZ z8}?H4+27B#r|borpe$g| z3fwpDz>v*)K#b=t!mnV9&8AN`1L$Vq9g|b1KCrK6JK1mQbDEBy|DzMKZH7a|{&lF0 zSp)-~h1OZB+II8d(oE(>BcxdkIdXx4fp{mmVdsG|lv z&4u8FhZv1fg8k{m#=Ih>U#)5zBmC^EnO^wgXDr{Q`wthZv0v1{Bfts+fY>_;d0M3R zcDbCfF897$$w=d7dPDqw^wXESq!;&twyg614NGkT+Yqt_UfKVnqS)ziRbwp1res%D zen)t8?QfU2{&uYa&0?1a#fgyH7|FGTkL%Clk02S~3kI;&ct)Rmu`qAU+djrV2{9Bi z*{EDqyV1EGcPoAtyiWOb!#Bd}Mf-R*DKq55bM_d9uBwui9SAt4`DjJ<}8j zi&vQT_#5*VH_YD8C2s-9GZRk89rb33Ut?4~cl^6>Vs|4R0j(G-p{tceMw^#%L1C~p z&BW+m1v>{waX*vdM2k6dJX$urqSGl@Fb?|w)sk%SPhN472d}%BBbauz)T+Z1UwI9x z1tYX7AF}CbU6jQT%i>{Nk-Ay#^$c|9K7oKQo4XHeyR(#CUCQ9GJv(c1dSF;4so^BR zby-5|_~VgM=lkDkkz1rjuQePa#~NTIiXN_yMM*6;iOs4eI(80>Eg}vW*hPg= z`re9Jqxy&L$Hm^^cT(44Pc3sjr~w#YAtcGlPFvW>?yPmv$$_sFSbB$ zrsyXm##c+B!A_B1X0MFD4|(G?ijjAN#4|>-^EILb+U(FXcTg~-T(5qZr^jNY<*VlH95tyhUyr7GKBZrN9K+MRMemIIrFqseE&Tmaz1iui ze?D*u{ifbGln6>q<`vlJ)lZM&VaxJCdjq{A2H3$Sm0xXNkqTRo(NPs~!?=@PIr{pn zx%+AzpG969lU|6kKX~koc2d)NHq-umEMS{Ocp5Ab=txF%dR}%OaFe>>~?B7Q6N2a|H+!I#LLx>yas^9v-?bZ7l z$(#xeRRk7K-mJuHqQJRL3TrBa4Mip2gf1=0vBb! zeO^}V`=HbC5Y+PiAc9ua-5xqcd$VxjGzl%_xl^lpIN&|Ht}cr_`95^d-Okj!@Mrq7 z3E$Jxv2*TdFF0GX!X&{{yso_HfUFL1X|@Cvw2C}*MsOs3`SJ-DLy^exe?V@b`ru$@ z7wY>CI6YvlQ{t7b35s?NL3S)yIiK$2bh zf`-IX-cKBWh%WhR;_dHL@fonikg^@*1l9_~Yc&l$%7@f(j76%lUcG5IulFKve1Lye zu%pv#_KLJup&qDn7O0~Y6-r_zKfh#6koFSahJT*<+%hUZ81Tn?()E6;Kkn(llV(OZ zDv?Gi|MI2!mh+1f*=)+1loFg|;unD$y*Ju5Ip4zPeB2ug6xDFPxc-dqP?KDeuU0aL z{jFM!L#AWOrpclDT|AtCY#d8eTt=@OKGUY&>=-D$ezyXB)_WzO{Sz3di+cmPHeexVdsYtT}XHOH{mDLqD&R?jh`&|gh6 zHf^`YH)%-lAyO&nZjG_0GN#yiZw*;fvgjylL>84bB?SMGQJaV{_agC;S9cYtP(%of zUSQ278bn;B*s+q2Z4PWG+Hc(*&XzAd9c|X~ad|&=+~dfJcTix?o%TgpZgpL@@;_`R zm?RE7ym==EZCop*S!vwT;qcK7#_jX;XlT7J$iLn^XnCjPIvqilN-Br!gdInye@njVjc8Ty5M15W7QRY0 zinO3b8jiqhn6T{8c(wt{9??`*w@GAN@HLZv0fu{WDle?`8#FBGVzBq;D45_*6?L4O zzypC^zw|RvhKx_zVkMHbR|EO>soGk+&s$ro&?lj%#oH3LL0I25oz0u&{caM~myJ$m zbm+{c2|<#M*K=@yxDWmwc=|)@^ z>_0!}(!~%=WOo7I1kn=mMYacq3zl1hy^m(-Z0}FJiruxF5?d*#q24@$*%cM#T&L?`;|-{M$7C&it>HH#7#MzDwVai zGLumMsIY(nPRW`|K;%QT&?TY~OXk^bu?+S;zj#`qIXM_6w93z{S_UuaDB>XDGt))S zHIpr@05ZuBocxJFZD?)E3oOwb@IVhV5kD6fk=LrPSo_Ei5sN$=-ST;A!%6KK}^F_+micPqPG z-b97i43EO83?inw(qo1hBS|hO)MZ)(--)=nfMygwM#=-?8l%P{+EeJ;EPP6prl@HB z%$>Gb8l|#Ziv$O=h|F)f`Lu6;K4!lrtk>A^+4D$eNjOUEDSAMyq^t}CEv0|CSCY7t zSP`akS>KTr2!gX@gC7LB$d$OsQQ3$)N?T3%I;RH6%2iWhGbWLayp=me%gASW97P#i zO5?g#cp5XJFy1b+`~xXu;Pw(WCHrc~pya^LbE2&oztm7T2C+aq%LePdW6`s^BGGLy0BL?#O*3rH7ku=vEN3O;#pNYp zL_-BDfd73`tMUGZzf4$<{HKxaes}rP^YEx(%fqx-m5zVo>;5qz-;3G_5#e-2B_BYSui6bEVLLf zG`4x+Y=2Qeq{*V2E6P13%YLgi=!Oq-60X4Nl6gHc^M=Ny^7aSw{c7+JmBq=omhGq9 zu=y93*yBdn1}=o#*@AukPK980Tt(s*8mUVMZ{FUh=Y#)UU&_}zq`~d|uyj$Wq@BPO z=F0KWqNXZg8+TUILfo9Ye33z-R5cUBua-6Eyb*2q?0qJGw7YYe=YWpZmPX9X0hR_M z$)k9+*B6m*vn3sJoc~C@Y)?af$0{(@`%&2Zz(v{jNktlE%f;L8lxb)&CC*^U#N-+? zzsAITtas)c@L0p{X_b*2)o_84N-btLE(;Q7zw+}w)a&G zVWR9%(~7dnoVQ#tkT+o#h|_J$svUo*Y-VLtC&@38@>TUE2+L25eO!KD^;=WKFtaZ3 zNuc8{&~c4YSTJq#ptLrl_w~7vP(h1#oPuC1BvL~eE-tz_sU=}+AU;wctiVSE-dKZ>(_im_JzZfJ>Ha`F6g>Zs3r>QOL<{HV!hh(++`5-oWJUNqDeo3YP_v? zvmJ$iQ9-B2I^+F)U$yAKgNr>&eRZ74j~^PwUL!&iu_&o0)J(-F3nt)hkSH5YbEW$S zSJGW&t2|x0GedmHqt>O@gi!m>Xr_Fy$a#+y4LMd!N8R%hfWEd`r-_(RHWq0AE5Yc5 z8xE1enUSReuLmXEbv&$s6=k!85j%8a70;9W7x7r_Vn%*j-`8(mH?goPx$rUjYW=8I zSQp0gbMnZ-pQg*VQ45BAi#H-W8W*Lpr}r6cf9cCrUD2g8MvE?QE9yIUZB5*24rp%`($orsIUr4NJ`aztSSE~SGwkq zxRyN(X}Ul~4g^;1g`b#yvvh?hKhyJ^yj;(3F~4~^0bOpa;Tdyk@zgoRH!$GA*Rapn#`d4Dr0#$6NLBwSkHgFjmG2A8L_&w_){eo9%zKe_dM*eiP+Cq>maQ18cf8hDjfP^XRn~=wIF1IV=8Rq8o zq3Q<0gCORpur<;5$&xZ+(}w2UK}|?AlzFj5k&^1+{>PjuIyhMXLYAoDg>bVmP0Xk` z7Sz)cdZuL>QViQ>!Y*`<;TSM69q&@-3geK2MB{0S$L5 zlAL!|uuJ7l3Fd{+1O7e$-dl);z}PNV@-H#Csf^dt{;K>rYlcevKKLsYy<2_#YYFX| zpVfRSCt#9sqzYP@h+O3TDitZ|xx~Hj54yVjD+P-WT4sWAUE6A5265lPxrIZ_DyX=r zBCTLgyEhAOefxk%s#JK#PeqtIVtd{*{Te&|5!{y4XGs5e?D(xLPGEs>WBrqd6(h&V zMHfUcg-&u4-yEgtuHq9@nV8;Tb6G+YU1yQ8TjF2{=YLFB3`9cM0(^6 zNd_3wjDkE|cn6|y_Lg#OB7*C-RBinRZJB+TlIQ$dZv^4|+T)NVGWNVJw(}2L)tWBX zqjb4heA`5W>=t^;2TVz}AN|;MU6{X~E%f2lv!1=*DqZp8um5;Xyv>NX#=)r&#heh~ z=x=ewx;m#;>bv%{wo!W3Y{)U9Jcn6|)9r1inkHDGv?e9yIG}0+4yCLTRTQSHuY!O( zqWIIjrO*CO&sC-SeGgp)tr)_C*QXR2D=#N^kSfJlwBB|~EG{PW% z#{06rG=fjn3c^HnF6pqg-uBuF9$7y>jR<+pkn%i3U)GO8@*|y;%>=Rn`>CX7Ll^%n zvAIl0TVkh_7A*6c-lEsq8#ysi{`2}OeC4#ix(a_0-Fg^3NF36jm5fJ155x>jUtGO3vW0lyGmZYlU8j_cM@m?-^6WiZ|9kk_V|SL39n-47r=wQ z{CDY;WOwiOA6UGuZb&XQfcA)ZyCy;xV*k|NKd>J&z(b}74lsL9wnpUlCd^=#xke_QGugQCj^InS^1A5h0UGPM_49$%0-Y2;HVXaZbH_BKWfPMN(%so{b<8fH}wJ6~{ zE5D%j<6zdxXZ(RU9w!Rl>z}65Ra^*SIdKTG5~h0s;0{bU2nBu8ck8aa^A;dg--cY+ zzxQp+4%+DpNy>-p#XIgEnD)SkDYK zUES8F6%H>{-u4wP>(wUae?y$!P>`yg&>WTx6RM?A&&nyasb;9dk+yMc%p`VZv^@F& zPaJ9qICH{`E(^ym5v-?US0hCsbjgshHzcvkI!%28V~J?@{)EBG`QmMNMk=)wl~jTP zP9PVbd#&?_KE_%dB5~7M>)tb<`U8bfnyU5w^!7D6y`LU4G9H(?#o2A% zykbUruGJBt*o*RK^-G9J>vb0a`u2M@{;O1&M&Z)BqWFe5*XY$4u<{fw%^J~IkjfiK zvrVZDcfk*rWXp7etn~2?bDc@TLQ*yrix%sZgD}~zh}}xlwIas zz;-ng?0c?a>vVosR&?JMA>f`1Vy$YR!2$JCC;asVBLcU&PByjB1B)NiMQn_Hm_N}c zf*bKcFvdF5mPPZ%@2f)Po?9w z7*UAK+bUL0_Bm zN()9Hb~Cmi;~GjgQVEUN0xi!nKy8sjr%8ldPL43rHDiSJUMOF9Z?9Iw0qX1akM;L- z8xVA;I(!DrybvCwk?kTl)2>Yf*?hlV0z%Tc#q8PW3JZhHC7w5z7ZW?|+K7NqZ+_}0~4IQVrE;!sj*|#TpV6IK(iT71S~GX+@LMy;i4^m~|Ga{!y)O3mvy(>ia2%1Jx7v3Nm5d!)*_>{XXU*T_$}>zk z|8(F_!8&#um1nA>-NYZogz54F^Yutb&T1mw*)E7vym4_nwp$VwLZX88eE9`T_co z^g9QU89`VnQlGf{#XC{nm=KJS(3Wq`@gbCv=J$p-t|kisF>*b#Fe-H4lu`Dge>@T- zfN2Lc1>P~5M-14W8 zre2<~RC&H#UYKyT(iz1QpY>AE836~S=(RF3A*uVMXm(zlTi&9mg-J4i(pys}WS zBjMf=*C;+}Q+r5`idc>*aT!Lqm|-TsJ8~NQS1XBM&jj_gM81-uJ^&%=h1taeoEtF3 zq62Yr1U}@JZilLf-HwxlV?lFW*a@{-SzgDd;T>md?{Cpzb|~gOmytoA)WcZ5R=$~M z6-#Sn!f;S|^!oAVX|w-yVdPjLp}LLcpWIPTQVg=q$PH-V=waX@gxvh|w;072V#yOT zMAu(AG?yh~G%&6)Q`hLVdAD>y-tPC`@@G!H?94Yu5;RXkCHb+*=E$^~ZLfho_Gx6t z1W2ZB1x%d2s@ho6&Q!i%2_QOT9rIvrqZH4m0^ihP?CNTDz33sCm zBb#H<9!JHx`Ql)|33ab)y-YiuB8Dph$WhpztSJDc{mL1wDRga}bp%WT9G>1SCV(_x zs6Rt)@A(tkNP*PlThY?;>+hXW{f%rZ*|}NaL3-R(2(|BCQgoX z8(D+t=9>USG5XBE>c4Ytm&{($P#e|U9cCKF(w5%OydNnFgl+Wk?iyUQg0QUBbN-v;Iv+DP0o5jxyV=3TK=CV?`}a_?=gma(dF^xn!d$m zZ|U?S3prmvt*gbx!EYu_0q-R#NvI}E+-#X*@oeJT0EJV?S#WUe1DcDXQJ`Y==lenS z$GcZ`qM9KGAF!TD;%=Bk{Kh#R*)&-K3jJw_tSm@>03$ShT&Uf-o0993!? zm)2`*Gn&sj-hH2xT=N2w6ru=fi?H5DpxJAarIuX;c$rXczs2xG@p-Lb{d4=Rl45W7YrSLN zUe%inxB+0I|AT4@`)8xl9&R>b_r?o^*_O$s+5c*+ap7~O@)fmL4B?Pzo@-=1Y($cc zJd~Ko&J@{9n8lIugrC=@(>Wp|^aagvw`&&Cj5n{*-WAU=wgiw5o)Ng>lAOcjyBy!YnxyK_Ytr16@?wzaQ1Kj< ztgs1&V*Uyfuw&Wd5+zPRv?UnARKrgIEv8S@ey1s|L!ZR@fTo!RQ6{S|9r`29VQ>W$ zf9T3MOZf|(>@E^N!-XkH9p?$VMC1$0%VwCIpcBKr0gI!xze3uJn*m>lgV?VkI+P)4 z1Td=#PjW*D1L~AOVI8H78=V_oQ_a^jW;M=Pr}j(l8d9-8=QPl+hKo1%VDrBv9K)L| z{6AtcEfL(^*MiDAET$m`pA|!Cur5hhBk^FT<8(zVlT zJ}!=%qhp7f7FaUr+fw0@34~PofCS|9nT{%_MDz~E86iI9YE_FYyjm1_RN7dN?;UzG ziqua6G+d2l(0;nS=|z~Us;a*#-?WWvn;91Z#~4Rha#v&cR{PB2fELYq){}cvMA(W; zTcj6N4D(vb*)6kCO#o^lh|m@mf)+fi1#sNSq>%tRN4cYB z1X%X38$6hE_&{3-rU0$aA*|gZ;aI@oq~?tCu5OOhhP2v8#M8v0PSwmK-QGq1Sg9nrz{(*Xz&4Y~RnpE(4=POE|qmw!H z1ihHFXb0<3ErCkP%XPg@7wSx2I_Hj`c-KG#b@_}Td%B2SQ1c{H!nSCPr{;_i@FH}@!2KfmHqS&wN=^?{F< zO`uaAzpIc9uIl;d1NP5fi>f2d@r;J>nmPKrXUQ+XcEW~D6fp{ns5tenwtjL&t^e9g^JzS<=>FHoKMGDk9`_>Z&7rhA3y8wI^&B6gCRk=QblGeX_y!j+@QF> zM1u6Ctl=CqA$=C5--PLrdpMA0;r1El-aSOn(yuY%Ruw3hw9ONgB83KX`ccz%b(ZpD z)OGC#EJyGE?3wyc^<4}AXhV!Yc_}N4!My09YKkS?}}gx>bOZuxSGt zeD+lVa&I#`C)<4h9K8}gzRU*yw-#(o035SrvJ4%$m(%0kx)Ln!Nq2-NrycL3-jXHt z6#Dd{rt10y_q~r|NG&=tsDcwp)5CQU0%~P(DwU+ncYnD6L zZMmTzZLPV=HSWXZ_5mCuPj+tR0GjJA_o#kpp%|e6;eC=m+$?=#{KfP8rh2(?9oq=b zuo&hiGo5;K4c+|=0xtL-1}v4 zzZ6hClm3Hk^sfLT#%o0!s1Az&O>uBw_L0QhZ7v^0UfRmXDY39+aLbbWv~=0>1MBtH zKjyQj{y+8ZR!eDdq$9UTwvA7Fv;`bB+w6X#vTAQ9P*R$^j0t!!ZK*Zie1ZwSfx&Rc zzCZkYQ8kE^$FQ8rJwtuyssA1}LINte=KsG}Ya#<&&?JeYGu`NvfA~^uO?ig>H zZJ=T@^$d0V^vjlwuuOGsV^O1vjrp3_^UBtC9X4}q9#}?rNwNCPzU^d7=OeUW@epR3 zBT3QMGPl#DMiteITH!E%*Ak!+xQpO~r#N=-aAz1=DFUON{87|J@HV_KNCSWtDZSW) z0Gnt{qOXMj)8xNxkiXHZg3jJJ$(eV{sS`d4NTJ$ao-jrM1!HV6upjUg$q3FbC6ns3 zrE#5bL@ZODF#2{pDvZ2P+Bkny1|`^1mQH<4Es?*+_W7Fy2U%CJcpekyt=)wMNZKw`2~QPp-- zP@d~rw4;!>Npeo$LpM~uGg~oUA|vpASV2&w8nI6=v4<_G)OhGzjsw30*3H#@^#Aq( z)Uoo5vX0j=D;G@T{l2J0{&JE!&ZDEeO0^4}|JVFun&@YEB9Uoh1EriGD5b>`=+o

    HO8*>f>*fmewM_T|IgA{jblGCg4Ic!r-R>jzP)K^%K;1!14A*}y*m?2gU zi2}bITf_Kdf#1du6g@TqY+^S9&GRO0k)&C&6ND-wd&d<+^X;hA=18DVPr{mBS2}?) zx#FvN>19qg6!XV*((9zmnn4F7O)oMg8N$p_(PDl}SleQ6e{P-C&nQ4Z<}43;=xp8} zG_bY>4#qFNpC7MT(jE@1Gh8;4Ym-Ivps|wB+c)*V!d=E&{(do05*e zKU%q@l;>6)N@0pm@0#Lu_&t%rkedW9cQn`?8;5OJVn?%uKOqOC581ApkC=0w0D0Z~ z^z`lZtB5-gASo!W*-ro=4+s{f1h$zwe&@Q4OSyw_dV}CJ%do)KP2AeNV70c zN}LBoa~ueNV->L)nsp78_MVi9oZwAlDGJ$B$VLSoSXnPmCOrZtgml%38aN)JxPBV1 zs85)4H~=qo?OzTUIv$arrX+t!SiH9XGL3eLj{3HN0FO}2C{J=P;T#M|Q(Zl!7iSJ; zW_FeZ;#_K|u6XbNsEq@HOm(2MzRjhlO?Z+VGn&7!17Ynovx!q+NUv!uVbV{a_~N_b z?wk%#<+5E#4W^!TXv~Bfz2|+v;Ulpzqo1+->>)|S!bWP}&RI1O*c%(1>p$co&2}bQ zUJY_z4im_<2#Sn-5KCnPW$jgfPXa%qs$26A zZBnySvvS#c`A7n2X)-IM+U5sm9dz&_YGb~K1#+<{t0h+i26c6HcOfO z{U8-V8lL)xbK<^b-(;9btcQl^EPSJX<#UayDy#gi7lzMr7i~_IK-voj97L5sl}+ou zpWM|k)8PjEfq=^hz%M7%LSR7PtKF3QKJsdyX%iG)O10qIz>OsHZQvt+V;*C;h3-31 zRF~e%#Pq#hdGV4W-m0xrr9fkb9M1JV5Ju6@QI9FpPDNZcv)T%&lkGZWaen>a2Fs2Lh<55(D4o{faTrz9=~(Wu~H9y-QOX74+P=zFi%N zvhUg_Z9;g(RJzYQTW2s5lh9U1mqC7h7MGfM4N%5i7Cd(3=W;w7eWjT(;RBv|6pq0P znN9NjW;p7GAAVpM2XNBY_vdTtsE+u*4Zf|z0bbIYi!uVFNNS0$%lG1DLvx~XRm?;y zDB+OI(Ex5T(RcEK-_A<#gI2mf13^g!+->77@0eGMUR>upq3}r_CxZXr-D-4e5+2vs zVkA&&gy`b>^KUr;-ShWN_D7o}nJb=Mc6;U%UDMHF*GQhG^`T9RTxF)I)?;&Jr33Nf z$C$W*=IUORp>m(fKDaBXQGInW!J##exdIhYacX_PrO%d zBY~H^sm$Nn`k$m(zxjhf6}|Wj+Pc8ry~o2BU~N?s^tqd4cIL$6Zj)eS(GLbA@P9Nf z#AS1#HJShN+91CLIux5+nSI}py+DGzLbHqKlNT8b!lOE=x1-BQj7A=r6GiE4qRJF3 z@c%3kjc7^PZ$IOGQxWU{Lkg>9&FAzv{#kyfI2N&-X%xla32AH{*1n4F+H3yPj&p~y zp4ykSJ$o@;3>hw=sB(-GH~_UlfBo5+zTLP*g7t;^0fqSadUiw>odtNMe7{d>BKp?@ zPQC8`0@go@3hy%ju>koI2cS@HvQ7U?PfvrD?_mwf`{!Xc&eIP%q2^gpeN2Q7nH1q< zZ051IhxNC)0?wX6$H#+2R-6QI4W5=rV4hN4G00*5R(WTw!xB2VNwjWqt3gNA@~l=oqccI& z7rFwpwqOz<=)AgASTN@@>TLj;YfcvEc3xj3@P;FWco_dHy%|}r!h5DO%-K0Ua6TRy@HmWQ|q_>G9?p}1iFQlLW9bQw&wzhJV|Rf(-kq{Y;3 zAQG(bNW27uw&uIgp5v}m9keKH4HTZFtsXNN!_k3 zJdCdZV1qIMhhaP_*gewrdJ2WK5-TOHeZbJt7;<__VW|=V(eS8Oy+=8u_xUieKHhycerx= zjA&p6)+g4uRdCuJqwQG&1*{Bddk4ue`|Kw_2q{qTC8mo>Io?BqGgIq9mJ~+&k|VO7 zk5bNZ0}JDs%f5adt|KzM4ht6Xn$Dhi$u-e+DRf;QGl&A5FPb8^bAiDQLa`kNZ`y4? zP$%yE3FR2UwO)cDL!^t+p&_Eizt18e4RR!TCv;uRpzg>C`~Djdzkh@cJ~c-9`?-1t zNgbmCLM+Hgzk*(ckUDE@DA2vCUua?-BTk|4R7!07eju6^IIBQp0gOk@zg0*;!e8da zV`eCtBBEb?$^dPyhX}Y~`1}aVeSt?4Ov?tsO?HKhaH=Vs1k=qg*6n-j-MI`y=J~YUUlud*GVN0H0r&b9_ zT(W>Rvz76J44ermi@;;YZMx_Bn05CiDd$<`t62tLflY!2A0!Jpm+ z)${a(PBhJqeEdi|Cs@QPU_H>(4>xMDj!vRU>ry1cm0m}X?prH;ww2=2Vw^F#P)c6cl zV?+kptkc+YoNLpxO8Qd=7S&-E(#0qqClpYJ+v8S(MV14JGE;WwGx#5t2nc3Ry)Fjj ztRerekh2rfcT^eSEZFjyr^aUes)0?yJE@m*^n(EhtXFtFx<`~%r1Lp5ODG)&voO^` zh^>k2z6-CW4L-%_k##^+_wjH+rirZr6$MvxBI z+Iyds&T(3KCt6WvSSTBvI3ABZBWOAGosRu@%X?g`N`9>n1MpSCG#4;9($L&&@d+M8 zc#hO7OWATuj70iDX2TX8?I|Yy$+LYxSqKy9NR<6MTNEwODU$%dn%?3I(z0$Y2_IPf zM89>=Oxi}+?}(dH54Ha8_kS__v+z^Y`n%^Ymq}SD?bObQO9!N8H_xk?^vj@YXBmw}yh_NB(XI z!e<}H>k3uQNPFp>FHxt? zAfX{}CTcD-&g`^dlzC)bE7o0F*yegI3O+2av#EE;7&4SMm#mS3ao+6bexfD+0PJR< ziQ}G!_G%6w!b-p~{8q@E*^$1mf8RyJ+ar>AAzsHpWe#5HCI@pTtqu?q-A*d#oO;av zV#lqj(g<(HkuLGE*@}Dj<G9kJsN8CK?vHIaNlcc)8Q@!t{hjBgNw``k)VVm)W4KvQx`rzEZa>p}# zISj80ho-cZRCiO#5uZRY`YHiLK2T|ADWD#wXPkHO5;$@ zydhd%CSxoo-b>xH=T}+yj&#(?(U2_(P>n}``j|iX|Mu_Uk5s>(qCZw7tViX%^{U%_ zyDcpfH&5K80ezlGVv?h%sA#(@IJKxkJh!Dlse~Ne4t1D7lcMZBX72kzYK4_g6co3* zH+wV??Rb9J+}D~R$fjy5NiivIhLHSl9k|vh1He+PoFwE)WZ(WJ-arIvrSZ5-+oZmH3SQ|D;Xjk$v&`X5tR92LRf24ew zkEG>qoOT{zk!qFpt-Qcph_p9S@Cjv>6yTOavy@n7U>=ZBQWnWT5wB!T6XfmV?Inox zkJgvTUJ+dWqURf=%#CiI446OWi2ouxk)pv*vAlhyR}FHgr~8CJOQ#vzS7hxSa0Pb7 z1a>Qmm}eAA2&MTqjQQGfUIp@H+FvErCCVn4?@MIpLq`0EI3-c6b(Mu?v!JKnsVQ3* z5KQIm$#~)k3>$CUX?3P9GPh!>H?_kpu+ znk&jI)0Wvnv<|76!a4YqInXEZbaDDC;ZcV8ACBpQTs_8CoImHKWs^j z15-T{2J3C0qAU=NbKjqn21++k`)Y7~Vr!`bT0hBuV%j6$3KZ;fj{tyfd=s#|&X&ZT z`QEe*AgJIyUNkTd%YTi2e{!!7JJX8RRt#@g>yTPY)Ku{bx=z zHA)=~xliaAAM(ZjRB0Y58%xB(SF>G<>NAHjk%M46%HtnIpmYq9id5jHEzr=dDLfKl z1XXtx&A7Ua+j(*2wAiA!88*ZA3$ftw`!MBDy28B7VI24xMH)P6lyo#jN=*}4v&xyz z)Txg`dQm)|=L!_LxnBl_U!J`m%3kl&U)nt2u449p>xgi}{Y`qw^F06`zA>w>HNxL7 zD#TUr2m~A?V4s!-vJ>YfXxMnjT9J-Sl}_~1gviCPoy#D0MMh{!Vr2rUXFCVXhe!`* z<3QTJJ3Yz382Zp&gie~Ac|FE@X4I>1?$YN2e{5u!GlanC_oqRS1l=}ls zo0}9|XPG{YJuC{DwHkJ)E6aG5<_kGSEu+j2W@aQMe`yttQ&X)@=21r>PR{&Fr@NI7 zdBgZOE1F2L&|d82Z+=DfJRBY=1Zot5zv`K_(iLnIS(OleL%91-5G3j1@;$tOm?v55 zIe%W7=fmGzRFsu{LQ7Yhm($tRfjsLkeRuV)SIpmp)vreD#WVu?I26eBVF^JTX}L-I{e%Gde{L>ar7n>Tf!C%mEma zOvgDQf&tS3&_Ml0Y)gv9BLjGKzC2$q0L~DiU=kg?7a3W~G$`L7^vU6feZ$*}V`=@} zw{kPG-^k&zYEkcXg0?C7CPTjWxLUuVaq!lq`nowd#uWl#5>W>2rsx7;g?M>hkv$J_ zl+s1-BL(#~9S__O0~Y!WXr2lh0UG2jdg-j75I-m1g>!8@yjHs9;U49y3fEE8G!FrK zfyD@PKlCk4IYra3Ib8^^v`qh)s*9lsji@(#ECJx*OP24?dYMxaJ>SaR1>vO>LhU^- z%D~;P5aC0-RYLQ|lo`}!PXFnhtuM`(^S5Wd`|;mXP-jn2>N^clFudx2RMa9#NyRj`%;AlDl~a?HoOle{x0OW(K4R)<_i0mw6K z$&vIw4*g9A#{w$>@_+C6oBUr`LEl~1j97N66r&2g@}Rwh>?ri`7U0RuIb=wiw-O@~>+Bjq1T^zSBe z^9*^r#^x*hJg%Oy-8=F{8MA~)bk>v)6Rx})q;J&M?Z4|V6Py`9$9Kx4%(Vw6Zkmk* z(>LX#L%PK~Yr*B7M6bq`O-bmaXu5uQORp$^QHnqE?xPjyS@0XXjcEE}*4R*?sIc2U z$pr!^2tXMVS?fUG6*+|kX=scxFbJIoiW7_b#WBSA;U2NU=}bS2)E|ZHrhW}=L8S#@ zV5HO(&XOCC86G^1-B8}h?^u~mG%jpSxfr8&5gaXwDQ=&(2jx?na@ONe;3Vvu@qbq$ zCLMXmKWnF>y#AOa*w2#9l7D;=xGZ-bcP4riitr);k?E*0_HSudS+PT8lB@0*b4=roc>O;A z9XpQdSc-`zEmy^#?KZ8F zU7!+H6p~B#c{(!s&z`eanTwOrS9+;l14Pyf8j7dQ>B!mDY=Q~`vb-ri5`jkXa=i(fncdIPqThQ9-A{Wz*m|59(gVPOZrjTYaIgT5j8*RwRQe{@bHh9fthlaC{UXEu z?50g@TEiZ!nGfAX&O|I?ie)pKS0>Se!pTA=&jpjccR4F%8&1jA>y2yYJT->jb@Nu! z%YLy*(f`FIMt3v59=>~@uq-M7)k3h>iuyY*>#^GS;3eLg_VgEqeQmoIT_(=-CIcM% z8cv4YsU|=1QrHB--T|I8o|s@RGWIt(3sYek*l}C9{S3$vZ%~+hlw8nW!y&}l`Xlin%b|kIcPX!j@lzKl6w-d(OW9lZ z7Wz)`o+nhh?B~GBFX=PPb<%pwGt>!MQV?U+LI7m0KZfd!f0qBPosj#b282f@anj_a zg&^q>eeqhYA;+#V>kor)(;W#C$Xu@ov*aHZkc&~kb%GlWZU7oGiZq#mT6bl6k{3Yp zMM!~E-sIm0?4O^BiOgRcDR(Zt?;u>0#HEbvz2OFj1$VX4D{jWJ zZFE^6va1F)Qmhp>Jev~yjbqY{;wiUx!5T`Tt-JS(SE14PrBqq@My{}5X)NEGNw$K){{wkktb@F* z0=+47^Fvt4y~*oq%fViQX=Lg770~f~@q7xXjVGD~=SvGo@M#7mMH))y&2>iQ^P-&l55pn8fR#>T^HL>g$f>H z5)Hj6G1H0PnUd`%;hHWXY;u69{d}g90&2L_ft4ybGrBkO&?{2bGA)-s-kHt1#Z29Z zOe-i>7DtfvsZHV;VA2)jFdb&v{@z&|1WV;2S^ai!mkqmIom7+r1@`BOIAnt8+dzyA}hb}6=jht zak6R~?=Z97v(PJX;73Sk5cWyahM>1y<`AaU1d_z8VfJLWDsl3o3im8y*t1W#)vCRE zAR)6iyP5pA^B2b59bELfzy2`pA$(6cjEhR1mF;hRK8wtb8E6qmH?Jitr2J*^D-K}j zv+ZZ{M~M&TrErwNH2_e|`MjvMmlyxEk@56ed+?hb-0F7h63L8tmq*afNdT^jgK)a% zZtHw49HLv5u2C32ClB9UWCPE1PinJ7?SdzBLFI?6Ef+09bm)%2LJSFbjJ;7?BK%a6 z2dY-2JCcVz+<8cBBgCCK4O(GJA|oNpg7KgyJYRVBBG}kNo&Kgx zeUSrM1J>nDT&DW#T>zYj;s0zU-Wij;Z!CM>XtyE~EF|C*>;cdsg1xWefC!8FCc^I4 z{idMiVfW?r=Y2G!@z6qWZDS&L&ntCMlNmK0A?ZWw*%5H|HW3(09N>lUL|Qt+gmOfk zNJJ#$9qMeL841BZhb*sStxReeP`D6Ju~5=CYr>zK(kvd%8RTHvRbNS3_L)FN((k)XfqNR(=BWfx6HO@r z$o??QaR7eXvAkmHLtEWK{bt0VS<{tq0FDY3+=JM#@}J7U$AnghiTi~BiqD@E$iG5Y ze6bE};Xg@X&v*Mn19tMmvBcE>f*!0V@#j`3v7HG(51N7ijluhM0N}Vu&+`BOGUToK zCj2ruYqOdx1R)aRTGR3sLVoD#s zoU_aF5o9AW#x|D_^}@_^%8=PN5id_yCbKQ+^7_hrZt&YL?<)s08=( z&Q6*1+gZU&I9a)_C2lcJ$UZyWw-qzxWnjabGWjs7Y5s_y@MFbTiY zJ)dTzPhai=FR9Z~-qc&5q1BSDH?oRzxL`%vxB{OxLE&kBjJ*EWq` zS+Uzc864puMb)QciqOV=@_ck#5s4zp13$rAgekL21z(XwN7hUZBfA}(16X3YPB4ke zyt;gz>V5C9_si5c#Ij~E`||UbNgM+vhWG z0+F?wR8@O$6*fqztkRue(E#^JR=-1fTtlFhu>N|_fNB-$8miC%vKZ(QxT&frS<{R)o3tvB4U-ZpM4%JPh20nq zA`L@+RPSFeQVN|QRdY!Yea5i}P39V|==_t2_Jv>Tk z$4I;&DMm?TK|?T-yJ@HhYaGTjzMTN=6;Cf<83CF|n`Mqoj&7LZ{tUa%#TQFLI(}=I{FxR5ejfT;n|_&5fJA zm9a}f%4A=S+(k&rQd}zxu zR1m@w2{voNz>I>JhSue08Ch!TeYai7=zYx8ET~#YuiCKBTfCj6oHGa+xQ4B=tYW(o zOOw({82f{|@9?Dl&IfI@<5j@h{+X%~GjIMwb;ea@E~}HTF6d`uGHT01CxA=ww+NS& zYi@CR1n~>e4s@Ax(TYSddZ0+CY5oOePZ*DHMc&q_7K{rraMD`Ke~beT)VCu6&29{3 z1u#reL_84$0DbYnw;c24OfUJ09mCajK#e>p1)834Ys{^!(QByfp8O{IWk<}tGtOo` zWdwVa4p!ebAN3#{lzlAgumdePFJ~4586B>TzRxhsEbtg-2+2f@?So8a0x48WH&7pV1u! zl&&dFUj!1Xa)Y65bxY$nBO?;ziOH<^d+Vqz5iI2d@w3PA$cBU|&=tKLi*G7_7Xpos z`H4;)zZk7PT^`4hU`<0G4b&|S5}943G#G?@YORBVqdp0bxIA9X-E$d55LPo}{UPq0 zpHgV{D(Rmsg-n|WO^+&Kodj(fk2G3)2v0B;=My{S-d=W@5&RJh?GcMetKes15v!#4UE!M9f$1+ zaxDjEV<1xSDKsO9z~va>x@0!~-Gp8uV%+;SYpAAkTN{e+{wvM_ae?%#0c{A`y8w+CXsIZ0keV$>=MIa)zQwh zEp%N8u{J^&ZoegkjhspJ=Cup z9!QOYRKdXw1U8n&rx)qXz^j}%3g7*Y%Ll;krwq{D!1SLz$(jZEPS;w#`=Bk)H96k4 z8*ag5Vl9mD(y5nf57eY_bh&IDX-P#OP(?KNQp=U!PRaPlihJL@i$b88eN7LLw)&BX zdf6P{8KcE_vPW`)-oM2S>wuq4rNPH_5xgCf6hnK<{W7nTDDAEguKeeGkID~nAq!Sg zFqtyAgh_y-af(4?G@m;|_4F>2%A7{TT(X2st-&;DxVUv_M~v>f>lVRx)a}i+X%^Hg+|=u_jhXUu8EWFi-1-5@rfQ)iltFe3)zb zWByCHd=ij;Z(;u*v;|I_ej=3eP>g8qQ+VqvFjDC@%KW>(-6_z$Z4sU1NYq$;>8ViN zuBzhPd8SX~4a*Rzu^>TuE^HB+xfmgE*-A+lFTthLqavRfS()olMe$)5q%&mA!t!I3 zH1G3wmPMQ+ml~0tuq-)ONdG)CPwJ(<}QmWqC1gz z`}=qb?aSdA6L9Y5Ss@oOe+4gI_Y1UvA4@s0Q9lY?3t)MNQgz^kXSYA)L#fQk;fkss zDq#{?5wa6ED}S|+{Cj{%(fOiLgR5HUi4^}L6VxVF1HWazX`rmz=4EVb9C!fL1k5Wr zMgE^G0BE_SO5#fjM_9m4i@i@yQ8@v2kSk zG^Ry1YYkk1up;GeP|FEKgmDlmDsyFZCQ{guQ&PoCJGUirL8zvSI~Z_0sy(5Bjzcx8<0r>bBVkIKGXZtakYKD; z_oH}_%*TE_-H%buCgyl4>*6IUl~%Z5;{CIp8sYkv8%-Ca!Wd zD>NH(w8NPUD1p4nBsX(3y&4pKo1(+adlLl5@}iBRnR_0wf~y9Mz`V86KERWKRy_J{ znY#e8DGG=P9xwvx1tRk;93MWBANLJ9ueJNxl0f?UM7_-ry9ZBlT;f9U`vJM0o#XT6 z!h-Q;DKIO?^cD%|&o(;B^eg-}Cf;H$spPOoNGZa)(V-c`-f#G_MH!Q05d(K!wx~i= zB4Y|;?)QxE9{Vj6r6$+nz?`` z9_5EnKg}OyD(zwXEXhK~d}GbOn_MA#tdoN&c>T{}s!%<5#XTtN=c9#^+Sz)9lCWb^ z!NnKE(PMSEU8VXiSyJ#l936-}2_qTme)EZ$-%-*;N62BN5HIq_f9+qXu(Qhbxo1^p zqE{_|jIeR4JJ0-shaOZ~0Gu;#l0R##3Wdj^l98iUZeEKzp>_>o2HUui;-}99W_Qfm zeUK@F<;V(6iU5fyN$ziUhvs^HUPF2L`E*U4J?mG4{1_=3WaGOF{l9e<*F^vrKoH;& z3=S|HMcWiY>rGG9l2EPU+1eXr1W=*4al$9^CX zMRh%cldx6$xT%ehFq5w!BK=vU68)x;JH?9#yDRHSG*w={l}&)uvq;6ofEop_MjbS3 zs-$-%xHDZz?HklVyms9&8PuydC=i(|kQSlI(kJI^o1v&CUu1vP%qX$Df`#g)GL0}L zmRPKLH`itY8^y(+;zz{0ov76#f5)J0S)%A&(HClJGpe08UDMJ&KN+yi`|p zc<38wH=~bW7+}0iSu4&e>5?H(hcW-x)vI>AK!C)9;Vu&&7D&?l=(E0!g?kN*&J2c+ zH>c2B9cDjp%kGR@l_BxR$gwX~xQ21s)}bN5vZAew8zO(#;wun2ty?=027fz95wKtA z*qg2nH)OF6WeUf8SWxMHT_3eZ$egM4R?FQFK=pQ3A>ONJmQ|BW3KW+d;NXX!H^FmRX%~Bpx=$I zL%GI7>FrK|Op&%4|9aRl;*u#8sfasJbi{bURmZufMawv;CJg1N$#W_5u8i(AIM~d~ zXrN}E$*kL+`DjfLi$4QtIct$lu){(E@eoOx&{{O~19A(7+f10atJ@mXW1KWIB&UR4 z12;6;6lVaH%t$j%Qh@x<@d_vy;O?) z$qtbg5u(dbb#+L)5USZ`)3+8p6+;@FGJTfgT=K9}0#A9lAle#438<-zbsLpg8K$u^ zDtx#LDs5jZC7>xCbqFs7*aVy6)BCC63Dx$F!?R3?sf{SKdtEAaLLF!JMQS>st{7tX zCF%2rNz|swajtl;B#o9426JrWF1fqT9lZq;EU+xNMSEe;YRfbS;kkW%+KfD$fmW zeaMzE_v-H2ea!t#p4GrQ7yRPIvT|o_Uq~@2F9givuu==ZF%|Ei1Tn;je5u7RpMVtj zsX{8*bqFuEWuH8(L!YmBFK~?$7@8G0I}9xz40j-L>Umyr5TiVUkDX;)^(9=-ysnn_!!egsn=Xvv~U)ddM^j{^g(+;Ae7U~0(Jc) z$A>vpAX`Pn?1~7$5`mR+=IMc}k>Xz@WGlG;2<~p=t2Ce;?-A8+bg{l$7bRqm;D{Am z$vxbpzT!x*s1wtXmTfl;4#4`VEyib6ZKy+N@$#xX$G2Gvt1Yv>6jH=eaMiCnzA%mm8?YMYxHJ9H8v zs!K~!PvWp%eA_f$%6hygRPUVtWUA(Gx8akxP|^s(+PZR|2>5NQi@XU4Mn4lmsoJor zS|r;Q)_Q3w465=`>q^L30NFw3{vL@A?G+9)I*g>tyL_&QIqDRSAL+7%xdRuv;lv?* zb|>w5AX*wl)5RoB7{^Oe%|YYcdM> z-Jj8uq9ux31B|M4{Lr2RUX6NmSfl-1fkSQTV~q%N*WxK0tC^e-PpU9Bc^t@NiX2Q% z?#~0t9?~M&hR}De^4zli>4W}lv8AGei3a+HOewy%T%9S~=B&p}lv%1L|3-j9Fp7V3 z&Njab-fMfEtZCc3HvYR`C{5Co#xfsFIC@l(yvX~UJoHr77HahK+0Y@eb7N9dM6b;? zj~T4$CH+3zIWZ^Ov0S>ghj$O`E$^txU)hOP`$9LkM>RywL1H+O>C+Z#4e$Gw!YXNS zViJxFc+(=}3sBLv)TAh56zCxbrLBMeVO@ZB!2wh=52v@0w=&5d9RPS8MU&!D(w-gI zpBV^fKFcCT8MiS16%`l7?NpU%%9oX#7KuYm)&umI3V435Em9^hG(C|GBk$Q-c1M*6 zWmUECWbw<>ibH;%<~Tt-SVyLD`Vk;9qh^A~bW4XZN7HGN7&~hz=Rj4RmB^sqHf<>Hb5ji_#L-8Xqw$>{} z7I|Z(=T2mO(2I&KAKTB>V8pRpeY9eIFa~zOXI!z5iwci6pm$!A#FW2lsa;~W%>+$A{GAR zBQ>xX*iM`s3{K`5ne6z8O9a_}){N945QsvY9~G3v>qY@Zz#4S{+XHDKNA;=nwy1~h zMr9h$a0{ZwSeTuqa*i1U9$l6lRhf$bX9}|uS?7T6GGD4$rI(s?X^7ev>1O^WW%l5X zDbpLKU{H5%8kHZ1p3D~kn~X5By%eBQZ($6?@9jhwx79}g;dPE`ZPDDEf_nK+;(Vu_I#%5R?M6mQIj|#h=a8jNacPsA zv}PU%16OQ{@XS!YEEW~L5|{-Eh+_mY)S&|=F_Izimu##y#fL93WWtUcapz(wcfK{< zY=_0})XVYQGH{$LDWDKuWt4;pPy`{?LMy0z=A3<$d4|!OVTDxq>=!F6YcyPJQz-Uc znm3pdY&dZy(Co&_c=jD8flg{J|G=7<`oxMZXJ~4615EJ~Z~hW%n(n^+^dUu{ht3dY z^iQk9&14P-non;bCj+^izE)(B8~@ff;qd+0D#TAV;XXprC}-j8yY+_jgk-Rupd@cc zMmC#AXh0_Q`frYez&n|QZGf+bM#0sN;li%<_wP3X=<sfRLWF;RSaIYHp&T4Vx+3tTMJrijs~vEfrf`k|8KIknZ5RpjoLNMe#qJEHTh1?sAEgUL)Ye)9QB7fI@Ccrc=+g74YMdhAYek?p)kG9|2<;`aAk zr6vQ_(Y=KtkWozGMkOw|tipf-z#1J1?eod~4_D6zbzIoXq5eU|HWuYSy5~zEk75j4{yYn4{ zusktzu{}5u)S;D%y+jbO_0 z;fPA_{qWd;qRW^xqWxZ}IVm4AQ(JtoHqUfRc2-Ks@@byJyk~VBOh`U=NvLNFjSzqM zZ5@OM$n?1O--_6ykd$X-yNULe2I9i60Kq{RfMdKwpNPK!_&78Qc5VGQ{E{$GA^@IX zAZDn5bQ1+g&wpO4S$PGX5=O9J@S8LjdYkNcSP$1uMpBRZitz`k{WZ*joQ9Aov*0IS zRv#*3KOz)7O-}Sd70S2ZjPe84=`N6?gc6(Cw0p{yAaie*y}e^}Zex$uQJ^*hg(jtG zt=dsA)1G?w0#v`_kpox_5SS@gplU8Y`g7yY%grTbV)dkMqj`KYvSufuoyul)$Z+in zQd3CdP^lwk?uJg$+(93S7b}Y-A&f{{jgF(e)-=L2SI}eV#esT+5gmlP=;fW6%! zILi-#7zv5JjRfjGMHfPgeIW-1j{x^WSo3;>-sC6Jx2FMQgiq;#j82mI&qDd2i~Y?A zlwuVS^M1r>pV#eh0pjQXVF6}KFCeT(RYzS7G<0A3ABh;Ia?+%SXgo6$H5D`RP1dNo zx^lz?FE#d*)(ciUb#}Nbg|49`ZMO4Iw70?$PG3ouj)+v+b*Fj>;)?T5DtB!|(mVVY zaCa1n5mSCS08_qsq%aKCRHK{AafY=ZeHQ z&-`MXh$(%mpNE8ii*6l;vXSRjkRVU~6$dvrH~TGo8jIA!dwPsw@iRxR1L&4YGq{jX z9{O$-b>0Rj&Dt+k$COv99M`pTpIEru)2I2|>)ug!(#6Y?Kg&dF!Q%PYD(@r;TGh9p zf85A0q&90zHiq&TVx7Zw3<0G&f9+d)#T9w(Yn*DJOfJeNW6|7dkJK6d=sP;K&RjBk z3=uiu*~G4Kv!VZ!r4%8x0le0h^&TFRpXsNJsr~U0>5UA-fx7o$CS`+iTrxj%&1bn^U^GKcpWh zuX+VTowV8nZRW$7R(kB8%|d^rOwL`!Gcr#lXEO)>K2BQ&(ibOe)9=Wco`rt7ZGn*YOOhDM6<8GZ#oCsQ~D9X{?}c${9KL|shoY($36EM%zWJjNrm zJm~KcJv*S)mq4T!kPH($kA8nVS}YqG8QGET_n`VO5RnA}V1)(^;JLw1u^0u{)u_m* zNqKf2XXSkeSI-75x^3X|&L8PN?v=Uktd8jrKBIF&QS-ttEk=4JQ%ln&j*Snjw*FAw z;BMT*X!x-bY$3yh>i@xazE8140og`X5}h|`;ke3& zX^NT|HWsvb(;voj8D8^Sg;4kU>4PXCPCqRpzM+K`DRNwvietb9iayKF;w&GOoQO|{ z+u{AJDADj-D;*=s(keWGbFxCRPOioI#`VR?_s;`YFcFc({F?F1+maIk){n?@V$CzHaV1-^P~J zHW4tIbkn`ImnKh_PCh)M?Kw5b#QRA{bL4*P*jhoknl4h3{^M#mK8VD@KX~fvUmr~} zGO=h-8s9bT1j}AK#NZ`>TMW;X7owG4=C&v2BT#shs6~%5O+KMMiN5t2ta5!66HP zXpvIDr)E4}N(e2Yp#R_|wzPurJB3TLy5mHB*!Oem$wJ`JAxot8PP|iL?4n^T#zDPj zU|3=JNnYkL)){IkHn2CQ;wqc0LA7tFV-!RSM6JF(anbdT7InN)CM|ZuS1YZ5l zh-3BE>s7RV{4cyNiDasuryr# zx;Su%^PD)B*d@V}Y7KL0siMuFN1jwagiiuF^;z`7=UX1BaKLKB1F2Nu`Oi z6OmknJJ{z%f)yZG%^qiI@1*Zt%BGF}`|ywnpS0*t+2`SY+9pXV1-+f)hr5or9D)M^ zal!57kQ=y}c71NP-4BV9ydhVac*e8?EKQ0@sWWQCIo6ngPh#oIM_0orMEHq=EbgBd z3LPmmCL+l>k0UnNe*fu@^^o!k++3;9EsH8>_N3FTf6#pk3#Fp31!#5G8+LJ3VjKBN zkP_I8G1C^;i8lhBH~d0bC_>{*AoK_7i!}-s=Lb{0>Lwz*A}sU-RH1EV>5j;mBJ_Ti z=cO`r8k{gnnnGk&!qtaV~BT&HBf}tcmJ2)oCL5Vae zlgin*FV2xTX^NTrZJyDnoJskM$<8kMAZHs{m0RaP?l0WGgUVOfv1YdHi~i6x3iGHj z3ep$vDsB-je7}9Yl^l%NzU6xu+f4|Utdigrs1)8!rN9=Pa&u0{Xx&B9MK^15rIyVv zyN_RP9irv;t=A3aD9S62k+P1~tk^JIZ~o@Qg460i_9wL^M<9jSMToN!(vu|V&;C7k zI?3b%Udn|D@QfUgw1fE`7M<4+Jp|mO z8qD_C{1~0zV{>WxCe+|MKMEb(^JR+~eAWRZpJ3K04RKON zgw2TR1c~}t8b*Sj693TPFO7@Fxl)VDQgbDCk8U;AwZMe%2O=jkcJ~OU5P6c82M#7_ zec$9kH#7Ok>bdl05@5#&UBC+4q+OBtzXj#f3fdqESU0iRw>5nW`O4Gi)dFuS?hKvh zVXH9RM$6ES*{Wvg@5O;$sf9#(b867ReY-OJ8auUqt|>26ig82jtZ#!TksM_Ng)?V_ zMr zxXB;w8F%N^NywrMjC2fhMoakyzu`_pKa_67YpW8*e#U7%;eZKR8rO?3pP4wwJbEDxT6$ zf49Aka^HF9#Bs|3shf6^!}I0wwf05tbyB`GL2~BnRov~`WQhf=Gklz`WRVb=h45WI zu^U!5vFCR+B@r64=UT=4d+(G|MfPT{9TET zr4wJ-0ss3exV}ho%m7DL?Bl?IJ$|xGBI;SSTypJEgZjni|LLD6w zcYgdDEOlLxEdIB19*)?+Z)LF(y+ka2U7sjbxZSPOrW(&MT?2Bh8J!8rfchf3LP^Yx z8$*6oHB8>Z#B5m^>;#p-207B6%~`kI~d?=vOS-R784<=U_>0lY>!oQcOAbgR~osV8I_(6o4a z(vD=df~XHGkb{ktm6(~-N4YtpWq}4< z14F~h$J4HDzyHv-b=uqZ10&`KIX*8Q-yF1gU+1-XdCPPEi)61zlgEk`*Zp(Eqdbt+ zb=f~p-rwI}?v4&0ZKS6sHB5+EroF_AYW$=z*=e=J_55L*tvM3H@mpbbcI5_&-Gx_5 zxeDK#kk3pyGyMR{n$I?giv3ax`Pm%uZxf+Lq9s8xlgE%-^mLzh1joQH_cO8Rd6iQ8{Q-*`*dp=AFP=w@W}Mm6_KW121rX~!M4K*%mt3IJat%FCwBG_g(U}46SXE{Z}+7HpJ|L)wPT~fPfJ(G6I3sl^v#h{|g z%S-cQCS6^U$NBuHCiHH3iDxU zMo^Pz7i%WDXzgP2w!avC_{0SfH$Z0x$GQHNX8)K}iaO8UbT0$5B!0p5<&u->hcjza zP4|=2aQAJ6T|9Vj49*?~4?dP-Eaf-?-+L2;L#B zUEMZmzT=~$x~181`q(=q&PW$kDe5AFF+zsla%>n51&2&o!$xQ9&ZRya>ELjdV0{^G z9@+z`vK0sSi+U|+w)$nYaO@eQSU39(VrT7%g)B&awCoPFQaxcC17UM5<12sok|H<& z^~d376U^3_xdZn3U#)iLCeD=669-7e6quU%9xlrbQyzpg76L0*$zqgaBokk=Xz{EL z@nXy2AtZOG)DyROJo_T(Q&c_*@BJiNlgC@C1}BD=&p8+ZQ!_6@hDkbcfR2T>?W($4~=E3`p02w17&3bk|S=Lk}GSB1-qrEuCHvkp7$IY+%GL-ClX_ry(HWHT2( zaqNbkJo`9VtGJq=6!aBFqYzMnrQToU`~!A>ME|?b3qpGXPTO^^EgPlAk>nmj==chj z_m^Yi(f1}~+nEjOuHATqn;`EdxQ{CmM*>u#{e=Q{$9d#o8zvoITq%@qQN3)3+EC{N zo#EyvhaG-$6|&JA$>cVvdtZ@Aark0PHd7+YFR#f)qL+<1LvvR&qFmy8nMQm~pc;)J z$+sS`r+h))g3rviNHEFW_z1mEwzATVo4XOV$v(}sx0d8ItGMC!+!063h9A4fhZn&K zB-^-szU@oSjpo-Edy+52F&~PS8Ylzi*FVEfeY1f;O)7sWqgVXqa-&KZ3b zpB_bKgi_)QLb5|Ig;OO8`}sSAxMi+uMO7srrsd)frc&B1rQ`*K5z}&EWt9yC^uhNhr=vH z6h&dD_jm;s{515p6eb~^H6e##+#;yD|vPKyH1n!I{C+Q}{tXyZktpSMLZv1BOQIz$&;{J`i_+)Q@OUf?&O2VN+@0t6x0QS~T;~}Q67NT5F^-;|z6upq9T9vs5gnDlia+2awB`Q7sgYZjI26stakXuY zO*NQsh%3X#-OHf?B_E8+r$*+y)khi8zE#25c8bFWp27~$Yi-i}DRSjVbg0-U&Q&?K zyHE6Ov1igg1J-!nu)k{;A=u4r7T|1mX){XLv3{-)` zQ26q}vaF4qjEIL`YBePR8ZJuO6M0)oLvnxW;pL1rwzD&3MjadW2Rj5&>B2@nb>&BB z0)hS{zmWJG4+3P52l-GiD|-tmvNV#d zl5fiD2Z$LlZk?v>w#R3$lcSD9&ZV|k){0o_I-g9iN>M~Rjj2Fe{JH{NQN#k~cV61t z8qTD@jqL(eC!JG-(GQX3$2xea{eAQ@;g$IgpymOpb01>DmHm=!5XBy;vB6IAtEE`v zfKrhpGmxPEsa|v*86N&G&!30gydJ@PMNrO{e-JZt1Ofkyj2ODw)7@ki2CO(|vya97 zNYa|v>8-A0D`R()*AJ=z+m0bh=YA-V3zm*4C`fEh4B0`y`ycvzWEtax5NY$8IqCNG zVW}tqE*WK>`C<7X0akJa!LV00X-q@%vr#wFxpCAp)XF~@jBR34TSFvE0I{Tb&*Q&pZqYj26E?!{5mbo|KpCrQHTNbS!`AYXI?jp;oG=8xgX$I)v!C7yhQgQzWs+B@77{yMO$+7)~uk)att zXLoILp4TN=c^Ds0vi)6A;>G3K28@>APuV+)_t)!ZVCEQ&`}8KGVg7*Z?s6^l?ziTh zpTrAe>F=$^#Nn#6p_DHZ2TBfHQ&tMv1MR`fS?LJjf_8+wodQS+cAsu^2T7C0S8g9Z zvdEE49+cM84D(Q#oE+2kg*zqb549l=!*f5Z(fe6HBY=w8R6yEly~aLA8kDU*QM<*} z=6#~dI1;)Ts6{=`Q($Hr~Ud1XjEkglU<;Ak}QPQpb@ge ztqJoh$ID#3BBTZfWNHou|RIgdNuKDUu1r3BsX)`MJCYel@uoZB#3;op#`7M^i{b^ z8qXPtO$b5`X;C^CvrRWTgKHhW%p_z&9Jlvdwjbiu(Qn~Dxh5D2W;t%$b@V8wLUUio zcnSKEb#^bYReJgeA-P>X1hp^Cjk*yF6drzRw->&22)NACM&1OokVlvL8?2HL6*O1; z-n$K!Mv(>AZ{PBsB-~rfts9ZrS+`8r%h7npYI^nw*=4E?4cTvQur6N(yO)=mHSa$U zdj#eR@!8avV$=a%j*%)9dzHtbHd4SkN&awwdY?K~D$^EiLvN?V+bFI!olm2!bC=GC z7c1x|@Rp9XX=ac5^=3geGCk-#FKcLn+Fc<AVQ>&cyHW5c5!33?e2P=`c>#344Bw^7MhCA;`~$sQax08ZDJIzsIhfFn z=3(7Reihwp#wV_4nx(kJr~sPBWU$GTjYqh!Gz#1FoNfg$!R!2jjHeEPh6${9Sv~q% z2nJf6CD!uHFG6ViJ#qeb!VJqziUS3r5ysm_ghP1ZE&fL4uD5oepX~h&hc(O*f{^G> z0_WT=O$)4M{8lalyo&k4&9MstgSOo<3blF@Dox_AYUYSN;}k9}-#%#B$v+Y1T|N7_ zng8^uSChPdo`$BxvNm#d`)Zn=$#$-$xBZNgx|d9*y2d#EIdk~ z4K`~Kk~Jak+e3}_VtlA2d>Ek(sv@hT)Spq)UQhDNhC@QNTdF)2S%T}ezT=7GG=D3i z)yV~^jR`S{m#7R3J`r!$(f@UxaI@$E#EU0DR1?7i_&@u@0zAC^{%h5KtiK-7OauT9 z*VNvref{OH-Q8)r0RDOg_<7Tpzvn90=zij&ZIac5j-|4I zQ<>cu=+4WapBY6glah$0=3n~dIiSzY`B`8CEi15k=w|%&o<`zzEBP4r??%)pfoF?HQ+u!_DH(uQyID^we$xv4>;U{< z#lGlU*r!bfS~Sg1z=u%)h*=q#j+PeS(eTYiIvJ`-2o7E6^G~WDuROWwF6wtz#P8#H z@ea6eSZLibASUdHD{o(iEq$EAPUQ$;M*XS@(*Qp)8ZOkuH^?W@cYwp94U7iVe_ixy zyrUUf4movkpWZZy{0h*>k35WcyMMgv4UOASibKRl7O$Y*C*#A ziTrmw=vYhWkpbD+!fasmxhD*d)|tc!(gRgLLYy}iEPdg}_g>k2N(w;*Crd|diw0Ew z-KHZS4W3rxBFn0JH542`4l4*jzsaa1yNIaGN3Jk7Q7cm(>`R>Qwy+3U?H?E=XW0dM z!u0s7M{BPyubHKdx(K@9)SS4pH&m;4naqrJ6y`%MAz(zi{I7rM?P%X5SEy>tZDF8 z6^09qFX(j4%kJy%mM^@~-X9K{m8q*jY*B&{ai(rGuvNi|cyQ9TskU$nb3iAjcay*VBuHv+KJPiQm|eMs82f2)+2v%hvcu8N2Wb@3Puq z2p4Xaw0F|Tjj8r5AGkztJindq5>pfF^RZpxX5+Bpbny(Q-MS^9-PSzOX6pm$u*Tq^ zaHcwdOVTVc`BPHt%zMOVMRB}WS2RHb`0??doN*i#^n0{C$k+ut?kqoxZpftdJf*$m zDtdXNdNgp`+>mHjB>QKb@gq@o{-^3BprEm%UpAakd_tp~+~mDZ(Je=&L=vXhrzyyn zO)rY$xx14|G}A_c!O!e)wrvTP1>;}uzt9?T#;tjeO1+WMP!g!#6Yb3&lHamWU=`i} zM#&vDL3TmU;(r=3_JaA>se*drl-DQLc$!D|ZM(Gxj-DT$s?~fGRn8hBZ_{bII~YBT zB#h2vOo)2#4lnq1+IwEftA?X4K=lnyc%YEEoncHL;ibS(JK@Jy<7f7!`cXbjoeu~*SuT2o7PcR^~4Wn4moL$=J;8$3jZ5gSS;)DNeaClXNRwKvc9yvsN!whH1&J> zjVdi`$J_MpXeO)L``LqUN=|@Q@gM#ULJV}3)IL5GGXj{L#Cu4zJ!cCR?66s&mZ=Omf=JSr!w^e;PuoQY*^?PxD%sh6_Jm`dHimzd3bVR!OHaXy= zVyN=s4cYC|GPc3cwRu!)TTN(lTA`5ZJDyr5!Rr5wH!)AnywGsb;KUc)+J&$j#X zF%Vk-aLeW#iw$2|mUj@6llgvbW=b=KRfyBwl8StQ$Y!?H$Lc_sI&f8f`P!eWM~~2? zArrDyf+CjZ5haR7eaz}iaSY^ef~G)Pi`|F*8|z5kZCOs~DKC?@Pc zk)J~lGBbW$VY1MaE&E^k4qk#w#aJqhY>#@Afj#>JRczCE z{2taKbE{z|=Kh-(R0GXL*vZ=l?z-6j5T?pq6Eb#!-0~AUtuzCf-TYNi9V>P9BVU>-Ocm6i}O}jRJgTc(%GOX z&3GwU*5BE!TgIv6OLk-JslQny1nCUHtJrI5DTs#qR48aCr;D|-Q*3BCQJx-*s%4E3 zj&)Lod$Fm5&{{+)ZZd<{hK)g;ohGb!wd{Nu_KH_1SR~>xoFwUto^*eP!7F5GiEV60 zkL1{n4hQdJbJ0+j#-|PZhOOTF>&)%i8g{nTK4b!I*S_nwZaGgDGWG;xuX7_Umbzjg zDf@wMyhjf9*(l-}t$=9odHM%XZCM#$iplz_`#!1-Eb*oebT2p+3%i3hR#4Bu% zw0`zD(1><#UzrxC#zL=ST`E8B%YNOf2*z)=ioV%5#c@(9xdr5{*%oFWau8rFd^9er z0xD~qs_XpOsmG_MeTJ#>VOHk}ZGIYo{6G$96TV`ApV-A>zDKb8#coUTdmwpUJY0Y3 zc}z4b11&NDbJ-!Rr(bWL7G$JPk+YV3Kpgkqi@)K1!v2!Dxn{e_Kb;k>*cj@pScY-{ zC8G_3FEixFv#oI$@hM^JGV_xZpy#D-Aw>S+I;KWd8^#ii7R(40j>R&)0Z+%I7#&yb zl0hnsp#9%=q@Q(oRX186T9at}4*HuC)^#W1+TJsGW$x;BKc*-jWk>tM#k+e@u|x|c z!r#S;;~wl*if3h;0-rvPH_DUGRGsc}@Xy0E_`rtMLAua3?-=S8DQNHePs#PgmQgMhF}y#bHR-;AX7 zgAKb+ETVVgo|p}H40sGw6iOfKdKX+)`7s-R3TD}kS@J;;ea6o_@F!yO-M&sDhYUaM zc)6V2G=5u@-P2R-(lSyyAu;A>ojitz%2%W1HN;kin-S3zo!+L!sRGipQLsiJ_koB1 zzXZ>MEv61oVIT#SMY~y*0g~tTw5Q|xhs@1dDE<%*Q;2Mj9Q#Y-8ge}{cw}tMDMVdC z4>uXii}0{G>&kQAW*Xkgvm~Aidyi&-Vr74ZGjrofhS@b+3L<8(eLRrwJOytk4JXKP zDc*erEgOjndOJl#iAN$wn8#+ff9{(tZj~W522K$uziTX1JR6Jkq8t-!@-auH9!CZ- z3@uSvM{8|-Z=L4}`YkWb&g7$OjVrtX@NwCy!V1nHE0_+HF)OZ8nGc#-o(B^5@YL4=vX@wefKM;-+?G!w7a7--`K7 z((dOnf9I@}7p+xu;`ClrXX!OOs`ugH;^6+anYq5e=n~V58)hvb2NswdgK&w~l*eBR z*fAuFs~jbvqvuk6W;~8bdmnioGh;ZKHwYg=B_Q)1FJV^A6)ytp{5L6RQO3atZ)F&A z?wUPni(BN8CO+ViimB)-{YJ9IIw6-EN$XC`z3V|7{6j)WY%eKLINMpV;3LR(-IN_3 zaOyKF^5t3ge*Mz+;88If%jr07qnBxvC26kgJgQODrAMV@*dq&glL%s3%aIj$a`x+_ zSHC1JnTYdu*12T8_Onu(O|2i0*vj*q+PyhWLmOz?UXS?<)tD1QWh9cb!z#RW5Oop> zyt9pukgihBZC{kPewXpwsiey`fN7k6qht`)&#r}<>Mp7(w{yJesmSi732)&zronQD zLK|uis<-_0RF6{t#csV~lX?`S|uqOd0yA!DqTte33P^Q?!#g=Nz?k zOGFG}bcUqc4-2Tu8IDI-1z&sv9z&2?uFAe#kraEiy%O!r@^X0yPgK>3^fN7!R{(@{ zpytV%r9ryL;GsK7o69G=3My?-mI4>plzT)SUR6J(rdf7y{ukFT;o>+&S>AUX($#TZ zLRW6y=UGAgX>C%NIvBMd7cO0#2IM|Qmv@r;Vm=}m2sB?rLlEEttH0S!+zG`uaq1!= zk4!%e`I`4F*bH|+Ng3BuUHOqjVWZkMRf_{}*pEH{7ff~uf^ohg9>@_3VF?k@hr#w_HlIs@x#7cpu0X<5X$1mY2vh|9YC6&S3(Z$i&A zsF_D$jH+3v_|lj2Y2$6``8#7;(7lO)D#}Lg;KtR@36f3Vuox!pCErg?+0VYhuRe_; zSx>Y-q=6^|{yFPKz7%I7ri)rPLOH$gzNLQh1bUP~$@2^5@?=S6J0eERhMOhC-(rI0 zpEZD*PHoc#pj;cnoROR^?NB_h!EKmk$mbkW&kxgpU_W-LiAtB5$WvSQ|Eq-Vy24k% z2@WbDeOZDNgw&YhtVj)XKQqQB%P-s`L)|n#t=4tZ4&nu$6e^I3L59js%2ujw(XtC>Kl|= zgI<6;(YtsH$&90TrIpl@ML|?$y7Z|?S{Zy#co8r7t4#vV{i@5hnGw_MO8kgS?BlT{ zk8LV&eiwyUs=SBX$a6QZukyo{9@@jouRBli%H7JN-QhkSKiLf=-nXk3%G9M}>fB=t ztkGTg59F1M(@BG8a`r;2|JlZp%MzOzR0+>ODm4iBX{_$VJv*!+`s(^G%V{x5m|2Msn1>612lRi%l=DvYEn=Ml_g2c z_n@1jQ?;eRNX$Nve>s%n&lnQr{2SmzvafIPcMG@;x|v1?{f2dSA86Ne*~ zJ%9Z&DsphQq)^C?Z1!AoewP?g9}-kbaY@k}drw2*N%L%I`L0nzq;GHdUn$FNRwmiS=q?GO_Su&mjnNFwSZ0E(iUCcgsos=h1hb~Bg8d5q!pUy3Bw9blbL|5Sq8KA;-rq+@7T zGYI77vOqKNAAGuu7ZOxQUVNncGS75Uyj1;%r|$%?eOinj0@PIo4cQ_ zn{y^djjcW`>{RCvC&jVGdWO$Y|K{{ci$O#-5Tzg3Mtr&%4R~o#Q1X?HMPDQnWZ<+C zbd)C2-PX4s8sLn3lbyh|;)vr=n7l$cSai&aj2|I!I%l`LA0e{v+*0N^o%3$_FLmqR z?9Vi_aFaR8{qJ%e{2MCY%I zj(I+xR^4vA!lBes$rZWWgQX+qR_$f79=PhQ`e5^e9U3Vh#PA8fOqZnIH{^@PfV1VP zTm<3ic(JeCz`(5Q)TqSYX@tY!|A(Kc|1Mab+!fa)<8=u8452nY_|i&@gRf$nS54 zmk3K?W47TvDEJCq^|^VFvxD$C<*!=x_$GJ_=lM8hPu-U>)%~+;Q`m5U7^bnK!ALMD z$CE>`W*H#wxp&Mg%cE$!jq#!=%Zpj{%ZAH4x#C`wPl0YlX-favF)c^4mCHSacNQ%v zYI{5AFu^}x(%F>8#n@Xo>Gfdy)IAE_C6@p2RRJ;>sr#I}vOzI{j!dW=rUHBi`~%0x ztx$*{{+EsX0i{`PN1BOgBVve6qgKLduL+(PMQGc+Y}mxAsl74Ng4)kATO5Zmk{*!& zF4uzv)O%=su-dTp1MfK? zsCy2z*;aou`p{ukbrcTtFTiRgX`Bz8bGHg~60THpzQivm&CwZ|e{Q-x_&(wYjh9J+mL*o^Enk`dq(Qi>k+a7e-xo;-a zV`G(-3IxW+_QysoVjQ_wjq(3J`#7Le{RlfpG(r|nwr)ah`D=(tR|B^!p1jJ{bB-CV zfoPlnVIk7PM~P+xSA)vl!RkBIj6E0SSFgFrJ(a4ea*8_NGrmniHqUe{nYgT=Vh>#D zgztG5D0Ji5ZPDAmIbWg&PnNvzK*W}A;daq?$IJLV2E_RFoJ0Ve=ZwdO1LD!Ym0OYx zSg;JB;WM6RmcL{)*nh&*-dn|UG>E$jeT9jw(YpQ(q(C)k_%N`ArtU*6Dp&hesTYdB<=KC)7d z##jqK{Y2I{KSCJo$HVaGm>0RK?{T^#J3PcWOmdpdl7x%=7VV~qS2oFCC7%D#

    P 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"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>ri,Collapse:()=>yi,Dropdown:()=>Vi,Modal:()=>xn,Offcanvas:()=>Vn,Popover:()=>fs,ScrollSpy:()=>Ts,Tab:()=>Ks,Toast:()=>lo,Tooltip:()=>hs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=X(T,O,C),k=f;i.modifiersData[a]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const it={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:I(e.placement),variation:Z(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,et(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,et(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var nt={passive:!0};const st={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=Ft(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?Mt(i.trim()):null}return e},we={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Xt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Fe=".bs.carousel",He=".data-api",Be="next",We="prev",ze="left",Re="right",qe=`slide${Fe}`,Ve=`slid${Fe}`,Ye=`keydown${Fe}`,Ke=`mouseenter${Fe}`,Qe=`mouseleave${Fe}`,Xe=`dragstart${Fe}`,Ue=`load${Fe}${He}`,Ge=`click${Fe}${He}`,Je="carousel",Ze="active",ti=".active",ei=".carousel-item",ii=ti+ei,ni={ArrowLeft:Re,ArrowRight:ze},si={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},oi={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ri extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Je&&this.cycle()}static get Default(){return si}static get DefaultType(){return oi}static get NAME(){return"carousel"}next(){this._slide(Be)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(We)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ve,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ve,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?Be:We;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&fe.on(this._element,Ye,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Ke,(()=>this.pause())),fe.on(this._element,Qe,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Xe,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ze)),rightCallback:()=>this._slide(this._directionToOrder(Re)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=ni[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=we.findOne(ti,this._indicatorsElement);e.classList.remove(Ze),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Ze),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===Be,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(qe).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(Ze),i.classList.remove(Ze,c,l),this._isSliding=!1,r(Ve)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(ii,this._element)}_getItems(){return we.find(ei,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===ze?We:Be:t===ze?Be:We}_orderToDirection(t){return Kt()?t===We?ze:Re:t===We?Re:ze}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}fe.on(document,Ge,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(Je))return;t.preventDefault();const i=ri.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Ue,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)ri.getOrCreateInstance(e)})),Qt(ri);const ai=".bs.collapse",li=`show${ai}`,ci=`shown${ai}`,hi=`hide${ai}`,di=`hidden${ai}`,ui=`click${ai}.data-api`,fi="show",pi="collapse",mi="collapsing",gi=`:scope .${pi} .${pi}`,_i='[data-bs-toggle="collapse"]',bi={parent:null,toggle:!0},vi={parent:"(null|element)",toggle:"boolean"};class yi extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(_i);for(const t of i){const e=we.getSelectorFromElement(t),i=we.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>yi.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,li).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(pi),this._element.classList.add(mi),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(mi),this._element.classList.add(pi,fi),this._element.style[e]="",fe.trigger(this._element,ci)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,hi).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(mi),this._element.classList.remove(pi,fi);for(const t of this._triggerArray){const e=we.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(mi),this._element.classList.add(pi),fe.trigger(this._element,di)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(fi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(_i);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(gi,this._config.parent);return we.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=yi.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,ui,_i,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))yi.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(yi);const wi="dropdown",Ei=".bs.dropdown",Ai=".data-api",Ti="ArrowUp",Ci="ArrowDown",Oi=`hide${Ei}`,xi=`hidden${Ei}`,ki=`show${Ei}`,Li=`shown${Ei}`,Si=`click${Ei}${Ai}`,Di=`keydown${Ei}${Ai}`,$i=`keyup${Ei}${Ai}`,Ii="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Pi=`${Ni}.${Ii}`,Mi=".dropdown-menu",ji=Kt()?"top-end":"top-start",Fi=Kt()?"top-start":"top-end",Hi=Kt()?"bottom-end":"bottom-start",Bi=Kt()?"bottom-start":"bottom-end",Wi=Kt()?"left-start":"right-start",zi=Kt()?"right-start":"left-start",Ri={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},qi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vi extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Mi)[0]||we.prev(this._element,Mi)[0]||we.findOne(Mi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Ri}static get DefaultType(){return qi}static get NAME(){return wi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,ki,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Ii),this._element.classList.add(Ii),fe.trigger(this._element,Li,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!fe.trigger(this._element,Oi,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Ii),this._element.classList.remove(Ii),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,xi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Ii)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Wi;if(t.classList.contains("dropstart"))return zi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Fi:ji:e?Bi:Hi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===Ci,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Vi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=we.find(Pi);for(const i of e){const e=Vi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ti,Ci].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ni)?this:we.prev(this,Ni)[0]||we.next(this,Ni)[0]||we.findOne(Ni,t.delegateTarget.parentNode),o=Vi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Di,Ni,Vi.dataApiKeydownHandler),fe.on(document,Di,Mi,Vi.dataApiKeydownHandler),fe.on(document,Si,Vi.clearMenus),fe.on(document,$i,Vi.clearMenus),fe.on(document,Si,Ni,(function(t){t.preventDefault(),Vi.getOrCreateInstance(this).toggle()})),Qt(Vi);const Yi="backdrop",Ki="show",Qi=`mousedown.bs.${Yi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ui={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Gi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Ui}static get NAME(){return Yi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Ki),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Qi,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const Ji=".bs.focustrap",Zi=`focusin${Ji}`,tn=`keydown.tab${Ji}`,en="backward",nn={autofocus:!0,trapElement:null},sn={autofocus:"boolean",trapElement:"element"};class on extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return nn}static get DefaultType(){return sn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,Ji),fe.on(document,Zi,(t=>this._handleFocusin(t))),fe.on(document,tn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,Ji))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===en?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?en:"forward")}}const rn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",an=".sticky-top",ln="padding-right",cn="margin-right";class hn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,ln,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e+t)),this._setElementAttributes(an,cn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,ln),this._resetElementAttributes(rn,ln),this._resetElementAttributes(an,cn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const dn=".bs.modal",un=`hide${dn}`,fn=`hidePrevented${dn}`,pn=`hidden${dn}`,mn=`show${dn}`,gn=`shown${dn}`,_n=`resize${dn}`,bn=`click.dismiss${dn}`,vn=`mousedown.dismiss${dn}`,yn=`keydown.dismiss${dn}`,wn=`click${dn}.data-api`,En="modal-open",An="show",Tn="modal-static",Cn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class xn extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new hn,this._addEventListeners()}static get Default(){return Cn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,mn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(En),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,un).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,dn),fe.off(this._dialog,dn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Gi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new on({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,gn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,yn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,_n,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,vn,(t=>{fe.one(this._element,bn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(En),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,pn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,fn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Tn)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Tn),this._queueCallback((()=>{this._element.classList.remove(Tn),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=xn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,wn,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,mn,(t=>{t.defaultPrevented||fe.one(e,pn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&xn.getInstance(i).hide(),xn.getOrCreateInstance(e).toggle(this)})),Ee(xn),Qt(xn);const kn=".bs.offcanvas",Ln=".data-api",Sn=`load${kn}${Ln}`,Dn="show",$n="showing",In="hiding",Nn=".offcanvas.show",Pn=`show${kn}`,Mn=`shown${kn}`,jn=`hide${kn}`,Fn=`hidePrevented${kn}`,Hn=`hidden${kn}`,Bn=`resize${kn}`,Wn=`click${kn}${Ln}`,zn=`keydown.dismiss${kn}`,Rn={backdrop:!0,keyboard:!0,scroll:!1},qn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Vn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Rn}static get DefaultType(){return qn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,Pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new hn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($n),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Dn),this._element.classList.remove($n),fe.trigger(this._element,Mn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,jn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(In),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Dn,In),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new hn).reset(),fe.trigger(this._element,Hn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Gi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Fn)}:null})}_initializeFocusTrap(){return new on({trapElement:this._element})}_addEventListeners(){fe.on(this._element,zn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Fn))}))}static jQueryInterface(t){return this.each((function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}fe.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Hn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Nn);i&&i!==e&&Vn.getInstance(i).hide(),Vn.getOrCreateInstance(e).toggle(this)})),fe.on(window,Sn,(()=>{for(const t of we.find(Nn))Vn.getOrCreateInstance(t).show()})),fe.on(window,Bn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Vn.getOrCreateInstance(t).hide()})),Ee(Vn),Qt(Vn);const Yn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Un={allowList:Yn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
    "},Gn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Jn={entry:"(string|element|function|null)",selector:"(string|element)"};class Zn extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Un}static get DefaultType(){return Gn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Jn)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const ts=new Set(["sanitize","allowList","sanitizeFn"]),es="fade",is="show",ns=".modal",ss="hide.bs.modal",os="hover",rs="focus",as={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ls={allowList:Yn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},cs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class hs extends ve{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ls}static get DefaultType(){return cs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),fe.off(this._element.closest(ns),ss,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(is),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(is),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[rs]=!1,this._activeTrigger[os]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(es,is),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(es),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Zn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(es)}_isShown(){return this.tip&&this.tip.classList.contains(is)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=as[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Xt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===os?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===os?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?rs:os]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?rs:os]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(ns),ss,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=_e.getDataAttributes(this._element);for(const t of Object.keys(e))ts.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=hs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(hs);const ds={...hs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},us={...hs.DefaultType,content:"(null|string|element|function)"};class fs extends hs{static get Default(){return ds}static get DefaultType(){return us}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".bs.scrollspy",ms=`activate${ps}`,gs=`click${ps}`,_s=`load${ps}.data-api`,bs="active",vs="[href]",ys=".nav-link",ws=`${ys}, .nav-item > ${ys}, .list-group-item`,Es={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ts extends ve{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Es}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(fe.off(this._config.target,gs),fe.on(this._config.target,gs,vs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=we.find(vs,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(bs),this._activateParents(t),fe.trigger(this._element,ms,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(bs);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,ws))t.classList.add(bs)}_clearActiveClass(t){t.classList.remove(bs);const e=we.find(`${vs}.${bs}`,t);for(const t of e)t.classList.remove(bs)}static jQueryInterface(t){return this.each((function(){const e=Ts.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(window,_s,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ts.getOrCreateInstance(t)})),Qt(Ts);const Cs=".bs.tab",Os=`hide${Cs}`,xs=`hidden${Cs}`,ks=`show${Cs}`,Ls=`shown${Cs}`,Ss=`click${Cs}`,Ds=`keydown${Cs}`,$s=`load${Cs}`,Is="ArrowLeft",Ns="ArrowRight",Ps="ArrowUp",Ms="ArrowDown",js="Home",Fs="End",Hs="active",Bs="fade",Ws="show",zs=".dropdown-toggle",Rs=`:not(${zs})`,qs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Vs=`.nav-link${Rs}, .list-group-item${Rs}, [role="tab"]${Rs}, ${qs}`,Ys=`.${Hs}[data-bs-toggle="tab"], .${Hs}[data-bs-toggle="pill"], .${Hs}[data-bs-toggle="list"]`;class Ks extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ds,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?fe.trigger(e,Os,{relatedTarget:t}):null;fe.trigger(t,ks,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Hs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ls,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Bs)))}_deactivate(t,e){t&&(t.classList.remove(Hs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,xs,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Bs)))}_keydown(t){if(![Is,Ns,Ps,Ms,js,Fs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([js,Fs].includes(t.key))i=e[t.key===js?0:e.length-1];else{const n=[Ns,Ms].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return we.find(Vs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=we.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(zs,Hs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Hs)}_getInnerElement(t){return t.matches(Vs)?t:we.findOne(Vs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ss,qs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Ks.getOrCreateInstance(this).show()})),fe.on(window,$s,(()=>{for(const t of we.find(Ys))Ks.getOrCreateInstance(t)})),Qt(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Us=`mouseout${Qs}`,Gs=`focusin${Qs}`,Js=`focusout${Qs}`,Zs=`hide${Qs}`,to=`hidden${Qs}`,eo=`show${Qs}`,io=`shown${Qs}`,no="hide",so="show",oo="showing",ro={animation:"boolean",autohide:"boolean",delay:"number"},ao={animation:!0,autohide:!0,delay:5e3};class lo extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ao}static get DefaultType(){return ro}static get NAME(){return"toast"}show(){fe.trigger(this._element,eo).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(no),qt(this._element),this._element.classList.add(so,oo),this._queueCallback((()=>{this._element.classList.remove(oo),fe.trigger(this._element,io),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,Zs).defaultPrevented||(this._element.classList.add(oo),this._queueCallback((()=>{this._element.classList.add(no),this._element.classList.remove(oo,so),fe.trigger(this._element,to)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(so),super.dispose()}isShown(){return this._element.classList.contains(so)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){fe.on(this._element,Xs,(t=>this._onInteraction(t,!0))),fe.on(this._element,Us,(t=>this._onInteraction(t,!1))),fe.on(this._element,Gs,(t=>this._onInteraction(t,!0))),fe.on(this._element,Js,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=lo.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function co(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(lo),Qt(lo),co((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new hs(t,{delay:{show:500,hide:100}})}))})),co((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),co((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/_static/scripts/bootstrap.js.LICENSE.txt b/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 000000000..10f979d07 --- /dev/null +++ b/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.2 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/_static/scripts/bootstrap.js.map b/_static/scripts/bootstrap.js.map new file mode 100644 index 000000000..64e212b1e --- /dev/null +++ b/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for
    elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
    '\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
    ' + '
    ' + '
    ' + '
    ',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
    ' + '
    ' + '

    ' + '
    ' + '
    ',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
    +
    alpha

    Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    data

    Name of vertex_data to show. Object must have vertex_data with the same name.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vertex_ids

    Show ids of vertices

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    element_ids

    Show ids of elements

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    lighting

    Lighting options {‘default’, ‘metallic’, ‘plastic’, ‘shiny’, ‘glossy’, ‘ambient’, ‘off’}

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    cmap

    Colormap for vertex_data plots.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vmin

    Minimum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    vmax

    Maximum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_alpha

    Colormap Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_n_colors

    Set the number of available colors

    +
      +
    • allowed types: ( int,)

    • +
    • default: None

      +

    + +
    scalarbar

    Scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, title_yoffset: int, font_size: int, nlabels: int, c: str, horizontal: bool, use_alpha: bool, label_format: str}. Setting bool will add a default scalarbar

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    scalarbar3d

    3D scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, size: list, title_font: str, title_xoffset: float, title_yoffset: float, title_size: float, title_rotation: float, nlabels: int, label_font:str, label_size: float, label_offset: float, label_rotation: int, label_format: str, draw_box: bool, above_text: str, below_text: str, nan_text: str, categories: list}

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    arrow_data

    Name of vertex_data to plot as arrow. Corresponding data should be at least 2D. If you want more control over arrows, consider creating edges using gus.create.edges.from_data().

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    arrow_data_scale

    Scaling factor for arrow data.

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    arrow_data_color

    Color for arrow data. Can be either cmap name or color. For cmap, colors are based on the size of the arrows.

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    axes

    Configure a specific axes with options. Expect dict(), but setting True will set a default axes. For full options, see https://vedo.embl.es/autodocs/content/vedo/addons.html#vedo.addons.Axes

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    r

    Radius of vertices in units of pixels.

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    labels

    Places a label/description str at the place of vertices.

    +
      +
    • allowed types: ( numpy.ndarray, tuple, list)

    • +
    • default: None

      +

    + +
    label_options

    Label kwargs to be passed during initialization.Valid keywords are: {scale: float, xrot: float, yrot: float, zrot: float, ratio: float, precision: int, italic: bool, font: str, justify: str, c: (str, tuple, list, int), alpha: float}. As further hint, justify takes ‘-’ joined combination of {center, mid, right, left, top, bottom}.

    +
      +
    • allowed types: ( dict,)

    • +
    • default: None

      +

    + + +
    +

    EdgesShowOption#

    +
    c

    Color in {rgb, RGB, str of (hex, name), int}

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    alpha

    Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    data

    Name of vertex_data to show. Object must have vertex_data with the same name.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vertex_ids

    Show ids of vertices

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    element_ids

    Show ids of elements

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    lighting

    Lighting options {‘default’, ‘metallic’, ‘plastic’, ‘shiny’, ‘glossy’, ‘ambient’, ‘off’}

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    cmap

    Colormap for vertex_data plots.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vmin

    Minimum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    vmax

    Maximum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_alpha

    Colormap Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_n_colors

    Set the number of available colors

    +
      +
    • allowed types: ( int,)

    • +
    • default: None

      +

    + +
    scalarbar

    Scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, title_yoffset: int, font_size: int, nlabels: int, c: str, horizontal: bool, use_alpha: bool, label_format: str}. Setting bool will add a default scalarbar

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    scalarbar3d

    3D scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, size: list, title_font: str, title_xoffset: float, title_yoffset: float, title_size: float, title_rotation: float, nlabels: int, label_font:str, label_size: float, label_offset: float, label_rotation: int, label_format: str, draw_box: bool, above_text: str, below_text: str, nan_text: str, categories: list}

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    arrow_data

    Name of vertex_data to plot as arrow. Corresponding data should be at least 2D. If you want more control over arrows, consider creating edges using gus.create.edges.from_data().

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    arrow_data_scale

    Scaling factor for arrow data.

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    arrow_data_color

    Color for arrow data. Can be either cmap name or color. For cmap, colors are based on the size of the arrows.

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    axes

    Configure a specific axes with options. Expect dict(), but setting True will set a default axes. For full options, see https://vedo.embl.es/autodocs/content/vedo/addons.html#vedo.addons.Axes

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    lw

    Width of edges (lines) in pixel units.

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    as_arrows

    Show edges as arrows.

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    head_radius

    Radius of arrow head. Applicable if as_arrows is True

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    head_length

    Length of arrow head. Applicable if as_arrows is True

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    shaft_radius

    Radius of arrow shaft. Applicable if as_arrows is True

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    +
    +

    FacesShowOption#

    +
    c

    Color in {rgb, RGB, str of (hex, name), int}

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    alpha

    Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    data

    Name of vertex_data to show. Object must have vertex_data with the same name.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vertex_ids

    Show ids of vertices

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    element_ids

    Show ids of elements

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    lighting

    Lighting options {‘default’, ‘metallic’, ‘plastic’, ‘shiny’, ‘glossy’, ‘ambient’, ‘off’}

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    cmap

    Colormap for vertex_data plots.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vmin

    Minimum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    vmax

    Maximum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_alpha

    Colormap Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_n_colors

    Set the number of available colors

    +
      +
    • allowed types: ( int,)

    • +
    • default: None

      +

    + +
    scalarbar

    Scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, title_yoffset: int, font_size: int, nlabels: int, c: str, horizontal: bool, use_alpha: bool, label_format: str}. Setting bool will add a default scalarbar

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    scalarbar3d

    3D scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, size: list, title_font: str, title_xoffset: float, title_yoffset: float, title_size: float, title_rotation: float, nlabels: int, label_font:str, label_size: float, label_offset: float, label_rotation: int, label_format: str, draw_box: bool, above_text: str, below_text: str, nan_text: str, categories: list}

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    arrow_data

    Name of vertex_data to plot as arrow. Corresponding data should be at least 2D. If you want more control over arrows, consider creating edges using gus.create.edges.from_data().

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    arrow_data_scale

    Scaling factor for arrow data.

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    arrow_data_color

    Color for arrow data. Can be either cmap name or color. For cmap, colors are based on the size of the arrows.

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    axes

    Configure a specific axes with options. Expect dict(), but setting True will set a default axes. For full options, see https://vedo.embl.es/autodocs/content/vedo/addons.html#vedo.addons.Axes

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    lw

    Width of edges (lines) in pixel units.

    +
      +
    • allowed types: ( int,)

    • +
    • default: None

      +

    + +
    lc

    Color of edges (lines).

    +
      +
    • allowed types: ( int, str, tuple, list)

    • +
    • default: None

      +

    + +
    texture

    Texture of faces in array, vedo.Picture, vtk.vtkTexture, or path to an image.

    +
      +
    • allowed types: ( numpy.ndarray, tuple, list, str, vedo.image.Picture, vtkmodules.vtkRenderingCore.vtkTexture)

    • +
    • default: None

      +

    + +
    +
    +

    VolumesShowOption#

    +
    c

    Color in {rgb, RGB, str of (hex, name), int}

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    alpha

    Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    data

    Name of vertex_data to show. Object must have vertex_data with the same name.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vertex_ids

    Show ids of vertices

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    element_ids

    Show ids of elements

    +
      +
    • allowed types: ( bool,)

    • +
    • default: None

      +

    + +
    lighting

    Lighting options {‘default’, ‘metallic’, ‘plastic’, ‘shiny’, ‘glossy’, ‘ambient’, ‘off’}

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    cmap

    Colormap for vertex_data plots.

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    vmin

    Minimum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    vmax

    Maximum value for cmap

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_alpha

    Colormap Transparency in range [0, 1].

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    cmap_n_colors

    Set the number of available colors

    +
      +
    • allowed types: ( int,)

    • +
    • default: None

      +

    + +
    scalarbar

    Scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, title_yoffset: int, font_size: int, nlabels: int, c: str, horizontal: bool, use_alpha: bool, label_format: str}. Setting bool will add a default scalarbar

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    scalarbar3d

    3D scalarbar describing cmap. At least an empty dict or dict with following items are accepted: {title: str, pos: tuple, size: list, title_font: str, title_xoffset: float, title_yoffset: float, title_size: float, title_rotation: float, nlabels: int, label_font:str, label_size: float, label_offset: float, label_rotation: int, label_format: str, draw_box: bool, above_text: str, below_text: str, nan_text: str, categories: list}

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    arrow_data

    Name of vertex_data to plot as arrow. Corresponding data should be at least 2D. If you want more control over arrows, consider creating edges using gus.create.edges.from_data().

    +
      +
    • allowed types: ( str,)

    • +
    • default: None

      +

    + +
    arrow_data_scale

    Scaling factor for arrow data.

    +
      +
    • allowed types: ( float, int)

    • +
    • default: None

      +

    + +
    arrow_data_color

    Color for arrow data. Can be either cmap name or color. For cmap, colors are based on the size of the arrows.

    +
      +
    • allowed types: ( str, tuple, list, int)

    • +
    • default: None

      +

    + +
    axes

    Configure a specific axes with options. Expect dict(), but setting True will set a default axes. For full options, see https://vedo.embl.es/autodocs/content/vedo/addons.html#vedo.addons.Axes

    +
      +
    • allowed types: ( bool, dict)

    • +
    • default: None

      +

    + +
    lw

    Width of edges (lines) in pixel units.

    +
      +
    • allowed types: ( int,)

    • +
    • default: None

      +

    + +
    lc

    Color of edges (lines).

    +
      +
    • allowed types: ( int, str, tuple, list)

    • +
    • default: None

      +

    + +
    + + + + + + + + + + + + + + + +
    + + + +
    + +
    + + + + + + + + + +
    + + +
    + + \ No newline at end of file

    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ྷOJsKkj-7 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 zue + + + + + + + + gustaf.create.edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

`vxFyfc z)29eVX4f;r(Q{><({XK#{_Gs2#^|KM3mN@%$9@GaRJ-5s^|6caF$vp}nxt={#m#h- zr?yTXaPbXwd4J^EY*JNCHG`|Q&P_jocxWl0ELeXJqmC|JBaIEC;&G`M?ogTf5IOFG z`B=QKg2LR7(~@X8jEb>>j#i@mQYHlQe_iKzOP!}woF7w4QP}RNN<;^Dn~s-ubUjYh z4d|v?5FJyNM`_2D*b&_L9B%cO^x@6#>0?H zG(;rqAm5&la|I1^@tV@Cs8E8DvCA-xt!d>Ek(0H<)&Q_ z%$e6L3GlW^B@ybI&{we1&<2xNdRPX@7pr}IE*GhjgaU#tLWWeKQqBJb9UrH!c@&IV0#SeoRV|gMt#n_qFcZYJZMp%7m-$@ z4VQJZKDJxhx08@AlvtP91B^6b4u_FQ#Ge;JXBG=lE+g2E`f9i&6S% zaXWMamcRnUDymU(S!=$wN<*!Z%k_~jBTM-IAzxe4>sCAzvu_T67?~_rNCsdpVi4xax8C|Zi4YiYY;<*JNP$*lnGZ9(U zkeotw52g5Q5L+cAp;$HG0gXwB#txQQRwD}RWc_L=PFdzg7WyinTET@lN|{xksZipe z=<1~&)r+x~<$9^z4M-5f@+B@r zoZjEs!f=Z2j^I(a86|yq)ODg%41m%?kp|`ws-48*&Z}>H8TwpGdd|r5G*T`9TCqHw z*CxpBGBjG5=&3yr5Vp7&1lX)8>@K{>6+GXbmFvLdz$%@y6u{CQts}XT9)`j`u(;Rf z0sesB%K_DYS#^y~ z7&roYBF77Rz<`MhS13@VS$BlY8xVGb$kxtCZQotgbr~w2EED?{re+$JK2^IRWY%Y4D9hX~?C8N~-2F;0YfrpiKahRi%P<1e6xXZd4z1FGck rE2uRE0Q81sAQ>8-FNc*4=e^JgGM6yZr_TSJOR>&`1v=2P?&g018z>7F literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.make_c_contiguous.doctree b/.doctrees/_generated/gustaf.utils.arr.make_c_contiguous.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f98888381882574676fae1ba0668aaac7be9de35 GIT binary patch literal 8537 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 O$k*j=fdYEkY5y0Rwn7E~ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.rotate.doctree b/.doctrees/_generated/gustaf.utils.arr.rotate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..deec828a7c8efd5efaded71cf50d82732aeae69c GIT binary patch literal 13647 zcmcgz+ix6K9kw0c){gDiX-^GdpKyy%%rl zR!Ti{=A84pUuMp?&rW^qgYOy>|M8{JH!XK(LpKc9Ggz4LS;K3@ZRSSFwPfwH$umif zR|5S?=*2;UC43As8m8qK0dtc}316h?k>!LN>H3+FH6qJ%JIl=}bK0D_l+?@$pNg!= zVag+ZODhf|y}2Rx(1Tzj@FG282`#~j$%|})b+-8z?w8C z<};DrqDP6jWS%gOnzxxp%#-}Wrs=iWW)QnB3pTHK!S<#UH2VVv!%fN9rq*JZ1)+`f zX_q!Of)Ik;etsgZn`3;+at*elXi+NIyaR%mcS3D< zg%ty**Kno$O4E0&@Z6T?va?l#wF1V@T?}HjCcK5VJ}R~*Zzhvu z9&AqW<+5NK(!*Bwdy={oggP(nDTUGt8m{qqh_LR%>4+9zAkxBn#62rmpt93;?hAdL zLTDCCLKa+R390T8PXt{arL_N;v>SP&R@O>BYn6-ZTpyqAtq(r#Cc0{T68vchzJt6| z@E~f_&gj>BGivVb%jUJw*j&lj%wsgQM9%R- zVUCn%m6t|y-d{X0?>`bgzAXHSEb94`SG_>B{rI_zFs^c9FZCwI$GvWg{sM*~auq&p zxuUKpE;~snDkCFra!P;dLkUTwsmD&FUDlnL6{+&$VeI=}5NTms52B}HkBZkGxz`^g zGi(I+npg5@m%*mx!%ULwHkak!y=Cd)UavrB*E>Gk!x;bVv+eJ?yp~Ks+y1e$?Icx& zjB9z*;n|)Z9~~3k~N?Ipr;TFkI*w}}ZX`#q+CzzA% z8+xRT%ND!RKo6JjrR-AE-G*84{z08W1$|AV2Q3yQ{8ml&1Yy>*bjl7|Bh0gm#H^!M zuqH}S!tWZ~#!$ht?ghdB?1-hf5b@tqrvZ?I!#M@`N z>$AUgAYFVz>f#0b5l%Nzttnnd!)g`6%geEhDc1H)J+wlVt?^oBCtT&``AKP;{&Dc* z0!w&Z@|kPk)j``qbSl)O``9mHdZt-(FVzX!+noHbMc@6VKuEra+O!`ij$}> zs_}a=p>UPU^x7ySU&W$fEouJ+lZUsY{Xa~%U&jBg+JB=jhEhTQ?;#U7~Hdo!xz_bQq_H44eQu;{Qfdm4L>q}g%#p@qD4O%d?iC<5*i4t!#* zV>i0Yt#c zD4Bi*bC68GB&OP5#h+3pD%9!+vIehOqY_PF+jKlVTC1+FS9SVGNuRXxNqXSLE?Q%~ zVOHrwVEWn5{-#1l`3RCG*8KZPZp<$n$e3v%e_j|9x-1rQ8deMWz%+rc(DXG|rhR#n zbN1cRZbRj#Zwt z>E9fphJQc2hRcCm_B}kGs{ZrYYijP?XUKF7oQuTvV-S~N3v8PJ~5WN zd}NQTN+k`vsN)q{$tA)$YQ@A+`V5)IXK6Io$=H!%*!PY;5;RRAuL+%Wr4Sk} zq!6|7?%5=+9EgLo^_LtB%2E3_`*)2(@D42MS2k`SH<^0_6H_X#s?XkS{d-4|ZyyRh zE%xvY5Ezj4M7x~5N~nGPCq|)p@$if`TwlMBR(aoo;*KKbaKT`ortnPP($vQOGo#Ra z`Vdu1jE)i#_WKnH)z1EfQ6${Yc2jHWOIdoCC(|FiPIP)k-cN6Uz^IY;t5IlP$D%_@ zmxmO2e;q~48;rbvjY9L4Lsadkk=Of`cWkoQ6ZG#d4piN_@`9V@HDx4^%H>g5Sj3{k za^U0Gd&vA&?v%;l)D~;MPI;d>EBo}0xq`|IhU$x71tOz z+gBBu=_l&K2ZcrPg1`*T_beBOe8RbLK;Qk5f91@X;@mT5vKPkkCbuk+=Y0awm#GWRI!dR}7FCR#{)T&>kMZ;TlnND+zwW{lH zxP~}3m9K9U;_659@0EDj=Ou@hsK*ySEG_9BKZpC8LafU(qQW`DkP;cnm(uHRghYJY zNCxKNT&BXO+~H)JQ;eN^+n?VM;Z)i~O4&a}r$PN4VdUN}MtL_4YKo8p1$BQ0+Q^&A zk+ONR3w5#2LHC1Vkpw*A0nB6a9MheFWJCl}NFB{9|(N07!WKo1OPl>8| zpJ)mQxZ9F9DyFmx9 zY@X#eMS<>yj(~Y+e&7M|8cMwKROCgvlbj#pbJ-kb;5H_D<9x9Z2ZV;!I@sr<*@(nI z^Vw7lfP60#T3TSZn>Y*yti?$9^rHko%TJ*Bv=>Ky93@-k(iX3zh-F}laAN?v3=ntQ z$IX1;c@bCzJZLB34FsGy~U3POhD=! zc9}t)6MW9p0l!Ocfg5H!7PJURdK~7XQwFQYEs$Hhq6aP=pkrUAw=q(IIU0;aBK|BF zI@5r9@#vTxV52x{uD@qpV4H3$KGawcc!6f>uHmo%79dsud*Vw{^U5w$VwZ%UEIlc0 zVLwc9wkY?_dB|4ZR(w!e%#V=_@V(H4iX4GlUU2Z?IM!PX8YiIH1bzd+j|Z&b1%_rY z0uz7?0nNAgG{Ub52p2SBp&^qF0YuiK9!H**5Ag}$$N<8P+rHLuNhnqfpo?RHt2?ye zk{A)rPS($d{E)?lrvYJ&S;qhq@It1kD}|RdfT^@Xi@>1ROEaucuRA12%H>QJDhRuy z5GF*95OIg;3+XhiX*m!Mi27B!0ukW234#UN&~64yK93(ubZ*a&^JM|(bC}zLBRW%`{UmfSDRF zF)$B)F#%))^Vd(k{hiR~V$f`qwx^MN`?qG>BY1%qgQ;1tVX>$wXdoeMno-*Uu}Y-Z z5k*F1Cg*4QN%&-2>jWpkG6beeli2n>ek|N|BYj6Rt(NKFAN+UHA%qP-Dp0Fh3R}Gj z>|%~$)f}&(r>Z^KFab?!!07!*gt&j~2+!tz)7a{BWY z_^Q*CIc<+0VeV!6SqTmwMK(eB!V^)!EW}2nNo+R!7LO#3+p2u6s_$AH?8IrNPeZN@2%JMpZ0YDeRAQ8$=0$ z=jQTW=@V2vWRM1qgW)D9F%1v!G0}mbhRi&ej$eZwo=Ywu8UV;dTtTfN96%E6B$C4L fd}mnLaNcqoPHd3Rv?%Q749azBTA+d+*EjwTww1#N literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.rotation_matrix.doctree b/.doctrees/_generated/gustaf.utils.arr.rotation_matrix.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4226fa33730e6ef19e0d597a48fd1c30abd9c34c GIT binary patch literal 9699 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.rotation_matrix_around_axis.doctree b/.doctrees/_generated/gustaf.utils.arr.rotation_matrix_around_axis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1b50b3faae74218f033210fab47f9b7052d06128 GIT binary patch literal 11709 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 GyY(N(VuBX{ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.unique_rows.doctree b/.doctrees/_generated/gustaf.utils.arr.unique_rows.doctree new file mode 100644 index 0000000000000000000000000000000000000000..802576604f7fe0645d5cc6dc979eca6e21bb2966 GIT binary patch literal 13048 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 bY&d7wEi2R*e5ONTU)3nr#c4q<0=NDTN_HPV literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.doctree b/.doctrees/_generated/gustaf.utils.connec.doctree new file mode 100644 index 0000000000000000000000000000000000000000..12613e4ecf8699b72a00e4877e19748d0d7f745b GIT binary patch literal 22664 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.faces_to_edges.doctree b/.doctrees/_generated/gustaf.utils.connec.faces_to_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5dda0a7d1896c10e380826d547e44540eba1d55d GIT binary patch literal 9769 zcmd5?+i&Dn8P8=W$xM>TW-k%dUU0j;%%qvj-jJ$Q1x2eORja0@s*n)7xE}k=96KJ{ z__CWwEh?a*Mw|zv8VQLfUibrG%S(j>ydzQZh=h3RBjSl?e&0Fv*q+=bfgnbj8K2|t zob%nk&)??{Yd^dG;*|V|l_=o0x3g(jmgie6O2vZZo5_%Qar#Nx{z3Xd+7k89coO+Z zXtGpH0m9_AYlX~9AEly6;IZvSo7wvLh?%kNd!yyN#^?C_qqN2Aq88h+%SyMz^MfRc zjsB+E!}L9mnVWsXWYI%C_8;oZ8UQO=kLBmyWjln|5v!)KYARdxQL6Bt3k+Zzr+ih^ z^$~e|R?KBoZHaTP?Xh$#=^3J7#Bpf%k{IU_^|Q7W5vB8{YeW$yab5F_p}JbIlAsv$ z40AhVeS%5Ed~6KpR?1iS6~4r;@>zaOJnC|P$hu(yO2h6GKiuvr7UX|GFzPDAy83_t z%7~ej-93O$AXw468AhP-`h%II$EQTi_AItjVzrV2|1xOe&w`yd@O=T_m+);9ePB^& zOR8GnjO`5|DREQEVsu8Ut+i}V8~Rq_GVK7_wNvrj0nH19}+9RTd;yZf}$%NFGw6=;^1=3Lf3{Bl*C(;$SNFj{TTrt z4k)EXil&cKU*2#{WTS%C?;lR9nD$bmEOsL5eGs(+zf;kjGEh$aV*rN70g7jai5uHG zxifu4CWc_j9vv6#=b^Zm1pzqM&Br!-Vj>cxVkN)S4bS9$SmM=juA~kh7#rb$#i_We zD`yeq{;jN>@T35>t(5n~9Il|Kspy=@>q#T|MM0G^MOLu$RfAj|{5XV}iUw($-*XV8 z(y9s0DLhkg@c@SaM5XD%afyX~;<{2RfOP{t%_L68h*D2^@5d=(3{5GGK3_GJR$HQb zpI=i7476V(eUZkdJQS=pE=S*T_^gve2cZ%0k}yQ)zCR2Qt~41dwVn|%OY=Rg@4K%5 zgsh%!Xpza;kZtDHdcswOg8%Vw1uv^DDckQ6@BWuQ3+((|#?HD}c5S!=!_|APZ*G?v z_S1J*|DM*OghfY`Y;Q;g(Pg8d;nTX=mj7D!A^vY_T}^v4 zYK5lVZnW;S*E{rCr)k`MA7A`7v^)8wcB_HCbEsR{Dca3kCjWnkDY1jEe~FH9QSgL5 zWr%xX!8N==VhrFz&c&3li6*xP+{HK6;T0&YBJKDbR`6%I@!68t{-9D$gylP1e$4J^ zc3*o>>h*h?OlY(r(lZu9xkD{xakQa@%nvQh*zvQHk1f6?>Z8SJp}1d^6&Km$icCgz zxE+QV4b)3fV?H}HmrPCNp~YtZEN^zW^Cmj~0s6jxg|CSllh9C{Q9-!m(Z({j%+e$; zFO_&%7mdEnTuXWXg1AyTF7KDW1MFDsf}!k-lWjMgfY(V^)we~_V`&kX7PE%^&yaw>x9{FCz7346*@$a7I_-|s-QF#oW zHz^Ys8n%~;nP4{+i)5oafoq#K(ikz1VZ0mQ!Rk{9o243jPXa~(Gwr@@rXPzsa^Ebf z^QXwGckihnz6FzU-YPSrLaUhB&~k3mWkIih8hVumIB#R^h@0|>xO(XHo%~E(6-Rz} znj=5JqDfioZ~#xpV&{i|bzJ;>>|tOn)s{w`<8RDG$-cY zVW?qwqeN;nE(G(+i3F2nQD31&qb$m~Q93hwa4#~aEU(S#t8@EPqWb!}Onukaa}^p- zg`Kxfgyfq9eZ_g>B#ZDMdByn#Rve{oC1DW<{>#EzRKn6!-l1YlWv&ofcoNd`)Yqp) z6AJA{%hT4iI~&^VEZ4>8t{jaSJUt3k0^yIwP&*(g!IGNXzGPWH8C!OEmRZi-PLf#U zXC7_$gucq9D_PlOR88M5QS{5RrwHdwNX@>4Xq=$37-0!?JL(-FyK?mW?CdF(`f_(t zYKx5e7*Z+%`~1wwaDI&=CY0DrC5DfS>tM+o9D2VvbGk(N;7RB^GRR3+{2`E@&=r$k zJCQ3s@^ohb!7MLv@N4^Oy$4iAJ_ER{v1Z;CO@rzYE#;?B)%8^4a;z+zJ&7u)d6bT2 z2ymX6#Z!}PSd_<}-%))xJf(Vme%Z{YJJe&_#Ut!eb~7KZ0wSyYMkAmV&(G&_INFKM zi&z}v!Clq#zbYS|sKvOCBY88fBdhLo1p2ETSuW|sen(ZcWPzL>vvTO8x{T;xWF14Q zJ2k-FS@rD3H&pNOh~SX-Tlt2#6o-Zvxdye0^&s>I=y|DrYc2L;!%ZJdiAD~?EDRGm zZ(20XB&2SxKI+{rD;6^5pqaf&-Co(9?xWU&y1JE$xo;V6f;MMf5EFBL5~F^e zZt;~ZQO`QA=yzaXq4kRP^f16+G4%ZysG?u7lZxps$`T3%YPM_xppgxe(8Xw(ngG-f zrn^9;rbH+%^s$YH+GgqI$6}ef=3X+?cTm_IqIA)uhFzeW{*Zd{5jMP{W|)gAK4$bM zcFgs>Cyn#61zD4NODu&f@WWVl*<%KF&WHv#+|jTmR@sgXF2-o2MmbPT)GXFZ1~{(y z#0WjA4Pjqq3^7xOI7~()5q`D@p6RHY`cy$e*CUDhomV=t$#S)NQ)gl5hdMVr%Vi-X zK&YbsB32aVOS{zME~&USc4ur0=i6j`O|@@oR zursDSwqbu5aNQcKKOe{4r~ELC1uN(Ppq4 zbKl$a!vQSnGC@iN0IA0)gu+9}mN*MKFWkHfem29tIkr8`6x+X;Zx7=&NM*NKxM{Pv zFVBEO=<;~z;;?#b^k79+%+m)8;u>^vsE>@3Dvq)%psTL@o;V-vda<#ik9rwsZ@5%I z7E93({XhMC39LE-qb|y^8tQ0185wJ@nH<$~6XH|$1};k$V)b?sAS%$yG^#0~+`t~R z$2V=S4;{$-!Ub{^QPLX&vxn%n;4DKKBfZYDokC@XJ!ZjzcYy(CXvgk}%O;?&VO_0;rtv?!2|opMVb^rSHHR&=H1R sfvph~Kpi-8B$esK(X^D|qV1V(f(EGT59p1ihDE+Ea|;yEliudP0c=ly$^ZZW literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.hexa_to_quad.doctree b/.doctrees/_generated/gustaf.utils.connec.hexa_to_quad.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b3b22d223b81116a19c03c10d0ba848f858165ae GIT binary patch literal 9011 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.make_hexa_volumes.doctree b/.doctrees/_generated/gustaf.utils.connec.make_hexa_volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..03debf74f1471c969ec72788f41ba640a1be5bbb GIT binary patch literal 7621 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 UrcYlNYYxS_EG$q$PrB{@0KGB$s{jB1 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.make_quad_faces.doctree b/.doctrees/_generated/gustaf.utils.connec.make_quad_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a5ba6a3a0c4e775c5c344a256e65856a546c7cd5 GIT binary patch literal 7404 zcmd5>&2J<}6}P=Rwr6aQ*WO(Vu)UcOHW{0paRQ43s}PW)2!Vx#A`}U+o2I6_W~#?M z-A#A3?UAyG96)QS4oGQEoRBzjTuuln;V%Gj;LHUfK_uWW;PhNO#^(pQcS!jo5JM|Q-(E-?h^V|G{2s?kfJpN4ESD@fY)g6IEW7Sj1claATZuDgzZ^94lE|Q zlf9jml;+ql+>T-}d2fF%>4+IsaearMl%#DGAzlDe;zbDbCH(H=_X>VH#2{o8xtgse zMC1BBC`-LY>L^{(+-WpjzcC1$#N&-K^tY3$m(BodwU*9F#r%OxSt33wT7`HH#62hh z)Zc_T+Ec_g@up61tk{KYWfF~<)7B)d5sw28#ufPSjwZYzWl(v50`2+-D~*L+M1)sunuC=Oxw@HK3Sd33~6 z64Tdl%UhWh^)9ob%%-$s?PZP?4j++mLCJov5p>T|-n5qP?ayk3RJGJ5MYcL2@myL{ z@Ip}EyGT%rBq$@LMY?cWK;paNF-hayLK@-;jNVYWuBn8-L(q~(o(qpCX?Uq*5Qfy; zo<>_PL)Xe9^Rp&pF@5-k8iN%w_`&%yP_ur@$`(P)z6WMc5S+%$s*IFN<~A>AWa4r{L84Wa>~U`o4L1A!#5DFizWBty||ycr}Q zDr(qXU>`P)-I$M^(9VOy{{bb1EB^L;S1daixy6S_-~ZFV3%&m)(|c8|crJv?JgYlUeErbFpxJb~yhvEMYG5zM40BT*AdyWZHMNBW1m->B4 zFvY8E>tw{PeJf8CS&g}&%AmqX{&{sH`8#O-ICIyRMx+Q&kjK zS!xi^QMe5snM`m1d+u)=f<~g8-MK)LrKB`bp_>@A*`K?FF}iX_UnxFLIv1b!SD5Qx zpx?jcc9=WOKXQOtc-y3dTsfn4p`Y*2ZMwfXtNxvgqi~V_JG8^3H<(v{7R&s?%w7u5 zsEl=i^V2?1-QCqFySq7!*_MLB@H!OseZt=C_ph@F>0z_q!;Xu}uR=9i0{;Q+EE(-I zjG-F$8G{uv_~2UXkd}TzJFcjuwI(WuhdT{FZ2Jz2A~w{@Xu_Rm%aP+36IAr?0WhI^ zZ1GDj^2>=WSM%xqm$2=MJ}plBUk3KG{u^}F^Zr-xr|h~!w26Wb8YRN6$jighmXGLy zE4fNJK3#_wHTy8VDmOdV=cZOtaA8}2{O_|>zW6HqT^#txTYs*#dcHN4yp=rRir#wh zy?@SY8nHdqgq#uYe+_h9`)6*5Hh28|rZEk)8@`#mP4p{Sf-_hP=xKDI=-1}p8@k0V zul=B9rbbA9evm)bb8w3$L_=i8mbBpDGCA!QqfDFq-u5#^^PHd1_6gasAbC}@~~Q={*(rq^cJL4j1tv)7svR4CFtVt#LoJ4zW{|X zPn^KQNE2AMP+A8ux5_)UmDtica${F&lU=nOH)b7=gOQBNh1^x(cFSNUM(ogjheKB~ zG^^`+dUUNe=n0o#a7wcZ=!Q;npzfO*{S!4N%nfTI7Kw_Z{8kcSp^ z0`OA$`T$ELNQZ%Tat-wfA!Qgp+S>y-ZihoD0>2$ZJ$Tez!qfx+(~@X(5Fzv=mxrzU zuRer4>rvO9IG!NI@h|7c!+9B*>>-cZE|*<>2Li&LkOL2wRVC}diySG^{YAA6n;cjp z=NvI$nPKv&x)l$7$xf_M%Z)DFqi#|y#{-O}Fr0^1#}L$Qy*5h=(*~A_cH0(cm~AND z_#33GMTp&pNr=2a--Gl=o-7QU!g>OmCP$;Vuug#@PC654?f_!}+{KJD()XCd6efdV zl>-kRf&#%YDm+zpF?@zYQ1f ze+vJ_s!Cv;_<*EeoW|lse2CHSk@;R1ZzXD_tUP_(3K~(9VQ__kkdNkghVC+i3`;|y z>_I2+M)shAcP4-%?CRKw)%;eyX?^T`gxg4_aGtx9XJv1Y^$;S8q#;w} zkcDhSh}`uQHSyc<2FxnqR}gCq127kk0?8P7X$00fTylNeOB}M99(|IlITY)%us{ht H>9qd^TiL== literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.range_to_edges.doctree b/.doctrees/_generated/gustaf.utils.connec.range_to_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ab448c64650098ca597169e32f0a27573e44d47f GIT binary patch literal 13192 zcmdU0S&SS<8Q!%$yE}V&oy36Fb~;W>W|KXP0SQ?N3PdDCOI9dKc!^D?XS!y(+dbW# zKI~m7iOdo3ih4^&2q_=|3A_gp5&=&GuAlp;b zf7O51U;k0LUVHxOk57sJ@s%jBY;SMNFip=lS(NfQ({CkR=EdoA>H1gFr_%U`4k{pmhGA$^U}*HUncO_cB3t|el}vQ*!I1AxmB}ftl7(H!>aRIY{xDued2d? zk|;LXTXK({&HYMT*pI@@xMD8eLu*F2*uf6bXm zPz;(z>q^Ml1e5UD*yzxw)LOCDtVQdTb<{e|FK=6Zmu-g$I1RV2`QepqDT3@D5EyMs z!nXAe1C$XnQ+*vEConAe-3lY{cxLBF(zK>{≫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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.sequence_to_edges.doctree b/.doctrees/_generated/gustaf.utils.connec.sequence_to_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e97e1972bf012d837415548c13d2d6fe0291c6d0 GIT binary patch literal 8722 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 RN|_c-$`iAcN=6U6{|1Y_UlafU literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.subdivide_edges.doctree b/.doctrees/_generated/gustaf.utils.connec.subdivide_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..86dbbc9be4bd9eb14a8316749d7236695e76b3a8 GIT binary patch literal 8509 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.subdivide_quad.doctree b/.doctrees/_generated/gustaf.utils.connec.subdivide_quad.doctree new file mode 100644 index 0000000000000000000000000000000000000000..747d058ec619ff35688574bee0ce50f8a2ea6727 GIT binary patch literal 9190 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.subdivide_tri.doctree b/.doctrees/_generated/gustaf.utils.connec.subdivide_tri.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e8313e2256bf6660b18a2ea07b4e2d94e7aae194 GIT binary patch literal 10208 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 G+4v7D92Cz0 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.doctree b/.doctrees/_generated/gustaf.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7757498cf856c94bb374e2ccbe5bd8567667ea73 GIT binary patch literal 9185 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.log.doctree b/.doctrees/_generated/gustaf.utils.log.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fa2e5686a368c80f3edc3d596bcc344ce464f739 GIT binary patch literal 10752 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 `7tPGSYG6lr9Ni4IzLx#-S@{ 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 W>Jw)MRFz-xDc0p-fiCp4clcju9a$Uz literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.tictoc.Tic.doctree b/.doctrees/_generated/gustaf.utils.tictoc.Tic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3e8cd3705fb2bd8c0fe0a914515c2ff774480186 GIT binary patch literal 10813 zcmc&)U2Ggz6}Dr0*Sr2t6Bm@Y-4YtF+t?0i5yeU^XeiJ|wW`u0L>x_KXYTIIcy?wx zKe4SU^iQo~agjhBRCq`$9uT5Jw9g;}JRl^f1V~6A;2DWWgao|7ckZ3vwRhKU)ijc` zGk4Ct_uTXIopbNGFN}Tr!hJ*HAD{6%hUx6AsJiaBI`bnwuDe>;W=;^j7A?IP-H7VE z;;Gxd8+sax_z);G!?bmeInmXKPZN1y+Wt!1zw9$DFkL6@Zj2cvqkJ{08x=kln1Ri5 zpZJ}v&=1t+iX0;_wZPR@o;J0Jx}eAC(`<)W=}q`bB)KegRPYo;#vHFG=^~5~UW$3& z;G?$buxKM}sJyBMfoC?t0Bfc-j+nYn>nUrt>icNK^O&Qy<G9Wn z(pd3)EbOk!$HIm&#K%lWXFEA5N&y>pV_%xLh}6)y-&oGpy4L>k*pjx7!#ci9(-*}zA+#X$ z3bs%OLv>*x4=;v}c+eNm)oiz=*z7v9A70d1BWx`$3FDx_X2f8s~x-wi5^jGT3Fv@sn>LU=_=$vxs~$a znzY?{ddfz4CO?8&&=nuvj?}!uNUC3=S;Gb^Q09qvWv6YgiFLpyJ0A0ycb!Gl_c8Q+ zG`7SmgDf$&OW}a4u>*E?*T_I&G)}ALHV?85>7;jE9v1qZl!^d~kSip}VT|z;2bk4L zBA|mmW-@bo%dE~PU_;ATwwRGm5d%VN;+^FsWmv`*iKU&1#jxQ`lJ$yUy_@fm6oclu zc+R+bu^(6C#Fb=eoCfaA&GQFxb6ju(D1#gW=Gi73KPS#Jhj5S7JEW1OW97%0?H(uX zBm_zRsdS4Z25$k(a1k*=&cNU7EfzlP>^JaRSpRp0@yv-e)0A$9aM1PgtPVe%mIFJ)-HN%@^vV2oE>o5Dv3duFq&<>RAsvWW-2mB5{>~vf& zQ2e&)1!%AZTddOLbzzORGuH3;lGGAzTn=Jr8jtj0G|l1fUFEG*ZOt?RG7 z*JZr551UAJe*!0Or_=OM(m(nP`_p~Hl8R{9U!=p9W5iE*Pv0}n|I=rRcMDSt&;e#X zv<~_c@{hJ*2Btz*rljtNSNO6}`M0pp7@rd$0&_AGL&RFSZnA9+=~%>Pl1D{#G^5}c zgMxkqDN3MvEfz%lw9}i4I6jJu+VAB|HK7ksJ(8N+{G=Cx(ZHven4= zn3K*$m68#pSMctLR|y>5hJ_3hAho>f_$=@&sHm>yOyVRj65FQ|A>nG zaILn6ASu{dyY{u1X{CWrD_;;9Em2*I-Ep3m<4zfXS!=|v$QIMAVzR>=9U)iQfg192 ze*DmrA!RPxCL)Jw=LWDoPm@tbJrX*@8YJIq15@PV2K~=>{7C^yDSw_P$HSb z7ipMN*5~kpEW3B^lGvGb29(%fkkz$S(}}ESsG*F8V7CJYh&9hA(86{)wyBwLB0;dN zdJY~d&_irJ!Ul*vsTeZoycZ;UjczpwLwh)S{pCOvS~k;W?hHxkfN;hY&^NKAdR)R zYBT0z6ty+G8NHUKT>pr9!MDYJpv z2yN9tNRrC|8%N)hFr6&l_M?_n|feGm#gF>Z%dW_ z2tQ%NdIvv=M-Q@;+(=*DHxif|3mUGzdm!HsHgn?oqGL_$WK}C3R3I$ z_$j(e(Ngd10XIn$==nWc)WoskqWZHZ!}aY#Wub|2FxbyJ_erh4T7Dx1{A(%T-|iD| zeW1`c3Z9(+bx(*$qRh3;+Gc%|pno&Q{!L}`>Slb%R|Jnwy~imI0Feu%Uzrh45QxO= z%L5uJ0R2?(PL7$)d?t;sp41g2_1{7wk!9x`c z@5}@rk(mg{p==SDL&(zuZ;Hvv;BgPYnXi*FCC-!yXD~?4y1&s^)kndYy#YGugE6n8 z>-)x-p2-R=_(Q^%SAp%3E(r^5h)CScs*EowM}@zVVsdymT_T zZ~uilW*O~)$MTi4LA$_7)6wh@B?lA7x~N3g`PsoowzMyc_!|7!#fRQ<5K~lir3z^E@DwDG!O0L*wp~y1Lvv#s`yy6Hs1CPBHJsYIzyE zK5>d^)#z2!1M}~WyDTgDIL~z481$7@LQ4fAO& z^yvDBl3w+h$-W z;v^U=!DMlV_)5zLpY)h0LW=7Yz)W5>R1_@ZR}>W4jtLRsGDYZTtz+Wa1;(4EBX_D# zU|goQ(NcjfG)C(o{!9k~Q<#I=71(tfDN$ zXQbG3ql}4BBEHb|rE3UFAt#%b<7PZ0y-ycEbam#lv<4WSZ$Lyg))et6TXkBY+G3D6 z)#8rf#uLB8W18#f3Lp%%8cahVwZTj9y(UUrkcg=#)_`)=G=aa8HSuGpv*EHr*zPE) zJwmXe0f(K;b5umL4cu%Y5@G42{j90uvru;x-2DL6EJ`A-&y;*mVI>->(57!vDIH@e zy6Mv~Cl(TOSx)=}J~xTQ_y7obg9cU;lPO7P;q&x_NpQo2AR4-%(R8SM0#Kd4ULHn8 znrfalLv%IZ0Bsa&o|s+a(;e1PsDc9*)r7!M>gtF(j6#0FKVk$y$6s4rMYF%s*~OW? zv*LO!xYJ3Z6byh;30NEI380Q~v@hR#{z1rd+G}cE!&3`Yf_e*w&wJv6ow#Zd!@wS_$JI=y z2^)xU;Wz<>A2zzk%r@CBPT8e1(&e|U2qx2RFdZJe3l0p1>hK;vsex)sVW_~_3a$bY z=t4_3`CNRN54LJIC7|u`5$0T{OLTl(q6yp=mWc3W!Z!jG0;uLJF3`<^DOgqjtcBGe zS0O0p#|y2r2@}m2t(m@1eUNVCfxJwO^4WR-E^eL2e?G5JvxsgW5+C+_;~w0A6WhAej7Ko*hyH1@tb$-6{Q=fMJ{oUa$ z|7Q=&LdbkEW=WE(gqP0lBr2{lo*Vbfo&DW?;)b@b*;T139dl=Ifg=_&O*GHl6K4m+ zZe&`H>+`*m$408WJuW(;D|%1dQ1orbNR#rFE&Fg@m4?m6L57jBQStbF8AIHaqhmOA z=Y75)b$*=rGZ(b&77V%>Cys1CYK;-wwp-h9Veh0e=kB7KGP}!+(Q;ZD*iN=?%cLZ` zdU49i5=4A=a+Za!oun$3iz$mQHJ=erWqXFrY0HU2@lfoGM`Bx?*bgQ`WqhKmJm-3H zrS#<_7~K4Wg5@MAHi_mOT+HyK-u*$ZjCBd)UOwNdrs9_E$UNbT6^{mIi(kPQ@e17c zYy2ML_Zog@WEgy-r8j2?m&kmMfY?{z?%~<#@CDI0&A1UNIs1tai0*}PtP;NwqZJ># zOg7@qe158Cr$%OcTyQ;$VpZjaYuJKFz?3_{U;LaUL+lJ_Cn_ZzY%0BmpWZ4~h%W(FuphHyhwKPO?2zE+ z^%ozCC!}n&R91WhtOae3y*5ZM_yK`SC4ji%;H}|VaPNz-*GT{PdFg!V^0yda7MTcb zo!up!)%0&DDsJ7?-ApAFVfWq-fEG#XL*(o>!j4$Xsx%Fzw}`R35sFO&draxXKWa|z z(0@AA4%!Sy`ZdU4AbIB zZ=cRm#gOAv{T|pC?k}VM#fzi9icZq~KhXVciYRn{R_p%XQ0I{&kN<+iR61jM%unn5 zJO$x&%JW!cOkX04+a&s#+)F*b{QvdbUh27mk&U88hW)DvMiZQBx_)42w~A|LyP=eA zf+M=b#~vsIp$W8@pd`HtQpB)VL^H zro&t{w1$r)(Pbq!27Y!oWY_P#�sLz@bzw&1xFr$al|?@!gaDji^HSJfiqFZ0qd= zY`)2|rZv!QyYS+6h?00cG@12kxQeH?ql(weo@*o%b6`=+btl_6LTOqjuVuX`g5b0{Q_wk zAr3EWzwW6@J1i13SBx83fyJIy%0N{HD1U?KDo^nr#uA~uBGj-s; z`anH~T-bfh3#Cnz@~0f`+_JlZrR}m~kN85uiv}&SY?wN>lkjOZ$901%rgNYQ9GbHX zls>`{b25qalR11AAh zOL6vOV`oEz_}&hJ(4_*+(MRhW8z=2uG629U1^kox#(R*md|t6Rhr1Irh%Jn&_MYak z(n*x?f@5ULW14|3Y!^v5L!*H^WYVBPbnSpuMny}K-IBoCK~iN!)Z!6d^#nY2lMX@;YPM)5Q$OI@2lRzYFoyWV#0Udv3F5tnnI3Tp%k$gzh>{Jk$>%^}Dl=)^ zpYOhA2L&%8qzFff#@=E3M42+^PI+N}DU2z~HzyO2%W-jyF)<%2Jx4m-Cr+;bI3vR| zgva=~h!>;Bzx^HjInc9sLp)KI;$LmVBXb$y^^)tcT-!IYTO!RSulrG_@dww03QL18A zyY?g&=;kp3ACe7T_AaC*SrzC4^fL0#ow^3x06i*}`3xASi^4HgiL#n*u*rQf`gaUhy zh~Zm&E50dhp9sFeVOxBAQ;JvUmGTXG+gsw@${wr+%!@dPCBjZRKy08;UN(F|*Hud3 zg9Qk1HdSeh0nhr<2C?PtuSx7TxB5fJYw}TFwQ)$8`USld9Nk=xb4Y2POF4)GN+L3CRE?*QV<5a G@&5qlmp9@7 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.tictoc.Tic.summary.doctree b/.doctrees/_generated/gustaf.utils.tictoc.Tic.summary.doctree new file mode 100644 index 0000000000000000000000000000000000000000..25fa39df21b667a407fe0c38d03a23c242745bfa GIT binary patch literal 12152 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 EFDK@vC;$Ke literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.tictoc.Tic.toc.doctree b/.doctrees/_generated/gustaf.utils.tictoc.Tic.toc.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b3abee1afc2c38efe00643048f53e8071f54f042 GIT binary patch literal 7720 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.tictoc.doctree b/.doctrees/_generated/gustaf.utils.tictoc.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ec92b758eecbcc2e526c19018226144788dec626 GIT binary patch literal 6560 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.bounds_diagonal.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.bounds_diagonal.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2140a24a4ce5d5820387aa9deebc9f42db4f4f58 GIT binary patch literal 6517 zcmcgx%WoV>8MmFx*yFeJFbj#ptkAOKkQoQT0Yxi>wAuq$YoQg|OE%l->8_dTaZgv% zUG3O{pyjaISkx_zmMcP9_zw^WkboN!2SDP0IPqtomEiYPbxrs5#E)GeBH8Y$`l{-C z{Juwhd9U%~(P!uMKeds@Jcy2auJ1>}XKAjMeBotd7Rmg1zWc-cY2Hz-#C?*AEb&;b z=0M@`AoLR!<⪼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 TW=vtf;#00G(*hOreAxdF4ayoK literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.concat.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.concat.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2874e54e8f7d5110ee82ca2a0985269d12bebe98 GIT binary patch literal 8222 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.copy.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.copy.doctree new file mode 100644 index 0000000000000000000000000000000000000000..91a65ab3deb08adc9b0a32033e171d4c5a345371 GIT binary patch literal 5996 zcmcgwTZ<$~74BPAbyas)UuLFV>FKc-S+{!JuJS=dhed>C5p67&MHWG4)2Pg-imc9? znUQ^Y7|@5sX^gi`SzlF9p9K*?1=nAof)C=8zhgna6Op&7p1v%I12vs-;zY!`eCM1v z@q@-s*e4eBKed@e!VS**%yELy;Yp@eozPBw9?0zd?C^)#v#h7uF*{4bG`4xB7QkT( z*K=YXWKT2IC3fk0Nk3oTO1LfEFesOchG>e`)2t`jsv%wJ@!FKypQMRo7s= z-BBu`Kk2*dItl64vOSh0AmY0bFyDNwI%!l5M$A5m`IvZ8)sk#NQ<>NldtzNY6w6{? zeS086pAX_R2zWd=3*(c4QM&j80h56dY+y||xR~TlK6{O2`f&pF9vv^GBe9?wZs73q znq7^_#iyW-co`=AG=8t(_bPseq#CRfyIP?hjN%3pxJC8I=Dov%-gQnn@VOMBb9k#G zL~|%JmWt1cqskIP@d);YxGO-KeMQo3U9>twENf2w6?IgbiAl-+}2i^H_1vB zRlCXzDnoqlCPS=}A&eDPY3r*75Z@8sC2ilWv=vVQQ6tZemIrYOLrNZdF7R9P)l%-z z8S~f8TkIZP-Cf0e zNvfc`s!pmb^Ow6@=FgD%Pq}v&;MG#@QRrM;5l;Nd+#QgGSB4=9tri3M-E$HA%(IZs z!eCNcSLZ`&(u*oV|8;jk{|Q0=fwEr3&Rp>`e%=#*zm4gyq;fi{Md1r}`U9AL4}1Kv zP`L2UhXp~kau^rBD94q4|GB$<O$618<+na7+#a&$U(f`0TYsNJP@*>JHx~pbrmG)oy zScqmaW!6;OCL&+OEtlRSQF7k)LYbq7<4VHFpwm+a0@h_FT1bL&>WSl?{xp6dHuw zbV%~;O}~ymFvhN0>}8ekM6E+>`b`k#fDM(&M732XbE~e8`MS!}cd_iwD(fSsHkLe} zI&|I#Q;t8=G5&j@T8A|O=heD7l@R#9O55I&ypWePw(f}kn-BdR(uuA`V*kpe;|1yN zXJFTby(skaLiCJzo2FBkzn$c$GdwNaU^L98KZn-nJaMh8kAv{Y^ff?a5Eh@^f_y|h z%mv`Oo=+CzZE)n5jihAS48np|@X=0mUc#kBq-B>>8NRGxNZs2NdlcR0QE>yTK6H}R zS2Vg&6pU5xR;)0WbXN3XbYKS-T{hSkubGbS1{@a+tawe`moWi8iyJov4tiO1_qC;@=}+2rU>=Vr{|0W z8}1nj_qe85XRZ`h(d6U2d_msz57m0iqcE11$4@!TxuiORdF8O7w)wdWD@ydLNx{@m z4Tq1?36ATYu{fXMNy;W17N_=W2@gc-Ud-(rf^^zR+=pO*e8jYwV&)q_?77`obZ20MN0C#{=xe`*2ae8O}xR%+Jsnrl18Wn^d6}n8S^x7 zi8q_jc7ri6kmrRRN)$;tnqzZ)!mbxG6O8mec#;7!{)jt>;0s6~I35Hp)dL$`Cl<#A z%Cqq9M0rkTf|G7nDaol&itY=ZCw5>d@u#D=uY-AdzT8$tnD66qEh z-Jw^-XPMfWp;D`-$=GdN4(P#w9xcJ%BBJ@8{uUuV{SE$0RGY}U*nvq;TqfdWJP+!5 zRJ+&3o2lBUJ5O)7fg7QzFgU_cC`JoDBX^xbz|vGW+aHBqi3d%*KSwON+cP`1i&OQY zotgcSZey7tcpl8}mCvB+A%oaqO8EgL#tuCXmWEAHLt1a-^!H(h_p-MU4S0G$T*0gf m0ALO*6UhvDtt4w7uDOBjr4C_cLSf%=DA(m_feLy$>i-v6v+i{O literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d6081dd9a3c118bc61ea21edc778e282f3531467 GIT binary patch literal 30361 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 m!T>~p0gyzJw*|?(4Y$eN!myboimWuw7u*A literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.kind.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.kind.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f2c2bbcf4a0df1014f7685bfab04c26fcecd516 GIT binary patch literal 4172 zcmai1-D)Jq71rO3H2ND!-dzG-ZDfM8T4K%k!WUt&LxS-|5Ya^lCXj48HQhB+ZFP5b zs;Z^Yg&`prTTpkdKwc#mxylnHk6`e7Ml8}SQM_<(oINCU zlV*BU@88xuHmNMy?V>08V*8Cd7X#ZfsmXZfl|7wR+OX;9hAWfCT#r6)9Ht%+BQW?6KgCLcYAXT=xhMJSwY@Y%P-NnGK5t5P$w5Aa)3dfWi(P{SW~0 z2k}Sp_D>6M#Tzg**fR`KDhg@XN_nt5FUeazf9d12#DXXQ+KKA=Srbh>EsUQ(ZoFN; zb*vjIvhoI2Dv#6?ZyDT+%BqM>^}xLKPud$l>D+k#LpPQWZ~VHx@itUd5cCmO{`vU9 z;_r_-@~i{n0v6Rhi!YJ8i%1i@@?q>cn?7b#M^GODmb1IW2s!xz<=!o4LO+*DMfGI3 zLROSfpFK#BCO7dot+FgIYbC?&Ze(N}p_Uu%#J{?m0(ZZ5DDR}=w~K#MU_TY7fp&1^ zm*l+YSCbAV9*~Xl4wkglaTSh4<}59o_^;gtUgoYu zgZLjBEz+o66!Id}@O!&m$ma2|5noWfzH|3>zkb=QkD*b!rCX(8AsbnvM<>x`nj3>k z;_k_{UwC#|cRI?*gB-ZpCx^Nd*ZU#z<4?_1^ zuDD%Nw#{06V4oPp3Z41fj7lYEsIQ?}_Y5jZ<}TOlZll8!EGxQi-5$o3qER4f8~=VI z2?K!LsUgAabKDLyQ{}0WINSf6WfdA_Q-W+?R;H|syAs1IJE+^WR1S*-eH+tEUShGQ zq%<&tlyr;%BG`_g+I`w_a8%!|H%&Ov41dg(mZW;%^8zemAUJ~7=Mnug(gZt_Y^@MX}_Z2UtGEv5FIN;o{ zyMkryvS*L^JOzrV-j!~YdbXGFNj1ZDhqp`>AQm(fXE`JTgd^tU64{p)z%1fLEEA%i z9aLs|@$(B`NuDpijJQ%#MS>Mc#uXw!rlQE$VL-lfO3$AH4z9deIpT|x^)-wZ;oOA{ z&F<&RFIG0&Bk}><(*h7>zP}%2te917#({W(Lbrio*uJB9EL9REyyO_iikRlBE89mZ zPEjy{NSZW+5Pf^dDkGzX$Zn*d+d)$0Wzk&M=$MR$;${?!jYwz|6%z) zNhS=oQ)<{B31dqAdOU_$kIFkEWHFLzhKzbjn%)3tMuz7IkMZLdFE8Hz@FU=PsHXAC z@g!Ls|I_ApBrhY%UUM}{xtaPqP!Pt#l_^|`b&kZ)&S}qzYfbNlQFBIJ&gr}JqUcrH=yhx#O~{= zL@%IkFaJSRmw|h*N5*L}1qbT7a6*MbSCbXBG$-z6l7(cXZ=q`k%H$KCAcOB_InR{)mG(4Ff5WBuFSP8@*s_R}%E#0Ro&)WY%)Pt3Fu~w%UWG z69>($e$&a)`6#ijpsmC*%YZI$MBmu{w3dGh1io^=MFwDg pLM{PHji84M+v2e#-fP7^ZhL7FXH`NxnNi4g6RK}@DF~C*=>Ob4V157q literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.merge_vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.merge_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..acb38aa03435d9ec0af595ef5a445f840954ed58 GIT binary patch literal 7637 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 VHpR?<(!Oa^t;@;+9q37~`)`;N4Uqr< literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.remove_vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.remove_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e24a051dba85b6ca239445af762e662fb3f05def GIT binary patch literal 7298 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 abuV=M%%z+eQQ5a$!ny($XhY8i{r>{A5V=JF literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.select_vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.select_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0d5ceb34485923073582711076e1159130731972 GIT binary patch literal 7686 zcmcgx&5s;M72jQZW_M=4ymq__*lWg$LT1eFEHVfoVCzm086v( zs(SV6z2Ez&s#k9}zW=YSIrUGj$02w8N#C?>Kd@Px$|XCnk}>l|`Z(=-Sbr_qNmw=prgadp zA<-mqQJ5ndO8Gj!!B_ZAeu-~MYnKOOwi_kB&!XLjL3FUI!N~uEfbp&tY}XhuP?>_+ z+31Og6Wr zN3fjylr~GTNVnJNo@Bz#m&yB~ZSIRbI~gho9v? znK$JD)DMsDkxRj<{-_fSJ15y~)+o33<`w=e1yCKG^%)~lq;4X)s1PpjPD`ZTJPoNO zLQ2E5L<`O$#J|ShAUM8W!oeTF)wPsYm6Ql|AT3zrIf#RbF`L@#+LF2F6x63sDw~my z8Fd7vSZ>O^S?c@kll7JJeri_DPl|mDicOG%rhKSMlp}Bm!sskQ`H^wr3CEz+W)zyD z31E(Cxo{Roc`e%-kZt>i4tr=}e@Nwe{%M%L#e=8<*I5arg?uQ?Xv9P+pEbsTop>zH zb6xJF$fzK5Y>*T&S9c@e%ZBh|WTOkDMHNRsC>7Sx%1Wf~o0JQY?qTUvw#gZTfs4H; zosQC`RsopQ0tq^($VTwyI^c7dc%Jeb{zKU|L|~C6M4a+>t7J1V^W79%6;bPe_-M|t z9;Dr#QtTzZr6U0feu11$#jQ?kR^W^3#$Mf-TjUm_$P9VKqO$ucLpJr}PHvu#vORQ|XY05r6H4WH zqsA)$mP6Updg5rml4mJ6g3g-Nt`ej_oFAm$LFV6PZZHS)7jh2*`)Ecu{tJD|!!Fm; ziLuk|+S{GGy^a}0=FyJl9I#$zXQ%U;dBEb%e&920Znf=t4l=Ci8Q4_NZe<(!u*w1(_?287HV(NNJ8@N@`ECv|z6xaBwfVWZDw~sY zE13?^f3P$_3VQzl2HWMcVxg zh|i1kS3&FE!=Fd)=kS-m>)xlH&*RUjX!c4p@mZodA|~oy@ubsdEss{b_)Ik0WfsU` zt#*|XOfDdSn~=Vz9CNCk{8adU6O7M=FLKI!uLP1$r<6_E==|~R#}%Y!2$rjPv4CTm zta7@jU9I$7*u>iue%SYI z74gahU5bwCX8G@$08dCCG{r9i%DudB-pq8-VCTnYM!HLas{_RRc15wm7etS)?B3{KA=zw|7`l7!?+ES-%zBO|jdqTc^ z59I1@lizjfLUi?3(bV;)`n4@P7-^bCT7ewoRkoVg)K6YA2^k;S3&mDQzdek(D3% znq0I|RLHQ)=aePGd~*E~i8)#MkG7mPaK5Au6?|J45>IxDqJ+w~Fs~B$e~K zI5BGxsAh5if_BzSA`h)qx{y7>m2<5WthV8`Wz#~O6DHrolLD;Q8nHX6_#T}TgW@N_DL8XmeD>ms1 zi=d#aViUz^aI<0ZWxVmgRJyr0FE>=J&}04xj_5gKTpPc9TlOVh`Vp% zPb^#1t+qfAse$8|-^Qzy8pj@ZpTC^Q)vECnyH%7j^bUh1bPvU7PN(Ir_K;(#UKo2k z2)x1{ROd6b&Vsr%#j%yIswQ2X;*WG2i4?(ez0NBe!LEl4Vg(812W&A`;L#f=FvT9S z_)^yY7&yF>zKUo-O%`zlSYtSVUa&|cQ{Br&x3b}~<6B;0lh2GO?Atcwx-2cwhMo-i F{{f%v;t literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.show.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.show.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f35cd18ab5c3729c8de8c853184c0a826b8bdd4b GIT binary patch literal 5770 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 pvt|H*J+MwB6VprewDI9m5PMLeKlX{{plPAb0=( literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.showable.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.showable.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2d98cb063648015251ed08b888f108601a8246e8 GIT binary patch literal 6577 zcmcgwTW=gm74{`F_V^k*n`l>#7e^>$?2X4f@UV&^AcQ7x03LWjNDB{0Jn(>!U?t!e@SUoz?w*j=>3(rqG#s0aJIl_y=ayxJECZBtfw|Pr8geQDfTavf>St{&a z=ZGc3b6DDW+kB)vI<~u@rp?%U8Rw)>tmCZt)19`>w zLY5z7U0W{LLL^={6VL<6J?ptC$vEfucA8=m-;K}?^w+$b#nqr|JBJDD5ltrNgx#m5 zoUif?zQk|xS-vUX+2c{b_L3|NS+aK=C5L-jc=HDgrhA&PJ*&?^WeesOtLJE_lcW&w z)%}^Q%co?+3tcv>=~%0ue+DA)TTta^@w<)R9sIUQJZLEKlu&Ib#tZvUy1Z-j-`?J8 zpJk-2fC(PC+m|v5Zyt!;&iHG5x6;Z1e-*k1+gE@-XM*cCR#s@mNk0WvyU zF4I*CEo#h0^xPT-{=GD|$&Kc*C1uGG%Sj)Pam%9uCH6%qDKJwyOnh>WfCCeT{jI3C zb(XC<#-Ie1X{Ga)(#*J8<|{(-yc@EbsFd>bJf+N&QnW_q>555Z@bB?=Nb>JjlJh4e zU+ao5_%4(xSmJxYcg=3|#>U!g1|cQ=*|Y?QHFY>Rw4#_iEK2J1Gdnv54D?wE{G+o4 zmeWyg*G)~5y$i{PO3MlqgkNi1(@hOkbDCPjm#rXjGoPgJrAXi8c5Lg4&CORppw$u0+%Upr+gVHpNop z3D`E53k3S8J3#u&M;*VZnT8g|d=p%&V1amGxW;EM^L>RB{u{YqiO3<{i!|rI9U&{l z`$>-EMr7LKu9>4shi`8yQ6BP5?PCz>%LFWiP8}VcC=~UaUr*XCGJQX>V_tWZ2X8V& z<1pPad~9ji?;_3H*Dv$Z|*&b8(148e| z$jSewXbX-1vCw!+F7!O+yV{Mas8%bI)Ot!_nliMPOb-^Pr=~8= z_n<}88-oV^oEP6T05%3Q7t;-<)RFv?tXp&bu_}tr`zKWP52)&2Mi<6#|1lGCuJ9UT zrgB_~+o9W3#rV96V;saV)8IAQp?w=N52i6R7Z$;_vd-(JyYB98z0n=iDu$E^0l!5F z{`i~UdhoT!-+l1b<2MehuRM6T|LEYWieswbo0Dc-+SxJ3R_XIORm0%Xi^w*3NYopH zFO6+NMY6Q@xA&hJ_Nyd4N!pUD>d9dt129x+sJ$welXspL0r`BXP4#-PhhGb0^197ITN4ca*+TvjD64X zPz=dA47DzPr)W*VqHa{gY0Mn2=Q;U@vW1epCD3(5FCC^>}?D_!k-I_i&VBT z`02%T1_Y$wOM>8h@crE+HoiGg9X%&N{sH8w@-UUiI1}x`FTt8@>SyJ68C4iS)6Bu} zO5=my(-!s4sE@;FS3iVdoG>z0Y@ zrtE(3yYeNG*kS6c%FK$BsE>E4?tU~xBy2z5pOOoPhPfDKblSQ}0D}iFzmjP-&u2Z@z8&8M+Q89?NEwi8vGa0bf0kt)l;drve5p8X;&C z1u+JTNfZgNigJIL%jrG%qGo~KDTg3fD27?$W3)__F_oOOivCtZ8&IzIa7-8pR$Kf~ zE>rg^%mQoJi;@7oxKQDyN zEM&HbLLZ(2ndt4lzN?-jH%AvOmLySPaXWNN<*EJ%gwQsu_FeH zGw{6?eQw2r*?n_#VQjO!N-_X@DTj)D)fZXz?XaKOeFlxwyKx3xMtLn^PL#No%P7F( z8fsP@$R=E}hnE*L;<*M8yeU`gOhi^SC1>bexa?*@Y?Y9NV%3BPG$x_#(}AmMMuDBI zUrog+%iPF9{{~c75%!~$S@oR?C62K0(DA6DfU_*uOR0ScK?*MCjH|%ymLN=uYD@VY z$d?N;tLNc$OO3`G^o2{%C8AdoY(uBHF!>_dvE^`oTCS=0xzEBrfarSx64KYN-jORY zi>tDSgh76cfp+jtt|4FMLd5C4y**5)o%jTuys#4`eR$M$qErlk(h@9yd4y_Pv3U3P z=f41bt|UEY?0A}~j{lrF9?okMWDi-=@tEkTI}i}|xCne)))ICXUgQd%@6XFkU^1{u z=cF{N>NZPv&Q9gk^duDa(BfX7`}hIBSA2R`$fY#EL)rR42Cq(`sB3Dhhn62XcA?r$ zhvU8E!0_7Npk<{(>^{t5#|XYfm5I-a=fqy3>0x;odQLgb;roOfUxUFwsuBp zE+6KAOweU6Jop40aE4CCsl4uh>d<1SDSQjfNs7CQ>$ReR4y^h;9n((bEDMjQNiFAf zG=cj9iO6amd_!2e+)%h#15-ejK)3~JTxv!Pakg@(!O%-y}So}HP_ z+;MC{Aw?h(=>ig+KJZl`{sshszkmn+1SF)22cCIDLWSSCcfNMkyK$Nw?lk-%8uE6+`uok^9FD7`CDn5w`4=O!ef;sxz$f%Vf8wP zEE2BG;?C>&N8-D0ChQF}UrFf@oN@Lwc0|NIaO+ID^+&0`Ni(!Sw@CTAY?;MH`5D>F z?zb<`dalpX{iJKjMN5dt?Ir?zAwHaOotW-CZ+li8V-nvD-x}(#1t$s1LD#YmBGx0A zM9vGVPfICZ;~RXLKgQ4SO=<7)V90i(#P?aWdnbqvb~Q8dUm!5v)r9SueFi8?Feh7` z$g$$qohZglFYnDIT|OfluJ5p;3hT90_@{6){x~@MB>rE)|EKYPi*5-S?rNg_0cOz^!>fv3LBuI~pvyJ~E2AKbB`e!Qi0jgDPb$C7oB_;QQj z4cRIV)p~icI+LjzF0iL%tuJ7WFuN_6K<-Wmg`~6P3ZYV(rN(ST7_FnBcP$PrGQkCG ziCJ{WQexBBf#qhVQT#y~mFZV*Ql0Sl8Yvm%?DvhJXH1ghxR@^Q%_@ns6ocyASsN28 z+3rO-HeYh;_B2i{5T`Vo76{=uhxoVn8^n%pm+auTp!}N3^NLCsKR7K|R5!1VZZ5Vcd6Gt&b?&r^9fj_cGbKm9H<=@H)=#afg3#5!i>n_gp{%Rx z66zo%rx8R|f@iPiXz^8|``I*f!8p2~WawJ5>H5lPRycZ=3@S&X2PLN8PQe7O^{m7b z=Aq>!Y!s_}Bu>IGh=dsrtw_9?1mv0T)7{_G#IO+yt1>9pk3#@PVA35O+hEBHxz%Tq z`)RQvn!!Tm7=BzPb=_2s7n z%1;czf7c|DnuW$=2%Ay74uLN7IJt>IGCGeyXzm=k?2e6OB9&|TrwJ#^N3`%k(Wiyr zDd3BlNaZDS7&wW?;yf_s{tMw3V6Fp@!X4K=k8A=2P7a~#L&Q+!V*gQISUd6x1E04j za3VK=wWV^A{8Z2#AO%WC9e7h;0X(VsSlmH5efahK4*2XPo~PUf|Cd}eMPQR8M4a*u zs$gU8^v5ak8iLlo@{{?Ab^qPoQWv|yH?;(D!7r1_Des|Uo*nq2ngv$VxE85JKe9qz z^(*{UhS2NBhGh_XMkcZn~0~tM!UB%cX2ekG(wjpc0_FX#YexUms4A&@!6o!4G@>E^3n*}rj9u|nme9&kmLXCk=@{C)+g zJYD!7y!=pn+tYme8h(La7v-GMu4pVxS2dP0+mQJVh&PYmA1mZ#j(J9&%WuGjA-7^T zt^mn~VofgiY*fm;SHm}&`BvjHS%{-)w-oJ@LGcbHPd>CW*RhIJ!^2gLQuv7R+*A#>EbzgdQejK z$J%L=wYj4BzsDxj8z$ziRmC5C2f(LQ{67J9@O}KaH@J(R{DZ;UH1h-es3>>Am=Wc! z^976>Q|=RBzVKnSq2yux)KlsDujo!wcsQo((@(ul?AjPyJH@HbYEX(;({gYk;7JW? zDA2*D@oUuB+JmjioSe_{n_St7amlOy(21wEgeOjp4$#7Cpw{h7X$qp|vxy3)_C5x} zRzX;)#07QB)!7P(w>}~gXRD8nx-6&rFZJla8vv9%$SY?4i=4to?7x<@|1xw=rr!u7 zbEUfd@S#|i`LVZY)9L-#s(xuc^TLai*6UZx3DF)7pblBm`HNH2`C)_h81e@P@OMuk zR+=$4V(DB(e)?ldetVwTe1TZJiP|b+e&fcFEog z8fG4)8KsPazv6Oeb)l489s9wK?vmgw;RpHWYCesMgouvu&{)nE^YJ<$vU*8e0Im5! zK9|GMNrW$ZH|lcQ7ghYGw$K<$^1jJVUNR{^bSNywD3oUG%lDN1p?q__2!uUZuLm)O zFQNu?MyC?|s_q(14njr0j9->r^8y-=(q{Bm$3Pz=6~sjJcAni)1H##=*W8y)7-$c5TX4j6a)sbcxoRaMFv}@9M>XaZCmDujp^{*% znovmqDnoSOnwn9{PSP)@!k8saV4{l$sB@@UpumYd8c9XAQ)!8fwuc+L)UUx=rsKx+ zpvFZqD(7=kf!QtNGBK)8%I*NZl7X2$7nO2qO<$xhAVIHC*(UmoIL(2`m(b9MsPu4e zR<4u1L38{*6wz~ssHVJp?rFIivarl(=`tu9h0u1;PNpF*aUsI^+U_oA=d?e#lB z)Q3e~AV@_3AWf9rAReKbmn_`5^4ZUWpQ};Nt{qP^e=sxvBf7_vN|x*caB3$=yEp@E`hn)}tbwTvm-G zGwUqfLtCS4G?`vtTN!INZI0@v4e@Dv1D6#G0ez5!h!FH=5&A`--N1clPhiu-sqhQu z$x*~fw+7}8Nq3Qt5KGQ%!&V8O?rfHQPO?#m0PSz8AtLqW_l(V`~53(4P; z>)C4yy6W|`PrEPAF#nMLtU)elZvyj$CL+eUunl4ATA9+Dbr1#35^%Th=;+6hH<#x} zX6bRHrg2)Y7*MN){zd}e^E9cy2Y*Mf9sCVHV%ef;6#@aI7VgLVar_B_T1O0gp5IL5 zN>zC3xD{0Rbc6v4JwrB{!)dy!Go)B*7Q!BO1Fz5rHTh_5vVd-loY=~-s!iud&WF2= zL<-}%P(LeMLDYi>v4e!H93jRIP@z_@V8oF58`=Cj;KPs7S78n4slcwl)))$)5f+YQ gWO}KXRx(_2ecMYM(wRP){h~v@E^`YM(35WGf4=S=1ONa4 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.update_vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.update_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..95e1492446d18989c97be0c22c87806aa3bac4f6 GIT binary patch literal 10334 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 B21ft@ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b0b1eb751ec95d132582340f89b5c67f6004cdee GIT binary patch literal 6235 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 EKWQL3@&Et; literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.whatami.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.whatami.doctree new file mode 100644 index 0000000000000000000000000000000000000000..78b0995f766a3b3ad14c9fed9af791d6f6f6a085 GIT binary patch literal 6372 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.doctree b/.doctrees/_generated/gustaf.vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c0592d2fff999193a6201527de87dcfdc4f869c5 GIT binary patch literal 7405 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 P*`-`pqy;MI*=YD5&Wr** literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.const_volumes.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.const_volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c5304a94a9230be091e5f394f9b1f862b7f2e7c0 GIT binary patch literal 6780 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b04908ee03b656b98b00b487748e736b52c33165 GIT binary patch literal 21647 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 IN6Yj757_=a1^@s6 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.faces.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..08fae60dc3630ded17e919581dc79d34bfcdcb21 GIT binary patch literal 6712 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.sorted_volumes.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.sorted_volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1754ee73aa5979da3f03d3cb9663202cee0e7522 GIT binary patch literal 6190 zcmcgw-)|&G5w?A|Ywy}#|F}DIiqD6m=#upjuY-gToB~3MA_Nu|xh9T@9iQ)f2w`cx+ttd5X)OG3(qo<%MjlUdwd6%^Hs+zsKg#!hkU!45s+F+QG|Cc} z=V}fduJ8jd;bHzLR~=%PevtO;`o)yH(vQOFa?ub?vG^$Oik50fUk1D~rCuFosbquR zNfhAJwD+FWpO#^Gxs>*1DeUy zqGUsw%Eg-47AxY8xF&Yg2L~b=^MfP{L!KO*M#=GkQA6cE?>gj-UEQz|5pkw>;`37%VKG;0 z#ZQNYu85M#anEz87J`9f$&kxjea0C_UKa4QaCB=lL=$lNUaqzZ0M-<)nqYuk;fgOB z5HzA5msd5oOz3N~YHH6$O=3cBwW|#p~MNF8mQjHsPU4Di!qSt1IXe$oxlZ<~f*m zDtABf&MpWierX;oh~w9fBII%{22w@fBTBHqK~RKQE9Hi`VR>Dcf1@* zr>f;uWA1J7x92hag|3|SEAIJ}oqi9d-$5ULC@x%B=T8MeEk5MPi{aE3({Xvfe_#E6 zWQb2IhWKl7j*Wh$<~!Df923Bd4O)0fT+sdI{rj`L_wN_Lsc$lsd9*b@H+N;RM>mOk zd$j%{i{O>pqgAZ9ilsjNA6RPHSZY_E#TK$#YKB(c{>v|P5g2XsMOtCvBstLKc6+I7 zjnPX5i}~Je823VtB?&vzR_P+$&v)}umT%T%p=VXhLl4gmXM$u^aWe~&EwwsxMrE^i zYnxr}NT^0A5ssN3=4v56%hfUnd=dw~>&yIHEn;X?`4i1sTMM)-H(j?a!mX)2fco5w=U@GRn8q_H*n8E%cj50BUCIE?m9y#*MCQSq}= zkoT#!Is-;m>|`lb#+rFEKCDN z{Q@UWq9JM^Q*bwABw3Ij&Z&06!#xZ$I&WTe+$^DT9!W;GC63feK`}+VTCyraM`MG^ zechrMApPT6h-Y^5Jr-mra*OwiYDSriGnpTWwIkKCB{$yr7yuo~A0YY|5%7`9fTBWxvH3VoDqBM*l)#d=(gpuTx$tP-+S|?#Pb|!-; z86zfjsEUgnHyTqzCdG!^hQb4`DbA@cg;O*oaGqUYyA)7M!edy@3HS+zIu}%1uwXiD zs0}{xp+$)rIxUzQs^Rf|HpFqAQUR9Kk{_;0Y{1qN2o5Yew^xT^f3qTWv(!CR}rXatRvo zy#f%TsX8o^kyDb?0#$XZUN(-MDI}p-P4I!nBxC_?xTYx@>}36t6sJ7%A_u(!aIGWJ zMJacxD>X`7>74kfFEwP>9M4Z#KcI_PDHjV@f!nR%GAZJR_B(94YT2BDkJ6MnT3hrB zhoB>&eG}ab?B>Db%jgBdRAzWMuQtfvfShm$AO`*zDfnCKuc=PVV~6rGywueS!`mPR z+95l+hPo}JjME1P2Oy{DS)geY_M&76kGe&iS^#i5l8<2?saqsG-oN+87og8hGH`3# z6Q$h#)na=%FC)kv^Q7lr^V{Y9$?`zIDEr!K+g!>V_Vhp%X+dv#Q;31?nUhhBy8OEo&8G z^>G#>H&91aw@GanI0t$n*AEB4fQ<{A6e!ZHUt{yfgxw%w#u=%fd7J|><39J`!Do;_ zaI_)L)h!oX#}3CUDsa#SqqwW3-mu+UU^N(+n0BtN@$iKDqH4)R6Syysi0tOWH>6`8 zSQz#?mJZR$0 z8ga_qn%S{coT?XX&g_qHo5&o_bF03Wok7+^1aYH`;sa8Q8wCM04V@x~EWTywA3+Zv x<`3ZwXlTH%pw<)sFb7Tp$qadUO4c@9_Cq(wJi^S7+`jEmtg~T(5_;C}{Reg+K+ymI literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.to_faces.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.to_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..127ac085282512aa5474face96e6435e275954d6 GIT binary patch literal 6831 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.unique_volumes.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.unique_volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..24f94ad180d9063b00cdeab0325b18b7533d344f GIT binary patch literal 6145 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.update_faces.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.update_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..457006c22f03b1613dd1e40705f643e14b00c77b GIT binary patch literal 4254 zcmd5<%WfpM71c=7Ewvu4hi3)}JW6CZjwRUY&LWFoFmPZb@FGgI2m-G>CfHT%CatPs znPh3Cg@I&Y#{#$srV`{Yl20(;AIc}>T(YYAF_yixfQE{fm*nNS=RWw?-alU*tc5?n zZ%e6)n-NdbLZ`ykek;{Um5ajFuj;eE)nC-7eqi`Zt1FX;+OI()kt$1#DC!rrACkIL znH@FjH?2sV(nYsi_GDjfzNk;-!1tVTnOK1L8~YazsUui!A2zP8e;oDU{ExiVr(GnLOx6cSRm|x6J^z@`Lq0t+4 zdaAhQnM#=|q%aDwGII9ld8QMd*$<+k0ft}#Abg03NM1wm6f;AbVOGJxt};uEezHvA z7P!D+TDlvSQos>6+8~oXztt{`bbqoSXqXJB{upU=8BF9$&OG%yFzCDl*J)?JM+XJc zhOt<3_TVPZp4k%71rB4073NyhpCag@eMiAQ#C*d!kYHM6S-kn9mWWHR z`fcWP!f-c-g#6XQ(q*LoUL(trX58$)a3BnSFOMU3xb27Jmf+(UAc-#AViju32+F{K z@SPc6%0+B{`eCNHJ#qS^FX;q1jQAdnIX(V;KRp%$h|K>N%>RH~5A$C|^OqxX zb-_Q{d$#wkCJSB-E?qBgYu}H_bk&=w&bcaT`5(Utce~pXrRBeu| zP2hA22Y<}73YE4^4Zg1{S5~gRl>3){&{TbGY7D3kLW`7_80;9W9ZVHdbyNEX;~FVH zG-eFvUO{2I8CE94Xph2>dJ>w2DZS`Le>BB5g?3_L@@v0Gom)}m>}IM>UVrU}R8UKn z=sd&`HheQm+Q?!rm6NRPi*R1EplOsY{jL$EHjZWDS^&;GH(NN`F8X0P(B@K3S;2 zdl@fg6`u*fog!neqrLWT7?Eg`vQ(4;&0LXCcXsLf2+AokKj1(w)38DI{g78qv$@Ex zD{yTut@4s}d<3dNppafofvyMJ><39;I=Ox>Dy^te&Cn}A>p`y8w$_+MPeJw}s<3Osbj8@B?`tW}0}v zYjad(_IZVnwgBplFpfhOdfN!?aUxMU6F5Ew8&D1qV)a#3qAJj9EEr=tLD$ zaG*&FN0cROHCa(pIdM1BJVqkDr><&HCZC|mw(b_rl|ne2@i>9j6%(js8ABUPNjF%1 z*t{IU)odCQ+MVAJ#WlUl{8mgQh+Qxdbxk2Q9CO^v1o{yajzbs)W;wh@klsBe-me#>v=H`WhG5DFfq<+pcMzD4h+Z&2%=%a1C*x9G62 z#a^P|cCrE6MhV4bs~2rultew;01nP4I_o$PR3EJfJMF>Jj)V5pu;^%Mf8%*bWiDdo2&6~qQ=^nZN$h9&?2 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.update_volumes.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.update_volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ea796108f8966a11a742faa83fbaa2e6f39fdce GIT binary patch literal 5065 zcmcgwO>Z1Y8MYnI*yE3J>}<@gHeS41C9zFB-U9~|tw1Z#9x(WTP)-|~n(msZw!6D} zyQ}T-A$%NGtWgP&wm5O-z%Ss&pWqkp12`ijgm~VnuAZJr;_P0CG;vq;TlK#6ywCel z{j1I&|8{S|{?l7!F5+x5U{RFGh?hpMMl!5Yo+g12`fuX;<=MC7)(#AQI$^zLl#~Xd_-?5y`tEdUKz0^ z-W40-fw&{~^v_R(O!-MsWf?C{u4Hj>;$ZN9U|@OT3_A(N98v%ys^7i_D}UrcQR0~I zoi0^Fv7kF~7V$|7apw&2O&m+S4@^J6?;(DV@jIj=0;M9h2Ri^baW;m-^oPzLUdO@V z{=usqx1Vw)WOQis!&eIoW_L28d!`Jl#J9w83!&&u2-SFb+T_CjS__S&#}QKS(e zd~}J9UiCXUmhZMEYWf11A35%v39^~Z`0qfk!@}bn1gD+#CMmK^wPQZx-`*rmo|ZYI zU|z+Nk{6fU5dJ@emQQMi{=e`)U9=A9S!m{Q>CaPza=@;hpPpjGZo_DmFmeE`lDe0% z5ub|Z1Vk_eLi`Mo}7?& za|-zkW!qMH*sma1!m^1gI}{i`h-!#_(Y#qYYS5s^sdayOy>;TZuLR@IQ2G02SN2vXbCA{>Nt4_!$kC2KZqj!CBn+s;$ zg#dCkYRlKHa5h{0eR@=v6I;-I#Hg&HY=hiJuTkL3;W_#eGn)&$&Ukb&v-JYj+w_TQ zSX+-=IjWMx28#HHUJH~A$pZ>u^3Rskd~W)ULAyb+F7dqmYA_BC?U8;U_MF#nw2z5q zHcVaF2xX?)O_}ei&=d8D3FCt0qMa_@`8bJLxv%7Y4LnacwRPpdbNd#FDc%2j3*B37 z1Cj4PF#o%hE@A$^o%yqMsvY#S;9vfn{@n9{a-f&;YooiarxcQNQ%#ZAjGEmyOU?CjFe3qn$`! z$(2G6;==KJ7Ch?vEHWtEQJkf8df@NjGsFe@$LXOcXxL&xUq+*FVUC?V@hDR7yq;FC8!>XW8 zJ81gq4L{@hYrR@ygv-V@b>jB+Fe)s;kubW?SW=*$McSDdy?A2K71>J*rOOKltkuJ+NHE%@sH9$<-oliQ^Q7JxVVg`U z-g^0k-lSViR;9sYB#YF1q5ITp=0PY^8&ufvT{q*yEVzo52>g8k`sxMs1>#I^6g-!O z3KD+F0q2rl6D(8YBwNQq1(=j*!!l$i6rO zW&zKT?un1OSED6L^@G_LbBpy|Is>>@3P6G?WCeb|OZ)Ei#tShFf;VlAXLi zoytpIMKVA~4XL|)lFO0@?Uj}#p$abJGNyJ8dj(NkvSC68sjXb`p@Oj6z+p-x5F2+8 z->k)gQH&x>m(5*zf)e!YHa5}oW48z{U&l2au5!cEMZIm?goI~f5HX3k|p6HJ$b{2KSUY#@s%D4xPS%3dUR ze*EymZv)SMF$(9lrY=|g|lrX2OdJmjT zgC;ne0|f3abEEH;*O_9IK*VE_;0OLLCz7bYQKqQW!Dkhsx&%=7?AQ&1M24(}b}tmD zq#+#d;teQU2(kL2%26EXV~72MQKx|$ut$b*HUbCgys$%w0$uE!Sez1f6UkgK(x-+C z1InaB9wCCSVS(UisBZNA5K@M{D%=dksF!ngw`ZIj zq5#fLhcapSU`5}Wn{1?eGduRYR=a3tW`CsHLKy_l{rSD>H>i5ZAfc=%KcK{fGD(0m z&VU-S^8I@LOW^Ri`3a%{y&2*Pu$CZzQ`jVund$Xr+WK%k&cdXMh%;jf`?ZL2U7Z$O Hb2a!M^&YU< literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.volumes.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.volumes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e7d52b2e2581e507ea31bdf52ca9f41972be4001 GIT binary patch literal 6632 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 PF4a0y7U)3F#-slLKV7)* literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.Volumes.whatareyou.doctree b/.doctrees/_generated/gustaf.volumes.Volumes.whatareyou.doctree new file mode 100644 index 0000000000000000000000000000000000000000..beff8de35f678ec114d5787628abdca9b3f73559 GIT binary patch literal 6876 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 IC;jgK03^RANB{r; literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.volumes.VolumesShowOption.doctree b/.doctrees/_generated/gustaf.volumes.VolumesShowOption.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8906e621b231c8907fd025799561b98e7912b066 GIT binary patch literal 6262 zcmcgw+izS)8MhPfu6KQR8q?4?Y*ZCHG+sjmQe{OEqACKJ8bKf+N_BenoY|eTJ~!sf z@kLdDsw%3bc|kc9;sNo5#2>+bz;m7u67&%vgm_2d_sz^Xdv+bi4G)dv?3tNwX1>es zyUi~fA0NIrqyMRuEagFb(sO-3PJEUXYTi%0JYumd9v64sFCG=!sx92(EXjq(3N-@? zj|ZVISX{hQsAVFTL74UI{#M3386VivI@HN$TDzW%g)wI$asJSqRS#gl} zUDa`=6hS|i&;m()HSjZ%u;qnrmSGa#jo1Z~^fmA2>3Gn0y+gqUw34fqbceK5@D=_N zU*tFWRlcd--sMTec10e?Oza*f;&9i9UjBf=Y}YWh>kJvFT*-X9da-_bB7=mt_OIl9 zKBF2z?6Z@af{pI^7a$S84Mo0;zgO_Lg}*x_9TX%2Ez>si62wE;N4T>zuUc6-sWVf>#@CVMbh26e;*3dDBe&F zy`!)&gFySn#+5)7+vcE}Xlk~rkKr5iH9p~o^%L9)bE(qv!;$b%#Okv?^-g|3*RvUTI z7z1&JT%(LFyrEX6B0#C1bMs?uB^PUJTP*-CI}ljkqn7AeZ7)4$bsg~$KO}`jV}yI&SRoMAX!ES!it|BS=>a znJm=joG9`0kY#1Gw+@Ar0;<3-_y?+qFE|&X?{kEI?a_Z4i(_I?EiT-1Ddr=c!H$LM z5Y&?X2syf#@CDU03?idX`Xe|r;f^=e{2&iQjRmmVab)6=c4b!ZC;Wq7709wQWeG^n zZ}3gyQDE@v1c_QG@RC^8%Zz%R&?ch|g`4u4zSY;h;UW+3b@vd3G*5f){@gOFAuh6B zqHBh%H?AMv)wthAz-`&>wXpk19j3@Piz$nJgf`~{wy0m-`#i!weQQ{0Z@6j6zVZL;v=rCej%G2Wq6x zBpX3FpFAsbk_P|AH%IHUGc%M7K>t?@-M^cH7)k5%WW26LTX&F%?hz9*@KC{)`QTY3 zRiGT*pj&i>Xgqh)J^%5y~QL?P#{|{SL3l{UwR(NM%zSf zHI1Ng7n)zv!D3aq{XBGq<0T==DOP9WvIsn<>DB5_fBfE89=-S4qw<#kH+uctji^S| zMlB1txlFP=id+GITdR#6@HE-R%ysb3D1*A3sb$M2G%1H7$N5X4zvW5zM!txEYJ;;cxco-T^o2Q_iUSldUL5-_+#B#|`p;gNxY( zm;5h4s!nHRdYj&`ZDO>Ip%VdGHEpyV6}VWnkc@S}9eqqgUH{d`ak67tI)vUhDLyJ8Iux;&y+{^bwr}xb#uC&DBJHHTfmgR z8RDS{hbZo>g-hD1d9`~cXl)}(YVAO+S4}X~0RS!SBn0Z_tD1OzSG^#G8)uG<$|6Foa#Yfv79jv18UwX1}`IP^n{?FItD`5 zE`Fh!58W_F_gt3Ss+r_6&1G@GR}NI$w(%$%G4RpPKD9o;F=%gDZSfcf)GfP;2ZY zfELkb=UGYAPz|5;^C8Y#rjmi`DxAyQ2s3S%!(${8@fXCufJ7+wluAoUkH=9SPQ$Z4n)e`|KX%V}Kq6c{NAQBCBvi^7~%~ybq*hhP;9=nx}}y=mO4~{!b?$Hfpe7TDbNny z$u-oAT*@@t+ug-<)=N)OmBhV74B=7NiBdBFN=LE?=8-VRJmz;^`SMqx&t)<2rjDnX z@$p|QkB9TR1ldC-dI6IIeFp-aYlM0JuCp3sLyXAH=aIj2@R0RFu20ZkdKyhhVS|e0ZY%q*ij$V>jdcwQ%U*bA9?OyMnBT2;wC<#RsGq6j~uP4V@x~wBE4ukD-STi|@l5 s&~?MFpwG2 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 literal 0 HcmV?d00001 diff --git a/.doctrees/details.doctree b/.doctrees/details.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9168d355c0aad999e96f49a5b05d48ed5670d1d5 GIT binary patch literal 3087 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�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

>9x{ec*(LFd7pxhaI0=1kWvso?~6|Pf?y! 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%0DWvS#e5{hQ@3CR|3RQXLkYJInxZmRE= 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 literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6eb6ad50eb4b801923c6abe582a0959134ab53c6 GIT binary patch literal 24662 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 NqGN4FL1&bI`Cnwzt#tqZ literal 0 HcmV?d00001 diff --git a/.doctrees/python_api.doctree b/.doctrees/python_api.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f7588108c0cdc60a4f98a49ce4ee5ea38380d550 GIT binary patch literal 3947 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 literal 0 HcmV?d00001 diff --git a/.doctrees/show_options.doctree b/.doctrees/show_options.doctree new file mode 100644 index 0000000000000000000000000000000000000000..60360f5aa4988510163b5158eeefbc88a8ffeda5 GIT binary patch literal 116947 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 cQmz&%ts)?zHii{4P(+-jtu0f`0yIsgCw literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/CONTRIBUTING.html b/CONTRIBUTING.html new file mode 100644 index 000000000..3b271f6a5 --- /dev/null +++ b/CONTRIBUTING.html @@ -0,0 +1,605 @@ + + + + + + + + + + + Contributing — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

Contributing#

+
+

Contributing#

+

gustaf welcomes and appreciates discussions, issues and pull requests!

+
+

Quick start#

+

Once the repo is forked, one possible starting point would be creating a new python environments, for example, using conda with python=3.9

+
conda create -n gustafenv python=3.9
+conda activate gustafenv
+git clone git@github.com:<path-to-your-fork>
+cd gustaf
+git checkout -b new-feature0
+pip install -e .[all]
+
+
+
+
+

Style / implementation preferences#

+
    +
  • use if and raise instead of assert

  • +
  • no complex comprehensions: preferably fits in a line, 2 lines max if it is totally necessary

  • +
  • use first letter abbreviations in element loops: for kv in knot_vectors

  • +
  • use i, j, k, l for pure index: for i, kv in enumerate(knot_vectors)

  • +
+
+

Formatting and style check#

+

To check the format and style of your code use the following commands:

+
pip install pre-commit
+precommit run -a
+
+
+
+
+
+

Local docs build#

+

To check if documentations look as intended, you can build it locally. +Remember, spline extensions will be empty if you don’t have splinepy available.

+
pip install -r ./docs/requirements.txt
+sphinx-apidoc -f -t docs/source/_templates -o docs/source gustaf
+sphinx-build -b html docs/source docs/build
+
+
+

Now, you can check documentations by opening docs/build/index.html with a browser.

+
+

Bash script for format and documentation build checking#

+

Thanks to github, we have a CI that runs tests and checks for PRs. +However, in case you’d like to check this locally, here are sequence of commands as a function:

+
# run this at repo's root
+function gustaf_commit() {
+    pre-commit run -a
+    rm -r docs/build
+    rm docs/source/*.*.rst docs/source/gustaf.rst docs/source/modules.rst
+    sphinx-apidoc -f -t docs/source/_templates -o docs/source gustaf
+    sphinx-build -b html docs/source docs/build
+    pytest tests
+}
+
+
+
+
+
+
+ + +
+ + + + + + + +
+ + + + + + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.edges.from_data.html b/_generated/gustaf.create.edges.from_data.html new file mode 100644 index 000000000..51938acca --- /dev/null +++ b/_generated/gustaf.create.edges.from_data.html @@ -0,0 +1,818 @@ + + + + + + + + + + + gustaf.create.edges.from_data — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.edges.from_data#

+
+
+gustaf.create.edges.from_data(gus_obj, data, scale=None, data_norm=None)[source]#
+

Creates edges from gustaf object with vertices. +Data can be either multi-dim array-like data or a str describing a name +of vertex_data that belongs to given gustaf object. +len(gus_obj.vertices) number of edges will be created, where origin and +end of each edge is created using the following scheme: +[[vertices[0], vertices[0] + (array_data[0] * scale)], …]. +By default, scaling value will be +max([1, (aabb_diagonal_norm * 0.1 / max_data_norm)]). +If there’s dimension mismatch between vertices and the data, will append +zero paddings!

+
+
Parameters:
+
    +
  • gus_obj (Vertices) – gus.Vertices or its derived classes

  • +
  • data (str or (n_vertices, d) array-like) – If str, will be considered as data and search for saved vertex_data.

  • +
  • scale (float) – Absolute value.

  • +
  • data_norm (float or array-like) – If float, will be considered as max_norm of the data. Else, searches for +max value. Doesn’t enforce len to match.

  • +
+
+
Returns:
+

data_arrow

+
+
Return type:
+

Edges

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.edges.from_vertices.html b/_generated/gustaf.create.edges.from_vertices.html new file mode 100644 index 000000000..d927a6af3 --- /dev/null +++ b/_generated/gustaf.create.edges.from_vertices.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.create.edges.from_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.edges.from_vertices#

+
+
+gustaf.create.edges.from_vertices(vertices, closed=False, continuous=True)[source]#
+

Creates Edges with given vertices. If close==True, +last vertices will be connected to the first one. +If continuous==False, it assumes that every two vertices form +an independent line.

+
+
Parameters:
+
    +
  • vertices ((n, d) np.ndarray or Vertices)

  • +
  • close (bool)

  • +
  • continuous (bool)

  • +
+
+
Returns:
+

edges

+
+
Return type:
+

Edges

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.edges.html b/_generated/gustaf.create.edges.html new file mode 100644 index 000000000..aadc84e80 --- /dev/null +++ b/_generated/gustaf.create.edges.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.create.edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.edges#

+

gustaf/create/edges.py +Routines to create edges.

+

Functions

+ + + + + + + + + +

from_data(gus_obj, data[, scale, data_norm])

Creates edges from gustaf object with vertices.

from_vertices(vertices[, closed, continuous])

Creates Edges with given vertices.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.faces.box.html b/_generated/gustaf.create.faces.box.html new file mode 100644 index 000000000..24be54505 --- /dev/null +++ b/_generated/gustaf.create.faces.box.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.create.faces.box — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.faces.box#

+
+
+gustaf.create.faces.box(bounds=None, resolutions=None, simplex=False, backslash=False)[source]#
+

Create structured quadrangle or triangle block mesh.

+
+
Parameters:
+
    +
  • bounds ((2, 2) array) – Minimum and maximum coordinates.

  • +
  • resolutions – Vertex count in each dimension.

  • +
  • simplex (boolean) – If true, Mesh will be triangular (simplex).

  • +
+
+
Returns:
+

face_mesh

+
+
Return type:
+

Volumes

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.faces.edges_as_quad.html b/_generated/gustaf.create.faces.edges_as_quad.html new file mode 100644 index 000000000..1ea262c13 --- /dev/null +++ b/_generated/gustaf.create.faces.edges_as_quad.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.create.faces.edges_as_quad — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.faces.edges_as_quad#

+
+
+gustaf.create.faces.edges_as_quad(edges, scaled_normals)[source]#
+

Expands edges to hexa with given scaled_normals.

+
+
Parameters:
+
    +
  • edges (Edges) – (n, d) vertices, (m, 2) edges

  • +
  • scaled_normals ((n, d) np.ndarray) – Values will be used to subtract/add to existing vertices.

  • +
+
+
Returns:
+

expanded

+
+
Return type:
+

Faces

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.faces.html b/_generated/gustaf.create.faces.html new file mode 100644 index 000000000..92ae37521 --- /dev/null +++ b/_generated/gustaf.create.faces.html @@ -0,0 +1,796 @@ + + + + + + + + + + + gustaf.create.faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.faces#

+

gustaf/create/faces.py +Routines to create faces.

+

Functions

+ + + + + + + + + + + + + + + + + + +

box([bounds, resolutions, simplex, backslash])

Create structured quadrangle or triangle block mesh.

edges_as_quad(edges, scaled_normals)

Expands edges to hexa with given scaled_normals.

to_quad(tri)

In case current mesh is triangle surface mesh, it splits triangle faces into three quad faces by inserting another vertices in the middle of each triangle face.

to_simplex(quad[, alternate])

Given quad faces, diagonalize them to turn them into triangles.

vertex_normals(faces[, area_weighting, ...])

Computes vertex normals and saves it in vertex_data.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.faces.to_quad.html b/_generated/gustaf.create.faces.to_quad.html new file mode 100644 index 000000000..acb9d5ad2 --- /dev/null +++ b/_generated/gustaf.create.faces.to_quad.html @@ -0,0 +1,819 @@ + + + + + + + + + + + gustaf.create.faces.to_quad — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.faces.to_quad#

+
+
+gustaf.create.faces.to_quad(tri)[source]#
+

In case current mesh is triangle surface mesh, it splits triangle faces +into three quad faces by inserting another vertices in the middle of +each triangle face. Warning: mesh quality could be bad!

+

(new) Quad Face

+
Ref: (node_ind), face_ind
+
+         (2)
+         /                     / 2                 (5)/\   /\(4)
+      /  \ /                   / 0  |(6)                 /_____|___1_              (0)   (3)    (1)
+
+face_ind | node_ind
+---------|----------
+0        | 0 3 6 5
+1        | 1 4 6 3
+2        | 2 5 6 4
+
+
+
+
Parameters:
+

None

+
+
Returns:
+

quad_mesh – Only if current mesh is triangle surface mesh. Otherwise, None.

+
+
Return type:
+

Mesh

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.faces.to_simplex.html b/_generated/gustaf.create.faces.to_simplex.html new file mode 100644 index 000000000..5ce825c88 --- /dev/null +++ b/_generated/gustaf.create.faces.to_simplex.html @@ -0,0 +1,828 @@ + + + + + + + + + + + gustaf.create.faces.to_simplex — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.faces.to_simplex#

+
+
+gustaf.create.faces.to_simplex(quad, alternate=False)[source]#
+

Given quad faces, diagonalize them to turn them into triangles.

+

If quad is counterclockwise (CCW), triangle will also be CCW and +vice versa. Will return a tri-mesh, if input is triangular. +Default diagonalization looks like this:

+
(3) *---* (2)
+    |  /|
+    | / |
+    |/  |
+(0) *---* (1)
+
+
+

resembling ‘slash’.

+
(3) *---* (2)
+    |\  |
+    | \ |
+    |  \|
+(0) *---* (1)
+
+
+

resembling ‘backslash’.

+

If you want to alternate the slash-direction, set alternate-variable.

+
+
Parameters:
+
    +
  • quad (Faces) – Faces representation which is to be converted from a cubic mesh into a +simplex mesh.

  • +
  • alternate (bool) – Alternate between forward and back-slash to avoid “favored” meshing +direction (important in some analysis problem).

  • +
+
+
Returns:
+

tri – Simplexifyed mesh.

+
+
Return type:
+

Faces

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.faces.vertex_normals.html b/_generated/gustaf.create.faces.vertex_normals.html new file mode 100644 index 000000000..0d861229e --- /dev/null +++ b/_generated/gustaf.create.faces.vertex_normals.html @@ -0,0 +1,816 @@ + + + + + + + + + + + gustaf.create.faces.vertex_normals — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.faces.vertex_normals#

+
+
+gustaf.create.faces.vertex_normals(faces, area_weighting=False, angle_weighting=False, return_original_ids=False)[source]#
+

Computes vertex normals and saves it in vertex_data. +This calls inplace remove_unreferenced_vertices, but original IDs can be +retrieved using the flag return_original_ids.

+

The normals are computed on the face-centers and their contributions are +weighted and added to the vertex normals. Per default, all element faces +that are adjacent to a vertex are added with equal contributions, but it is +also possible to use weightings by area of the adjacent element +(area_weighting) or by the angle between edges at the corner vertex.

+
+
Parameters:
+
    +
  • faces (Faces)

  • +
  • area_weighting (bool (false)) – Use the element area as a weighting to its respective normal contribution

  • +
  • angle_weighting (bool (false)) – Use the angle of between element edges as a weighting to its respective +normal contribution

  • +
  • return_original_ids (bool (false)) – return the original ids in the global mesh

  • +
+
+
Returns:
+

faces – faces with vertex_data[“normals”] computed.

+
+
Return type:
+

Faces

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.html b/_generated/gustaf.create.html new file mode 100644 index 000000000..238e19ee4 --- /dev/null +++ b/_generated/gustaf.create.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.create — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + + + + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.vertices.html b/_generated/gustaf.create.vertices.html new file mode 100644 index 000000000..5a7bde5cb --- /dev/null +++ b/_generated/gustaf.create.vertices.html @@ -0,0 +1,784 @@ + + + + + + + + + + + gustaf.create.vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.vertices#

+

gustaf/create/vertices.py.

+

Routines to create vertices.

+

Functions

+ + + + + + +

raster(bounds, resolutions)

Simple wrapper of np.mgrid to extract raster points of desired bounds and resolutions.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.vertices.raster.html b/_generated/gustaf.create.vertices.raster.html new file mode 100644 index 000000000..5c9e78269 --- /dev/null +++ b/_generated/gustaf.create.vertices.raster.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.create.vertices.raster — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.vertices.raster#

+
+
+gustaf.create.vertices.raster(bounds, resolutions)[source]#
+

Simple wrapper of np.mgrid to extract raster points of desired bounds +and resolutions.

+
+
Parameters:
+
    +
  • bounds ((2, d) array-like) – float

  • +
  • resolutions ((d,) array-like or int) – int. It will be casted to int. +In case int is given, it will be repeated to match the length of +each bounds

  • +
+
+
Returns:
+

raster_vertices

+
+
Return type:
+

Vertices

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.volumes.box.html b/_generated/gustaf.create.volumes.box.html new file mode 100644 index 000000000..89e5b64df --- /dev/null +++ b/_generated/gustaf.create.volumes.box.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.create.volumes.box — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.volumes.box#

+
+
+gustaf.create.volumes.box(bounds=None, resolutions=None)[source]#
+

Create structured hexahedron block mesh.

+
+
Parameters:
+
    +
  • bounds ((2, 3) array) – Minimum and maximum coordinates.

  • +
  • resolutions – Vertex count in each dimension.

  • +
+
+
Returns:
+

volume_mesh

+
+
Return type:
+

Volumes

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.create.volumes.html b/_generated/gustaf.create.volumes.html new file mode 100644 index 000000000..4e65ecaad --- /dev/null +++ b/_generated/gustaf.create.volumes.html @@ -0,0 +1,784 @@ + + + + + + + + + + + gustaf.create.volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.create.volumes#

+

gustaf/create/volumes.py +Routines to create volumes.

+

Functions

+ + + + + + +

box([bounds, resolutions])

Create structured hexahedron block mesh.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.centers.html b/_generated/gustaf.edges.Edges.centers.html new file mode 100644 index 000000000..536162e30 --- /dev/null +++ b/_generated/gustaf.edges.Edges.centers.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.centers — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.centers#

+
+
+Edges.centers()[source]#
+

Center of elements.

+
+
Parameters:
+

None

+
+
Returns:
+

centers

+
+
Return type:
+

(n_elements, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.const_edges.html b/_generated/gustaf.edges.Edges.const_edges.html new file mode 100644 index 000000000..57b8186c0 --- /dev/null +++ b/_generated/gustaf.edges.Edges.const_edges.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.edges.Edges.const_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.const_edges#

+
+
+property Edges.const_edges#
+

Returns non-writeable version of edges.

+
+
Parameters:
+

None

+
+
Return type:
+

const_edges (n, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.const_elements.html b/_generated/gustaf.edges.Edges.const_elements.html new file mode 100644 index 000000000..372e9ca86 --- /dev/null +++ b/_generated/gustaf.edges.Edges.const_elements.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.const_elements — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.const_elements#

+
+
+property Edges.const_elements#
+

Returns non-mutable version of elements.

+
+
Parameters:
+

None

+
+
Returns:
+

non_mutable_elements

+
+
Return type:
+

(n, d) TrackedArray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.dashed.html b/_generated/gustaf.edges.Edges.dashed.html new file mode 100644 index 000000000..0e9e3a2ea --- /dev/null +++ b/_generated/gustaf.edges.Edges.dashed.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.edges.Edges.dashed — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.dashed#

+
+
+Edges.dashed(spacing=None)[source]#
+

Turn edges into dashed edges(=lines). Given spacing, it will try to +chop edges as close to it as possible. Pattern should look:

+

dashed edges

+
o--------o    o--------o    o--------o
+|<------>|             |<-->|
+   (chop length)         (chop length / 2)
+
+
+
+
Parameters:
+

spacing (float) – Default is None and it will use self.bounds_diagonal_norm() / 50

+
+
Returns:
+

dashing_edges

+
+
Return type:
+

Edges

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.edges.html b/_generated/gustaf.edges.Edges.edges.html new file mode 100644 index 000000000..d7ef1393a --- /dev/null +++ b/_generated/gustaf.edges.Edges.edges.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.edges#

+
+
+property Edges.edges#
+

Returns edges. If edges is not its original property.

+
+
Parameters:
+

None

+
+
Returns:
+

edges

+
+
Return type:
+

(n, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.elements.html b/_generated/gustaf.edges.Edges.elements.html new file mode 100644 index 000000000..5953f2007 --- /dev/null +++ b/_generated/gustaf.edges.Edges.elements.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.edges.Edges.elements — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.elements#

+
+
+property Edges.elements#
+

Returns current connectivity. A short cut in FE friendly term. +Elements mean different things for different classes: Vertices -> +vertices Edges -> edges Faces -> faces Volumes -> volumes.

+
+
Parameters:
+

None

+
+
Returns:
+

elements – int. iff elements=None

+
+
Return type:
+

(n, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.html b/_generated/gustaf.edges.Edges.html new file mode 100644 index 000000000..a5c4e61ef --- /dev/null +++ b/_generated/gustaf.edges.Edges.html @@ -0,0 +1,853 @@ + + + + + + + + + + + gustaf.edges.Edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges#

+
+
+class gustaf.edges.Edges(vertices=None, edges=None, elements=None)[source]#
+

Bases: Vertices

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Edges.centers()

Center of elements.

Edges.dashed([spacing])

Turn edges into dashed edges(=lines).

Edges.referenced_vertices()

Returns mask of referenced vertices.

Edges.remove_unreferenced_vertices()

Remove unreferenced vertices.

Edges.shrink([ratio, map_vertex_data])

Returns shrunk elements.

Edges.single_edges()

Returns indices of very unique edges: edges that appear only once.

Edges.sorted_edges()

Sort edges along axis=1.

Edges.to_vertices()

Returns Vertices obj.

Edges.unique_edges()

Returns a named tuple of unique edge info.

Edges.update_edges(*args, **kwargs)

Alias to update_elements.

Edges.update_elements(mask)

Similar to update_vertices, but for elements.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Edges.const_edges

Returns non-writeable version of edges.

Edges.const_elements

Returns non-mutable version of elements.

Edges.edges

Returns edges.

Edges.elements

Returns current connectivity.

Edges.kind

Edges.whatami

whatami?

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.kind.html b/_generated/gustaf.edges.Edges.kind.html new file mode 100644 index 000000000..fe8eeed7b --- /dev/null +++ b/_generated/gustaf.edges.Edges.kind.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.edges.Edges.kind — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.kind#

+
+
+Edges.kind = 'edge'#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.referenced_vertices.html b/_generated/gustaf.edges.Edges.referenced_vertices.html new file mode 100644 index 000000000..92c5ef4c4 --- /dev/null +++ b/_generated/gustaf.edges.Edges.referenced_vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.referenced_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.referenced_vertices#

+
+
+Edges.referenced_vertices()[source]#
+

Returns mask of referenced vertices.

+
+
Parameters:
+

None

+
+
Returns:
+

referenced

+
+
Return type:
+

(n,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.html b/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.html new file mode 100644 index 000000000..19109539b --- /dev/null +++ b/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.edges.Edges.remove_unreferenced_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.remove_unreferenced_vertices#

+
+
+Edges.remove_unreferenced_vertices()[source]#
+

Remove unreferenced vertices. Adapted from +github.com/mikedh/trimesh

+
+
Parameters:
+

None

+
+
Returns:
+

new_self

+
+
Return type:
+

type(self)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.shrink.html b/_generated/gustaf.edges.Edges.shrink.html new file mode 100644 index 000000000..a878acbfb --- /dev/null +++ b/_generated/gustaf.edges.Edges.shrink.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.edges.Edges.shrink — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.shrink#

+
+
+Edges.shrink(ratio=0.8, map_vertex_data=True)[source]#
+

Returns shrunk elements.

+
+
Parameters:
+
    +
  • ratio (float) – Default is 0.8

  • +
  • map_vertex_data (bool) – Default is True. Maps all vertex_data.

  • +
+
+
Returns:
+

s_elements – shrunk elements

+
+
Return type:
+

Elements

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.single_edges.html b/_generated/gustaf.edges.Edges.single_edges.html new file mode 100644 index 000000000..79391af19 --- /dev/null +++ b/_generated/gustaf.edges.Edges.single_edges.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.edges.Edges.single_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.single_edges#

+
+
+Edges.single_edges()[source]#
+

Returns indices of very unique edges: edges that appear only once. +For well constructed faces, this can be considered as outlines.

+
+
Parameters:
+

None

+
+
Returns:
+

outlines

+
+
Return type:
+

(m,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.sorted_edges.html b/_generated/gustaf.edges.Edges.sorted_edges.html new file mode 100644 index 000000000..59d398554 --- /dev/null +++ b/_generated/gustaf.edges.Edges.sorted_edges.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.sorted_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.sorted_edges#

+
+
+Edges.sorted_edges()[source]#
+

Sort edges along axis=1.

+
+
Parameters:
+

None

+
+
Returns:
+

edges_sorted

+
+
Return type:
+

(n_edges, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.to_vertices.html b/_generated/gustaf.edges.Edges.to_vertices.html new file mode 100644 index 000000000..1c523cf4a --- /dev/null +++ b/_generated/gustaf.edges.Edges.to_vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.to_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.to_vertices#

+
+
+Edges.to_vertices()[source]#
+

Returns Vertices obj.

+
+
Parameters:
+

None

+
+
Returns:
+

vertices

+
+
Return type:
+

Vertices

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.unique_edges.html b/_generated/gustaf.edges.Edges.unique_edges.html new file mode 100644 index 000000000..1c75e62f2 --- /dev/null +++ b/_generated/gustaf.edges.Edges.unique_edges.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.edges.Edges.unique_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.unique_edges#

+
+
+Edges.unique_edges()[source]#
+

Returns a named tuple of unique edge info. Info includes unique +values, ids of unique edges, inverse ids, count of each unique values.

+
+
Parameters:
+

None

+
+
Returns:
+

unique_info – valid attributes are {values, ids, inverse, counts}

+
+
Return type:
+

Unique2DIntegers

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.update_edges.html b/_generated/gustaf.edges.Edges.update_edges.html new file mode 100644 index 000000000..672cace48 --- /dev/null +++ b/_generated/gustaf.edges.Edges.update_edges.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.edges.Edges.update_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.update_edges#

+
+
+Edges.update_edges(*args, **kwargs)[source]#
+

Alias to update_elements.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.update_elements.html b/_generated/gustaf.edges.Edges.update_elements.html new file mode 100644 index 000000000..fd28d2b3a --- /dev/null +++ b/_generated/gustaf.edges.Edges.update_elements.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.update_elements — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.update_elements#

+
+
+Edges.update_elements(mask)[source]#
+

Similar to update_vertices, but for elements.

+
+
Parameters:
+

mask (bool or (m,) np.ndarray)

+
+
Returns:
+

new_self

+
+
Return type:
+

type(self)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.Edges.whatami.html b/_generated/gustaf.edges.Edges.whatami.html new file mode 100644 index 000000000..bf9906347 --- /dev/null +++ b/_generated/gustaf.edges.Edges.whatami.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.edges.Edges.whatami — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.Edges.whatami#

+
+
+property Edges.whatami#
+

whatami?

+
+
Parameters:
+

None

+
+
Returns:
+

whatami

+
+
Return type:
+

str

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.EdgesShowOption.html b/_generated/gustaf.edges.EdgesShowOption.html new file mode 100644 index 000000000..2d1e5c1cf --- /dev/null +++ b/_generated/gustaf.edges.EdgesShowOption.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.EdgesShowOption — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges.EdgesShowOption#

+
+
+class gustaf.edges.EdgesShowOption(helpee)[source]#
+

Bases: ShowOption

+

Show options for vertices.

+

Methods

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.edges.html b/_generated/gustaf.edges.html new file mode 100644 index 000000000..7ef20a780 --- /dev/null +++ b/_generated/gustaf.edges.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.edges#

+

gustaf/gustaf/edges.py.

+

Edges. Also known as lines.

+

Classes

+ + + + + + + + + +

Edges([vertices, edges, elements])

EdgesShowOption(helpee)

Show options for vertices.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.BC.html b/_generated/gustaf.faces.Faces.BC.html new file mode 100644 index 000000000..57f58bdfe --- /dev/null +++ b/_generated/gustaf.faces.Faces.BC.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.faces.Faces.BC — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.BC#

+
+
+Faces.BC#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.const_edges.html b/_generated/gustaf.faces.Faces.const_edges.html new file mode 100644 index 000000000..fcdf23d9c --- /dev/null +++ b/_generated/gustaf.faces.Faces.const_edges.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.faces.Faces.const_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.const_edges#

+
+
+property Faces.const_edges#
+

Returns non-writeable version of edges.

+
+
Parameters:
+

None

+
+
Return type:
+

const_edges (n, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.const_faces.html b/_generated/gustaf.faces.Faces.const_faces.html new file mode 100644 index 000000000..3c733466b --- /dev/null +++ b/_generated/gustaf.faces.Faces.const_faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.faces.Faces.const_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.const_faces#

+
+
+property Faces.const_faces#
+

Returns non-writeable view of faces.

+
+
Parameters:
+

None

+
+
Returns:
+

const_faces

+
+
Return type:
+

(n, 2

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.dashed.html b/_generated/gustaf.faces.Faces.dashed.html new file mode 100644 index 000000000..9970e1991 --- /dev/null +++ b/_generated/gustaf.faces.Faces.dashed.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.faces.Faces.dashed — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.dashed#

+
+
+Faces.dashed()#
+

Turn edges into dashed edges(=lines). Given spacing, it will try to +chop edges as close to it as possible. Pattern should look:

+

dashed edges

+
o--------o    o--------o    o--------o
+|<------>|             |<-->|
+   (chop length)         (chop length / 2)
+
+
+
+
Parameters:
+

spacing (float) – Default is None and it will use self.bounds_diagonal_norm() / 50

+
+
Returns:
+

dashing_edges

+
+
Return type:
+

Edges

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.edges.html b/_generated/gustaf.faces.Faces.edges.html new file mode 100644 index 000000000..70a2455a8 --- /dev/null +++ b/_generated/gustaf.faces.Faces.edges.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.faces.Faces.edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.edges#

+
+
+Faces.edges()[source]#
+

Edges from here aren’t main property. So this needs to be computed.

+
+
Parameters:
+

None

+
+
Returns:
+

edges

+
+
Return type:
+

(n, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.faces.html b/_generated/gustaf.faces.Faces.faces.html new file mode 100644 index 000000000..c73d6ecb1 --- /dev/null +++ b/_generated/gustaf.faces.Faces.faces.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.faces.Faces.faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.faces#

+
+
+property Faces.faces#
+

Returns faces.

+
+
Parameters:
+

None

+
+
Return type:
+

faces

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.html b/_generated/gustaf.faces.Faces.html new file mode 100644 index 000000000..d3fd781b0 --- /dev/null +++ b/_generated/gustaf.faces.Faces.html @@ -0,0 +1,850 @@ + + + + + + + + + + + gustaf.faces.Faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces#

+
+
+class gustaf.faces.Faces(vertices=None, faces=None, elements=None)[source]#
+

Bases: Edges

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Faces.dashed()

Turn edges into dashed edges(=lines).

Faces.edges()

Edges from here aren't main property.

Faces.single_faces()

Returns indices of very unique faces: faces that appear only once.

Faces.sorted_faces()

Similar to edges_sorted but for faces.

Faces.to_edges([unique])

Returns Edges obj.

Faces.to_subelements([unique])

Returns current elements represented as its boundary element class.

Faces.unique_faces()

Returns a namedtuple of unique faces info.

Faces.update_edges()

Alias to update_elements.

Faces.update_faces(*args, **kwargs)

Alias to update_elements.

Faces.whatareyou(face_obj)

classmethod that tells you if the Faces is tri or quad or invalid kind.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Faces.BC

Faces.const_edges

Returns non-writeable version of edges.

Faces.const_faces

Returns non-writeable view of faces.

Faces.faces

Returns faces.

Faces.kind

Faces.whatami

Determines whatami.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.kind.html b/_generated/gustaf.faces.Faces.kind.html new file mode 100644 index 000000000..d7f7b4095 --- /dev/null +++ b/_generated/gustaf.faces.Faces.kind.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.faces.Faces.kind — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.kind#

+
+
+Faces.kind = 'face'#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.single_faces.html b/_generated/gustaf.faces.Faces.single_faces.html new file mode 100644 index 000000000..edcd6a091 --- /dev/null +++ b/_generated/gustaf.faces.Faces.single_faces.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.faces.Faces.single_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.single_faces#

+
+
+Faces.single_faces()[source]#
+

Returns indices of very unique faces: faces that appear only once. +For well constructed volumes, this can be considered as surfaces.

+
+
Parameters:
+

None

+
+
Returns:
+

single_faces

+
+
Return type:
+

(m,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.sorted_faces.html b/_generated/gustaf.faces.Faces.sorted_faces.html new file mode 100644 index 000000000..2e76e4acb --- /dev/null +++ b/_generated/gustaf.faces.Faces.sorted_faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.faces.Faces.sorted_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.sorted_faces#

+
+
+Faces.sorted_faces()[source]#
+

Similar to edges_sorted but for faces.

+
+
Parameters:
+

None

+
+
Returns:
+

sorted_faces

+
+
Return type:
+

(self.faces.shape) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.to_edges.html b/_generated/gustaf.faces.Faces.to_edges.html new file mode 100644 index 000000000..416752d4a --- /dev/null +++ b/_generated/gustaf.faces.Faces.to_edges.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.faces.Faces.to_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.to_edges#

+
+
+Faces.to_edges(unique=True)[source]#
+

Returns Edges obj.

+
+
Parameters:
+

unique (bool) – Default is True. If True, only takes unique edges.

+
+
Returns:
+

edges

+
+
Return type:
+

Edges

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.to_subelements.html b/_generated/gustaf.faces.Faces.to_subelements.html new file mode 100644 index 000000000..eddcaf7f8 --- /dev/null +++ b/_generated/gustaf.faces.Faces.to_subelements.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.faces.Faces.to_subelements — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.to_subelements#

+
+
+Faces.to_subelements(unique=True)[source]#
+

Returns current elements represented as its boundary element class. +For faces, this is equivalent to to_edges(). +For volumes, to_faces().

+
+
Parameters:
+

unique (bool) – Default is True. If True, only takes unique edges.

+
+
Returns:
+

subelements

+
+
Return type:
+

boundary class

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.unique_faces.html b/_generated/gustaf.faces.Faces.unique_faces.html new file mode 100644 index 000000000..046a2ac28 --- /dev/null +++ b/_generated/gustaf.faces.Faces.unique_faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.faces.Faces.unique_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.unique_faces#

+
+
+Faces.unique_faces()[source]#
+

Returns a namedtuple of unique faces info. Similar to unique_edges.

+
+
Parameters:
+

None

+
+
Returns:
+

unique_info – valid attributes are {values, ids, inverse, counts}

+
+
Return type:
+

Unique2DIntegers

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.update_edges.html b/_generated/gustaf.faces.Faces.update_edges.html new file mode 100644 index 000000000..bc7b61eae --- /dev/null +++ b/_generated/gustaf.faces.Faces.update_edges.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.faces.Faces.update_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.update_edges#

+
+
+Faces.update_edges()#
+

Alias to update_elements.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.update_faces.html b/_generated/gustaf.faces.Faces.update_faces.html new file mode 100644 index 000000000..2431748ce --- /dev/null +++ b/_generated/gustaf.faces.Faces.update_faces.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.faces.Faces.update_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.update_faces#

+
+
+Faces.update_faces(*args, **kwargs)[source]#
+

Alias to update_elements.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.whatami.html b/_generated/gustaf.faces.Faces.whatami.html new file mode 100644 index 000000000..303958a10 --- /dev/null +++ b/_generated/gustaf.faces.Faces.whatami.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.faces.Faces.whatami — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.whatami#

+
+
+property Faces.whatami#
+

Determines whatami.

+
+
Parameters:
+

None

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.Faces.whatareyou.html b/_generated/gustaf.faces.Faces.whatareyou.html new file mode 100644 index 000000000..65d373aae --- /dev/null +++ b/_generated/gustaf.faces.Faces.whatareyou.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.faces.Faces.whatareyou — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.Faces.whatareyou#

+
+
+classmethod Faces.whatareyou(face_obj)[source]#
+

classmethod that tells you if the Faces is tri or quad or invalid +kind.

+
+
Parameters:
+

face_obj (Faces)

+
+
Returns:
+

whatareyou

+
+
Return type:
+

str

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.FacesShowOption.html b/_generated/gustaf.faces.FacesShowOption.html new file mode 100644 index 000000000..8b419bb9f --- /dev/null +++ b/_generated/gustaf.faces.FacesShowOption.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.faces.FacesShowOption — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces.FacesShowOption#

+
+
+class gustaf.faces.FacesShowOption(helpee)[source]#
+

Bases: ShowOption

+

Show options for vertices.

+

Methods

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.faces.html b/_generated/gustaf.faces.html new file mode 100644 index 000000000..20f4ace28 --- /dev/null +++ b/_generated/gustaf.faces.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.faces#

+

gustaf/gustaf/faces.py.

+

Classes

+ + + + + + + + + +

Faces([vertices, faces, elements])

FacesShowOption(helpee)

Show options for vertices.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.ComputedData.depends_on.html b/_generated/gustaf.helpers.data.ComputedData.depends_on.html new file mode 100644 index 000000000..b2454331f --- /dev/null +++ b/_generated/gustaf.helpers.data.ComputedData.depends_on.html @@ -0,0 +1,811 @@ + + + + + + + + + + + gustaf.helpers.data.ComputedData.depends_on — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.ComputedData.depends_on#

+
+
+classmethod ComputedData.depends_on(var_names, make_property=False)[source]#
+

Decorator as classmethod.

+

checks if the key should be computed. Two cases, where the answer is +yes:

+
    +
  1. +
    there’s modification on arrays that the key depend on.

    ->erases all other

    +
    +
    +
  2. +
  3. is corresponding value None?

  4. +
+

Supports multi-dependency

+
+
Parameters:
+
    +
  • var_name (list)

  • +
  • make_property

  • +
+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.ComputedData.html b/_generated/gustaf.helpers.data.ComputedData.html new file mode 100644 index 000000000..f5a67a863 --- /dev/null +++ b/_generated/gustaf.helpers.data.ComputedData.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.data.ComputedData — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.ComputedData#

+
+
+class gustaf.helpers.data.ComputedData(helpee, **_kwargs)[source]#
+

Bases: DataHolder

+

Methods

+ + + + + + +

ComputedData.depends_on(var_names[, ...])

Decorator as classmethod.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.ComputedMeshData.html b/_generated/gustaf.helpers.data.ComputedMeshData.html new file mode 100644 index 000000000..4c557faab --- /dev/null +++ b/_generated/gustaf.helpers.data.ComputedMeshData.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.helpers.data.ComputedMeshData — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.ComputedMeshData#

+
+
+class gustaf.helpers.data.ComputedMeshData(helpee, **_kwargs)[source]#
+

Bases: ComputedData

+

A class to hold computed-mesh-data.

+

Subclassed to keep its own dependency info.

+

Methods

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.clear.html b/_generated/gustaf.helpers.data.DataHolder.clear.html new file mode 100644 index 000000000..30f967c83 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.clear.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.clear — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.clear#

+
+
+DataHolder.clear()[source]#
+

Clears saved data by reassigning new dict

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.get.html b/_generated/gustaf.helpers.data.DataHolder.get.html new file mode 100644 index 000000000..ce861c8d5 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.get.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.get — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.get#

+
+
+DataHolder.get(key, default_values=None)[source]#
+

Returns stored item if the key exists. Else, given default value. If +the key exist, default value always exists, since it is initialized +that way.

+
+
Parameters:
+
    +
  • key (str)

  • +
  • default_values (object)

  • +
+
+
Returns:
+

value

+
+
Return type:
+

object

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.html b/_generated/gustaf.helpers.data.DataHolder.html new file mode 100644 index 000000000..aa4179c5a --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.html @@ -0,0 +1,818 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder#

+
+
+class gustaf.helpers.data.DataHolder(helpee)[source]#
+

Bases: HelperBase

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + +

DataHolder.clear()

Clears saved data by reassigning new dict

DataHolder.get(key[, default_values])

Returns stored item if the key exists.

DataHolder.items()

Returns items of data holding dict.

DataHolder.keys()

Returns keys of data holding dict.

DataHolder.pop(key[, default])

Applied pop() to saved data

DataHolder.update(**kwargs)

Updates given kwargs using __setitem__.

DataHolder.values()

Returns values of data holding dict.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.items.html b/_generated/gustaf.helpers.data.DataHolder.items.html new file mode 100644 index 000000000..64534db64 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.items.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.items — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.items#

+
+
+DataHolder.items()[source]#
+

Returns items of data holding dict.

+
+
Returns:
+

values

+
+
Return type:
+

dict_values

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.keys.html b/_generated/gustaf.helpers.data.DataHolder.keys.html new file mode 100644 index 000000000..15e9f629d --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.keys.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.keys — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.keys#

+
+
+DataHolder.keys()[source]#
+

Returns keys of data holding dict.

+
+
Returns:
+

keys

+
+
Return type:
+

dict_keys

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.pop.html b/_generated/gustaf.helpers.data.DataHolder.pop.html new file mode 100644 index 000000000..106eca0c8 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.pop.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.pop — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.pop#

+
+
+DataHolder.pop(key, default=None)[source]#
+

Applied pop() to saved data

+
+
Parameters:
+
    +
  • key (str)

  • +
  • default (object)

  • +
+
+
Returns:
+

value

+
+
Return type:
+

object

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.update.html b/_generated/gustaf.helpers.data.DataHolder.update.html new file mode 100644 index 000000000..c881fa375 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.update.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.update — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.update#

+
+
+DataHolder.update(**kwargs)[source]#
+

Updates given kwargs using __setitem__.

+
+
Parameters:
+

**kwargs (kwargs)

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.DataHolder.values.html b/_generated/gustaf.helpers.data.DataHolder.values.html new file mode 100644 index 000000000..4a2c50349 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.values.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.values — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.DataHolder.values#

+
+
+DataHolder.values()[source]#
+

Returns values of data holding dict.

+
+
Returns:
+

values

+
+
Return type:
+

dict_values

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.TrackedArray.copy.html b/_generated/gustaf.helpers.data.TrackedArray.copy.html new file mode 100644 index 000000000..4bad1e652 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.copy.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray.copy — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.TrackedArray.copy#

+
+
+TrackedArray.copy(*args, **kwargs)[source]#
+

copy creates regular numpy array

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.TrackedArray.html b/_generated/gustaf.helpers.data.TrackedArray.html new file mode 100644 index 000000000..d2e1a4044 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.html @@ -0,0 +1,813 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.TrackedArray#

+
+
+class gustaf.helpers.data.TrackedArray[source]#
+

Bases: ndarray

+

numpy array object that keeps mirroring inplace changes to the source. +Meant to help control_points.

+

Methods

+ + + + + + + + + +

TrackedArray.copy(*args, **kwargs)

copy creates regular numpy array

TrackedArray.view(*args, **kwargs)

Set writeable flags to False for the view.

+

Attributes

+ + + + + + +

TrackedArray.modified

Modified flag getter

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.TrackedArray.modified.html b/_generated/gustaf.helpers.data.TrackedArray.modified.html new file mode 100644 index 000000000..7a8969536 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.modified.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray.modified — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.TrackedArray.modified#

+
+
+property TrackedArray.modified#
+

Modified flag getter

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.TrackedArray.view.html b/_generated/gustaf.helpers.data.TrackedArray.view.html new file mode 100644 index 000000000..9073af7e7 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.view.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray.view — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.TrackedArray.view#

+
+
+TrackedArray.view(*args, **kwargs)[source]#
+

Set writeable flags to False for the view.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DFloats.html b/_generated/gustaf.helpers.data.Unique2DFloats.html new file mode 100644 index 000000000..d5688b2d4 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.html @@ -0,0 +1,818 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DFloats#

+
+
+class gustaf.helpers.data.Unique2DFloats(values, ids, inverse, intersection)#
+

Bases: tuple

+

namedtuple to hold unique information of float type arrays. +Note that for float types, “close enough” might be a better name than unique. +This way, all tracked arrays, as long as they are 2D, have a dot separated +syntax to access unique info. For example, mesh.unique_vertices.ids.

+

Methods

+ + + +
+

Attributes

+ + + + + + + + + + + + + + + +

Unique2DFloats.ids

(n, d) np.ndarray Field number 1

Unique2DFloats.intersection

(m) list of list given original array's index, returns overlapping arrays, including itself.

Unique2DFloats.inverse

(n, d) np.ndarray Field number 2

Unique2DFloats.values

(n, d) np.ndarray Field number 0

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DFloats.ids.html b/_generated/gustaf.helpers.data.Unique2DFloats.ids.html new file mode 100644 index 000000000..3dddc6ee1 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.ids.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.ids — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DFloats.ids#

+
+
+Unique2DFloats.ids#
+

(n, d) np.ndarray +Field number 1

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DFloats.intersection.html b/_generated/gustaf.helpers.data.Unique2DFloats.intersection.html new file mode 100644 index 000000000..8552a2a49 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.intersection.html @@ -0,0 +1,794 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.intersection — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DFloats.intersection#

+
+
+Unique2DFloats.intersection#
+

(m) list of list +given original array’s index, returns overlapping arrays, including itself. +Field number 3

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DFloats.inverse.html b/_generated/gustaf.helpers.data.Unique2DFloats.inverse.html new file mode 100644 index 000000000..812365084 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.inverse.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.inverse — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DFloats.inverse#

+
+
+Unique2DFloats.inverse#
+

(n, d) np.ndarray +Field number 2

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DFloats.values.html b/_generated/gustaf.helpers.data.Unique2DFloats.values.html new file mode 100644 index 000000000..75f22a677 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.values.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.values — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DFloats.values#

+
+
+Unique2DFloats.values#
+

(n, d) np.ndarray +Field number 0

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DIntegers.counts.html b/_generated/gustaf.helpers.data.Unique2DIntegers.counts.html new file mode 100644 index 000000000..ef027166e --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.counts.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.counts — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DIntegers.counts#

+
+
+Unique2DIntegers.counts#
+

(n) np.ndarray +Field number 3

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DIntegers.html b/_generated/gustaf.helpers.data.Unique2DIntegers.html new file mode 100644 index 000000000..09d376b78 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.html @@ -0,0 +1,816 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DIntegers#

+
+
+class gustaf.helpers.data.Unique2DIntegers(values, ids, inverse, counts)#
+

Bases: tuple

+

namedtuple to hold unique information of integer type arrays. +Similar approach to Unique2DFloats.

+

Methods

+ + + +
+

Attributes

+ + + + + + + + + + + + + + + +

Unique2DIntegers.counts

(n) np.ndarray Field number 3

Unique2DIntegers.ids

(n) np.ndarray Field number 1

Unique2DIntegers.inverse

(m) np.ndarray Field number 2

Unique2DIntegers.values

(n, d) np.ndarray Field number 0

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DIntegers.ids.html b/_generated/gustaf.helpers.data.Unique2DIntegers.ids.html new file mode 100644 index 000000000..5f92f024c --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.ids.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.ids — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DIntegers.ids#

+
+
+Unique2DIntegers.ids#
+

(n) np.ndarray +Field number 1

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.html b/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.html new file mode 100644 index 000000000..dd0417566 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.inverse — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DIntegers.inverse#

+
+
+Unique2DIntegers.inverse#
+

(m) np.ndarray +Field number 2

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.Unique2DIntegers.values.html b/_generated/gustaf.helpers.data.Unique2DIntegers.values.html new file mode 100644 index 000000000..819718b57 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.values.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.values — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.Unique2DIntegers.values#

+
+
+Unique2DIntegers.values#
+

(n, d) np.ndarray +Field number 0

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.VertexData.as_arrow.html b/_generated/gustaf.helpers.data.VertexData.as_arrow.html new file mode 100644 index 000000000..ee15c597f --- /dev/null +++ b/_generated/gustaf.helpers.data.VertexData.as_arrow.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.helpers.data.VertexData.as_arrow — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.VertexData.as_arrow#

+
+
+VertexData.as_arrow(key, default=None, raise_=True)[source]#
+

Returns an array as is, only if it is showable as arrow.

+
+
Parameters:
+
    +
  • key (str)

  • +
  • default (object)

  • +
  • raise (bool)

  • +
+
+
Returns:
+

data

+
+
Return type:
+

(n, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.VertexData.as_scalar.html b/_generated/gustaf.helpers.data.VertexData.as_scalar.html new file mode 100644 index 000000000..1f37a729b --- /dev/null +++ b/_generated/gustaf.helpers.data.VertexData.as_scalar.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.helpers.data.VertexData.as_scalar — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.VertexData.as_scalar#

+
+
+VertexData.as_scalar(key, default=None)[source]#
+

Returns scalar version of requested data. If it is already a scalar, +will return as is. Else, will return a norm. using np.linalg.norm().

+
+
Parameters:
+
    +
  • key (str)

  • +
  • default (object)

  • +
+
+
Returns:
+

data_as_scalar

+
+
Return type:
+

(n, 1) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.VertexData.html b/_generated/gustaf.helpers.data.VertexData.html new file mode 100644 index 000000000..9ca6c1b93 --- /dev/null +++ b/_generated/gustaf.helpers.data.VertexData.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.helpers.data.VertexData — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.VertexData#

+
+
+class gustaf.helpers.data.VertexData(helpee)[source]#
+

Bases: DataHolder

+

Minimal manager for vertex data. Checks input array size, transforms +data on request. __setitem__ and __getitem__ will perform length checks. +key(), values(), items(), and get() will return whatever is currently +stored.

+

gustaf supports two kinds of data representation: scalar-data with cmap +and vector-data with arrows.

+

Methods

+ + + + + + + + + +

VertexData.as_arrow(key[, default, raise_])

Returns an array as is, only if it is showable as arrow.

VertexData.as_scalar(key[, default])

Returns scalar version of requested data.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.html b/_generated/gustaf.helpers.data.html new file mode 100644 index 000000000..828807408 --- /dev/null +++ b/_generated/gustaf.helpers.data.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.helpers.data — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data#

+

gustaf/gustaf/helpers/data.py.

+

Helps helpee to manage data. Some useful data structures.

+

Functions

+ + + + + + +

make_tracked_array(array[, dtype, copy])

Motivated by nice implementations of trimesh (see LICENSE.txt).

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + +

ComputedData(helpee, **_kwargs)

ComputedMeshData(helpee, **_kwargs)

A class to hold computed-mesh-data.

DataHolder(helpee)

TrackedArray

numpy array object that keeps mirroring inplace changes to the source.

Unique2DFloats(values, ids, inverse, ...)

namedtuple to hold unique information of float type arrays.

Unique2DIntegers(values, ids, inverse, counts)

namedtuple to hold unique information of integer type arrays.

VertexData(helpee)

Minimal manager for vertex data.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.data.make_tracked_array.html b/_generated/gustaf.helpers.data.make_tracked_array.html new file mode 100644 index 000000000..49d6c0bfd --- /dev/null +++ b/_generated/gustaf.helpers.data.make_tracked_array.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.helpers.data.make_tracked_array — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.data.make_tracked_array#

+
+
+gustaf.helpers.data.make_tracked_array(array, dtype=None, copy=True)[source]#
+

Motivated by nice implementations of trimesh (see LICENSE.txt). +https://github.com/mikedh/trimesh/blob/main/trimesh/caching.py.

+

Factory-like wrapper function for TrackedArray. +If you want to use TrackedArray, it is recommended to use this function.

+
+
Parameters:
+
    +
  • array (array- like object) – To be turned into a TrackedArray

  • +
  • dtype (np.dtype) – Which dtype to use for the array

  • +
  • copy (bool) – Default is True. copy if True.

  • +
+
+
Returns:
+

tracked – Contains input array data

+
+
Return type:
+

TrackedArray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.html b/_generated/gustaf.helpers.html new file mode 100644 index 000000000..3e3bc621e --- /dev/null +++ b/_generated/gustaf.helpers.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + + + + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.html b/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.html new file mode 100644 index 000000000..5877f8d3e --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.clear — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook.K3DPlotterN.clear#

+
+
+K3DPlotterN.clear(*args, **kwargs)[source]#
+

Clear the plotters.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.K3DPlotterN.close.html b/_generated/gustaf.helpers.notebook.K3DPlotterN.close.html new file mode 100644 index 000000000..e08a2d48c --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.close.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.close — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook.K3DPlotterN.close#

+
+
+K3DPlotterN.close()[source]#
+

Closes all vedo.Plotters

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.K3DPlotterN.display.html b/_generated/gustaf.helpers.notebook.K3DPlotterN.display.html new file mode 100644 index 000000000..371e17890 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.display.html @@ -0,0 +1,794 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.display — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook.K3DPlotterN.display#

+
+
+K3DPlotterN.display(close=True)[source]#
+

Display the plotter.

+

This is needed in case the plotter is the last thing in a cell. In that +case the IPython will try to call this function to display this.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.K3DPlotterN.html b/_generated/gustaf.helpers.notebook.K3DPlotterN.html new file mode 100644 index 000000000..804d7b076 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.html @@ -0,0 +1,817 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook.K3DPlotterN#

+
+
+class gustaf.helpers.notebook.K3DPlotterN(**kwargs: Any)[source]#
+

Bases: GridspecLayout, GustafBase

+

Helper to plot in notebooks with k3d.

+

Sets up K3D plotter especially if multiple plots are to be shown in the +notebook.

+

Methods

+ + + + + + + + + + + + + + + +

K3DPlotterN.clear(*args, **kwargs)

Clear the plotters.

K3DPlotterN.close()

Closes all vedo.Plotters

K3DPlotterN.display([close])

Display the plotter.

K3DPlotterN.show(list_of_showables, at, ...)

Add the showables to the renderer at the given location.

+

Attributes

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.K3DPlotterN.show.html b/_generated/gustaf.helpers.notebook.K3DPlotterN.show.html new file mode 100644 index 000000000..4f774b8dd --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.show.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.show — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook.K3DPlotterN.show#

+
+
+K3DPlotterN.show(list_of_showables, at, interactive, camera, axes, *args, **kwargs)[source]#
+

Add the showables to the renderer at the given location.

+
+
Parameters:
+
    +
  • list_of_showables (Any)

  • +
  • at (int) – Render id.

  • +
  • interactive (bool) – See vedo.Plotter.show for details.

  • +
  • camera (Any) – See vedo.Plotter.show for details.

  • +
  • axes (bool) – Add axes to the plot. Will also cast int to bool.

  • +
+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.get_shape.html b/_generated/gustaf.helpers.notebook.get_shape.html new file mode 100644 index 000000000..d890e77b4 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.get_shape.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.helpers.notebook.get_shape — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook.get_shape#

+
+
+gustaf.helpers.notebook.get_shape(N, x, y)[source]#
+

Taken verbatim from vedo plotter:show function.

+
+
Parameters:
+
    +
  • N (_type_) – _description_

  • +
  • x (_type_) – _description_

  • +
  • y (_type_) – _description_

  • +
+
+
Returns:
+

_description_

+
+
Return type:
+

_type_

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.notebook.html b/_generated/gustaf.helpers.notebook.html new file mode 100644 index 000000000..57eb0c4ec --- /dev/null +++ b/_generated/gustaf.helpers.notebook.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.notebook — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.notebook#

+

gustaf/gustaf/helpers/notebook.py.

+

Enables the plotting in ipynb with k3d.

+

There are no import guards since they are in the place where this module is +imported. This should be enough since I do not think that this module +will/should be used outside this place.

+

Functions

+ + + + + + +

get_shape(N, x, y)

Taken verbatim from vedo plotter:show function.

+

Classes

+ + + + + + +

K3DPlotterN(**kwargs)

Helper to plot in notebooks with k3d.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.Option.allowed_types.html b/_generated/gustaf.helpers.options.Option.allowed_types.html new file mode 100644 index 000000000..1930ff3fe --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.allowed_types.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.Option.allowed_types — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.Option.allowed_types#

+
+
+Option.allowed_types#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.Option.backends.html b/_generated/gustaf.helpers.options.Option.backends.html new file mode 100644 index 000000000..edfe9ba70 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.backends.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.Option.backends — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.Option.backends#

+
+
+Option.backends#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.Option.default.html b/_generated/gustaf.helpers.options.Option.default.html new file mode 100644 index 000000000..dedd2da54 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.default.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.Option.default — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.Option.default#

+
+
+Option.default#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.Option.description.html b/_generated/gustaf.helpers.options.Option.description.html new file mode 100644 index 000000000..3247928f2 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.description.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.Option.description — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.Option.description#

+
+
+Option.description#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.Option.html b/_generated/gustaf.helpers.options.Option.html new file mode 100644 index 000000000..ac3a97120 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.html @@ -0,0 +1,829 @@ + + + + + + + + + + + gustaf.helpers.options.Option — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.Option#

+
+
+class gustaf.helpers.options.Option(backends, key, description, allowed_types, default=None)[source]#
+

Bases: object

+

Minimal Class to hold each options. Mainly to replace nested dict.

+
+
Parameters:
+
    +
  • backends (set) – set of strings.

  • +
  • key (str)

  • +
  • description (str)

  • +
  • allowed_types (set) – set of types

  • +
  • default (one of allwed_types) – Optional. Default is None

  • +
+
+
+

Methods

+ + + +
+

Attributes

+ + + + + + + + + + + + + + + + + + +

Option.backends

Option.key

Option.description

Option.allowed_types

Option.default

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.Option.key.html b/_generated/gustaf.helpers.options.Option.key.html new file mode 100644 index 000000000..f09537604 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.key.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.Option.key — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.Option.key#

+
+
+Option.key#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.SetDefault.default.html b/_generated/gustaf.helpers.options.SetDefault.default.html new file mode 100644 index 000000000..6659f563e --- /dev/null +++ b/_generated/gustaf.helpers.options.SetDefault.default.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.SetDefault.default — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.SetDefault.default#

+
+
+SetDefault.default#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.SetDefault.html b/_generated/gustaf.helpers.options.SetDefault.html new file mode 100644 index 000000000..0c56704c8 --- /dev/null +++ b/_generated/gustaf.helpers.options.SetDefault.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.helpers.options.SetDefault — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.SetDefault#

+
+
+class gustaf.helpers.options.SetDefault(key, default)[source]#
+

Bases: object

+

Default setter object. Can use as argument in make_valid_options

+

Methods

+ + + +
+

Attributes

+ + + + + + + + + +

SetDefault.key

SetDefault.default

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.SetDefault.key.html b/_generated/gustaf.helpers.options.SetDefault.key.html new file mode 100644 index 000000000..680f4924c --- /dev/null +++ b/_generated/gustaf.helpers.options.SetDefault.key.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.helpers.options.SetDefault.key — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.SetDefault.key#

+
+
+SetDefault.key#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.clear.html b/_generated/gustaf.helpers.options.ShowOption.clear.html new file mode 100644 index 000000000..104326da0 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.clear.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.clear — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.clear#

+
+
+ShowOption.clear()[source]#
+

Clears all the options.

+
+
Parameters:
+

None

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.html b/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.html new file mode 100644 index 000000000..a7c196ab6 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.copy_valid_options — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.copy_valid_options#

+
+
+ShowOption.copy_valid_options(copy_to, keys=None)[source]#
+

Copies valid option to other show_option. Simply iterates and tries.

+
+
Parameters:
+
    +
  • copy_to (ShowOption)

  • +
  • keys (tuple or list) – Can specify keys

  • +
+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.get.html b/_generated/gustaf.helpers.options.ShowOption.get.html new file mode 100644 index 000000000..7c1e0bd1f --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.get.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.get — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.get#

+
+
+ShowOption.get(key, default=None)[source]#
+

Gets value from key and default. Similar to dict.get(), +but this is always safe, as it will always return None

+
+
Parameters:
+
    +
  • key (stir)

  • +
  • default (object)

  • +
+
+
Returns:
+

values

+
+
Return type:
+

object

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.html b/_generated/gustaf.helpers.options.ShowOption.html new file mode 100644 index 000000000..7d97d3d16 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.html @@ -0,0 +1,830 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption#

+
+
+class gustaf.helpers.options.ShowOption(helpee)[source]#
+

Bases: HelperBase

+

Behaves similar to dict, but will only accept a set of options that’s +applicable to the helpee class. Intended use is to create a +subclass that would define valid options for helpee. +Options should be described by Option object. +Helps all the way up to initializing backend showables up to their backend +specific common routines. ShowOption and ShowManager in a sense.

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ShowOption.clear()

Clears all the options.

ShowOption.copy_valid_options(copy_to[, keys])

Copies valid option to other show_option.

ShowOption.get(key[, default])

Gets value from key and default.

ShowOption.items()

Registered option items.

ShowOption.keys()

Registered option keys.

ShowOption.pop(*args, **kwargs)

Calls pop() on current options

ShowOption.update(**kwargs)

Calls __setitem__ iteratively for validity check.

ShowOption.valid_keys()

Returns valid keys.

ShowOption.values()

Registered option values.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.items.html b/_generated/gustaf.helpers.options.ShowOption.items.html new file mode 100644 index 000000000..6db40a098 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.items.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.items — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.items#

+
+
+ShowOption.items()[source]#
+

Registered option items.

+
+
Parameters:
+

None

+
+
Returns:
+

items

+
+
Return type:
+

dict_items

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.keys.html b/_generated/gustaf.helpers.options.ShowOption.keys.html new file mode 100644 index 000000000..bd93b77ef --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.keys.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.keys — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.keys#

+
+
+ShowOption.keys()[source]#
+

Registered option keys.

+
+
Parameters:
+

None

+
+
Returns:
+

keys

+
+
Return type:
+

dict_keys

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.pop.html b/_generated/gustaf.helpers.options.ShowOption.pop.html new file mode 100644 index 000000000..9694f5aa9 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.pop.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.pop — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.pop#

+
+
+ShowOption.pop(*args, **kwargs)[source]#
+

Calls pop() on current options

+
+
Parameters:
+

None

+
+
Returns:
+

value

+
+
Return type:
+

object

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.update.html b/_generated/gustaf.helpers.options.ShowOption.update.html new file mode 100644 index 000000000..782fdb975 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.update.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.update — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.update#

+
+
+ShowOption.update(**kwargs)[source]#
+

Calls __setitem__ iteratively for validity check.

+
+
Parameters:
+

**kwargs (kwargs)

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.valid_keys.html b/_generated/gustaf.helpers.options.ShowOption.valid_keys.html new file mode 100644 index 000000000..76be25128 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.valid_keys.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.valid_keys — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.valid_keys#

+
+
+ShowOption.valid_keys()[source]#
+

Returns valid keys.

+
+
Parameters:
+

None

+
+
Returns:
+

valid_keys

+
+
Return type:
+

dict_keys

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.ShowOption.values.html b/_generated/gustaf.helpers.options.ShowOption.values.html new file mode 100644 index 000000000..9ba548fc1 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.values.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.values — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.ShowOption.values#

+
+
+ShowOption.values()[source]#
+

Registered option values.

+
+
Parameters:
+

None

+
+
Returns:
+

keys

+
+
Return type:
+

dict_values

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.html b/_generated/gustaf.helpers.options.html new file mode 100644 index 000000000..6dac0c106 --- /dev/null +++ b/_generated/gustaf.helpers.options.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options#

+

gustaf/gustaf/helpers/options.py

+

Classes to help organize options.

+

Functions

+ + + + + + +

make_valid_options(*options)

Forms valid options.

+

Classes

+ + + + + + + + + + + + +

Option(backends, key, description, allowed_types)

Minimal Class to hold each options.

SetDefault(key, default)

Default setter object.

ShowOption(helpee)

Behaves similar to dict, but will only accept a set of options that's applicable to the helpee class.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.options.make_valid_options.html b/_generated/gustaf.helpers.options.make_valid_options.html new file mode 100644 index 000000000..d0b9cabb3 --- /dev/null +++ b/_generated/gustaf.helpers.options.make_valid_options.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.options.make_valid_options — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.options.make_valid_options#

+
+
+gustaf.helpers.options.make_valid_options(*options)[source]#
+

Forms valid options. Should run only once during module loading.

+
+
Parameters:
+

*options (Option)

+
+
Returns:
+

valid_options

+
+
Return type:
+

dict()

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.html b/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.html new file mode 100644 index 000000000..122aaba1d --- /dev/null +++ b/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.helpers.raise_if.ModuleImportRaiser — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.raise_if.ModuleImportRaiser#

+
+
+class gustaf.helpers.raise_if.ModuleImportRaiser(lib_name: str, error_message: str | None = None)[source]#
+

Bases: object

+

Mock imports optional modules if they are not installed.

+

Class used to have better import error handling in the case that a +package package is not installed. This is necessary due to that some +packages are not a dependency of gustaf, but some parts require +them to function. Examples are splinepy and vedo.

+

Methods

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.raise_if.html b/_generated/gustaf.helpers.raise_if.html new file mode 100644 index 000000000..ba870e167 --- /dev/null +++ b/_generated/gustaf.helpers.raise_if.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.raise_if — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.raise_if#

+

gustaf/gustaf/helpers/raise_if.py.

+

Collection of wrapper functions/classes that raises Error with certain +behavior

+

Functions

+ + + + + + +

invalid_inherited_attr(attr_name, qualname)

Returns a function that would behave the same as given function, but would raise AttributeError.

+

Classes

+ + + + + + +

ModuleImportRaiser(lib_name[, error_message])

Mock imports optional modules if they are not installed.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.html b/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.html new file mode 100644 index 000000000..4d597bb0e --- /dev/null +++ b/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.helpers.raise_if.invalid_inherited_attr — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.helpers.raise_if.invalid_inherited_attr#

+
+
+gustaf.helpers.raise_if.invalid_inherited_attr(attr_name, qualname, property_=False)[source]#
+

Returns a function that would behave the same as given function, but +would raise AttributeError. This needs to be defined in class level.

+
+
Parameters:
+
    +
  • func ((function)) – _description_

  • +
  • qualname ((class)) – _description_

  • +
  • property ((bool, optional)) – is this function a property?. Defaults to False.

  • +
+
+
Returns:
+

raiser – behaves same as func if property_ is correctly defined

+
+
Return type:
+

function

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.html b/_generated/gustaf.html new file mode 100644 index 000000000..2c539aa5f --- /dev/null +++ b/_generated/gustaf.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + +
+ +
+ + +
+
+ + + + + + + + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.default.html b/_generated/gustaf.io.default.html new file mode 100644 index 000000000..84a877015 --- /dev/null +++ b/_generated/gustaf.io.default.html @@ -0,0 +1,782 @@ + + + + + + + + + + + gustaf.io.default — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.default#

+

Functions

+ + + + + + +

load(fname)

Load function for all supported file formats.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.default.load.html b/_generated/gustaf.io.default.load.html new file mode 100644 index 000000000..b4a4846f2 --- /dev/null +++ b/_generated/gustaf.io.default.load.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.io.default.load — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.default.load#

+
+
+gustaf.io.default.load(fname)[source]#
+

Load function for all supported file formats.

+

This function tries to guess the correct io module for the given file.

+
+
Parameters:
+

fname (Union[str, pathlib.Path]) – Name of the file to be loaded.

+
+
Returns:
+

Loaded mesh.

+
+
Return type:
+

MESH_TYPES

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.html b/_generated/gustaf.io.html new file mode 100644 index 000000000..482998d40 --- /dev/null +++ b/_generated/gustaf.io.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.io — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + + + + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.ioutils.abs_fname.html b/_generated/gustaf.io.ioutils.abs_fname.html new file mode 100644 index 000000000..13a30db02 --- /dev/null +++ b/_generated/gustaf.io.ioutils.abs_fname.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.io.ioutils.abs_fname — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.ioutils.abs_fname#

+
+
+gustaf.io.ioutils.abs_fname(fname)[source]#
+

Checks if fname is abs. If not, returns abs. Tilde safe.

+
+
Parameters:
+

fname (str)

+
+
Returns:
+

abs_fname – Maybe same as fname, maybe not.

+
+
Return type:
+

str

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.ioutils.check_and_makedirs.html b/_generated/gustaf.io.ioutils.check_and_makedirs.html new file mode 100644 index 000000000..4f04438fc --- /dev/null +++ b/_generated/gustaf.io.ioutils.check_and_makedirs.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.io.ioutils.check_and_makedirs — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.ioutils.check_and_makedirs#

+
+
+gustaf.io.ioutils.check_and_makedirs(fname)[source]#
+

Checks if the directories of the path exists. If not, makedirs!

+
+
Parameters:
+

fname (str)

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.ioutils.html b/_generated/gustaf.io.ioutils.html new file mode 100644 index 000000000..f27609ea8 --- /dev/null +++ b/_generated/gustaf.io.ioutils.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.io.ioutils — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.ioutils#

+

gustaf/gustaf/io/ioutils.py.

+

utils for lord load and his expected expertise, export.

+

Functions

+ + + + + + + + + +

abs_fname(fname)

Checks if fname is abs.

check_and_makedirs(fname)

Checks if the directories of the path exists.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.meshio.export.html b/_generated/gustaf.io.meshio.export.html new file mode 100644 index 000000000..66a5c3385 --- /dev/null +++ b/_generated/gustaf.io.meshio.export.html @@ -0,0 +1,854 @@ + + + + + + + + + + + gustaf.io.meshio.export — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.meshio.export#

+
+
+gustaf.io.meshio.export(fname, mesh, submeshes=None, **kwargs)[source]#
+

Export mesh elements and vertex data into meshio and use its write +function. The definition of submeshes with identical vertex coordinates +is possible. In that case vertex numbering and data from the main mesh +are used. For more export options, refer to meshio’s documentation +nschloe/meshio .

+
import gustaf
+
+# define coordinates
+v = np.array(
+    [
+        [0.0, 0.0, 0.0],
+        [1.0, 0.0, 0.0],
+        [0.0, 1.0, 0.0],
+        [1.0, 1.0, 0.0],
+        [0.0, 0.0, 1.0],
+        [1.0, 0.0, 1.0],
+        [0.0, 1.0, 1.0],
+        [1.0, 1.0, 1.0],
+    ]
+)
+# define triangle connectivity
+tf = np.array(
+    [
+        [1, 0, 2],
+        [0, 1, 5],
+        [3, 2, 6],
+        [2, 0, 4],
+        [4, 5, 7],
+        [2, 3, 1],
+        [7, 5, 1],
+        [6, 7, 3],
+        [4, 6, 2],
+        [7, 6, 4],
+    ]
+)
+# init tri faces
+mesh = gus.Faces(
+    vertices=v,
+    faces=tf,
+)
+gustaf.io.meshio.export(mesh, "tri-mesh.stl")
+
+
+
+
Parameters:
+
    +
  • fname (Union[str, pathlib.Path]) – File to save the mesh in.

  • +
  • mesh (Edges, Faces or Volumes) – Input mesh

  • +
  • submeshes (Iterable) – Submeshes where the vertices are identical to the main mesh. The element +type can be identical to mesh.elements or lower-dimensional (e.g. +boundary elements).

  • +
  • **kwargs (Any) – Any additional argument will be passed to the respective meshio write +function. See meshio docs for more information

  • +
+
+
Raises:
+
    +
  • NotImplementedError: – For mesh types that are not implemented.

  • +
  • ValueError: – Raises a value error, if the vertices indexed in a subset are not + present in the main mesh.

  • +
+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.meshio.html b/_generated/gustaf.io.meshio.html new file mode 100644 index 000000000..faca1bff6 --- /dev/null +++ b/_generated/gustaf.io.meshio.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.io.meshio — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.meshio#

+

Import a meshio based mesh,

+

Export can only happen after it is possible to save and define boundaries in +gustaf.

+

Functions

+ + + + + + + + + +

export(fname, mesh[, submeshes])

Export mesh elements and vertex data into meshio and use its write function.

load(fname)

Load mesh in meshio format.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.meshio.load.html b/_generated/gustaf.io.meshio.load.html new file mode 100644 index 000000000..5e77153c6 --- /dev/null +++ b/_generated/gustaf.io.meshio.load.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.io.meshio.load — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.meshio.load#

+
+
+gustaf.io.meshio.load(fname)[source]#
+

Load mesh in meshio format. Loads vertices and their connectivity. +Currently cannot process boundary.

+
+

Note

+

This is more or less a direct copy from the original gustav implementation. +A lot of the meshio information are lost. When boundaries and multi-patch +definitions are added this needs to be revisited and extended.

+
+
+
Parameters:
+

fname (str | pathlib.Path)

+
+
Return type:
+

MESH_TYPES | List[MESH_TYPES]

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mfem.export.html b/_generated/gustaf.io.mfem.export.html new file mode 100644 index 000000000..3c471d436 --- /dev/null +++ b/_generated/gustaf.io.mfem.export.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.io.mfem.export — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mfem.export#

+
+
+gustaf.io.mfem.export(fname, mesh)[source]#
+

Export mesh in MFEM format. Supports 2D triangle and quadrilateral +meshes. Does not support different element attributes or difference in +vertex dimension and mesh dimension.

+
+
Parameters:
+
    +
  • fname (str)

  • +
  • mesh (Faces)

  • +
+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mfem.html b/_generated/gustaf.io.mfem.html new file mode 100644 index 000000000..acfd5de6b --- /dev/null +++ b/_generated/gustaf.io.mfem.html @@ -0,0 +1,789 @@ + + + + + + + + + + + gustaf.io.mfem — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mfem#

+

gustaf/gustaf/io/mfem.py.

+

io functions for mfem. Supports simple linear elements (straight meshes) +For detailed information, see: https://mfem.org/mesh- +format-v1.0/#straight-meshes

+

Functions

+ + + + + + + + + +

export(fname, mesh)

Export mesh in MFEM format.

load(fname)

Load mesh in MFEM format.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mfem.load.html b/_generated/gustaf.io.mfem.load.html new file mode 100644 index 000000000..ab3576613 --- /dev/null +++ b/_generated/gustaf.io.mfem.load.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.io.mfem.load — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mfem.load#

+
+
+gustaf.io.mfem.load(fname)[source]#
+

Load mesh in MFEM format. Loads vertices and their connectivity. +Currently cannot process boundary.

+
+
Parameters:
+

fname (str)

+
+
Return type:
+

mesh

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mixd.export.html b/_generated/gustaf.io.mixd.export.html new file mode 100644 index 000000000..9184ce56e --- /dev/null +++ b/_generated/gustaf.io.mixd.export.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.io.mixd.export — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mixd.export#

+
+
+gustaf.io.mixd.export(fname, mesh, space_time=False, dual=False)[source]#
+

Export in mixd format. Supports triangle, quadrilateral, tetrahedron, +and hexahedron semi-discrete and (flat) space-time mesh output.

+
+
Parameters:
+
    +
  • mesh (Faces or Volumes)

  • +
  • fname (str)

  • +
  • space_time (bool) – Export Mesh as Space-Time Slab for discontinuous space-time

  • +
  • dual (bool) – Includes dual-subelement information.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mixd.html b/_generated/gustaf.io.mixd.html new file mode 100644 index 000000000..c475c025c --- /dev/null +++ b/_generated/gustaf.io.mixd.html @@ -0,0 +1,790 @@ + + + + + + + + + + + gustaf.io.mixd — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mixd#

+

gustaf/gustaf/io/mixd.py.

+

io functions for mixd.

+

Functions

+ + + + + + + + + + + + +

export(fname, mesh[, space_time, dual])

Export in mixd format.

load([simplex, volume, fname, mxyz, mien, mrng])

mixd load.

make_mrng(mesh)

Builds and return mrng array based on mesh.BC Supports Faces and Volumes.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mixd.load.html b/_generated/gustaf.io.mixd.load.html new file mode 100644 index 000000000..f019ed542 --- /dev/null +++ b/_generated/gustaf.io.mixd.load.html @@ -0,0 +1,814 @@ + + + + + + + + + + + gustaf.io.mixd.load — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mixd.load#

+
+
+gustaf.io.mixd.load(simplex=True, volume=False, fname=None, mxyz=None, mien=None, mrng=None)[source]#
+

mixd load. To avoid reading minf, all the crucial info can be given as +params. Default input will try to import mxyz, mien, mrng from +current location and assumes mesh is 2D triangle.

+
+
Parameters:
+
    +
  • simplex (bool) – Default is True. Is it triangle based?

  • +
  • volume (bool) – Default is False. Is it 3D?

  • +
  • fname (str) – Default is None. Specify your mixd file names with “.xns” postfix. +Ex) “gustaf.xns” will try to load “gustaf.mxyz”, “gustaf.mien”, +and “gustaf.mrng”

  • +
  • mxyz (str) – Default is None.

  • +
  • mien (str) – Default is None.

  • +
  • mrng (str) – Default is None. This is optional.

  • +
+
+
Returns:
+

mesh

+
+
Return type:
+

Faces or Volumes

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.mixd.make_mrng.html b/_generated/gustaf.io.mixd.make_mrng.html new file mode 100644 index 000000000..6d98a6798 --- /dev/null +++ b/_generated/gustaf.io.mixd.make_mrng.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.io.mixd.make_mrng — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mixd.make_mrng#

+
+
+gustaf.io.mixd.make_mrng(mesh)[source]#
+

Builds and return mrng array based on mesh.BC +Supports Faces and Volumes.

+
+
Parameters:
+

mesh (Faces or Volumes) – Number of participating elements

+
+
Returns:
+

boundaries – The mrng-array.

+
+
Return type:
+

ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.nutils.export.html b/_generated/gustaf.io.nutils.export.html new file mode 100644 index 000000000..2bd4935e8 --- /dev/null +++ b/_generated/gustaf.io.nutils.export.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.io.nutils.export — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.nutils.export#

+
+
+gustaf.io.nutils.export(fname, mesh)[source]#
+

Export in Nutils format. Files are saved as np.savez(). +Supports triangle,and tetrahedron Meshes.

+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.nutils.html b/_generated/gustaf.io.nutils.html new file mode 100644 index 000000000..89978e120 --- /dev/null +++ b/_generated/gustaf.io.nutils.html @@ -0,0 +1,790 @@ + + + + + + + + + + + gustaf.io.nutils — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.nutils#

+

gustaf/gustaf/io/nutils.py.

+

io functions for nutils.

+

Functions

+ + + + + + + + + + + + +

export(fname, mesh)

Export in Nutils format.

load(fname)

nutils load.

to_nutils_simplex(mesh)

Converts a Gustaf_Mesh to a Dictionary, which can be interpreted by nutils.mesh.simplex(**to_nutils_simplex(mesh)).

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.nutils.load.html b/_generated/gustaf.io.nutils.load.html new file mode 100644 index 000000000..6e08205fe --- /dev/null +++ b/_generated/gustaf.io.nutils.load.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.io.nutils.load — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.nutils.load#

+
+
+gustaf.io.nutils.load(fname)[source]#
+

nutils load. +Loads a nutils (np.savez) file and returns a Gustaf Mesh.

+
+
Parameters:
+

fname (str) – The npz file needs the following keys: +nodes, cnodes, coords, tags, btags, ptags.

+
+
Returns:
+

mesh

+
+
Return type:
+

Faces or Volumes

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.io.nutils.to_nutils_simplex.html b/_generated/gustaf.io.nutils.to_nutils_simplex.html new file mode 100644 index 000000000..2a08c78d3 --- /dev/null +++ b/_generated/gustaf.io.nutils.to_nutils_simplex.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.io.nutils.to_nutils_simplex — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.nutils.to_nutils_simplex#

+
+
+gustaf.io.nutils.to_nutils_simplex(mesh)[source]#
+

Converts a Gustaf_Mesh to a Dictionary, which can be interpreted +by nutils.mesh.simplex(**to_nutils_simplex(mesh)). Only works for +Triangles and Tetrahedrons!

+
+
Parameters:
+

mesh (Faces or Volumes)

+
+
Returns:
+

dic_to_nutils

+
+
Return type:
+

dict

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.settings.html b/_generated/gustaf.settings.html new file mode 100644 index 000000000..9b40645b9 --- /dev/null +++ b/_generated/gustaf.settings.html @@ -0,0 +1,776 @@ + + + + + + + + + + + gustaf.settings — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.settings#

+

gustaf/gustaf/settings.py.

+

Global variables/constants that’s used throughout gustaf.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.show.html b/_generated/gustaf.show.html new file mode 100644 index 000000000..7417b2a6a --- /dev/null +++ b/_generated/gustaf.show.html @@ -0,0 +1,790 @@ + + + + + + + + + + + gustaf.show — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.show#

+

gustaf/gustaf/show.py.

+

Everything related to show/visualization.

+

Functions

+ + + + + + + + + + + + +

interpolate_vedo_dictcam(cameras, resolutions)

Interpolate between vedo dict cameras.

make_showable(obj[, as_dict])

Generates a vedo obj based on kind attribute from given obj, as well as show_options.

show(*args, **kwargs)

vedo.show wrapper.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.show.interpolate_vedo_dictcam.html b/_generated/gustaf.show.interpolate_vedo_dictcam.html new file mode 100644 index 000000000..ab7e4ba20 --- /dev/null +++ b/_generated/gustaf.show.interpolate_vedo_dictcam.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.show.interpolate_vedo_dictcam — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.show.interpolate_vedo_dictcam#

+
+
+gustaf.show.interpolate_vedo_dictcam(cameras, resolutions, spline_degree=1)[source]#
+

Interpolate between vedo dict cameras.

+
+
Parameters:
+
    +
  • cameras (list or tuple)

  • +
  • resolutions (int)

  • +
  • spline_degree (int) – if > 1 and splinepy is available and there are more than two cameras, +we interpolate all the entries using spline.

  • +
+
+
Returns:
+

interpolated_cams

+
+
Return type:
+

list

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.show.make_showable.html b/_generated/gustaf.show.make_showable.html new file mode 100644 index 000000000..f46a3c07f --- /dev/null +++ b/_generated/gustaf.show.make_showable.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.show.make_showable — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.show.make_showable#

+
+
+gustaf.show.make_showable(obj, as_dict=False, **kwargs)[source]#
+

Generates a vedo obj based on kind attribute from given obj, as well +as show_options.

+
+
Parameters:
+
    +
  • obj (gustaf obj)

  • +
  • as_dict (bool) – If True, returns vedo objects in a dict. Corresponding main objects will +be available with [“main”] key. Else, returns vedo.Assembly object, +where all the objects are grouped together.

  • +
  • **kwargs (kwargs) – Will try to overwrite applicable items.

  • +
+
+
Returns:
+

vedo_obj

+
+
Return type:
+

vedo obj

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.show.show.html b/_generated/gustaf.show.show.html new file mode 100644 index 000000000..2933444e1 --- /dev/null +++ b/_generated/gustaf.show.show.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.show.show — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.show.show#

+
+
+gustaf.show.show(*args, **kwargs)[source]#
+

vedo.show wrapper. Each args represent one section of window. In other +words len(args) == N, where N corresponds to the parameter for vedo.show().

+
+
Parameters:
+

*args (Union[List[Union[gustaf_obj, vedo_obj]], Dict[str, Any]]])

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.bounds.html b/_generated/gustaf.utils.arr.bounds.html new file mode 100644 index 000000000..2673bf5ce --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.arr.bounds — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.bounds#

+
+
+gustaf.utils.arr.bounds(arr)[source]#
+

Return bounds.

+
+
Parameters:
+

arr ((n, d) array-like)

+
+
Returns:
+

bounds

+
+
Return type:
+

(2, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.bounds_diagonal.html b/_generated/gustaf.utils.arr.bounds_diagonal.html new file mode 100644 index 000000000..46cba1520 --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds_diagonal.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.utils.arr.bounds_diagonal — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.bounds_diagonal#

+
+
+gustaf.utils.arr.bounds_diagonal(arr)[source]#
+

Returns diagonal vector of the bounds.

+

bounds[1] - bounds[0]

+
+
Parameters:
+

arr ((n, d) array-like)

+
+
Returns:
+

bounds_diagonal

+
+
Return type:
+

(n,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.bounds_mean.html b/_generated/gustaf.utils.arr.bounds_mean.html new file mode 100644 index 000000000..944c1a3d0 --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds_mean.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.arr.bounds_mean — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.bounds_mean#

+
+
+gustaf.utils.arr.bounds_mean(arr)[source]#
+

Returns mean of the bounds.

+
+
Parameters:
+

arr ((n, d) array-like)

+
+
Returns:
+

bounds_mean

+
+
Return type:
+

(n,) array-like

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.bounds_norm.html b/_generated/gustaf.utils.arr.bounds_norm.html new file mode 100644 index 000000000..578ddde96 --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds_norm.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.arr.bounds_norm — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.bounds_norm#

+
+
+gustaf.utils.arr.bounds_norm(arr)[source]#
+

Returns norm of the bounds.

+
+
Parameters:
+

arr ((n, d) array-like)

+
+
Returns:
+

bounds_norm

+
+
Return type:
+

float

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.close_rows.html b/_generated/gustaf.utils.arr.close_rows.html new file mode 100644 index 000000000..6d02630d1 --- /dev/null +++ b/_generated/gustaf.utils.arr.close_rows.html @@ -0,0 +1,815 @@ + + + + + + + + + + + gustaf.utils.arr.close_rows — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.close_rows#

+
+
+gustaf.utils.arr.close_rows(arr, tolerance=None, return_intersection=False, nthreads=None, **_kwargs)[source]#
+

Similar to unique_rows, but if data type is floats, use this one. +Performs radius search using KDTree. Currently uses +scipy.spatial.cKDTree.

+
+
Parameters:
+
    +
  • arr ((n, d) array-like)

  • +
  • tolerance ((float)) – Defaults to None.

  • +
  • return_intersection (bool) – Default is False. Returns intersection. For vertices with singular +points, this will take a lot of memory space.

  • +
  • nthreads (int) – number of concurrent query. In case of napf, concurrent build as well. +Default is taken from settings.NTHREADS

  • +
+
+
Returns:
+

    +
  • unique_arrays ((n, d) np.ndarray)

  • +
  • unique_ids ((m) np.ndarray)

  • +
  • inverse ((n) np.ndarray)

  • +
  • overlapping (list(list)) – id of neighbors within the tolerance.

  • +
+

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.cross3d.html b/_generated/gustaf.utils.arr.cross3d.html new file mode 100644 index 000000000..bc0b54997 --- /dev/null +++ b/_generated/gustaf.utils.arr.cross3d.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.utils.arr.cross3d — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.cross3d#

+
+
+gustaf.utils.arr.cross3d(a, b)[source]#
+

Cross product for two 3D arrays. Usually faster than np.cross +as it just targets 3d.

+
+
Parameters:
+
    +
  • a ((n, 3) np.ndarray)

  • +
  • b ((n, 3) np.ndarray)

  • +
+
+
Returns:
+

crossed

+
+
Return type:
+

(n, 3) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.derivatives_to_normals.html b/_generated/gustaf.utils.arr.derivatives_to_normals.html new file mode 100644 index 000000000..c60d5d344 --- /dev/null +++ b/_generated/gustaf.utils.arr.derivatives_to_normals.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.utils.arr.derivatives_to_normals — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.derivatives_to_normals#

+
+
+gustaf.utils.arr.derivatives_to_normals(derivatives, normalize=True)[source]#
+
+
Parameters:
+
    +
  • derivatives ((n, (d - 1), d) np.ndarray) – Surface jacobian transposed.

  • +
  • normalize (bool)

  • +
+
+
Returns:
+

normals

+
+
Return type:
+

(n, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.enforce_len.html b/_generated/gustaf.utils.arr.enforce_len.html new file mode 100644 index 000000000..6d1f57b38 --- /dev/null +++ b/_generated/gustaf.utils.arr.enforce_len.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.utils.arr.enforce_len — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.enforce_len#

+
+
+gustaf.utils.arr.enforce_len(value, n_len)[source]#
+

Given int, float, np.ndarray, tuple, list, returns an array with n_len +len(). In case of iterable, it asserts n_len, else, repeats.

+
+
Parameters:
+
    +
  • value (int, float or iterable)

  • +
  • n_len (int) – Size of desired array

  • +
+
+
Returns:
+

len_n_array

+
+
Return type:
+

(n_len,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.html b/_generated/gustaf.utils.arr.html new file mode 100644 index 000000000..801a797db --- /dev/null +++ b/_generated/gustaf.utils.arr.html @@ -0,0 +1,835 @@ + + + + + + + + + + + gustaf.utils.arr — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr#

+

gustaf/gustaf/utils/arr.py.

+

Useful functions for array / point operations. Named arr, since +array is python library and it sounds funny.

+

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bounds(arr)

Return bounds.

bounds_diagonal(arr)

Returns diagonal vector of the bounds.

bounds_mean(arr)

Returns mean of the bounds.

bounds_norm(arr)

Returns norm of the bounds.

close_rows(arr[, tolerance, ...])

Similar to unique_rows, but if data type is floats, use this one.

cross3d(a, b)

Cross product for two 3D arrays.

derivatives_to_normals(derivatives[, normalize])

+
param derivatives:
+

Surface jacobian transposed.

+
+
+

enforce_len(value, n_len)

Given int, float, np.ndarray, tuple, list, returns an array with n_len len().

is_one_of_shapes(arr, shapes[, strict])

Tuple/list of given shapes, iterates and checks with is_shape.

is_shape(arr, shape[, strict])

Checks if arr matches given shape.

make_c_contiguous(array[, dtype])

Make given array like object a c contiguous np.ndarray.

rotate(arr, rotation[, rotation_axis, degree])

Rotates given arrays.

rotation_matrix(rotation[, degree])

Compute rotation matrix.

rotation_matrix_around_axis([axis, ...])

Compute rotation matrix given the axis of rotation.

select_with_ranges(arr, ranges)

Select array with ranges of each column.

unique_rows(in_arr[, return_index, ...])

Find unique rows using np.unique, but apply tricks.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.is_one_of_shapes.html b/_generated/gustaf.utils.arr.is_one_of_shapes.html new file mode 100644 index 000000000..715ba9c53 --- /dev/null +++ b/_generated/gustaf.utils.arr.is_one_of_shapes.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.utils.arr.is_one_of_shapes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.is_one_of_shapes#

+
+
+gustaf.utils.arr.is_one_of_shapes(arr, shapes, strict=False)[source]#
+

Tuple/list of given shapes, iterates and checks with is_shape. Useful if +you have multiple acceptable shapes.

+
+
Parameters:
+
    +
  • arr (np.ndarray)

  • +
  • shapes (tuple or list) – tuple/list of tuple/list

  • +
  • strict (bool)

  • +
+
+
Returns:
+

matches

+
+
Return type:
+

bool

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.is_shape.html b/_generated/gustaf.utils.arr.is_shape.html new file mode 100644 index 000000000..78416bf6b --- /dev/null +++ b/_generated/gustaf.utils.arr.is_shape.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.utils.arr.is_shape — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.is_shape#

+
+
+gustaf.utils.arr.is_shape(arr, shape, strict=False)[source]#
+

Checks if arr matches given shape. shape can have negative numbers.

+
+
Parameters:
+
    +
  • arr (np.ndarray)

  • +
  • shape (tuple)

  • +
  • strict (bool) – raises ValueError if shapes do not match

  • +
+
+
Returns:
+

matches

+
+
Return type:
+

bool

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.make_c_contiguous.html b/_generated/gustaf.utils.arr.make_c_contiguous.html new file mode 100644 index 000000000..74e43fe5d --- /dev/null +++ b/_generated/gustaf.utils.arr.make_c_contiguous.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.utils.arr.make_c_contiguous — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.make_c_contiguous#

+
+
+gustaf.utils.arr.make_c_contiguous(array, dtype=None)[source]#
+

Make given array like object a c contiguous np.ndarray. dtype is +optional. If None is given, just returns None.

+
+
Parameters:
+
    +
  • array (array-like)

  • +
  • dtype (type or str) – (Optional) numpy interpretable type or str, describing type.

  • +
+
+
Returns:
+

c_contiguous_array

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.rotate.html b/_generated/gustaf.utils.arr.rotate.html new file mode 100644 index 000000000..071ef35f8 --- /dev/null +++ b/_generated/gustaf.utils.arr.rotate.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.utils.arr.rotate — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.rotate#

+
+
+gustaf.utils.arr.rotate(arr, rotation, rotation_axis=None, degree=True)[source]#
+

Rotates given arrays. Arrays shape[1] should equal to either 2 or 3 For +more information, see rotation_matrix().

+
+
Parameters:
+
    +
  • arr ((n, (2 or 3)) list-like)

  • +
  • rotation (list or float) – angle of rotation (around each axis)

  • +
  • rotation_axis ((n, (2 or 3)) or (2 or 3) list-like) – center of rotation

  • +
+
+
Returns:
+

rotated_points

+
+
Return type:
+

(n, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.rotation_matrix.html b/_generated/gustaf.utils.arr.rotation_matrix.html new file mode 100644 index 000000000..c57fb9978 --- /dev/null +++ b/_generated/gustaf.utils.arr.rotation_matrix.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.utils.arr.rotation_matrix — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.rotation_matrix#

+
+
+gustaf.utils.arr.rotation_matrix(rotation, degree=True)[source]#
+

Compute rotation matrix. Works for both 2D and 3D point sets. In 2D, it +can rotate along the (virtual) z-axis. In 3D, it can rotate along [x, y, +z]-axis. Uses scipy.spatial.transform.Rotation.

+
+
Parameters:
+
    +
  • rotation (list or float) – Amount of rotation along [x,y,z] axis. Default is in degrees. +In 2D, it can be float.

  • +
  • degree (bool) – (Optional) rotation given in degrees. +Default is True. If False, in radian.

  • +
+
+
Returns:
+

rotation_matrix

+
+
Return type:
+

np.ndarray (3,3)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.rotation_matrix_around_axis.html b/_generated/gustaf.utils.arr.rotation_matrix_around_axis.html new file mode 100644 index 000000000..962d34be0 --- /dev/null +++ b/_generated/gustaf.utils.arr.rotation_matrix_around_axis.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.utils.arr.rotation_matrix_around_axis — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.rotation_matrix_around_axis#

+
+
+gustaf.utils.arr.rotation_matrix_around_axis(axis=None, rotation=None, degree=True)[source]#
+

Compute rotation matrix given the axis of rotation. Works for both 2D +and 3D Uses Rodrigues’ formula.

+

If axis is not specified, 2D rotation matrix is assumed.

+
+
Parameters:
+
    +
  • axis (list or np.ndarray) – Axis of rotation in 3D

  • +
  • rotation (float) – angle of rotation in either radiant or degrees

  • +
  • degree (bool) – (Optional) rotation given in degrees. +Default is True. If False, in radian.

  • +
+
+
Returns:
+

rotation_matrix

+
+
Return type:
+

np.ndarray (3,3) of np.ndarray (2,2)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.select_with_ranges.html b/_generated/gustaf.utils.arr.select_with_ranges.html new file mode 100644 index 000000000..d9de02ca6 --- /dev/null +++ b/_generated/gustaf.utils.arr.select_with_ranges.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.utils.arr.select_with_ranges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.select_with_ranges#

+
+
+gustaf.utils.arr.select_with_ranges(arr, ranges)[source]#
+

Select array with ranges of each column. Always parsed as:

+

[[greater_than, less_than], [….], …]

+
+
Parameters:
+

ranges ((d, 2) array-like) – Takes None.

+
+
Returns:
+

ids

+
+
Return type:
+

(n,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.arr.unique_rows.html b/_generated/gustaf.utils.arr.unique_rows.html new file mode 100644 index 000000000..f8c64ddfc --- /dev/null +++ b/_generated/gustaf.utils.arr.unique_rows.html @@ -0,0 +1,814 @@ + + + + + + + + + + + gustaf.utils.arr.unique_rows — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.arr.unique_rows#

+
+
+gustaf.utils.arr.unique_rows(in_arr, return_index=True, return_inverse=True, return_counts=True, dtype_name=None)[source]#
+

Find unique rows using np.unique, but apply tricks. Adapted from +skimage.util.unique_rows. +url: github.com/scikit-image/scikit-image/blob/main/skimage/util/unique.py/ +Suitable for int types.

+
+
Parameters:
+
    +
  • in_arr ((n, m) 2D array-like)

  • +
  • return_index (bool)

  • +
  • return_inverse (bool)

  • +
  • return_counts (bool)

  • +
  • dtype_name (str)

  • +
+
+
Returns:
+

    +
  • unique_arr ((p, q) np.ndarray)

  • +
  • unique_ind ((w,) np.ndarray)

  • +
  • unique_inv ((t,) np.ndarray)

  • +
+

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.faces_to_edges.html b/_generated/gustaf.utils.connec.faces_to_edges.html new file mode 100644 index 000000000..98dfdcb42 --- /dev/null +++ b/_generated/gustaf.utils.connec.faces_to_edges.html @@ -0,0 +1,820 @@ + + + + + + + + + + + gustaf.utils.connec.faces_to_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.faces_to_edges#

+
+
+gustaf.utils.connec.faces_to_edges(faces)[source]#
+

Compute edges based on following edge scheme.

+
Ref: (node_ind), edge_ind
+
+    (0)
+     /\
+  0 /  \2
+   /____\
+(1)  1   (2)
+
+      2
+(3)*-----*(2)
+   |     |
+ 3 |     | 1
+(0)*-----*(1)
+      0
+
+
+

Note: if edges index matter for tets, reorder it!

+
+
Parameters:
+

faces ((n, 3) or (n, 4) np.ndarray)

+
+
Returns:
+

edges

+
+
Return type:
+

(n * 3, 2) or (n * 4, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.hexa_to_quad.html b/_generated/gustaf.utils.connec.hexa_to_quad.html new file mode 100644 index 000000000..ca0971189 --- /dev/null +++ b/_generated/gustaf.utils.connec.hexa_to_quad.html @@ -0,0 +1,827 @@ + + + + + + + + + + + gustaf.utils.connec.hexa_to_quad — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.hexa_to_quad#

+
+
+gustaf.utils.connec.hexa_to_quad(volumes)[source]#
+

Computes quad faces based on following index scheme.

+

Hexahedron

+
        (6)    (7)
+        *------*
+        |      |
+ (6) (2)| 3    |(3)   (7)    (6)
+ *------*------*------*------*
+ |      |      |      |      |
+ | 2    | 0    | 4    | 5    |
+ *------*------*------*------*
+ (5) (1)|      |(0)   (4)    (5)
+        | 1    |
+        *------*
+        (5)    (4)
+
+face_ind | node_ind
+---------|----------
+0        | 1 0 3 2
+1        | 0 1 5 4
+2        | 1 2 6 5
+3        | 2 3 7 6
+4        | 3 0 4 7
+5        | 4 5 6 7
+
+
+
+
Parameters:
+

volumes ((n, 8) np.ndarray)

+
+
Returns:
+

faces

+
+
Return type:
+

(n * 8, 4) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.html b/_generated/gustaf.utils.connec.html new file mode 100644 index 000000000..7a4844743 --- /dev/null +++ b/_generated/gustaf.utils.connec.html @@ -0,0 +1,822 @@ + + + + + + + + + + + gustaf.utils.connec — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec#

+

gustaf/gustaf/utils/connec.py.

+

Useful functions for connectivity operation. Ranging from edges to +volumes. Named connec because connectivity is too long. Would have been +even cooler, if it was palindrome.

+

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

faces_to_edges(faces)

Compute edges based on following edge scheme.

hexa_to_quad(volumes)

Computes quad faces based on following index scheme.

make_hexa_volumes(resolutions)

Given number of nodes per each dimension, returns connectivity information of structured hexahedron elements.

make_quad_faces(resolutions)

Given number of nodes per each dimension, returns connectivity information of a structured mesh.

range_to_edges(range_[, closed, continuous])

Given range, for example (a, b), returns an edge sequence that sequentially connects indices.

sequence_to_edges(seq[, closed])

Given a sequence of int, "connect" to turn them into edges.

sequentialize_edges(edges[, start, ...])

Organize edge connectivities to describe polygon or a line.

sorted_unique(connectivity[, sorted_])

Given connectivity array, finds unique entries, based on its axis=1 sorted values.

subdivide_edges(edges)

Subdivide edges.

subdivide_quad(mesh[, return_dict])

Subdivide quads.

subdivide_tri(mesh[, return_dict])

Subdivide triangles.

tet_to_tri(volumes)

Computes tri faces based on following index scheme.

volumes_to_faces(volumes)

Guidance function for tet_to_tri and hexa_to_quad.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.make_hexa_volumes.html b/_generated/gustaf.utils.connec.make_hexa_volumes.html new file mode 100644 index 000000000..9000d7606 --- /dev/null +++ b/_generated/gustaf.utils.connec.make_hexa_volumes.html @@ -0,0 +1,815 @@ + + + + + + + + + + + gustaf.utils.connec.make_hexa_volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.make_hexa_volumes#

+
+
+gustaf.utils.connec.make_hexa_volumes(resolutions)[source]#
+

Given number of nodes per each dimension, returns connectivity +information of structured hexahedron elements. Counter clock wise +connectivity.

+
   (7)*-------*(6)
+     /|      /|
+    / | (5) / |
+(4)*-------*  |
+   |  *----|--*(2)
+   | /(3)  | /
+   |/      |/
+(0)*-------*(1)
+
+
+
+
Parameters:
+

resolutions (list)

+
+
Returns:
+

elements

+
+
Return type:
+

(n, 8) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.make_quad_faces.html b/_generated/gustaf.utils.connec.make_quad_faces.html new file mode 100644 index 000000000..72f053972 --- /dev/null +++ b/_generated/gustaf.utils.connec.make_quad_faces.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.utils.connec.make_quad_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.make_quad_faces#

+
+
+gustaf.utils.connec.make_quad_faces(resolutions)[source]#
+

Given number of nodes per each dimension, returns connectivity +information of a structured mesh. Counter clock wise connectivity.

+
(3)*------*(2)
+   |      |
+   |      |
+(0)*------*(1)
+
+
+
+
Parameters:
+

resolutions (list)

+
+
Returns:
+

faces

+
+
Return type:
+

(n, 4) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.range_to_edges.html b/_generated/gustaf.utils.connec.range_to_edges.html new file mode 100644 index 000000000..96f6fd5e5 --- /dev/null +++ b/_generated/gustaf.utils.connec.range_to_edges.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.utils.connec.range_to_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.range_to_edges#

+
+
+gustaf.utils.connec.range_to_edges(range_, closed=False, continuous=True)[source]#
+

Given range, for example (a, b), returns an edge sequence that +sequentially connects indices. If int is given as range, it is considered +as (0, value). Used to be called “closed/open_loop_index_train”.

+
+
Parameters:
+
    +
  • range (list, tuple, or int)

  • +
  • closed (bool)

  • +
  • continuous (bool)

  • +
+
+
Returns:
+

edges

+
+
Return type:
+

(n, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.sequence_to_edges.html b/_generated/gustaf.utils.connec.sequence_to_edges.html new file mode 100644 index 000000000..fa3c53011 --- /dev/null +++ b/_generated/gustaf.utils.connec.sequence_to_edges.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.utils.connec.sequence_to_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.sequence_to_edges#

+
+
+gustaf.utils.connec.sequence_to_edges(seq, closed=False)[source]#
+

Given a sequence of int, “connect” to turn them into edges.

+
+
Parameters:
+
    +
  • seq ((n,) array-like)

  • +
  • closed (bool)

  • +
+
+
Returns:
+

edges

+
+
Return type:
+

(m, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.sequentialize_edges.html b/_generated/gustaf.utils.connec.sequentialize_edges.html new file mode 100644 index 000000000..91d467d69 --- /dev/null +++ b/_generated/gustaf.utils.connec.sequentialize_edges.html @@ -0,0 +1,823 @@ + + + + + + + + + + + gustaf.utils.connec.sequentialize_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.sequentialize_edges#

+
+
+gustaf.utils.connec.sequentialize_edges(edges, start=None, return_edges=False, directed=False)[source]#
+

Organize edge connectivities to describe polygon or a line. +This supports edges that describes separated/individual polygons and lines. +In other words, it doesn’t support edges of overlapping vertices.

+
+
Parameters:
+
    +
  • edges ((n, 2) list-like)

  • +
  • start (int) – (Optional) Specify starting point. It will take minimum index otherwise.

  • +
  • return_edges (bool) – (Optional) Default is False. If set True, returns sequences as edges.

  • +
  • directed (bool) – (Optional) Default is False. Set True, if given edges are directed. +It should return the result faster.

  • +
+
+
Returns:
+

    +
  • sequences (list) – list of vertex ids. Or edges iff return_edges is True.

  • +
  • is_polygon (list) – Tells if the sequence is a polygon or a line.

  • +
+

+
+
+

Examples

+
>>> e = gus.Edges(vertices, edges)
+>>> ordered_sequence, is_polygon = sequentialize_edges(e.edges)
+
+
+
>>> f = gus.Faces(vertices, faces)
+>>> ordered_sequence, is_polygon = sequentialize_edges(
+...     f.edges()[f.single_edges()]
+... )
+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.sorted_unique.html b/_generated/gustaf.utils.connec.sorted_unique.html new file mode 100644 index 000000000..4621c767a --- /dev/null +++ b/_generated/gustaf.utils.connec.sorted_unique.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.utils.connec.sorted_unique — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.sorted_unique#

+
+
+gustaf.utils.connec.sorted_unique(connectivity, sorted_=False)[source]#
+

Given connectivity array, finds unique entries, based on its axis=1 +sorted values. Returned value will be sorted.

+
+
Parameters:
+
    +
  • connectivity ((n, d) np.ndarray)

  • +
  • sorted (bool)

  • +
+
+
Returns:
+

unique_info

+
+
Return type:
+

Unique2DIntegers

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.subdivide_edges.html b/_generated/gustaf.utils.connec.subdivide_edges.html new file mode 100644 index 000000000..d5ebb2229 --- /dev/null +++ b/_generated/gustaf.utils.connec.subdivide_edges.html @@ -0,0 +1,817 @@ + + + + + + + + + + + gustaf.utils.connec.subdivide_edges — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.subdivide_edges#

+
+
+gustaf.utils.connec.subdivide_edges(edges)[source]#
+

Subdivide edges. We assume that mid point is newly added points.

+

Subdivided Edges

+
Edges (Lines)
+
+Ref: (node_ids), edge_ids
+
+(0)      (2)      (1)
+ *--------*--------*
+
+edge_ids | node_ids
+---------|----------
+0        | 0 2
+1        | 2 1
+
+
+
+
Parameters:
+

edges ((n, 2) np.ndarray)

+
+
Returns:
+

subdivided_edges

+
+
Return type:
+

(n * 2, 2) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.subdivide_quad.html b/_generated/gustaf.utils.connec.subdivide_quad.html new file mode 100644 index 000000000..c069a9953 --- /dev/null +++ b/_generated/gustaf.utils.connec.subdivide_quad.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.utils.connec.subdivide_quad — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.subdivide_quad#

+
+
+gustaf.utils.connec.subdivide_quad(mesh, return_dict=False)[source]#
+

Subdivide quads.

+
+
Parameters:
+
    +
  • mesh (Mesh)

  • +
  • return_dict (bool)

  • +
+
+
Returns:
+

    +
  • new_vertices ((n, d) np.ndarray)

  • +
  • subdivided_faces ((m, 4) np.ndarray)

  • +
  • mesh_dict (dict) – iff return_dict=True, +returns dict(vertices=new_vertices, faces=subdivided_faces).

  • +
+

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.subdivide_tri.html b/_generated/gustaf.utils.connec.subdivide_tri.html new file mode 100644 index 000000000..45b981de2 --- /dev/null +++ b/_generated/gustaf.utils.connec.subdivide_tri.html @@ -0,0 +1,831 @@ + + + + + + + + + + + gustaf.utils.connec.subdivide_tri — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.subdivide_tri#

+
+
+gustaf.utils.connec.subdivide_tri(mesh, return_dict=False)[source]#
+

Subdivide triangles. Each triangle is divided into 4 meshes.

+

Subdivided Faces

+
Triangles
+
+Ref: (node_ind), face_ind
+
+         (0)
+             _/|
+           _/ 0|
+    (3)  _/____|(5)
+       _/|    /|
+     _/ 1| 3/ 2|
+    /____|/____|
+  (1)   (4)    (2)
+
+face_ind | node_ind
+---------|----------
+0        | 0 3 5
+1        | 1 4 3
+2        | 2 5 4
+3        | 3 4 5
+
+
+
+
Parameters:
+
    +
  • mesh (Mesh)

  • +
  • return_dict (bool)

  • +
+
+
Returns:
+

    +
  • new_vertices ((n, d) np.ndarray)

  • +
  • subdivided_faces ((m, 3) np.ndarray)

  • +
  • mesh_dict (dict) – iff return_dict=True, +returns dict(vertices=new_vertices, faces=subdivided_faces).

  • +
+

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.tet_to_tri.html b/_generated/gustaf.utils.connec.tet_to_tri.html new file mode 100644 index 000000000..a9916780b --- /dev/null +++ b/_generated/gustaf.utils.connec.tet_to_tri.html @@ -0,0 +1,823 @@ + + + + + + + + + + + gustaf.utils.connec.tet_to_tri — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.tet_to_tri#

+
+
+gustaf.utils.connec.tet_to_tri(volumes)[source]#
+

Computes tri faces based on following index scheme.

+

Tetrahedron

+
Ref: (node_ind), face_ind
+
+              (0)
+             _/|
+           _/ 1|
+    (1)  _/____| (3)
+       _/|    /|
+     _/ 0| 2/ 3|
+    /____|/____|
+  (0)   (2)    (0)
+
+face_ind | node_ind
+---------|----------
+0        | 0 2 1
+1        | 1 3 0
+2        | 2 3 1
+3        | 3 2 0
+
+
+
+
Parameters:
+

volumes ((n, 4) np.ndarray)

+
+
Returns:
+

faces

+
+
Return type:
+

(n * 4, 3) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.connec.volumes_to_faces.html b/_generated/gustaf.utils.connec.volumes_to_faces.html new file mode 100644 index 000000000..dac054adb --- /dev/null +++ b/_generated/gustaf.utils.connec.volumes_to_faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.connec.volumes_to_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.connec.volumes_to_faces#

+
+
+gustaf.utils.connec.volumes_to_faces(volumes)[source]#
+

Guidance function for tet_to_tri and hexa_to_quad.

+
+
Parameters:
+

volumes ((n, 4) or (m, 8) np.ndarray)

+
+
Returns:
+

faces

+
+
Return type:
+

(n*4, 3) or (m*6, 4) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.html b/_generated/gustaf.utils.html new file mode 100644 index 000000000..5329bbdb7 --- /dev/null +++ b/_generated/gustaf.utils.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.utils — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + + + + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.log.configure.html b/_generated/gustaf.utils.log.configure.html new file mode 100644 index 000000000..086871735 --- /dev/null +++ b/_generated/gustaf.utils.log.configure.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.log.configure — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.log.configure#

+
+
+gustaf.utils.log.configure(debug=False, logfile=None)[source]#
+

Logging configurator.

+
+
Parameters:
+
    +
  • debug (bool)

  • +
  • logfile (str)

  • +
+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.log.debug.html b/_generated/gustaf.utils.log.debug.html new file mode 100644 index 000000000..96537e25b --- /dev/null +++ b/_generated/gustaf.utils.log.debug.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.utils.log.debug — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.log.debug#

+
+
+gustaf.utils.log.debug(*log)[source]#
+

Debug logger.

+
+
Parameters:
+

*log (Tuple[str])

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.log.html b/_generated/gustaf.utils.log.html new file mode 100644 index 000000000..b38b16823 --- /dev/null +++ b/_generated/gustaf.utils.log.html @@ -0,0 +1,796 @@ + + + + + + + + + + + gustaf.utils.log — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.log#

+

gustaf/gustaf/utils/log.py.

+

Thin logging wrapper.

+

Functions

+ + + + + + + + + + + + + + + + + + +

configure([debug, logfile])

Logging configurator.

debug(*log)

Debug logger.

info(*log)

Info logger.

prepended_log(message, log_func)

Prepend message before a logging function.

warning(*log)

warning logger.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.log.info.html b/_generated/gustaf.utils.log.info.html new file mode 100644 index 000000000..191c432df --- /dev/null +++ b/_generated/gustaf.utils.log.info.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.utils.log.info — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.log.info#

+
+
+gustaf.utils.log.info(*log)[source]#
+

Info logger.

+
+
Parameters:
+

*log (Tuple[str])

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.log.prepended_log.html b/_generated/gustaf.utils.log.prepended_log.html new file mode 100644 index 000000000..f7d538e3e --- /dev/null +++ b/_generated/gustaf.utils.log.prepended_log.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.utils.log.prepended_log — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.log.prepended_log#

+
+
+gustaf.utils.log.prepended_log(message, log_func)[source]#
+

Prepend message before a logging function.

+
+
Parameters:
+
    +
  • message (str)

  • +
  • log_func (function) – one of the following - {info, debug, warning}

  • +
+
+
Returns:
+

prepended

+
+
Return type:
+

function

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.log.warning.html b/_generated/gustaf.utils.log.warning.html new file mode 100644 index 000000000..386a4bdd8 --- /dev/null +++ b/_generated/gustaf.utils.log.warning.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.utils.log.warning — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.log.warning#

+
+
+gustaf.utils.log.warning(*log)[source]#
+

warning logger.

+
+
Parameters:
+

*log (Tuple[str])

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.tictoc.Tic.html b/_generated/gustaf.utils.tictoc.Tic.html new file mode 100644 index 000000000..746077050 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.tictoc.Tic#

+
+
+class gustaf.utils.tictoc.Tic(title='untitled', log_level='debug')[source]#
+

Bases: GustafBase

+

Timer class for easier time measurement.

+

Methods

+ + + + + + + + + + + + +

Tic.now

perf_counter() -> float

Tic.summary([log, print_])

Prints measurement summary to the log.

Tic.toc([name, log])

Adds now to the measurements.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.tictoc.Tic.now.html b/_generated/gustaf.utils.tictoc.Tic.now.html new file mode 100644 index 000000000..4b19bd3c1 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.now.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic.now — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.tictoc.Tic.now#

+
+
+Tic.now()#
+

perf_counter() -> float

+

Performance counter for benchmarking.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.tictoc.Tic.summary.html b/_generated/gustaf.utils.tictoc.Tic.summary.html new file mode 100644 index 000000000..9b0b61ecf --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.summary.html @@ -0,0 +1,811 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic.summary — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.tictoc.Tic.summary#

+
+
+Tic.summary(log=True, print_=False)[source]#
+

Prints measurement summary to the log.

+
+
Parameters:
+
    +
  • log (bool) – Logs the summary. Default is True.

  • +
  • print (bool) – Prints the summary. Default is False.

  • +
+
+
Returns:
+

records

+
+
Lap timings in a tuple consisting of a list of the lap names and

times for each lap from the timer start (cumulative time).

+
+
+

+
+
Return type:
+

tuple

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.tictoc.Tic.toc.html b/_generated/gustaf.utils.tictoc.Tic.toc.html new file mode 100644 index 000000000..31a9ea761 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.toc.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic.toc — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.tictoc.Tic.toc#

+
+
+Tic.toc(name=None, log=False)[source]#
+

Adds now to the measurements.

+
+
Parameters:
+
    +
  • name (str) – Name of this specific measurement lap. +By default, it assigns a number to this lap.

  • +
  • log (bool) – If True, will log lapsed time. Defaults to None.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.utils.tictoc.html b/_generated/gustaf.utils.tictoc.html new file mode 100644 index 000000000..bbd507f81 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.html @@ -0,0 +1,784 @@ + + + + + + + + + + + gustaf.utils.tictoc — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.utils.tictoc#

+

gustaf/gustaf/utils/tictoc.py.

+

Timer that tics, tocs and logs.

+

Classes

+ + + + + + +

Tic([title, log_level])

Timer class for easier time measurement.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.bounds.html b/_generated/gustaf.vertices.Vertices.bounds.html new file mode 100644 index 000000000..692b9751e --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.bounds.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.bounds — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.bounds#

+
+
+Vertices.bounds()[source]#
+

Returns bounds of the vertices. Bounds means AABB of the geometry.

+
+
Parameters:
+

None

+
+
Returns:
+

bounds

+
+
Return type:
+

(d,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.bounds_diagonal.html b/_generated/gustaf.vertices.Vertices.bounds_diagonal.html new file mode 100644 index 000000000..7d38c96ae --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.bounds_diagonal.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.bounds_diagonal — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.bounds_diagonal#

+
+
+Vertices.bounds_diagonal()[source]#
+

Returns diagonal vector of the bounding box.

+
+
Parameters:
+

None

+
+
Returns:
+

bounds_diagonal – same as bounds[1] - bounds[0]

+
+
Return type:
+

(d,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.html b/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.html new file mode 100644 index 000000000..af78f7b52 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.bounds_diagonal_norm — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.bounds_diagonal_norm#

+
+
+Vertices.bounds_diagonal_norm()[source]#
+

Returns norm of bounds diagonal.

+
+
Parameters:
+

None

+
+
Returns:
+

bounds_diagonal_norm

+
+
Return type:
+

float

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.concat.html b/_generated/gustaf.vertices.Vertices.concat.html new file mode 100644 index 000000000..fe8308cc5 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.concat.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.concat — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.concat#

+
+
+classmethod Vertices.concat(*instances)[source]#
+

Sequentially put them together to make one object.

+
+
Parameters:
+

*instances (List[type(cls)]) – Allows one iterable object also.

+
+
Returns:
+

one_instance

+
+
Return type:
+

type(cls)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.const_vertices.html b/_generated/gustaf.vertices.Vertices.const_vertices.html new file mode 100644 index 000000000..0926fa567 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.const_vertices.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.vertices.Vertices.const_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.const_vertices#

+
+
+property Vertices.const_vertices#
+

Returns non-mutable view of vertices. Naming inspired by c/cpp +sessions.

+
+
Parameters:
+

None

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.copy.html b/_generated/gustaf.vertices.Vertices.copy.html new file mode 100644 index 000000000..c964b3c68 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.copy.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.copy — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.copy#

+
+
+Vertices.copy()[source]#
+

Returns deepcopy of self.

+
+
Parameters:
+

None

+
+
Returns:
+

self_copy

+
+
Return type:
+

type(self)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.html b/_generated/gustaf.vertices.Vertices.html new file mode 100644 index 000000000..3cc299211 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.html @@ -0,0 +1,856 @@ + + + + + + + + + + + gustaf.vertices.Vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices#

+
+
+class gustaf.vertices.Vertices(vertices=None)[source]#
+

Bases: GustafBase

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Vertices.bounds()

Returns bounds of the vertices.

Vertices.bounds_diagonal()

Returns diagonal vector of the bounding box.

Vertices.bounds_diagonal_norm()

Returns norm of bounds diagonal.

Vertices.concat(*instances)

Sequentially put them together to make one object.

Vertices.copy()

Returns deepcopy of self.

Vertices.merge_vertices([tolerance])

Based on unique vertices, merge vertices if it is mergeable.

Vertices.remove_vertices(ids)

Removes vertices with given vertex ids.

Vertices.select_vertices(ranges)

Returns vertices inside the given range.

Vertices.show(**kwargs)

Show current object using visualization backend.

Vertices.showable(**kwargs)

Returns showable object, meaning object of visualization backend.

Vertices.unique_vertices([tolerance])

Returns a namedtuple that holds unique vertices info.

Vertices.update_vertices(mask[, inverse])

Update vertices with a mask.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Vertices.const_vertices

Returns non-mutable view of vertices.

Vertices.kind

Vertices.show_options

Returns a show option manager for this object.

Vertices.vertex_data

Returns vertex_data manager.

Vertices.vertices

Returns vertices.

Vertices.whatami

"what am i"?

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.kind.html b/_generated/gustaf.vertices.Vertices.kind.html new file mode 100644 index 000000000..26a97a792 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.kind.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.vertices.Vertices.kind — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.kind#

+
+
+Vertices.kind = 'vertex'#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.merge_vertices.html b/_generated/gustaf.vertices.Vertices.merge_vertices.html new file mode 100644 index 000000000..b50f1866b --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.merge_vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.merge_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.merge_vertices#

+
+
+Vertices.merge_vertices(tolerance=None, **kwargs)[source]#
+

Based on unique vertices, merge vertices if it is mergeable.

+
+
Parameters:
+

tolerance (float) – Default is settings.TOLERANCE

+
+
Returns:
+

merged_self

+
+
Return type:
+

type(self)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.remove_vertices.html b/_generated/gustaf.vertices.Vertices.remove_vertices.html new file mode 100644 index 000000000..ad79a306c --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.remove_vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.remove_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.remove_vertices#

+
+
+Vertices.remove_vertices(ids)[source]#
+

Removes vertices with given vertex ids.

+
+
Parameters:
+

ids ((n,) np.ndarray)

+
+
Returns:
+

new_self

+
+
Return type:
+

type(self)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.select_vertices.html b/_generated/gustaf.vertices.Vertices.select_vertices.html new file mode 100644 index 000000000..4c7a19822 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.select_vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.select_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.select_vertices#

+
+
+Vertices.select_vertices(ranges)[source]#
+

Returns vertices inside the given range.

+
+
Parameters:
+

ranges ((d, 2) array-like) – Takes None.

+
+
Returns:
+

ids

+
+
Return type:
+

(n,) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.show.html b/_generated/gustaf.vertices.Vertices.show.html new file mode 100644 index 000000000..63f6a190b --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.show.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.vertices.Vertices.show — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.show#

+
+
+Vertices.show(**kwargs)[source]#
+

Show current object using visualization backend.

+
+
Parameters:
+

**kwargs

+
+
Return type:
+

None

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.show_options.html b/_generated/gustaf.vertices.Vertices.show_options.html new file mode 100644 index 000000000..afba08622 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.show_options.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.vertices.Vertices.show_options — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.show_options#

+
+
+property Vertices.show_options#
+

Returns a show option manager for this object. Behaves similar to +dict.

+
+
Parameters:
+

None

+
+
Returns:
+

show_options – A derived class that’s suitable for current class.

+
+
Return type:
+

ShowOption

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.showable.html b/_generated/gustaf.vertices.Vertices.showable.html new file mode 100644 index 000000000..e3d513753 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.showable.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.showable — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.showable#

+
+
+Vertices.showable(**kwargs)[source]#
+

Returns showable object, meaning object of visualization backend.

+
+
Parameters:
+

**kwargs

+
+
Returns:
+

showable – Obj of gustaf.settings.VISUALIZATION_BACKEND

+
+
Return type:
+

obj

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.unique_vertices.html b/_generated/gustaf.vertices.Vertices.unique_vertices.html new file mode 100644 index 000000000..c81f649d6 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.unique_vertices.html @@ -0,0 +1,807 @@ + + + + + + + + + + + gustaf.vertices.Vertices.unique_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.unique_vertices#

+
+
+Vertices.unique_vertices(tolerance=None, **kwargs)[source]#
+

Returns a namedtuple that holds unique vertices info. Unique here +means “close-enough-within-tolerance”.

+
+
Parameters:
+
    +
  • tolerance (float) – (Optional) Default is settings.TOLERANCE

  • +
  • recompute (bool) – Only applicable as keyword argument. Force re-computes.

  • +
+
+
Returns:
+

unique_vertices_info – namedtuple with values, ids, inverse, intersection.

+
+
Return type:
+

Unique2DFloats

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.update_vertices.html b/_generated/gustaf.vertices.Vertices.update_vertices.html new file mode 100644 index 000000000..cfaf32fe4 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.update_vertices.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.vertices.Vertices.update_vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.update_vertices#

+
+
+Vertices.update_vertices(mask, inverse=None)[source]#
+

Update vertices with a mask. In other words, keeps only masked +vertices. Adapted from github.com/mikedh/trimesh. Updates +connectivity accordingly too.

+
+
Parameters:
+
    +
  • mask ((n,) bool or int)

  • +
  • inverse ((len(self.vertices),) int)

  • +
+
+
Returns:
+

updated_self

+
+
Return type:
+

type(self)

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.vertex_data.html b/_generated/gustaf.vertices.Vertices.vertex_data.html new file mode 100644 index 000000000..1da8195a6 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.vertex_data.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.vertices.Vertices.vertex_data — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.vertex_data#

+
+
+property Vertices.vertex_data#
+

Returns vertex_data manager. Behaves similar to dict() and can be used +to store values/data associated with each vertex.

+
+
Parameters:
+

None

+
+
Returns:
+

vertex_data

+
+
Return type:
+

VertexData

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.vertices.html b/_generated/gustaf.vertices.Vertices.vertices.html new file mode 100644 index 000000000..379174f05 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.vertices#

+
+
+property Vertices.vertices#
+

Returns vertices.

+
+
Parameters:
+

None

+
+
Returns:
+

vertices

+
+
Return type:
+

(n, d) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.Vertices.whatami.html b/_generated/gustaf.vertices.Vertices.whatami.html new file mode 100644 index 000000000..8592c186c --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.whatami.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.vertices.Vertices.whatami — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.Vertices.whatami#

+
+
+property Vertices.whatami#
+

“what am i”?

+
+
Parameters:
+

None

+
+
Returns:
+

whatami – vertices

+
+
Return type:
+

str

+
+
Type:
+

Answers deep philosophical question

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.VerticesShowOption.html b/_generated/gustaf.vertices.VerticesShowOption.html new file mode 100644 index 000000000..36492d192 --- /dev/null +++ b/_generated/gustaf.vertices.VerticesShowOption.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.VerticesShowOption — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices.VerticesShowOption#

+
+
+class gustaf.vertices.VerticesShowOption(helpee)[source]#
+

Bases: ShowOption

+

Show options for vertices.

+

Methods

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.vertices.html b/_generated/gustaf.vertices.html new file mode 100644 index 000000000..2b70c4b15 --- /dev/null +++ b/_generated/gustaf.vertices.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.vertices — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.vertices#

+

gustaf/gustaf/vertices.py.

+

Vertices. Base of all “Mesh” geometries.

+

Classes

+ + + + + + + + + +

Vertices([vertices])

VerticesShowOption(helpee)

Show options for vertices.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.const_faces.html b/_generated/gustaf.volumes.Volumes.const_faces.html new file mode 100644 index 000000000..661e743b8 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.const_faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.volumes.Volumes.const_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.const_faces#

+
+
+property Volumes.const_faces#
+

Returns non-writeable view of faces.

+
+
Parameters:
+

None

+
+
Returns:
+

const_faces

+
+
Return type:
+

(n, 2

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.const_volumes.html b/_generated/gustaf.volumes.Volumes.const_volumes.html new file mode 100644 index 000000000..f46df3d43 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.const_volumes.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.volumes.Volumes.const_volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.const_volumes#

+
+
+property Volumes.const_volumes#
+

Returns non-writeable view of volumes.

+
+
Parameters:
+

None

+
+
Returns:
+

const_volumes

+
+
Return type:
+

(n, 4) or (n, 8) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.faces.html b/_generated/gustaf.volumes.Volumes.faces.html new file mode 100644 index 000000000..3335574dc --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.volumes.Volumes.faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.faces#

+
+
+Volumes.faces()[source]#
+

Faces here aren’t main property. So this needs to be computed.

+
+
Parameters:
+

None

+
+
Returns:
+

faces

+
+
Return type:
+

(n, 3) or (n, 4) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.html b/_generated/gustaf.volumes.Volumes.html new file mode 100644 index 000000000..47dd014d8 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.html @@ -0,0 +1,835 @@ + + + + + + + + + + + gustaf.volumes.Volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes#

+
+
+class gustaf.volumes.Volumes(vertices=None, volumes=None, elements=None)[source]#
+

Bases: Faces

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + +

Volumes.faces()

Faces here aren't main property.

Volumes.sorted_volumes()

Sort volumes along axis=1.

Volumes.to_faces([unique])

Returns Faces obj.

Volumes.unique_volumes()

Returns a namedtuple of unique volumes info.

Volumes.update_faces()

Alias to update_elements.

Volumes.update_volumes(*args, **kwargs)

Alias to update_elements.

Volumes.whatareyou(volume_obj)

overwrites Faces.whatareyou to tell you is this volume is tet or hexa.

+

Attributes

+ + + + + + + + + + + + + + + +

Volumes.const_faces

Returns non-writeable view of faces.

Volumes.const_volumes

Returns non-writeable view of volumes.

Volumes.kind

Volumes.volumes

Returns volumes.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.kind.html b/_generated/gustaf.volumes.Volumes.kind.html new file mode 100644 index 000000000..f6d6cb60d --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.kind.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.volumes.Volumes.kind — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.kind#

+
+
+Volumes.kind = 'volume'#
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.sorted_volumes.html b/_generated/gustaf.volumes.Volumes.sorted_volumes.html new file mode 100644 index 000000000..a2f7b3585 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.sorted_volumes.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.volumes.Volumes.sorted_volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.sorted_volumes#

+
+
+Volumes.sorted_volumes()[source]#
+

Sort volumes along axis=1.

+
+
Parameters:
+

None

+
+
Returns:
+

volumes_sorted

+
+
Return type:
+

(volumes.shape) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.to_faces.html b/_generated/gustaf.volumes.Volumes.to_faces.html new file mode 100644 index 000000000..26d2f356f --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.to_faces.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.volumes.Volumes.to_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.to_faces#

+
+
+Volumes.to_faces(unique=True)[source]#
+

Returns Faces obj.

+
+
Parameters:
+

unique (bool) – Default is True. If True, only takes unique faces.

+
+
Returns:
+

faces

+
+
Return type:
+

Faces

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.unique_volumes.html b/_generated/gustaf.volumes.Volumes.unique_volumes.html new file mode 100644 index 000000000..f6b7151b8 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.unique_volumes.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.volumes.Volumes.unique_volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.unique_volumes#

+
+
+Volumes.unique_volumes()[source]#
+

Returns a namedtuple of unique volumes info. Similar to +unique_edges.

+
+
Parameters:
+

None

+
+
Returns:
+

unique_info – valid attributes are {values, ids, inverse, counts}

+
+
Return type:
+

Unique2DIntegers

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.update_faces.html b/_generated/gustaf.volumes.Volumes.update_faces.html new file mode 100644 index 000000000..5845ed9de --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.update_faces.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.volumes.Volumes.update_faces — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.update_faces#

+
+
+Volumes.update_faces()#
+

Alias to update_elements.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.update_volumes.html b/_generated/gustaf.volumes.Volumes.update_volumes.html new file mode 100644 index 000000000..33bf1e8aa --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.update_volumes.html @@ -0,0 +1,792 @@ + + + + + + + + + + + gustaf.volumes.Volumes.update_volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.update_volumes#

+
+
+Volumes.update_volumes(*args, **kwargs)[source]#
+

Alias to update_elements.

+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.volumes.html b/_generated/gustaf.volumes.Volumes.volumes.html new file mode 100644 index 000000000..f9cb16f93 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.volumes.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.volumes.Volumes.volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.volumes#

+
+
+property Volumes.volumes#
+

Returns volumes.

+
+
Parameters:
+

None

+
+
Returns:
+

volumes

+
+
Return type:
+

(n, 4) or (n, 8) np.ndarray

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.Volumes.whatareyou.html b/_generated/gustaf.volumes.Volumes.whatareyou.html new file mode 100644 index 000000000..8074dbce7 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.whatareyou.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.volumes.Volumes.whatareyou — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.Volumes.whatareyou#

+
+
+classmethod Volumes.whatareyou(volume_obj)[source]#
+

overwrites Faces.whatareyou to tell you is this volume is tet or +hexa.

+
+
Parameters:
+

volume_obj (Volumes)

+
+
Returns:
+

whatareyou

+
+
Return type:
+

str

+
+
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.VolumesShowOption.html b/_generated/gustaf.volumes.VolumesShowOption.html new file mode 100644 index 000000000..a5f3b7fe0 --- /dev/null +++ b/_generated/gustaf.volumes.VolumesShowOption.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.VolumesShowOption — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes.VolumesShowOption#

+
+
+class gustaf.volumes.VolumesShowOption(helpee)[source]#
+

Bases: ShowOption

+

Show options for vertices.

+

Methods

+ + + +
+
+ +
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_generated/gustaf.volumes.html b/_generated/gustaf.volumes.html new file mode 100644 index 000000000..aa955faa5 --- /dev/null +++ b/_generated/gustaf.volumes.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.volumes — gustaf 0.0.25 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.volumes#

+

gustaf/gustaf/volumes.py.

+

Classes

+ + + + + + + + + +

Volumes([vertices, volumes, elements])

VolumesShowOption(helpee)

Show options for vertices.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/_images/gustaf-logo.png b/_images/gustaf-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a33fdcaf7600c9089c437f18d85c810f671c29 GIT binary patch literal 38336 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�R*8REz|0hHDeOlL=fJ)TCn4}Q?6P)yjPVN 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�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 Snp-=t8ex*v!DoV$IsX7992`{u literal 0 HcmV?d00001 diff --git a/_images/quad.png b/_images/quad.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e8e5c17603e7503d9e69bc5c24a033f28d1751 GIT binary patch literal 80395 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�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